]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#42] kea-dhcp6 can now parse and use queue-control
authorThomas Markwalder <tmark@isc.org>
Tue, 6 Nov 2018 14:31:40 +0000 (09:31 -0500)
committerThomas Markwalder <tmark@isc.org>
Tue, 6 Nov 2018 14:31:40 +0000 (09:31 -0500)
src/bin/dhcp6/ctrl_dhcp6_srv.cc
    ControlledDhcpv6Srv::processConfig() - adde packet queue config logic

src/bin/dhcp6/dhcp6_lexer.ll
    Added parsing of queue-control

src/bin/dhcp6/dhcp6_messages.mes
    Added DHCP6_CONFIG_PACKET_QUEUE message

src/bin/dhcp6/dhcp6_parser.yy

src/bin/dhcp6/json_config_parser.cc
    configureDhcp6Server() - now parses "queue-control"

src/bin/dhcp6/parser_context.*
    Added QUEUE_CONTROL

src/bin/dhcp6/tests/config_parser_unittest.cc
    TEST_F(Dhcp6ParserTest, queueControl)
    TEST_F(Dhcp6ParserTest, queueControlInvalid) - new tests

src/lib/dhcpsrv/parsers/queue_control_parser.*
    Revamped to construct an ElementPtr rather than QueueControl

13 files changed:
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_messages.mes
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/tests/config_parser_unittest.cc
src/lib/dhcpsrv/parsers/queue_control_parser.cc
src/lib/dhcpsrv/parsers/queue_control_parser.h

index 6d614be5083c39b0be921c0dc8cee02cc9929303..599b7be4865fa3fa0441e7c9ba6de4b7f6803c84 100644 (file)
@@ -653,6 +653,31 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
         return (isc::config::createAnswer(1, err.str()));
     }
 
+    // Configure packet queue
+    try {
+        data::ConstElementPtr qc;
+        qc  = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+        if (!qc) {
+            // @todo For now we're manually constructing default queue config
+            // This probably needs to be built into the PQM?
+            data::ElementPtr default_qc = data::Element::createMap();
+            default_qc->set("queue-type", data::Element::create("kea-ring6"));
+            default_qc->set("capacity", data::Element::create(static_cast<long int>(500)));
+            PacketQueueMgr6::instance().createPacketQueue(default_qc);
+        } else {
+            PacketQueueMgr6::instance().createPacketQueue(qc);
+        }
+
+        LOG_DEBUG(dhcp6_logger, DBG_DHCP6_BASIC, DHCP6_CONFIG_PACKET_QUEUE)
+                 .arg(PacketQueueMgr6::instance().getPacketQueue()->getInfoStr());
+
+    } catch (const std::exception& ex) {
+        std::ostringstream err;
+        err << "Error setting packet queue controls after server reconfiguration: "
+            << ex.what();
+        return (isc::config::createAnswer(1, err.str()));
+    }
+
     // Configuration may change active interfaces. Therefore, we have to reopen
     // sockets according to new configuration. It is possible that this
     // operation will fail for some interfaces but the openSockets function
index a391ebfe956b7ead3ab9b560a1e60cea641d45af..797da7d36cfa0a161110ac8407abb87977dbb38a 100644 (file)
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
        (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 178
-#define YY_END_OF_BUFFER 179
+#define YY_NUM_RULES 179
+#define YY_END_OF_BUFFER 180
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,21 +700,21 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1446] =
+static const flex_int16_t yy_accept[1458] =
     {   0,
-      171,  171,    0,    0,    0,    0,    0,    0,    0,    0,
-      179,  177,   10,   11,  177,    1,  171,  168,  171,  171,
-      177,  170,  169,  177,  177,  177,  177,  177,  164,  165,
-      177,  177,  177,  166,  167,    5,    5,    5,  177,  177,
-      177,   10,   11,    0,    0,  160,    0,    0,    0,    0,
+      172,  172,    0,    0,    0,    0,    0,    0,    0,    0,
+      180,  178,   10,   11,  178,    1,  172,  169,  172,  172,
+      178,  171,  170,  178,  178,  178,  178,  178,  165,  166,
+      178,  178,  178,  167,  168,    5,    5,    5,  178,  178,
+      178,   10,   11,    0,    0,  161,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    1,  171,
-      171,    0,  170,  171,    3,    2,    6,    0,  171,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  172,
+      172,    0,  171,  172,    3,    2,    6,    0,  172,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      161,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  163,    0,    0,    0,
+      162,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  164,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -724,7 +724,7 @@ static const flex_int16_t yy_accept[1446] =
         0,    0,    0,    0,    8,    0,    0,    0,    0,  139,
         0,    0,  140,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  162,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  163,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,   95,    0,    0,    0,    0,    0,    0,    0,
@@ -732,135 +732,136 @@ static const flex_int16_t yy_accept[1446] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  176,  174,
-        0,  173,  172,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  177,
+      175,    0,  174,  173,    0,    0,    0,    0,    0,    0,
 
-      138,    0,    0,   29,    0,   28,    0,    0,  101,    0,
-        0,    0,    0,    0,    0,    0,    0,   54,    0,    0,
+        0,  138,    0,    0,   29,    0,   28,    0,    0,  101,
+        0,    0,    0,    0,    0,    0,    0,    0,   54,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   99,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   99,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  175,  172,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
 
-        0,    0,    0,    0,    0,    0,    0,   30,    0,    0,
-       32,    0,    0,    0,    0,    0,  102,    0,    0,    0,
-        0,    0,    0,   80,    0,    0,    0,    0,    0,    0,
-      123,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   57,    0,    0,    0,    0,    0,    0,    0,    0,
+      173,    0,    0,    0,    0,    0,    0,    0,    0,   30,
+        0,    0,   32,    0,    0,    0,    0,    0,  102,    0,
+        0,    0,    0,    0,    0,   80,    0,    0,    0,    0,
+        0,    0,  123,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   57,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   79,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   89,    0,   58,    0,    0,
+        0,    0,    0,    0,   79,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   89,    0,   58,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,  118,  143,   50,    0,   55,
-        0,    0,    0,    0,    0,    0,  157,   38,    0,   35,
-        0,   34,    0,    0,    0,  131,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  118,  143,
+       50,    0,   55,    0,    0,    0,    0,    0,    0,  158,
+       38,    0,   35,    0,   34,    0,    0,    0,  131,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  110,    0,    0,    0,    0,
-        0,    0,    0,  142,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   52,
-        0,    0,   33,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   82,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  132,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  127,    0,    0,
-        0,    0,    0,    0,    7,   36,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  110,    0,
+        0,    0,    0,    0,    0,    0,  142,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   52,    0,    0,   33,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   82,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  132,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  127,    0,    0,    0,    0,    0,    0,    7,   36,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  112,    0,    0,    0,    0,    0,    0,  109,
-        0,    0,    0,    0,    0,    0,    0,    0,   84,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,   92,    0,    0,    0,    0,    0,    0,    0,    0,
-      106,    0,    0,    0,    0,    0,   91,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  112,    0,    0,    0,
+        0,    0,    0,  109,    0,    0,    0,    0,    0,    0,
+        0,    0,   84,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  126,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,   92,    0,    0,    0,
+        0,    0,    0,    0,    0,  106,    0,    0,    0,    0,
+        0,   91,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  126,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      136,  107,    0,    0,    0,    0,  111,   51,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   59,    0,
+        0,    0,    0,    0,    0,  136,  107,    0,    0,    0,
+        0,  111,   51,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   59,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   75,    0,    0,
 
-        0,    0,    0,    0,  158,    0,    0,    0,    0,    0,
+        0,    0,    0,   75,    0,    0,    0,    0,    0,    0,
+      159,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   98,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  125,    0,
+        0,    0,    0,    0,    0,   62,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   98,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  125,    0,    0,    0,    0,    0,    0,   62,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   56,   83,    0,    0,
-        0,  122,    0,    0,    0,   49,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  114,    0,    0,    0,    0,    0,    0,
+        0,    0,   56,   83,    0,    0,    0,  122,    0,    0,
+        0,    0,   49,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,  156,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   93,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   41,
+        0,    0,    0,    0,  157,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   16,    0,  137,   14,    0,    0,    0,    0,    0,
+       93,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  128,  113,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   41,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   16,
+        0,  137,   14,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  128,  113,    0,    0,    0,    0,
 
-        0,    0,    0,  124,  141,    0,   40,    0,  133,    0,
-        0,    0,    0,    0,    0,    0,    0,   20,    0,    0,
-        0,   77,    0,    0,    0,    0,  135,   53,    0,   85,
         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,    0,   81,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  130,
+        0,  124,  141,    0,   40,    0,  133,    0,    0,    0,
+        0,    0,    0,    0,    0,   20,    0,    0,    0,   77,
+        0,    0,    0,    0,  135,   53,    0,   85,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  103,    0,    0,    0,
-        0,    0,   78,  100,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   74,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  130,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  103,    0,    0,    0,    0,
 
+        0,   78,  100,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   71,    0,    0,    0,    0,
         0,    0,   17,   15,    0,  155,  154,    0,   66,    0,
         0,    0,    0,    0,   31,    0,  117,    0,    0,    0,
         0,    0,    0,    0,    0,  152,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   94,    0,  121,
        43,    0,   60,    0,    0,    0,    0,   19,    0,    0,
-        0,    0,    0,    0,   96,   72,    0,    0,  129,    0,
-        0,    0,    0,    0,  120,    0,    0,    0,    0,   90,
-        0,  159,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   88,    0,  144,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   96,   72,    0,    0,  129,
+        0,    0,    0,    0,    0,  120,    0,    0,    0,    0,
+       90,    0,  160,    0,    0,    0,    0,    0,    0,    0,
 
+        0,    0,   88,    0,  144,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
+        0,    0,    0,    0,   42,    0,   65,    0,    0,    0,
+        0,  115,   47,    0,    0,   67,  153,    0,   12,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   45,    0,
+        0,   44,   18,    0,    0,    0,    0,  108,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   42,    0,   65,    0,    0,    0,    0,  115,
-       47,    0,    0,   67,  153,    0,   12,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   45,    0,    0,   44,
-       18,    0,    0,    0,    0,  108,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   70,
-        0,    0,    0,   61,    0,   86,    0,    0,    0,    0,
-        0,  134,    0,    0,    0,   46,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   64,
-
-        0,    0,   76,    0,   37,    0,   48,    0,    0,    0,
-        0,   25,    0,    0,    0,    0,    0,    0,  150,    0,
-      119,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       97,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       26,   39,    0,    0,    0,    0,    0,   13,    0,    0,
+        0,   70,    0,    0,    0,   61,    0,   86,    0,    0,
+        0,    0,    0,  134,    0,    0,    0,   46,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  149,    0,    0,   22,   69,    0,    0,    0,
-        0,    0,    0,   21,    0,   87,    0,    0,  148,    0,
-        0,   68,    0,    0,   63,    0,   24,    0,    0,    0,
+        0,   64,    0,    0,   76,    0,   37,    0,   48,    0,
+        0,    0,    0,   25,    0,    0,    0,    0,    0,    0,
+      150,    0,  119,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   97,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   26,   39,    0,    0,    0,    0,    0,   13,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  149,    0,    0,   22,   69,    0,
+        0,    0,    0,    0,    0,   21,    0,   87,    0,    0,
+      148,    0,    0,   68,    0,    0,   63,    0,   24,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   23,    0,  104,  116,    0,    0,
-        0,    0,    0,    0,  146,  151,   73,    0,    0,    0,
-        0,  145,    0,    0,   27,    0,    0,    0,    0,    0,
-      105,    0,    0,  147,    0
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   23,    0,  104,  116,
+        0,    0,    0,    0,    0,    0,  146,  151,   73,    0,
+        0,    0,    0,  145,    0,    0,   27,    0,    0,    0,
+        0,    0,  105,    0,    0,  147,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -907,351 +908,353 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1458] =
+static const flex_int16_t yy_base[1470] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1809, 1810,   32, 1805,  141,    0,  201, 1810,  206,   88,
-       11,  213, 1810, 1787,  114,   25,    2,    6, 1810, 1810,
-       73,   11,   17, 1810, 1810, 1810,  104, 1793, 1748,    0,
-     1785,  107, 1800,  217,  241, 1810,  185, 1744, 1750, 1770,
+     1822, 1823,   32, 1818,  141,    0,  201, 1823,  206,   88,
+       11,  213, 1823, 1800,  114,   25,    2,    6, 1823, 1823,
+       73,   11,   17, 1823, 1823, 1823,  104, 1806, 1761,    0,
+     1798,  107, 1813,  217,  241, 1823,  185, 1757, 1763, 1783,
        93,   58,  190,   91,  211,  200,   14,  267,  213,  175,
-      269,   64,  231, 1751,  187,   75, 1750,  274,  188,  290,
-      278,  297, 1733,  195,  302,  316,  316, 1752,    0,  355,
-      360,  372,  377,  380, 1810,    0, 1810,  267,  295,  296,
-      327,  283,  361,  368,  293, 1810, 1749, 1788, 1810,  359,
-
-     1810,  393,  341, 1736, 1746, 1785,  369,  220,  249, 1740,
-      364,  372,  373,  380,  385, 1783,    0,  444,  375, 1727,
-     1735,  364, 1731, 1720, 1721,  372, 1737, 1720, 1729,  399,
-      200,  371, 1723,  389, 1711, 1767,  416, 1714, 1765, 1707,
-     1730, 1727, 1727, 1721,  369, 1714, 1707, 1712, 1706,  409,
-     1717, 1710, 1701, 1700, 1714,  387, 1750, 1699,  414, 1711,
-     1714, 1698,  441, 1699,  416, 1711, 1708, 1709, 1707,  394,
-     1689, 1694, 1690, 1682, 1699, 1691,    0,  421,  385,  436,
-      437,  449,  454, 1690, 1810,    0,  461, 1681, 1684, 1810,
-      446,  464, 1810, 1736, 1691,  470, 1734,  472, 1733,  476,
-
-     1732, 1810,  520, 1731,  486, 1692, 1687, 1686, 1677,  460,
-     1726, 1720, 1686, 1665, 1673, 1679, 1667, 1681, 1677, 1678,
-     1678, 1673, 1665, 1667, 1651, 1655, 1668, 1668, 1660, 1650,
-     1653, 1667, 1810, 1653, 1661, 1664, 1645, 1644, 1694, 1643,
-     1653, 1691,  508, 1652, 1640, 1651, 1687,  489, 1691, 1628,
-     1643,    9, 1633, 1649, 1630, 1632, 1628, 1634, 1625, 1624,
-     1637, 1630, 1632, 1636, 1635, 1629,   80, 1636, 1631, 1623,
-     1613, 1628, 1623, 1627, 1608, 1624, 1610, 1616, 1623, 1611,
-      348, 1604, 1618, 1617, 1620, 1602, 1610,  490, 1810, 1810,
-      491, 1810, 1810, 1597,    0,  472, 1599,  532,  501, 1653,
-
-     1810, 1606,  489, 1810, 1651, 1810, 1645,  560, 1810,  485,
-     1587, 1597, 1647, 1604, 1599, 1602,  466, 1810, 1600, 1642,
-     1597, 1594, 1595,  303, 1599, 1637, 1587, 1582, 1579, 1575,
-     1577, 1626, 1585, 1574, 1623, 1571,  566, 1584, 1584, 1567,
-     1568, 1581, 1568, 1578, 1573, 1580, 1575, 1560,  452, 1569,
-     1572, 1567, 1563, 1611,  502,  496, 1810, 1605, 1557, 1556,
-     1549, 1551, 1555, 1544, 1551, 1556,  525, 1601, 1556,  300,
-     1553, 1557, 1555, 1544, 1544, 1556,  471, 1531, 1532, 1553,
-      506, 1535, 1532, 1546, 1545, 1531, 1543, 1542, 1541, 1540,
-      206, 1581, 1580, 1579, 1523,  549, 1536, 1810, 1810, 1535,
-
-        0,  518, 1523, 1574, 1573, 1531, 1571, 1810, 1519, 1569,
-     1810,  558,  615,  529, 1568, 1510, 1810, 1515, 1521, 1524,
-     1523, 1510, 1509, 1810, 1511, 1508, 1520, 1516, 1504, 1506,
-     1810, 1512, 1497, 1499, 1510, 1508, 1503,  583, 1510, 1492,
-     1541, 1810, 1490, 1506, 1538, 1542, 1500, 1494, 1496, 1497,
-     1499, 1531, 1484, 1479, 1478, 1480, 1473, 1488, 1466, 1473,
-     1478, 1526, 1810, 1473, 1469, 1523, 1476, 1470, 1477, 1462,
-     1472, 1475, 1464, 1463, 1458, 1810, 1513, 1810, 1457, 1456,
-     1449, 1466, 1503, 1450, 1455, 1464, 1458, 1452, 1461,  586,
-     1496, 1460, 1443, 1443, 1438, 1434, 1440, 1439, 1447, 1451,
-
-     1434, 1490, 1432, 1446, 1435, 1810, 1810, 1810, 1435, 1810,
-     1445, 1479, 1441,    0, 1482, 1432, 1810, 1810, 1429, 1810,
-     1435, 1810,  540,  560,  589, 1810, 1473, 1420, 1471, 1418,
-     1417, 1424, 1417, 1429, 1428, 1412, 1427, 1457, 1424, 1460,
-     1406, 1408, 1420, 1420, 1419, 1810, 1404, 1401, 1415, 1407,
-     1413, 1404, 1412, 1810, 1397, 1408, 1412, 1394, 1408,  532,
-     1390, 1384, 1389, 1386, 1401, 1402, 1399, 1440, 1397, 1810,
-     1383, 1385, 1810, 1393, 1430, 1429,  519, 1392, 1375, 1376,
-     1381, 1372, 1810, 1386, 1372,  605, 1364, 1385, 1382, 1374,
-     1417, 1371, 1378, 1414, 1810, 1362, 1360, 1374, 1358, 1372,
-
-     1375, 1407, 1406, 1405, 1352, 1403, 1402, 1810,  596, 1364,
-     1364, 1362, 1351, 1353, 1810, 1810, 1396, 1344, 1399,  561,
-      574,  551, 1358, 1397,  572, 1391, 1390, 1389, 1343, 1333,
-     1386, 1348, 1338, 1383, 1346, 1328, 1336, 1338, 1342, 1377,
-     1381, 1338, 1337, 1338, 1331, 1320, 1333, 1336, 1331, 1326,
-     1331, 1328, 1327, 1323, 1329, 1324, 1365, 1364, 1308, 1304,
-      577, 1361, 1810, 1360, 1309, 1301, 1352, 1315, 1302, 1810,
-     1302, 1311, 1310, 1310, 1294, 1349, 1292, 1305, 1810, 1297,
-     1289, 1298, 1291, 1302, 1279, 1283, 1334, 1298, 1280, 1278,
-     1289, 1329, 1328, 1327, 1274, 1290,  568,  591, 1267, 1277,
-
-      585, 1810, 1327, 1273, 1283, 1283, 1272, 1276, 1283, 1320,
-     1810, 1314,  610, 1267, 1275, 1267, 1810, 1263, 1276, 1256,
-     1259, 1255, 1272, 1267, 1255, 1266, 1250, 1252,    2,    0,
-       80,   64,  230,  312, 1810,  386,  416,  504,  556,  562,
-      640,  551,  563,  578,  585,  572,  639,  599,  586,  591,
-     1810, 1810,  609,  608,  613,  601, 1810, 1810,  621,  608,
-      606,  625,  610,  611,  660,  613,  669,  670, 1810,  617,
-      631,  631,  674,  624,  626,  620,  678,  633,  623,  624,
-      620,  630,  634,  645,  629,  647,  642,  644,  637,  639,
-      651,  641,  656,  695,  654,  659,  636, 1810,  661,  651,
-
-      696,  645,  660,  661, 1810,  680,  688,  668,  658,  672,
-      660,  655,  667,  662,  663,  659,  668,  663,  714,  720,
-      669, 1810,  681,  666,  682,  672,  684,  678,  723,  691,
-      676,  677, 1810,  694,  697,  680,  682,  738,  683, 1810,
-      700,  703,  683,  702,  740,  700,  696,  691,  709,  708,
-      694,  709,  701,  697,  715,  700, 1810, 1810,  708,  753,
-      708, 1810,  716,  711,  762, 1810,  713,  718,  760,  714,
-      715,  727,  721,  725,  723,  721,  732,  775,  721,  777,
-      778,  724,  736, 1810,  724,  732,  730,  735,  747,  731,
-      745,  746,  747,  763,  768,  742,  752,  739,  739,  759,
-
-      748,  753,  760,  801,  802,  751,  755, 1810,  750,  768,
-      765,  803,  754,  772,  773,  759,  767,  776,  756,  771,
-      778,  820,  821, 1810,  776,  823,  824,  777,  787,  789,
-      773,  774,  781,  790,  833,  782,  781,  798,  837,  789,
-      793,  791,  789,  842,  843,  795,  845,  841,  801, 1810,
-      806,  799,  790,  809,  803,  798,  808,  805,  810,  806,
-      818, 1810,  802, 1810, 1810,  803,  861,  802,  821,  822,
-      819,  805,  826,  808,  813,  820,  853,  844,  816,  875,
-      820,  822,  839,  837,  829,  833, 1810, 1810,  843,  841,
-      827,  828,  886,  841,  846,  833,  844,  836,  842,  838,
-
-      856,  858,  859, 1810, 1810,  857, 1810,  859, 1810,  844,
-      846,  865,  855,  905,  860,  902,  868, 1810,  860,  852,
-      911, 1810,  912,  861,  868,  910, 1810, 1810,  870, 1810,
-      861,  861,  864,  878,  883,  866,  877,  924,  883,  884,
-      885,  923,  881,  930,  931, 1810,  880,  933,  934,  876,
-      936,  897,  881,  893,  883,  913,  942,  902, 1810,  944,
-      893,  908,  895,  891,  907,  912,  900,  952,  911, 1810,
-      913,  912,  914,  907,  916,  917,  914,  904,  907,  907,
-      964,  913,  966,  967,  912,  970, 1810,  908,  923,  916,
-      974,  929, 1810, 1810,  925,  935,  920,  938,  924,  983,
-
-      984,  930,  941,  988,  947, 1810,  939,  939,  941,  943,
-      994,  939, 1810, 1810,  941, 1810, 1810,  955, 1810,  949,
-      999,  950, 1001,  983, 1810,  961, 1810,  948,  956,  950,
-      949,  952,  952,  953, 1011, 1810,  956, 1013,  968,  959,
-      974,  974,  977,  977,  974, 1016,  980, 1810,  972, 1810,
-     1810,  982, 1810,  984,  985,  982, 1024, 1810,  975,  975,
-      981,  980,  992,  992, 1810, 1810, 1031,  980, 1810,  997,
-      982,  982,  984,  990, 1810, 1043,  996, 1045, 1008, 1810,
-     1005, 1810, 1024, 1044, 1050, 1051, 1010,  996, 1054, 1055,
-     1010, 1810, 1057, 1810,  997, 1054, 1019, 1015, 1057, 1007,
-
-     1012, 1010, 1067, 1025, 1069, 1070, 1033, 1022, 1016, 1032,
-     1076, 1020, 1037, 1022, 1037, 1021, 1077, 1078, 1079, 1028,
-     1081, 1046, 1810, 1032, 1810, 1043, 1090, 1062, 1049, 1810,
-     1810, 1037, 1094, 1810, 1810, 1043, 1810, 1096, 1044, 1093,
-     1038, 1043, 1102, 1052, 1062, 1063, 1810, 1106, 1061, 1810,
-     1810, 1052, 1067, 1055, 1070, 1810, 1107, 1075, 1068, 1069,
-     1078, 1060, 1066, 1069, 1121, 1082, 1082, 1125, 1076, 1810,
-     1127, 1074, 1129, 1810, 1079, 1810, 1082, 1077, 1076, 1134,
-     1089, 1810, 1131, 1084, 1081, 1810, 1095, 1098, 1141, 1096,
-     1143, 1086, 1088, 1096, 1086, 1102, 1103, 1097, 1113, 1810,
-
-     1103, 1153, 1810, 1149, 1810, 1114, 1810, 1151, 1115, 1106,
-     1113, 1810, 1110, 1115, 1113, 1163, 1164, 1109, 1810, 1124,
-     1810, 1114, 1126, 1127, 1170, 1114, 1122, 1116, 1124, 1137,
-     1810, 1136, 1126, 1125, 1128, 1140, 1131, 1140, 1142, 1146,
-     1810, 1810, 1185, 1130, 1146, 1188, 1189, 1810, 1185, 1149,
-     1146, 1151, 1138, 1133, 1196, 1155, 1198, 1157, 1158, 1201,
-     1160, 1163, 1810, 1204, 1167, 1810, 1810, 1149, 1207, 1156,
-     1209, 1154, 1171, 1810, 1157, 1810, 1157, 1159, 1810, 1164,
-     1174, 1810, 1160, 1172, 1810, 1168, 1810, 1178, 1172, 1176,
-     1167, 1219, 1168, 1176, 1185, 1178, 1173, 1174, 1189, 1180,
-
-     1187, 1174, 1189, 1194, 1237, 1196, 1239, 1240, 1185, 1201,
-     1192, 1206, 1202, 1195, 1810, 1247, 1810, 1810, 1248, 1249,
-     1206, 1205, 1206, 1196, 1810, 1810, 1810, 1254, 1198, 1214,
-     1257, 1810, 1253, 1204, 1810, 1203, 1205, 1216, 1263, 1214,
-     1810, 1223, 1266, 1810, 1810, 1272, 1277, 1282, 1287, 1292,
-     1297, 1302, 1305, 1279, 1284, 1286, 1299
+      269,   64,  231, 1764,  187,   75, 1763,  274,  188,  290,
+      278,  297, 1746,  195,  302,  316,  316, 1765,    0,  355,
+      360,  372,  377,  380, 1823,    0, 1823,  267,  295,  296,
+      327,  283,  361,  368,  293, 1823, 1762, 1801, 1823,  359,
+
+     1823,  393,  341, 1749, 1759, 1798,  369,  220,  249, 1753,
+      364,  372,  373,  380,  385, 1796,    0,  444,  375, 1740,
+     1748,  364, 1744, 1733, 1734,  372, 1750, 1733, 1742,  399,
+      200,  371, 1736,  389, 1724, 1780,  416, 1727, 1778, 1720,
+     1743, 1740, 1740, 1734,  369, 1727, 1720, 1725, 1719,  409,
+     1730, 1723, 1714, 1713, 1727,  387, 1763, 1712,  414, 1724,
+      270, 1712,  441, 1713,  416, 1725, 1722, 1723, 1721,  394,
+     1703, 1708, 1704, 1696, 1713, 1705,    0,  421,  385,  436,
+      437,  449,  454, 1704, 1823,    0,  461, 1695, 1698, 1823,
+      446,  464, 1823, 1750, 1705,  470, 1748,  472, 1747,  476,
+
+     1746, 1823,  520, 1745,  486, 1706, 1701, 1700, 1691,  460,
+     1740, 1734, 1700, 1679, 1687, 1693, 1681, 1695, 1691, 1692,
+     1692, 1687, 1679, 1681, 1665, 1669, 1682, 1682, 1674, 1664,
+     1667, 1681, 1823, 1667, 1675, 1678, 1659, 1658, 1708, 1657,
+     1667, 1705,  508, 1666, 1654, 1665, 1701,  489, 1705, 1642,
+     1657,    9, 1647, 1663, 1644, 1646, 1642, 1648, 1639, 1638,
+     1651, 1644, 1634, 1645, 1649, 1648, 1642,   80, 1649, 1644,
+     1636, 1626, 1641, 1636, 1640, 1621, 1637, 1623, 1629, 1636,
+     1624,  348, 1617, 1631, 1630, 1633, 1615, 1623,  490, 1823,
+     1823,  491, 1823, 1823, 1610,    0,  472, 1612,  532,  501,
+
+     1666, 1823, 1619,  489, 1823, 1664, 1823, 1658,  560, 1823,
+      485, 1600, 1610, 1660, 1617, 1612, 1615,  466, 1823, 1613,
+     1655, 1610, 1607, 1608,  337, 1612, 1650, 1600, 1595, 1592,
+     1588, 1590, 1639, 1598, 1587, 1636, 1584,  566, 1597, 1597,
+     1580, 1581, 1594, 1581, 1591, 1586, 1593, 1588, 1573,  452,
+     1582, 1585, 1580, 1576, 1624,  502,  496, 1823, 1618, 1570,
+     1569, 1562, 1564, 1568, 1557, 1564, 1569,  525, 1614, 1569,
+      480, 1566, 1569, 1569, 1567, 1556, 1556, 1568,  497, 1543,
+     1544, 1565,  507, 1547, 1544, 1558, 1557, 1543, 1555, 1554,
+     1553, 1552,  206, 1593, 1592, 1591, 1535,  582, 1548, 1823,
+
+     1823, 1547,    0,  518, 1535, 1586, 1585, 1543, 1583, 1823,
+     1531, 1581, 1823,  559,  615,  528, 1580, 1522, 1823, 1527,
+     1533, 1536, 1535, 1522, 1521, 1823, 1523, 1520, 1532, 1528,
+     1516, 1518, 1823, 1524, 1509, 1511, 1522, 1520, 1515,  586,
+     1522, 1504, 1553, 1823, 1502, 1518, 1550, 1554, 1512, 1506,
+     1508, 1509, 1511, 1543, 1496, 1491, 1490, 1492, 1485, 1500,
+     1478, 1485, 1490, 1538, 1823, 1485, 1481, 1535, 1488, 1482,
+     1489, 1474, 1484, 1487, 1476, 1475, 1470, 1823, 1525, 1823,
+     1469, 1468, 1461, 1478, 1515, 1514, 1461, 1466, 1475, 1469,
+     1463, 1472,  588, 1507, 1471, 1454, 1454, 1449, 1445, 1451,
+
+     1450, 1458, 1462, 1445, 1501, 1443, 1457, 1446, 1823, 1823,
+     1823, 1446, 1823, 1456, 1490, 1452,    0, 1493, 1443, 1823,
+     1823, 1440, 1823, 1446, 1823,  540,  563,  589, 1823, 1484,
+     1431, 1482, 1429, 1428, 1435, 1428, 1440, 1439, 1423, 1438,
+     1468, 1435, 1471, 1417, 1419, 1431, 1431, 1430, 1823, 1415,
+     1412, 1426, 1418, 1424, 1415, 1423, 1823, 1408, 1419, 1423,
+     1405, 1419,  532, 1401, 1395, 1400, 1397, 1412, 1413, 1410,
+     1451, 1408, 1823, 1394, 1396, 1823, 1404, 1441, 1440,  604,
+     1403, 1386, 1387, 1392, 1383, 1823, 1397, 1383,  606, 1375,
+     1396, 1395, 1392, 1384, 1427, 1381, 1388, 1424, 1823, 1372,
+
+     1370, 1384, 1368, 1382, 1385, 1417, 1416, 1415, 1362, 1413,
+     1412, 1823,  595, 1374, 1374, 1372, 1361, 1363, 1823, 1823,
+     1406, 1354, 1409,  579,  577,  551, 1368, 1407,  573, 1401,
+     1400, 1399, 1353, 1343, 1396, 1358, 1348, 1393, 1356, 1338,
+     1346, 1348, 1352, 1387, 1391, 1348, 1347, 1348, 1341, 1330,
+     1343, 1346, 1341, 1336, 1341, 1338, 1337, 1333, 1339, 1334,
+     1375, 1374, 1318, 1314,  505, 1371, 1823, 1370, 1319, 1311,
+     1362, 1325, 1312, 1823, 1312, 1321, 1320, 1320, 1304, 1359,
+     1302, 1315, 1823, 1307, 1299, 1308, 1301, 1300, 1311, 1288,
+     1292, 1343, 1307, 1289, 1287, 1298, 1338, 1337, 1336, 1283,
+
+     1299,  563,  592, 1276, 1286,  564, 1823, 1336, 1282, 1292,
+     1292, 1281, 1285, 1292, 1329, 1823, 1323,  609, 1276, 1284,
+     1276, 1823, 1272, 1285, 1265, 1268, 1264, 1281, 1276,    0,
+       77,   64,  182,  361,  373,  419,  463,  615,  577, 1823,
+      587,  587,  580,  600,  598,  642,  586,  588,  604,  608,
+      595,  652,  617,  603,  606, 1823, 1823,  622,  621,  626,
+      615, 1823, 1823,  629,  616,  614,  632,  619,  619,  668,
+      620,  676,  677, 1823,  624,  638,  638,  681,  631,  632,
+      634,  628,  686,  641,  631,  632,  628,  638,  642,  653,
+      637,  655,  650,  652,  645,  647,  659,  649,  664,  703,
+
+      662,  667,  644, 1823,  669,  659,  704,  653,  668,  669,
+     1823,  688,  696,  676,  666,  680,  668,  663,  675,  670,
+      671,  667,  676,  671,  722,  728,  677, 1823,  689,  674,
+      690,  680,  692,  686,  731,  699,  684,  685, 1823,  702,
+      705,  688,  690,  746,  691, 1823,  708,  711,  691,  710,
+      748,  708,  704,  699,  717,  716,  702,  717,  709,  705,
+      723,  708, 1823, 1823,  716,  761,  716, 1823,  724,  712,
+      720,  771, 1823,  722,  727,  770,  723,  724,  736,  730,
+      734,  732,  730,  741,  784,  730,  786,  787,  733,  745,
+     1823,  733,  741,  739,  744,  756,  740,  754,  755,  756,
+
+      772,  777,  751,  762,  748,  748,  768,  757,  762,  769,
+      810,  811,  760,  764, 1823,  759,  777,  774,  812,  763,
+      781,  782,  768,  776,  785,  765,  780,  787,  829,  830,
+     1823,  785,  832,  833,  786,  796,  798,  782,  783,  790,
+      799,  842,  791,  790,  807,  846,  798,  802,  800,  798,
+      851,  852,  804,  854,  850,  801,  811, 1823,  816,  809,
+      800,  819,  813,  808,  818,  815,  820,  816,  828, 1823,
+      812, 1823, 1823,  813,  871,  812,  831,  832,  830,  815,
+      836,  818,  823,  830,  863,  854,  826,  885,  830,  832,
+      849,  847,  839,  843, 1823, 1823,  853,  851,  837,  838,
+
+      896,  851,  856,  843,  854,  846,  852,  848,  866,  868,
+      869, 1823, 1823,  867, 1823,  869, 1823,  854,  856,  875,
+      865,  915,  870,  912,  878, 1823,  870,  862,  921, 1823,
+      922,  871,  878,  920, 1823, 1823,  880, 1823,  871,  876,
+      872,  875,  889,  894,  877,  888,  935,  894,  895,  896,
+      934,  892,  941,  942, 1823,  891,  944,  945,  887,  947,
+      908,  892,  904,  894,  924,  953,  913, 1823,  955,  904,
+      919,  906,  902,  918,  923,  911,  963,  922, 1823,  924,
+      923,  925,  918,  927,  928,  925,  915,  918,  918,  975,
+      924,  977,  978,  923,  981, 1823,  919,  934,  927,  985,
+
+      940, 1823, 1823,  936,  946,  931,  949,  935,  945,  995,
+      996,  943,  953, 1000,  959, 1823,  951,  951,  953,  955,
+     1006,  951, 1823, 1823,  953, 1823, 1823,  967, 1823,  961,
+     1011,  962, 1013,  995, 1823,  973, 1823,  960,  968,  962,
+      961,  964,  964,  965, 1023, 1823,  968, 1025,  980,  971,
+      986,  986,  989,  989,  986, 1028,  992, 1823,  984, 1823,
+     1823,  994, 1823,  996,  997,  994, 1036, 1823,  987,  987,
+      993,  992, 1004, 1004, 1048, 1823, 1823, 1044,  993, 1823,
+     1010,  995,  995,  997, 1003, 1823, 1056, 1009, 1058, 1021,
+     1823, 1018, 1823, 1037, 1057, 1063, 1064, 1023, 1009, 1067,
+
+     1068, 1023, 1823, 1070, 1823, 1010, 1067, 1032, 1028, 1070,
+     1020, 1025, 1023, 1080, 1038, 1082, 1083, 1046, 1035, 1029,
+     1045, 1089, 1033, 1050, 1035, 1050, 1823, 1034, 1090, 1091,
+     1092, 1041, 1094, 1059, 1823, 1045, 1823, 1056, 1103, 1075,
+     1062, 1823, 1823, 1050, 1107, 1823, 1823, 1056, 1823, 1109,
+     1057, 1106, 1051, 1056, 1115, 1065, 1075, 1076, 1823, 1119,
+     1074, 1823, 1823, 1065, 1080, 1068, 1083, 1823, 1120, 1088,
+     1081, 1082, 1091, 1073, 1079, 1082, 1134, 1095, 1095, 1138,
+     1089, 1823, 1140, 1087, 1142, 1823, 1092, 1823, 1095, 1090,
+     1089, 1147, 1102, 1823, 1144, 1097, 1094, 1823, 1108, 1111,
+
+     1154, 1109, 1156, 1099, 1101, 1109, 1099, 1115, 1116, 1110,
+     1126, 1823, 1116, 1166, 1823, 1162, 1823, 1127, 1823, 1164,
+     1128, 1119, 1126, 1823, 1123, 1128, 1126, 1176, 1177, 1122,
+     1823, 1137, 1823, 1127, 1139, 1140, 1183, 1127, 1135, 1129,
+     1137, 1150, 1823, 1149, 1139, 1138, 1141, 1153, 1144, 1153,
+     1155, 1159, 1823, 1823, 1198, 1143, 1159, 1201, 1202, 1823,
+     1198, 1162, 1159, 1164, 1151, 1146, 1209, 1168, 1211, 1170,
+     1171, 1214, 1173, 1176, 1823, 1217, 1180, 1823, 1823, 1162,
+     1220, 1169, 1222, 1167, 1184, 1823, 1170, 1823, 1170, 1172,
+     1823, 1177, 1187, 1823, 1173, 1185, 1823, 1181, 1823, 1191,
+
+     1185, 1189, 1180, 1232, 1181, 1189, 1198, 1191, 1186, 1187,
+     1202, 1193, 1200, 1187, 1202, 1207, 1250, 1209, 1252, 1253,
+     1198, 1214, 1205, 1219, 1215, 1208, 1823, 1260, 1823, 1823,
+     1261, 1262, 1219, 1218, 1219, 1209, 1823, 1823, 1823, 1267,
+     1211, 1227, 1270, 1823, 1266, 1217, 1823, 1216, 1218, 1229,
+     1276, 1227, 1823, 1236, 1279, 1823, 1823, 1285, 1290, 1295,
+     1300, 1305, 1310, 1315, 1318, 1292, 1297, 1299, 1312
     } ;
 
-static const flex_int16_t yy_def[1458] =
+static const flex_int16_t yy_def[1470] =
     {   0,
-     1446, 1446, 1447, 1447, 1446, 1446, 1446, 1446, 1446, 1446,
-     1445, 1445, 1445, 1445, 1445, 1448, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1449,
-     1445, 1445, 1445, 1450,   15, 1445,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1451,   45,   45,
+     1458, 1458, 1459, 1459, 1458, 1458, 1458, 1458, 1458, 1458,
+     1457, 1457, 1457, 1457, 1457, 1460, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1461,
+     1457, 1457, 1457, 1462,   15, 1457,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1463,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1448, 1445,
-     1445, 1445, 1445, 1445, 1445, 1452, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1449, 1445, 1450,
+       45,   45,   45,   45,   45,   45,   45,   45, 1460, 1457,
+     1457, 1457, 1457, 1457, 1457, 1464, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1461, 1457, 1462,
 
-     1445, 1445,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1453,   45, 1451,   45,   45,
+     1457, 1457,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1465,   45, 1463,   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,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1452, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1454,   45,   45,   45, 1445,
-       45,   45, 1445,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1464, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1466,   45,   45,   45, 1457,
+       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
 
-     1453, 1445, 1451,   45,   45,   45,   45,   45,   45,   45,
+     1465, 1457, 1463,   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, 1445,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1457,   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,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1455,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1467,   45,   45,   45,   45,
 
-     1445,   45,   45, 1445,   45, 1445,   45, 1451, 1445,   45,
-       45,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
+       45, 1457,   45,   45, 1457,   45, 1457,   45, 1463, 1457,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   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, 1445,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   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, 1445, 1445, 1445,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
 
-     1456,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
-     1445,   45, 1451,   45,   45,   45, 1445,   45,   45,   45,
-       45,   45,   45, 1445,   45,   45,   45,   45,   45,   45,
-     1445,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1445,   45,   45,   45,   45,   45,   45,   45,   45,
+     1457, 1457, 1468,   45,   45,   45,   45,   45,   45, 1457,
+       45,   45, 1457,   45, 1463,   45,   45,   45, 1457,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1445,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1445,   45, 1445,   45,   45,
+       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   45, 1457,
        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, 1445, 1445, 1445,   45, 1445,
-       45,   45, 1445, 1457,   45,   45, 1445, 1445,   45, 1445,
-       45, 1445,   45,   45,   45, 1445,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457, 1457,
+     1457,   45, 1457,   45,   45, 1457, 1469,   45,   45, 1457,
+     1457,   45, 1457,   45, 1457,   45,   45,   45, 1457,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45,   45, 1445,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1445,
-       45,   45, 1445,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1445,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1445,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
-       45,   45,   45,   45, 1445, 1445,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1457,   45,   45, 1457,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1457,   45,   45,   45,   45,   45,   45, 1457, 1457,
        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, 1445,   45,   45,   45,   45,   45,   45, 1445,
-       45,   45,   45,   45,   45,   45,   45,   45, 1445,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
+       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
+       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45, 1445,   45,   45,   45,   45,   45,   45,   45,   45,
-     1445,   45,   45,   45,   45,   45, 1445,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+       45, 1457,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1445,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457, 1457,   45,   45,   45,
+       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1445, 1445,   45,   45,   45,   45, 1445, 1445,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1445,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
+     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
+       45,   45, 1457, 1457,   45,   45,   45, 1457,   45,   45,
+       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 1445,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1445,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1445,   45,   45,   45,   45,   45,   45, 1445,
+       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1445, 1445,   45,   45,
-       45, 1445,   45,   45,   45, 1445,   45,   45,   45,   45,
+     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1445,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
+       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1457, 1457,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1445,   45,   45,   45,   45,   45,   45,
+       45, 1457, 1457,   45, 1457,   45, 1457,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45, 1457,
+       45,   45,   45,   45, 1457, 1457,   45, 1457,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1445,
+       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1445,   45, 1445, 1445,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+
+       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+       45,   45, 1457, 1457,   45, 1457, 1457,   45, 1457,   45,
+       45,   45,   45,   45, 1457,   45, 1457,   45,   45,   45,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1457,   45, 1457,
+     1457,   45, 1457,   45,   45,   45,   45, 1457,   45,   45,
+       45,   45,   45,   45,   45, 1457, 1457,   45,   45, 1457,
+       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
+     1457,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45, 1457,   45, 1457,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1445, 1445,   45,   45,
+       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
+       45,   45,   45,   45, 1457,   45, 1457,   45,   45,   45,
+       45, 1457, 1457,   45,   45, 1457, 1457,   45, 1457,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+       45, 1457, 1457,   45,   45,   45,   45, 1457,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1457,   45,   45,   45, 1457,   45, 1457,   45,   45,
+       45,   45,   45, 1457,   45,   45,   45, 1457,   45,   45,
 
-       45,   45,   45, 1445, 1445,   45, 1445,   45, 1445,   45,
-       45,   45,   45,   45,   45,   45,   45, 1445,   45,   45,
-       45, 1445,   45,   45,   45,   45, 1445, 1445,   45, 1445,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1445,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1445,
+       45, 1457,   45,   45, 1457,   45, 1457,   45, 1457,   45,
+       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
+     1457,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1457, 1457,   45,   45,   45,   45,   45, 1457,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1445,   45,   45,   45,
-       45,   45, 1445, 1445,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45, 1445, 1445,   45, 1445, 1445,   45, 1445,   45,
-       45,   45,   45,   45, 1445,   45, 1445,   45,   45,   45,
-       45,   45,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1445,   45, 1445,
-     1445,   45, 1445,   45,   45,   45,   45, 1445,   45,   45,
-       45,   45,   45,   45, 1445, 1445,   45,   45, 1445,   45,
-       45,   45,   45,   45, 1445,   45,   45,   45,   45, 1445,
-       45, 1445,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1445,   45, 1445,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1457,   45,   45, 1457, 1457,   45,
+       45,   45,   45,   45,   45, 1457,   45, 1457,   45,   45,
+     1457,   45,   45, 1457,   45,   45, 1457,   45, 1457,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1445,   45, 1445,   45,   45,   45,   45, 1445,
-     1445,   45,   45, 1445, 1445,   45, 1445,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1445,   45,   45, 1445,
-     1445,   45,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1445,
-       45,   45,   45, 1445,   45, 1445,   45,   45,   45,   45,
-       45, 1445,   45,   45,   45, 1445,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1445,
-
-       45,   45, 1445,   45, 1445,   45, 1445,   45,   45,   45,
-       45, 1445,   45,   45,   45,   45,   45,   45, 1445,   45,
-     1445,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1445,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1445, 1445,   45,   45,   45,   45,   45, 1445,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1445,   45,   45, 1445, 1445,   45,   45,   45,
-       45,   45,   45, 1445,   45, 1445,   45,   45, 1445,   45,
-       45, 1445,   45,   45, 1445,   45, 1445,   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, 1445,   45, 1445, 1445,   45,   45,
-       45,   45,   45,   45, 1445, 1445, 1445,   45,   45,   45,
-       45, 1445,   45,   45, 1445,   45,   45,   45,   45,   45,
-     1445,   45,   45, 1445,    0, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445
+       45,   45,   45,   45,   45,   45, 1457,   45, 1457, 1457,
+       45,   45,   45,   45,   45,   45, 1457, 1457, 1457,   45,
+       45,   45,   45, 1457,   45,   45, 1457,   45,   45,   45,
+       45,   45, 1457,   45,   45, 1457,    0, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457
     } ;
 
-static const flex_int16_t yy_nxt[1882] =
+static const flex_int16_t yy_nxt[1895] =
     {   0,
-     1445,   13,   14,   13, 1445,   15,   16,  822,   17,   18,
-       19,   20,   21,   22,   22,   22,   23,   24,   85,  360,
-       37,   14,   37,   86,   25,   26,   38, 1445, 1445,   27,
+     1457,   13,   14,   13, 1457,   15,   16, 1457,   17,   18,
+       19,   20,   21,   22,   22,   22,   23,   24,   85,  361,
+       37,   14,   37,   86,   25,   26,   38, 1457, 1457,   27,
        37,   14,   37,   42,   28,   42,   38,   91,   92,   29,
       115,   30,   13,   14,   13,   90,   91,   25,   31,   92,
-       13,   14,   13,   13,   14,   13,   32,   40,  823,   13,
-       14,   13,   33,   40,  115,   91,   92,  361,   90,   34,
+       13,   14,   13,   13,   14,   13,   32,   40,  824,   13,
+       14,   13,   33,   40,  115,   91,   92,  362,   90,   34,
        35,   13,   14,   13,   94,   15,   16,   95,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
        13,  108,   39,   90,   25,   26,   13,   14,   13,   27,
 
        39,   84,   84,   84,   28,   42,   41,   42,   42,   29,
        42,   30,   82,  107,   41,  111,   93,   25,   31,  108,
-      130,  137,   88,  824,   88,  825,   32,   89,   89,   89,
-      131,  138,   33,  139,  376,   82,  107,  377,  111,   34,
+      130,  137,   88,  825,   88,  826,   32,   89,   89,   89,
+      131,  138,   33,  139,  378,   82,  107,  379,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   47,   45,   48,   49,   50,   51,   45,   52,   53,
@@ -1263,192 +1266,194 @@ static const flex_int16_t yy_nxt[1882] =
        45,   45,   80,  103,   81,   81,   81,   80,  109,   83,
        83,   83,  101,  114,   80,   82,   83,   83,   83,  121,
        82,  145,  122,  112,  123,  146,  124,   82,  162,  103,
-      826,  103,  163,  113,  134,  223,  114,  110,   82,  135,
-      192,  107,  136,   82,  193,  147,  112,  102,  224,  504,
-       82,   45,  505,   45,   45,   45,   45,  119,   45,   45,
+      827,  103,  163,  113,  134,  223,  114,  110,   82,  135,
+      192,  107,  136,   82,  193,  147,  112,  102,  224,  507,
+       82,   45,  508,   45,   45,   45,   45,  119,   45,   45,
        45,  113,  117,  120,  107,   45,   45,  192,   45,   45,
        89,   89,   89,  194,   45,  132,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   89,   89,
-       89,   45,  125,  428,  111,   45,  126,  429,  180,  127,
+       89,   45,  125,  262,  111,   45,  126,  263,  180,  127,
       128,  141,  142,   45,  178,  143,  151,   45,  180,   45,
       118,  144,  129,  148,  152,  149,  153,  150,  112,  114,
-      156,  154,  155,  157,  158,  164,  180,  480,  113,  165,
-      178,  481,  166,  304,  159,  179,  183,  160,  391,  167,
-      168,  170,  114,  171,  101,  169,  827,  172,   84,   84,
+      156,  154,  155,  157,  158,  164,  180,  430,  113,  165,
+      178,  431,  166,  305,  159,  179,  183,  160,  393,  167,
+      168,  170,  114,  171,  101,  169,  828,  172,   84,   84,
        84,   80,  174,   81,   81,   81,  113,  175,  187,   82,
        88,  179,   88,  173,   82,   89,   89,   89,   80,  178,
        83,   83,   83,   84,   84,   84,  179,  191,  100,  102,
 
       196,   82,   82,  197,   82,  100,  187,   82,  198,  200,
-      208,  199,  187,  289,  242,  181,  214,  215,  225,  209,
+      208,  199,  187,  290,  242,  181,  214,  215,  225,  209,
       210,  233,  182,  191,   82,  197,  216,   82,  196,  204,
-      197,  828,  200,  100,  226,  243,  198,  100,  199,  289,
+      197,  829,  200,  100,  226,  243,  198,  100,  199,  290,
       205,  100,  220,  228,  221,  196,  229,  254,  255,  100,
-      230,  264,  281,  100,  288,  100,  186,  203,  203,  203,
-      290,  222,  829,  234,  203,  203,  203,  203,  203,  203,
-      288,  258,  274,  248,  259,  260,  275,  289,  290,  299,
-      276,  296,  288,  290,  265,  266,  267,  203,  203,  203,
-      203,  203,  203,  300,  303,  268,  305,  269,  291,  270,
-
-      271,  293,  272,  292,  296,  307,  296,  299,  315,  421,
-      402,  457,  458,  303,  398,  398,  316,  303,  349,  305,
-      300,  410,  317,  402,  670,  407,  422,  488,  410,  310,
-      476,  489,  307,  308,  308,  308,  356,  398,  399,  402,
-      308,  308,  308,  308,  308,  308,  404,  405,  407,  410,
-      464,  515,  414,  493,  510,  406,  466,  494,  830,  511,
-      465,  671,  515,  308,  308,  308,  308,  308,  308,  350,
-      620,  442,  351,  413,  413,  413,  443,  654,  655,  515,
-      413,  413,  413,  413,  413,  413,  477,  523,  546,  524,
-      525,  595,  621,  547,  616,  712,  596,  620,  713,  622,
-
-      831,  702,  714,  413,  413,  413,  413,  413,  413,  832,
-      679,  703,  715,  835,  523,  680,  524,  718,  719,  789,
-      621,  713,  444,  712,  836,  837,  790,  445,   45,   45,
-       45,  755,  838,  839,  756,   45,   45,   45,   45,   45,
-       45,  796,  791,  807,  840,  833,  841,  797,  842,  792,
-      834,  843,  681,  793,  844,  845,  846,  847,   45,   45,
-       45,   45,   45,   45,  848,  849,  850,  853,  851,  854,
-      855,  807,  852,  856,  857,  858,  859,  860,  861,  862,
-      863,  864,  865,  866,  867,  868,  869,  870,  871,  872,
-      873,  874,  875,  876,  877,  878,  879,  880,  882,  883,
-
-      884,  885,  886,  887,  888,  889,  890,  891,  892,  881,
-      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
-      903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
-      913,  914,  915,  916,  917,  895,  918,  919,  894,  920,
-      921,  922,  923,  924,  927,  928,  929,  930,  925,  931,
-      932,  933,  934,  935,  936,  937,  938,  939,  940,  941,
-      942,  944,  945,  946,  947,  948,  949,  950,  951,  952,
-      953,  943,  954,  955,  956,  957,  958,  959,  960,  961,
-      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
-      972,  973,  974,  975,  976,  977,  979,  978,  980,  926,
-
-      981,  982,  983,  984,  985,  986,  987,  988,  989,  990,
-      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
-     1001, 1002, 1003,  977,  978, 1004, 1005, 1006, 1007, 1009,
-     1011, 1012, 1013, 1008, 1014, 1015, 1016, 1017, 1018, 1019,
-     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
-     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
-     1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
-     1050, 1010, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
-     1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
-     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+      230,  265,  282,  100,  289,  100,  186,  203,  203,  203,
+      291,  222,  830,  234,  203,  203,  203,  203,  203,  203,
+      289,  258,  275,  248,  259,  260,  276,  290,  291,  300,
+      277,  297,  289,  291,  266,  267,  268,  203,  203,  203,
+      203,  203,  203,  301,  304,  269,  306,  270,  292,  271,
+
+      272,  294,  273,  293,  297,  308,  297,  300,  316,  423,
+      404,  459,  460,  304,  400,  400,  317,  304,  350,  306,
+      301,  412,  318,  404,  831,  409,  424,  482,  412,  311,
+      478,  483,  308,  309,  309,  309,  357,  400,  401,  404,
+      309,  309,  309,  309,  309,  309,  406,  407,  409,  412,
+      466,  518,  416,  491,  496,  408,  468,  492,  497,  760,
+      467,  518,  761,  309,  309,  309,  309,  309,  309,  351,
+      624,  444,  352,  415,  415,  415,  445,  658,  659,  518,
+      415,  415,  415,  415,  415,  415,  479,  513,  526,  528,
+      527,  549,  514,  599,  620,  625,  550,  624,  600,  626,
+
+      707,  718,  719,  415,  415,  415,  415,  415,  415,  674,
+      708,  683,  720,  717,  795,  526,  684,  527,  723,  724,
+      802,  796,  446,  625,  718,  832,  803,  447,   45,   45,
+       45,  833,  834,  835,  836,   45,   45,   45,   45,   45,
+       45,  717,  813,  797,  837,  838,  675,  839,  841,  842,
+      798,  843,  840,  685,  799,  844,  845,  846,   45,   45,
+       45,   45,   45,   45,  847,  848,  849,  850,  851,  852,
+      813,  853,  854,  855,  856,  857,  859,  860,  861,  858,
+      862,  863,  864,  865,  866,  867,  868,  869,  870,  871,
+      872,  873,  874,  875,  876,  877,  878,  879,  880,  881,
+
+      882,  883,  884,  885,  886,  887,  889,  890,  891,  892,
+      893,  894,  895,  896,  897,  898,  899,  888,  900,  901,
+      902,  903,  904,  905,  906,  907,  908,  909,  910,  911,
+      912,  913,  914,  915,  916,  917,  918,  919,  920,  921,
+      922,  923,  924,  902,  925,  926,  901,  927,  928,  929,
+      930,  931,  934,  935,  936,  937,  932,  938,  939,  940,
+      941,  942,  943,  944,  945,  946,  947,  948,  949,  951,
+      952,  953,  954,  955,  956,  957,  958,  959,  960,  950,
+      961,  962,  963,  964,  965,  966,  967,  968,  969,  970,
+      971,  972,  973,  974,  975,  976,  977,  978,  979,  980,
+
+      981,  982,  983,  984,  985,  987,  986,  933,  988,  989,
+      990,  991,  992,  993,  994,  995,  996,  997,  998,  999,
+     1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+     1010, 1011,  985,  986, 1012, 1013, 1014, 1015, 1017, 1019,
+     1020, 1021, 1016, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
+     1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+     1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
+     1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+     1018, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+
+     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
+     1065, 1088, 1089, 1090, 1091, 1092, 1066, 1093, 1094, 1095,
+     1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,
+     1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
+     1116, 1117, 1118, 1119, 1120, 1122, 1123, 1124, 1125, 1126,
+     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
+     1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
+     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
+     1158, 1159, 1160, 1161, 1162, 1134, 1163, 1164, 1165, 1167,
+     1168, 1169, 1170, 1171, 1172, 1121, 1166, 1173, 1174, 1175,
+
+     1176, 1177, 1138, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
+     1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
+     1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204,
+     1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
+     1215, 1216, 1194, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
+     1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233,
+     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243,
+     1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253,
+     1254, 1255, 1256, 1257, 1258, 1259, 1261, 1262, 1263, 1264,
+     1265, 1266, 1267, 1240, 1268, 1269, 1270, 1271, 1272, 1273,
+
+     1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
+     1284, 1285, 1286, 1287, 1288, 1290, 1291, 1292, 1293, 1289,
+     1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303,
+     1304, 1305, 1306, 1307, 1308, 1309, 1310, 1283, 1311, 1312,
+     1313, 1260, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321,
+     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
+     1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
+     1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351,
+     1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361,
+     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
+
+     1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381,
+     1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
+     1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401,
+     1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
+     1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
+     1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431,
+     1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441,
+     1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451,
+     1452, 1453, 1454, 1455, 1456,   12,   12,   12,   12,   12,
+       36,   36,   36,   36,   36,   79,  296,   79,   79,   79,
+
+       98,  403,   98,  517,   98,  100,  100,  100,  100,  100,
+      116,  116,  116,  116,  116,  177,  100,  177,  177,  177,
+      201,  201,  201,  823,  822,  821,  820,  819,  818,  817,
+      816,  815,  814,  812,  811,  810,  809,  808,  807,  806,
+      805,  804,  801,  800,  794,  793,  792,  791,  790,  789,
+      788,  787,  786,  785,  784,  783,  782,  781,  780,  779,
+      778,  777,  776,  775,  774,  773,  772,  771,  770,  769,
+      768,  767,  766,  765,  764,  763,  762,  759,  758,  757,
+      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
+      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
+
+      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
+      726,  725,  722,  721,  716,  715,  714,  713,  712,  711,
+      710,  709,  706,  705,  704,  703,  702,  701,  700,  699,
+      698,  697,  696,  695,  694,  693,  692,  691,  690,  689,
+      688,  687,  686,  682,  681,  680,  679,  678,  677,  676,
+      673,  672,  671,  670,  669,  668,  667,  666,  665,  664,
+      663,  662,  661,  660,  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,  623,  622,  621,  620,  619,
+
+      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  605,  604,  603,  602,  601,  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,  573,  572,  571,  570,  569,  568,  567,
+      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
+      556,  555,  554,  553,  552,  551,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
+      534,  533,  532,  531,  530,  529,  525,  524,  523,  522,
+      521,  520,  519,  516,  515,  512,  511,  510,  509,  506,
+
+      505,  504,  503,  502,  501,  500,  499,  498,  495,  494,
+      493,  490,  489,  488,  487,  486,  485,  484,  481,  480,
+      477,  476,  475,  474,  473,  472,  471,  470,  469,  465,
+      464,  463,  462,  461,  458,  457,  456,  455,  454,  453,
+      452,  451,  450,  449,  448,  443,  442,  441,  440,  439,
+      438,  437,  436,  435,  434,  433,  432,  429,  428,  427,
+      426,  425,  422,  421,  420,  419,  418,  417,  414,  413,
+      411,  410,  405,  402,  399,  398,  397,  396,  395,  394,
+      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
+      382,  381,  380,  377,  376,  375,  374,  373,  372,  371,
+
+      370,  369,  368,  367,  366,  365,  364,  363,  360,  359,
+      358,  356,  355,  354,  353,  349,  348,  347,  346,  345,
+      344,  343,  342,  341,  340,  339,  338,  337,  336,  335,
+      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+      324,  323,  322,  321,  320,  319,  315,  314,  313,  312,
+      310,  202,  307,  305,  303,  302,  299,  298,  295,  288,
+      287,  286,  285,  284,  283,  281,  280,  279,  278,  274,
+      264,  261,  257,  256,  253,  252,  251,  250,  249,  247,
+      246,  245,  244,  241,  240,  239,  238,  237,  236,  235,
+      232,  231,  227,  219,  218,  217,  213,  212,  211,  207,
+
+      206,  202,  195,  190,  189,  188,  185,  184,  176,  161,
+      140,  133,  106,  105,  104,   43,   99,   97,   96,   87,
+       43, 1457,   11, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457
 
-     1056, 1079, 1080, 1081, 1082, 1083, 1057, 1084, 1085, 1086,
-     1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096,
-     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
-     1107, 1108, 1109, 1110, 1112, 1113, 1114, 1115, 1116, 1117,
-     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
-     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
-     1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148,
-     1149, 1150, 1151, 1152, 1124, 1153, 1154, 1155, 1157, 1158,
-     1159, 1160, 1161, 1162, 1111, 1156, 1163, 1164, 1165, 1166,
-     1167, 1128, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,
-
-     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
-     1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
-     1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
-     1183, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
-     1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224,
-     1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
-     1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
-     1245, 1246, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
-     1228, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274,
-
-     1275, 1276, 1278, 1279, 1280, 1281, 1277, 1282, 1283, 1284,
-     1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294,
-     1295, 1296, 1297, 1298, 1271, 1299, 1300, 1301, 1248, 1302,
-     1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312,
-     1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322,
-     1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332,
-     1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
-     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
-     1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
-     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
-
-     1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382,
-     1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
-     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
-     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412,
-     1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422,
-     1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432,
-     1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442,
-     1443, 1444,   12,   12,   12,   12,   12,   36,   36,   36,
-       36,   36,   79,  295,   79,   79,   79,   98,  401,   98,
-      514,   98,  100,  100,  100,  100,  100,  116,  116,  116,
-
-      116,  116,  177,  100,  177,  177,  177,  201,  201,  201,
-      821,  820,  819,  818,  817,  816,  815,  814,  813,  812,
-      811,  810,  809,  808,  806,  805,  804,  803,  802,  801,
-      800,  799,  798,  795,  794,  788,  787,  786,  785,  784,
-      783,  782,  781,  780,  779,  778,  777,  776,  775,  774,
-      773,  772,  771,  770,  769,  768,  767,  766,  765,  764,
-      763,  762,  761,  760,  759,  758,  757,  754,  753,  752,
-      751,  750,  749,  748,  747,  746,  745,  744,  743,  742,
-      741,  740,  739,  738,  737,  736,  735,  734,  733,  732,
-      731,  730,  729,  728,  727,  726,  725,  724,  723,  722,
-
-      721,  720,  717,  716,  711,  710,  709,  708,  707,  706,
-      705,  704,  701,  700,  699,  698,  697,  696,  695,  694,
-      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
-      683,  682,  678,  677,  676,  675,  674,  673,  672,  669,
-      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
-      658,  657,  656,  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,  619,  618,  617,  616,  615,  614,
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-
-      603,  602,  601,  600,  599,  598,  597,  594,  593,  592,
-      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
-      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
-      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
-      561,  560,  559,  558,  557,  556,  555,  554,  553,  552,
-      551,  550,  549,  548,  545,  544,  543,  542,  541,  540,
-      539,  538,  537,  536,  535,  534,  533,  532,  531,  530,
-      529,  528,  527,  526,  522,  521,  520,  519,  518,  517,
-      516,  513,  512,  509,  508,  507,  506,  503,  502,  501,
-      500,  499,  498,  497,  496,  495,  492,  491,  490,  487,
-
-      486,  485,  484,  483,  482,  479,  478,  475,  474,  473,
-      472,  471,  470,  469,  468,  467,  463,  462,  461,  460,
-      459,  456,  455,  454,  453,  452,  451,  450,  449,  448,
-      447,  446,  441,  440,  439,  438,  437,  436,  435,  434,
-      433,  432,  431,  430,  427,  426,  425,  424,  423,  420,
-      419,  418,  417,  416,  415,  412,  411,  409,  408,  403,
-      400,  397,  396,  395,  394,  393,  392,  390,  389,  388,
-      387,  386,  385,  384,  383,  382,  381,  380,  379,  378,
-      375,  374,  373,  372,  371,  370,  369,  368,  367,  366,
-      365,  364,  363,  362,  359,  358,  357,  355,  354,  353,
-
-      352,  348,  347,  346,  345,  344,  343,  342,  341,  340,
-      339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
-      329,  328,  327,  326,  325,  324,  323,  322,  321,  320,
-      319,  318,  314,  313,  312,  311,  309,  202,  306,  304,
-      302,  301,  298,  297,  294,  287,  286,  285,  284,  283,
-      282,  280,  279,  278,  277,  273,  263,  262,  261,  257,
-      256,  253,  252,  251,  250,  249,  247,  246,  245,  244,
-      241,  240,  239,  238,  237,  236,  235,  232,  231,  227,
-      219,  218,  217,  213,  212,  211,  207,  206,  202,  195,
-      190,  189,  188,  185,  184,  176,  161,  140,  133,  106,
-
-      105,  104,   43,   99,   97,   96,   87,   43, 1445,   11,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445
     } ;
 
-static const flex_int16_t yy_chk[1882] =
+static const flex_int16_t yy_chk[1895] =
     {   0,
-        0,    1,    1,    1,    0,    1,    1,  729,    1,    1,
+        0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  252,
         3,    3,    3,   21,    1,    1,    3,    0,    0,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
@@ -1462,7 +1467,7 @@ static const flex_int16_t yy_chk[1882] =
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
        62,   66,   25,  731,   25,  732,    2,   25,   25,   25,
-       62,   66,    2,   66,  267,   20,   51,  267,   54,    2,
+       62,   66,    2,   66,  268,   20,   51,  268,   54,    2,
         2,   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,
@@ -1475,18 +1480,18 @@ static const flex_int16_t yy_chk[1882] =
        19,   19,   44,   56,   22,   17,   22,   22,   22,   60,
        19,   69,   60,   55,   60,   69,   60,   22,   74,   47,
       733,   59,   74,   55,   65,  131,   56,   53,   17,   65,
-      108,   63,   65,   19,  109,   69,   55,   44,  131,  391,
-       22,   45,  391,   45,   45,   45,   45,   59,   45,   45,
+      108,   63,   65,   19,  109,   69,   55,   44,  131,  393,
+       22,   45,  393,   45,   45,   45,   45,   59,   45,   45,
        45,   55,   58,   59,   63,   45,   45,  108,   45,   58,
        88,   88,   88,  109,   45,   63,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   58,   89,   89,
-       89,   58,   61,  324,   70,   58,   61,  324,   92,   61,
+       89,   58,   61,  161,   70,   58,   61,  161,   92,   61,
        61,   68,   68,   58,   90,   68,   71,   58,   95,   58,
        58,   68,   61,   70,   71,   70,   71,   70,   76,   77,
-       72,   71,   71,   72,   72,   75,   92,  370,   76,   75,
-       90,  370,   75,  281,   72,   91,   95,   72,  281,   75,
+       72,   71,   71,   72,   72,   75,   92,  325,   76,   75,
+       90,  325,   75,  282,   72,   91,   95,   72,  282,   75,
        75,   76,   77,   76,  100,   75,  734,   76,   80,   80,
        80,   81,   77,   81,   81,   81,   76,   77,  103,   80,
        82,   91,   82,   76,   81,   82,   82,   82,   83,   93,
@@ -1495,166 +1500,168 @@ static const flex_int16_t yy_chk[1882] =
       111,   83,   80,  112,   84,  102,  103,   81,  113,  115,
       122,  114,  119,  179,  145,   93,  126,  126,  132,  122,
       122,  137,   94,  107,   83,  170,  126,   84,  111,  119,
-      112,  736,  115,  102,  132,  145,  113,  102,  114,  179,
+      112,  735,  115,  102,  132,  145,  113,  102,  114,  179,
       119,  102,  130,  134,  130,  150,  134,  156,  156,  102,
       134,  163,  170,  102,  178,  102,  102,  118,  118,  118,
-      180,  130,  737,  137,  118,  118,  118,  118,  118,  118,
+      180,  130,  736,  137,  118,  118,  118,  118,  118,  118,
       181,  159,  165,  150,  159,  159,  165,  182,  183,  191,
       165,  187,  178,  180,  163,  163,  163,  118,  118,  118,
       118,  118,  118,  192,  196,  163,  198,  163,  181,  163,
 
-      163,  183,  163,  182,  187,  200,  205,  191,  210,  317,
-      296,  349,  349,  248,  288,  291,  210,  196,  243,  198,
-      192,  303,  210,  310,  577,  299,  317,  377,  356,  205,
-      367,  377,  200,  203,  203,  203,  248,  288,  291,  296,
-      203,  203,  203,  203,  203,  203,  298,  298,  299,  303,
-      355,  402,  310,  381,  396,  298,  356,  381,  738,  396,
-      355,  577,  414,  203,  203,  203,  203,  203,  203,  243,
-      523,  337,  243,  308,  308,  308,  337,  560,  560,  402,
-      308,  308,  308,  308,  308,  308,  367,  412,  438,  412,
-      414,  490,  524,  438,  525,  620,  490,  523,  621,  525,
-
-      739,  609,  622,  308,  308,  308,  308,  308,  308,  740,
-      586,  609,  622,  742,  412,  586,  412,  625,  625,  697,
-      524,  621,  337,  620,  743,  744,  697,  337,  413,  413,
-      413,  661,  745,  746,  661,  413,  413,  413,  413,  413,
-      413,  701,  698,  713,  747,  741,  748,  701,  749,  698,
-      741,  750,  586,  698,  753,  754,  755,  756,  413,  413,
-      413,  413,  413,  413,  759,  760,  761,  763,  762,  764,
-      765,  713,  762,  766,  767,  768,  770,  771,  772,  773,
-      774,  775,  776,  777,  778,  779,  780,  781,  782,  783,
-      784,  785,  786,  787,  788,  789,  790,  791,  792,  793,
-
-      794,  795,  796,  797,  799,  800,  801,  802,  803,  791,
-      804,  806,  807,  808,  809,  810,  811,  812,  813,  814,
-      815,  816,  817,  818,  819,  820,  821,  823,  824,  825,
-      826,  827,  828,  829,  830,  807,  831,  832,  806,  834,
-      835,  836,  837,  838,  839,  841,  842,  843,  838,  844,
-      845,  846,  847,  848,  849,  850,  851,  852,  853,  854,
-      855,  856,  859,  860,  861,  863,  864,  865,  867,  868,
-      869,  855,  870,  871,  872,  873,  874,  875,  876,  877,
-      878,  879,  880,  881,  882,  883,  885,  886,  887,  888,
-      889,  890,  891,  892,  893,  894,  896,  895,  897,  838,
-
-      898,  899,  900,  901,  902,  903,  904,  905,  906,  907,
-      909,  910,  911,  912,  913,  914,  915,  916,  917,  918,
-      919,  920,  921,  894,  895,  922,  923,  925,  926,  927,
-      928,  929,  930,  926,  931,  932,  933,  934,  935,  936,
-      937,  938,  939,  940,  941,  942,  943,  944,  945,  946,
-      947,  948,  949,  951,  952,  953,  954,  955,  956,  957,
-      958,  959,  960,  961,  963,  966,  967,  968,  969,  970,
-      971,  927,  972,  973,  974,  975,  976,  977,  978,  979,
-      980,  981,  982,  983,  984,  985,  986,  989,  990,  991,
-      992,  993,  994,  995,  996,  997,  998,  999, 1000, 1001,
-
-      977, 1002, 1003, 1006, 1008, 1010,  978, 1011, 1012, 1013,
-     1014, 1015, 1016, 1017, 1019, 1020, 1021, 1023, 1024, 1025,
-     1026, 1029, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
-     1039, 1040, 1041, 1042, 1043, 1044, 1045, 1047, 1048, 1049,
-     1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1060,
-     1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1071,
-     1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
-     1082, 1083, 1084, 1085, 1056, 1086, 1088, 1089, 1090, 1091,
-     1092, 1095, 1096, 1097, 1042, 1089, 1098, 1099, 1100, 1101,
-     1102, 1060, 1103, 1104, 1105, 1107, 1108, 1109, 1110, 1111,
-
-     1112, 1115, 1118, 1120, 1121, 1122, 1123, 1124, 1126, 1128,
-     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1137, 1138, 1139,
-     1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1149, 1152,
-     1124, 1154, 1155, 1156, 1157, 1159, 1160, 1161, 1162, 1163,
-     1164, 1167, 1168, 1170, 1171, 1172, 1173, 1174, 1176, 1177,
-     1178, 1179, 1181, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
-     1190, 1191, 1193, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
-     1202, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210,
-     1183, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219,
-     1220, 1221, 1222, 1224, 1226, 1227, 1228, 1229, 1232, 1233,
-
-     1236, 1238, 1239, 1240, 1241, 1242, 1238, 1243, 1244, 1245,
-     1246, 1248, 1249, 1252, 1253, 1254, 1255, 1257, 1258, 1259,
-     1260, 1261, 1262, 1263, 1228, 1264, 1265, 1266, 1203, 1267,
-     1268, 1269, 1271, 1272, 1273, 1275, 1277, 1278, 1279, 1280,
-     1281, 1283, 1284, 1285, 1287, 1288, 1289, 1290, 1291, 1292,
-     1293, 1294, 1295, 1296, 1297, 1298, 1299, 1301, 1302, 1304,
-     1306, 1308, 1309, 1310, 1311, 1313, 1314, 1315, 1316, 1317,
-     1318, 1320, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329,
-     1330, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
-     1343, 1344, 1345, 1346, 1347, 1349, 1350, 1351, 1352, 1353,
-
-     1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1364,
-     1365, 1368, 1369, 1370, 1371, 1372, 1373, 1375, 1377, 1378,
-     1380, 1381, 1383, 1384, 1386, 1388, 1389, 1390, 1391, 1392,
-     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
-     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412,
-     1413, 1414, 1416, 1419, 1420, 1421, 1422, 1423, 1424, 1428,
-     1429, 1430, 1431, 1433, 1434, 1436, 1437, 1438, 1439, 1440,
-     1442, 1443, 1446, 1446, 1446, 1446, 1446, 1447, 1447, 1447,
-     1447, 1447, 1448, 1454, 1448, 1448, 1448, 1449, 1455, 1449,
-     1456, 1449, 1450, 1450, 1450, 1450, 1450, 1451, 1451, 1451,
-
-     1451, 1451, 1452, 1457, 1452, 1452, 1452, 1453, 1453, 1453,
-      728,  727,  726,  725,  724,  723,  722,  721,  720,  719,
-      718,  716,  715,  714,  712,  710,  709,  708,  707,  706,
-      705,  704,  703,  700,  699,  696,  695,  694,  693,  692,
-      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
-      681,  680,  678,  677,  676,  675,  674,  673,  672,  671,
-      669,  668,  667,  666,  665,  664,  662,  660,  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,  624,  623,  619,  618,  617,  614,  613,  612,
-      611,  610,  607,  606,  605,  604,  603,  602,  601,  600,
-      599,  598,  597,  596,  594,  593,  592,  591,  590,  589,
-      588,  587,  585,  584,  582,  581,  580,  579,  578,  576,
-      575,  574,  572,  571,  569,  568,  567,  566,  565,  564,
-      563,  562,  561,  559,  558,  557,  556,  555,  553,  552,
-      551,  550,  549,  548,  547,  545,  544,  543,  542,  541,
-      540,  539,  538,  537,  536,  535,  534,  533,  532,  531,
-      530,  529,  528,  527,  521,  519,  516,  515,  513,  512,
-      511,  509,  505,  504,  503,  502,  501,  500,  499,  498,
-
-      497,  496,  495,  494,  493,  492,  491,  489,  488,  487,
-      486,  485,  484,  483,  482,  481,  480,  479,  477,  475,
-      474,  473,  472,  471,  470,  469,  468,  467,  466,  465,
-      464,  462,  461,  460,  459,  458,  457,  456,  455,  454,
-      453,  452,  451,  450,  449,  448,  447,  446,  445,  444,
-      443,  441,  440,  439,  437,  436,  435,  434,  433,  432,
-      430,  429,  428,  427,  426,  425,  423,  422,  421,  420,
-      419,  418,  416,  415,  410,  409,  407,  406,  405,  404,
-      403,  400,  397,  395,  394,  393,  392,  390,  389,  388,
-      387,  386,  385,  384,  383,  382,  380,  379,  378,  376,
-
-      375,  374,  373,  372,  371,  369,  368,  366,  365,  364,
-      363,  362,  361,  360,  359,  358,  354,  353,  352,  351,
-      350,  348,  347,  346,  345,  344,  343,  342,  341,  340,
-      339,  338,  336,  335,  334,  333,  332,  331,  330,  329,
-      328,  327,  326,  325,  323,  322,  321,  320,  319,  316,
-      315,  314,  313,  312,  311,  307,  305,  302,  300,  297,
-      294,  287,  286,  285,  284,  283,  282,  280,  279,  278,
-      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
-      266,  265,  264,  263,  262,  261,  260,  259,  258,  257,
-      256,  255,  254,  253,  251,  250,  249,  247,  246,  245,
-
-      244,  242,  241,  240,  239,  238,  237,  236,  235,  234,
-      232,  231,  230,  229,  228,  227,  226,  225,  224,  223,
-      222,  221,  220,  219,  218,  217,  216,  215,  214,  213,
-      212,  211,  209,  208,  207,  206,  204,  201,  199,  197,
-      195,  194,  189,  188,  184,  176,  175,  174,  173,  172,
-      171,  169,  168,  167,  166,  164,  162,  161,  160,  158,
-      157,  155,  154,  153,  152,  151,  149,  148,  147,  146,
-      144,  143,  142,  141,  140,  139,  138,  136,  135,  133,
-      129,  128,  127,  125,  124,  123,  121,  120,  116,  110,
-      106,  105,  104,   98,   97,   78,   73,   67,   64,   50,
-
-       49,   48,   43,   41,   39,   38,   24,   14,   11, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
-     1445
+      163,  183,  163,  182,  187,  200,  205,  191,  210,  318,
+      297,  350,  350,  248,  289,  292,  210,  196,  243,  198,
+      192,  304,  210,  311,  737,  300,  318,  371,  357,  205,
+      368,  371,  200,  203,  203,  203,  248,  289,  292,  297,
+      203,  203,  203,  203,  203,  203,  299,  299,  300,  304,
+      356,  404,  311,  379,  383,  299,  357,  379,  383,  665,
+      356,  416,  665,  203,  203,  203,  203,  203,  203,  243,
+      526,  338,  243,  309,  309,  309,  338,  563,  563,  404,
+      309,  309,  309,  309,  309,  309,  368,  398,  414,  416,
+      414,  440,  398,  493,  528,  527,  440,  526,  493,  528,
+
+      613,  625,  626,  309,  309,  309,  309,  309,  309,  580,
+      613,  589,  626,  624,  702,  414,  589,  414,  629,  629,
+      706,  702,  338,  527,  625,  738,  706,  338,  415,  415,
+      415,  739,  741,  742,  743,  415,  415,  415,  415,  415,
+      415,  624,  718,  703,  744,  745,  580,  746,  747,  748,
+      703,  749,  746,  589,  703,  750,  751,  752,  415,  415,
+      415,  415,  415,  415,  753,  754,  755,  758,  759,  760,
+      718,  761,  764,  765,  766,  767,  768,  769,  770,  767,
+      771,  772,  773,  775,  776,  777,  778,  779,  780,  781,
+      782,  783,  784,  785,  786,  787,  788,  789,  790,  791,
+
+      792,  793,  794,  795,  796,  797,  798,  799,  800,  801,
+      802,  803,  805,  806,  807,  808,  809,  797,  810,  812,
+      813,  814,  815,  816,  817,  818,  819,  820,  821,  822,
+      823,  824,  825,  826,  827,  829,  830,  831,  832,  833,
+      834,  835,  836,  813,  837,  838,  812,  840,  841,  842,
+      843,  844,  845,  847,  848,  849,  844,  850,  851,  852,
+      853,  854,  855,  856,  857,  858,  859,  860,  861,  862,
+      865,  866,  867,  869,  870,  871,  872,  874,  875,  861,
+      876,  877,  878,  879,  880,  881,  882,  883,  884,  885,
+      886,  887,  888,  889,  890,  892,  893,  894,  895,  896,
+
+      897,  898,  899,  900,  901,  903,  902,  844,  904,  905,
+      906,  907,  908,  909,  910,  911,  912,  913,  914,  916,
+      917,  918,  919,  920,  921,  922,  923,  924,  925,  926,
+      927,  928,  901,  902,  929,  930,  932,  933,  934,  935,
+      936,  937,  933,  938,  939,  940,  941,  942,  943,  944,
+      945,  946,  947,  948,  949,  950,  951,  952,  953,  954,
+      955,  956,  957,  959,  960,  961,  962,  963,  964,  965,
+      966,  967,  968,  969,  971,  974,  975,  976,  977,  978,
+      934,  979,  980,  981,  982,  983,  984,  985,  986,  987,
+      988,  989,  990,  991,  992,  993,  994,  997,  998,  999,
+
+     1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+      985, 1010, 1011, 1014, 1016, 1018,  986, 1019, 1020, 1021,
+     1022, 1023, 1024, 1025, 1027, 1028, 1029, 1031, 1032, 1033,
+     1034, 1037, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046,
+     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1056, 1057,
+     1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+     1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
+     1090, 1091, 1092, 1093, 1094, 1065, 1095, 1097, 1098, 1099,
+     1100, 1101, 1104, 1105, 1106, 1051, 1098, 1107, 1108, 1109,
+
+     1110, 1111, 1069, 1112, 1113, 1114, 1115, 1117, 1118, 1119,
+     1120, 1121, 1122, 1125, 1128, 1130, 1131, 1132, 1133, 1134,
+     1136, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1147,
+     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
+     1159, 1162, 1134, 1164, 1165, 1166, 1167, 1169, 1170, 1171,
+     1172, 1173, 1174, 1175, 1178, 1179, 1181, 1182, 1183, 1184,
+     1185, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197,
+     1198, 1199, 1200, 1201, 1202, 1204, 1206, 1207, 1208, 1209,
+     1210, 1211, 1212, 1213, 1213, 1214, 1215, 1216, 1217, 1218,
+     1219, 1220, 1221, 1194, 1222, 1223, 1224, 1225, 1226, 1228,
+
+     1229, 1230, 1231, 1232, 1233, 1234, 1236, 1238, 1239, 1240,
+     1241, 1244, 1245, 1248, 1250, 1251, 1252, 1253, 1254, 1250,
+     1255, 1256, 1257, 1258, 1260, 1261, 1264, 1265, 1266, 1267,
+     1269, 1270, 1271, 1272, 1273, 1274, 1275, 1240, 1276, 1277,
+     1278, 1214, 1279, 1280, 1281, 1283, 1284, 1285, 1287, 1289,
+     1290, 1291, 1292, 1293, 1295, 1296, 1297, 1299, 1300, 1301,
+     1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
+     1313, 1314, 1316, 1318, 1320, 1321, 1322, 1323, 1325, 1326,
+     1327, 1328, 1329, 1330, 1332, 1334, 1335, 1336, 1337, 1338,
+     1339, 1340, 1341, 1342, 1344, 1345, 1346, 1347, 1348, 1349,
+
+     1350, 1351, 1352, 1355, 1356, 1357, 1358, 1359, 1361, 1362,
+     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+     1373, 1374, 1376, 1377, 1380, 1381, 1382, 1383, 1384, 1385,
+     1387, 1389, 1390, 1392, 1393, 1395, 1396, 1398, 1400, 1401,
+     1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
+     1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
+     1422, 1423, 1424, 1425, 1426, 1428, 1431, 1432, 1433, 1434,
+     1435, 1436, 1440, 1441, 1442, 1443, 1445, 1446, 1448, 1449,
+     1450, 1451, 1452, 1454, 1455, 1458, 1458, 1458, 1458, 1458,
+     1459, 1459, 1459, 1459, 1459, 1460, 1466, 1460, 1460, 1460,
+
+     1461, 1467, 1461, 1468, 1461, 1462, 1462, 1462, 1462, 1462,
+     1463, 1463, 1463, 1463, 1463, 1464, 1469, 1464, 1464, 1464,
+     1465, 1465, 1465,  729,  728,  727,  726,  725,  724,  723,
+      721,  720,  719,  717,  715,  714,  713,  712,  711,  710,
+      709,  708,  705,  704,  701,  700,  699,  698,  697,  696,
+      695,  694,  693,  692,  691,  690,  689,  688,  687,  686,
+      685,  684,  682,  681,  680,  679,  678,  677,  676,  675,
+      673,  672,  671,  670,  669,  668,  666,  664,  663,  662,
+      661,  660,  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,  628,  627,  623,  622,  621,  618,  617,  616,
+      615,  614,  611,  610,  609,  608,  607,  606,  605,  604,
+      603,  602,  601,  600,  598,  597,  596,  595,  594,  593,
+      592,  591,  590,  588,  587,  585,  584,  583,  582,  581,
+      579,  578,  577,  575,  574,  572,  571,  570,  569,  568,
+      567,  566,  565,  564,  562,  561,  560,  559,  558,  556,
+      555,  554,  553,  552,  551,  550,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
+      534,  533,  532,  531,  530,  524,  522,  519,  518,  516,
+
+      515,  514,  512,  508,  507,  506,  505,  504,  503,  502,
+      501,  500,  499,  498,  497,  496,  495,  494,  492,  491,
+      490,  489,  488,  487,  486,  485,  484,  483,  482,  481,
+      479,  477,  476,  475,  474,  473,  472,  471,  470,  469,
+      468,  467,  466,  464,  463,  462,  461,  460,  459,  458,
+      457,  456,  455,  454,  453,  452,  451,  450,  449,  448,
+      447,  446,  445,  443,  442,  441,  439,  438,  437,  436,
+      435,  434,  432,  431,  430,  429,  428,  427,  425,  424,
+      423,  422,  421,  420,  418,  417,  412,  411,  409,  408,
+      407,  406,  405,  402,  399,  397,  396,  395,  394,  392,
+
+      391,  390,  389,  388,  387,  386,  385,  384,  382,  381,
+      380,  378,  377,  376,  375,  374,  373,  372,  370,  369,
+      367,  366,  365,  364,  363,  362,  361,  360,  359,  355,
+      354,  353,  352,  351,  349,  348,  347,  346,  345,  344,
+      343,  342,  341,  340,  339,  337,  336,  335,  334,  333,
+      332,  331,  330,  329,  328,  327,  326,  324,  323,  322,
+      321,  320,  317,  316,  315,  314,  313,  312,  308,  306,
+      303,  301,  298,  295,  288,  287,  286,  285,  284,  283,
+      281,  280,  279,  278,  277,  276,  275,  274,  273,  272,
+      271,  270,  269,  267,  266,  265,  264,  263,  262,  261,
+
+      260,  259,  258,  257,  256,  255,  254,  253,  251,  250,
+      249,  247,  246,  245,  244,  242,  241,  240,  239,  238,
+      237,  236,  235,  234,  232,  231,  230,  229,  228,  227,
+      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
+      216,  215,  214,  213,  212,  211,  209,  208,  207,  206,
+      204,  201,  199,  197,  195,  194,  189,  188,  184,  176,
+      175,  174,  173,  172,  171,  169,  168,  167,  166,  164,
+      162,  160,  158,  157,  155,  154,  153,  152,  151,  149,
+      148,  147,  146,  144,  143,  142,  141,  140,  139,  138,
+      136,  135,  133,  129,  128,  127,  125,  124,  123,  121,
+
+      120,  116,  110,  106,  105,  104,   98,   97,   78,   73,
+       67,   64,   50,   49,   48,   43,   41,   39,   38,   24,
+       14,   11, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
+     1457, 1457, 1457, 1457
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1663,7 +1670,7 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[178] =
+static const flex_int16_t yy_rule_linenum[179] =
     {   0,
       147,  149,  151,  156,  157,  162,  163,  164,  176,  179,
       184,  191,  200,  209,  218,  227,  236,  245,  254,  263,
@@ -1681,9 +1688,9 @@ static const flex_int16_t yy_rule_linenum[178] =
      1278, 1288, 1297, 1308, 1318, 1327, 1337, 1347, 1356, 1365,
      1374, 1383, 1393, 1402, 1412, 1421, 1430, 1439, 1448, 1457,
      1466, 1475, 1484, 1493, 1502, 1511, 1520, 1529, 1538, 1547,
-     1556, 1565, 1574, 1583, 1592, 1601, 1610, 1619, 1628, 1638,
-     1737, 1742, 1747, 1752, 1753, 1754, 1755, 1756, 1757, 1759,
-     1777, 1790, 1795, 1799, 1801, 1803, 1805
+     1556, 1565, 1574, 1583, 1592, 1601, 1610, 1619, 1628, 1637,
+     1647, 1746, 1751, 1756, 1761, 1762, 1763, 1764, 1765, 1766,
+     1768, 1786, 1799, 1804, 1808, 1810, 1812, 1814
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1736,7 +1743,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 1740 "dhcp6_lexer.cc"
+#line 1747 "dhcp6_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1762,8 +1769,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1766 "dhcp6_lexer.cc"
-#line 1767 "dhcp6_lexer.cc"
+#line 1773 "dhcp6_lexer.cc"
+#line 1774 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2093,7 +2100,7 @@ YY_DECL
     }
 
 
-#line 2097 "dhcp6_lexer.cc"
+#line 2104 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2122,13 +2129,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 >= 1446 )
+                               if ( yy_current_state >= 1458 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1445 );
+               while ( yy_current_state != 1457 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2147,13 +2154,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 < 178 )
+                       else if ( yy_act < 179 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 178 )
+                       else if ( yy_act == 179 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 179 )
+                       else if ( yy_act == 180 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -4102,15 +4109,27 @@ YY_RULE_SETUP
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
-        return isc::dhcp::Dhcp6Parser::make_DHCP_DDNS(driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_QUEUE_CONTROL(driver.loc_);
     default:
-        return isc::dhcp::Dhcp6Parser::make_STRING("dhcp-ddns", driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_STRING("queue-control", driver.loc_);
     }
 }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 1610 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+        return isc::dhcp::Dhcp6Parser::make_DHCP_DDNS(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("dhcp-ddns", driver.loc_);
+    }
+}
+       YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 1619 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4120,9 +4139,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 158:
+case 159:
 YY_RULE_SETUP
-#line 1619 "dhcp6_lexer.ll"
+#line 1628 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4132,9 +4151,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 159:
+case 160:
 YY_RULE_SETUP
-#line 1628 "dhcp6_lexer.ll"
+#line 1637 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -4144,9 +4163,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 160:
+case 161:
 YY_RULE_SETUP
-#line 1638 "dhcp6_lexer.ll"
+#line 1647 "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.
@@ -4246,65 +4265,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 161:
-/* rule 161 can match eol */
+case 162:
+/* rule 162 can match eol */
 YY_RULE_SETUP
-#line 1737 "dhcp6_lexer.ll"
+#line 1746 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 162:
-/* rule 162 can match eol */
+case 163:
+/* rule 163 can match eol */
 YY_RULE_SETUP
-#line 1742 "dhcp6_lexer.ll"
+#line 1751 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 163:
+case 164:
 YY_RULE_SETUP
-#line 1747 "dhcp6_lexer.ll"
+#line 1756 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 1752 "dhcp6_lexer.ll"
+#line 1761 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 165:
+case 166:
 YY_RULE_SETUP
-#line 1753 "dhcp6_lexer.ll"
+#line 1762 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 166:
+case 167:
 YY_RULE_SETUP
-#line 1754 "dhcp6_lexer.ll"
+#line 1763 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 1755 "dhcp6_lexer.ll"
+#line 1764 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 168:
+case 169:
 YY_RULE_SETUP
-#line 1756 "dhcp6_lexer.ll"
+#line 1765 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 169:
+case 170:
 YY_RULE_SETUP
-#line 1757 "dhcp6_lexer.ll"
+#line 1766 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 170:
+case 171:
 YY_RULE_SETUP
-#line 1759 "dhcp6_lexer.ll"
+#line 1768 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -4323,9 +4342,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 171:
+case 172:
 YY_RULE_SETUP
-#line 1777 "dhcp6_lexer.ll"
+#line 1786 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -4339,43 +4358,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 172:
+case 173:
 YY_RULE_SETUP
-#line 1790 "dhcp6_lexer.ll"
+#line 1799 "dhcp6_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 173:
+case 174:
 YY_RULE_SETUP
-#line 1795 "dhcp6_lexer.ll"
+#line 1804 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 174:
+case 175:
 YY_RULE_SETUP
-#line 1799 "dhcp6_lexer.ll"
+#line 1808 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 175:
+case 176:
 YY_RULE_SETUP
-#line 1801 "dhcp6_lexer.ll"
+#line 1810 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 176:
+case 177:
 YY_RULE_SETUP
-#line 1803 "dhcp6_lexer.ll"
+#line 1812 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 177:
+case 178:
 YY_RULE_SETUP
-#line 1805 "dhcp6_lexer.ll"
+#line 1814 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1807 "dhcp6_lexer.ll"
+#line 1816 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -4399,12 +4418,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 178:
+case 179:
 YY_RULE_SETUP
-#line 1830 "dhcp6_lexer.ll"
+#line 1839 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4408 "dhcp6_lexer.cc"
+#line 4427 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4723,7 +4742,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 >= 1446 )
+                       if ( yy_current_state >= 1458 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4756,11 +4775,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 >= 1446 )
+               if ( yy_current_state >= 1458 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1445);
+       yy_is_jam = (yy_current_state == 1457);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -5509,7 +5528,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1830 "dhcp6_lexer.ll"
+#line 1839 "dhcp6_lexer.ll"
 
 
 using namespace isc::dhcp;
index 810d2f3d3426a6d374ac6cc74681c4c0b39bd138..48a19b4c49333a607450370112f5162955b7b1f3 100644 (file)
@@ -1597,6 +1597,15 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"queue-control\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DHCP6:
+        return isc::dhcp::Dhcp6Parser::make_QUEUE_CONTROL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("queue-control", driver.loc_);
+    }
+}
+
 \"dhcp-ddns\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
index aa6a6fe5fc7e34fa83d8925a51ba950a50ea29be..0207c5c4c202bf3ef6c0e3771c02436ae7f56f8b 100644 (file)
@@ -90,6 +90,11 @@ If this is an initial configuration (during server's startup) the server
 will fail to start. If this is a dynamic reconfiguration attempt the
 server will continue to use an old configuration.
 
+% DHCP6_CONFIG_PACKET_QUEUE DHCPv6 packet queue info after configuration: %1
+This debug message is emitted during DHCPv6 server configuration, immediately
+after configuring the DHCPv6 packet queue.  The information shown depends
+upon the packet queue type selected.
+
 % DHCP6_CONFIG_RECEIVED received configuration: %1
 A debug message listing the configuration received by the DHCPv6 server.
 The source of that configuration depends on used configuration backend.
index ba6287114a916985d0743e4a44c146f887fb5878..2b9a294983ded765e8190bcbd50a910704411ae2 100644 (file)
@@ -253,29 +253,29 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -294,29 +294,29 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -356,79 +356,79 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 169: // "constant string"
+            case 170: // "constant string"
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 364 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 371 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 378 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 385 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 190: // value
+      case 191: // value
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 392 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 194: // map_value
+      case 195: // map_value
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 399 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 246: // db_type
+      case 247: // db_type
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 406 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 335: // hr_mode
+      case 336: // hr_mode
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 471: // duid_type
+      case 472: // duid_type
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 504: // ncr_protocol_value
+      case 507: // ncr_protocol_value
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 512: // replace_client_name_value
+      case 515: // replace_client_name_value
 
-#line 246 "dhcp6_parser.yy" // lalr1.cc:636
+#line 248 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 434 "dhcp6_parser.cc" // lalr1.cc:636
         break;
@@ -630,29 +630,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -674,139 +674,139 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 255 "dhcp6_parser.yy" // lalr1.cc:859
+#line 257 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 256 "dhcp6_parser.yy" // lalr1.cc:859
+#line 258 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 257 "dhcp6_parser.yy" // lalr1.cc:859
+#line 259 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 258 "dhcp6_parser.yy" // lalr1.cc:859
+#line 260 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 259 "dhcp6_parser.yy" // lalr1.cc:859
+#line 261 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
 #line 704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 260 "dhcp6_parser.yy" // lalr1.cc:859
+#line 262 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 710 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 261 "dhcp6_parser.yy" // lalr1.cc:859
+#line 263 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
 #line 716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 262 "dhcp6_parser.yy" // lalr1.cc:859
+#line 264 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 263 "dhcp6_parser.yy" // lalr1.cc:859
+#line 265 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 728 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 264 "dhcp6_parser.yy" // lalr1.cc:859
+#line 266 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 265 "dhcp6_parser.yy" // lalr1.cc:859
+#line 267 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 266 "dhcp6_parser.yy" // lalr1.cc:859
+#line 268 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 746 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 267 "dhcp6_parser.yy" // lalr1.cc:859
+#line 269 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 268 "dhcp6_parser.yy" // lalr1.cc:859
+#line 270 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
 #line 758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 269 "dhcp6_parser.yy" // lalr1.cc:859
+#line 271 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG_CONTROL; }
 #line 764 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 277 "dhcp6_parser.yy" // lalr1.cc:859
+#line 279 "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 770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 278 "dhcp6_parser.yy" // lalr1.cc:859
+#line 280 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 279 "dhcp6_parser.yy" // lalr1.cc:859
+#line 281 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 782 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 280 "dhcp6_parser.yy" // lalr1.cc:859
+#line 282 "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 788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 36:
-#line 281 "dhcp6_parser.yy" // lalr1.cc:859
+#line 283 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 794 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 37:
-#line 282 "dhcp6_parser.yy" // lalr1.cc:859
+#line 284 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 38:
-#line 283 "dhcp6_parser.yy" // lalr1.cc:859
+#line 285 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 806 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 39:
-#line 286 "dhcp6_parser.yy" // lalr1.cc:859
+#line 288 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -815,7 +815,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 40:
-#line 291 "dhcp6_parser.yy" // lalr1.cc:859
+#line 293 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -826,7 +826,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 41:
-#line 296 "dhcp6_parser.yy" // lalr1.cc:859
+#line 298 "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
@@ -836,13 +836,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 42:
-#line 302 "dhcp6_parser.yy" // lalr1.cc:859
+#line 304 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 842 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 45:
-#line 309 "dhcp6_parser.yy" // lalr1.cc:859
+#line 311 "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 > ());
@@ -851,7 +851,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 46:
-#line 313 "dhcp6_parser.yy" // lalr1.cc:859
+#line 315 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -861,7 +861,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 47:
-#line 320 "dhcp6_parser.yy" // lalr1.cc:859
+#line 322 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -870,7 +870,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 48:
-#line 323 "dhcp6_parser.yy" // lalr1.cc:859
+#line 325 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -878,7 +878,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51:
-#line 331 "dhcp6_parser.yy" // lalr1.cc:859
+#line 333 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -887,7 +887,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52:
-#line 335 "dhcp6_parser.yy" // lalr1.cc:859
+#line 337 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -896,7 +896,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 53:
-#line 342 "dhcp6_parser.yy" // lalr1.cc:859
+#line 344 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -904,7 +904,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 54:
-#line 344 "dhcp6_parser.yy" // lalr1.cc:859
+#line 346 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -913,7 +913,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 353 "dhcp6_parser.yy" // lalr1.cc:859
+#line 355 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -922,7 +922,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58:
-#line 357 "dhcp6_parser.yy" // lalr1.cc:859
+#line 359 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -931,7 +931,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59:
-#line 368 "dhcp6_parser.yy" // lalr1.cc:859
+#line 370 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -942,7 +942,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 60:
-#line 378 "dhcp6_parser.yy" // lalr1.cc:859
+#line 380 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -953,7 +953,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 61:
-#line 383 "dhcp6_parser.yy" // lalr1.cc:859
+#line 385 "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
@@ -966,7 +966,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 70:
-#line 406 "dhcp6_parser.yy" // lalr1.cc:859
+#line 408 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -979,7 +979,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 71:
-#line 413 "dhcp6_parser.yy" // lalr1.cc:859
+#line 415 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -989,7 +989,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 72:
-#line 421 "dhcp6_parser.yy" // lalr1.cc:859
+#line 423 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -999,7 +999,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 73:
-#line 425 "dhcp6_parser.yy" // lalr1.cc:859
+#line 427 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
@@ -1007,8 +1007,8 @@ namespace isc { namespace dhcp {
 #line 1008 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 106:
-#line 468 "dhcp6_parser.yy" // lalr1.cc:859
+  case 107:
+#line 471 "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);
@@ -1016,8 +1016,8 @@ namespace isc { namespace dhcp {
 #line 1017 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 107:
-#line 473 "dhcp6_parser.yy" // lalr1.cc:859
+  case 108:
+#line 476 "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);
@@ -1025,8 +1025,8 @@ namespace isc { namespace dhcp {
 #line 1026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 108:
-#line 478 "dhcp6_parser.yy" // lalr1.cc:859
+  case 109:
+#line 481 "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);
@@ -1034,8 +1034,8 @@ namespace isc { namespace dhcp {
 #line 1035 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 109:
-#line 483 "dhcp6_parser.yy" // lalr1.cc:859
+  case 110:
+#line 486 "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);
@@ -1043,8 +1043,8 @@ namespace isc { namespace dhcp {
 #line 1044 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 488 "dhcp6_parser.yy" // lalr1.cc:859
+  case 111:
+#line 491 "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);
@@ -1052,16 +1052,16 @@ namespace isc { namespace dhcp {
 #line 1053 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 493 "dhcp6_parser.yy" // lalr1.cc:859
+  case 112:
+#line 496 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1061 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 112:
-#line 495 "dhcp6_parser.yy" // lalr1.cc:859
+  case 113:
+#line 498 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
@@ -1070,8 +1070,8 @@ namespace isc { namespace dhcp {
 #line 1071 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 113:
-#line 501 "dhcp6_parser.yy" // lalr1.cc:859
+  case 114:
+#line 504 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
@@ -1081,8 +1081,8 @@ namespace isc { namespace dhcp {
 #line 1082 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 114:
-#line 506 "dhcp6_parser.yy" // lalr1.cc:859
+  case 115:
+#line 509 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1091,8 +1091,8 @@ namespace isc { namespace dhcp {
 #line 1092 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 115:
-#line 512 "dhcp6_parser.yy" // lalr1.cc:859
+  case 116:
+#line 515 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1101,8 +1101,8 @@ namespace isc { namespace dhcp {
 #line 1102 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 116:
-#line 516 "dhcp6_parser.yy" // lalr1.cc:859
+  case 117:
+#line 519 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
@@ -1110,8 +1110,8 @@ namespace isc { namespace dhcp {
 #line 1111 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 532 "dhcp6_parser.yy" // lalr1.cc:859
+  case 125:
+#line 535 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
@@ -1121,8 +1121,8 @@ namespace isc { namespace dhcp {
 #line 1122 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 125:
-#line 537 "dhcp6_parser.yy" // lalr1.cc:859
+  case 126:
+#line 540 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1130,8 +1130,8 @@ namespace isc { namespace dhcp {
 #line 1131 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 126:
-#line 542 "dhcp6_parser.yy" // lalr1.cc:859
+  case 127:
+#line 545 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
@@ -1139,8 +1139,8 @@ namespace isc { namespace dhcp {
 #line 1140 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 548 "dhcp6_parser.yy" // lalr1.cc:859
+  case 128:
+#line 551 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
@@ -1150,8 +1150,8 @@ namespace isc { namespace dhcp {
 #line 1151 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 553 "dhcp6_parser.yy" // lalr1.cc:859
+  case 129:
+#line 556 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1161,8 +1161,8 @@ namespace isc { namespace dhcp {
 #line 1162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 560 "dhcp6_parser.yy" // lalr1.cc:859
+  case 130:
+#line 563 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
@@ -1172,8 +1172,8 @@ namespace isc { namespace dhcp {
 #line 1173 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 565 "dhcp6_parser.yy" // lalr1.cc:859
+  case 131:
+#line 568 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1183,8 +1183,8 @@ namespace isc { namespace dhcp {
 #line 1184 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 572 "dhcp6_parser.yy" // lalr1.cc:859
+  case 132:
+#line 575 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-databases", l);
@@ -1194,8 +1194,8 @@ namespace isc { namespace dhcp {
 #line 1195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 577 "dhcp6_parser.yy" // lalr1.cc:859
+  case 133:
+#line 580 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1203,8 +1203,8 @@ namespace isc { namespace dhcp {
 #line 1204 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 590 "dhcp6_parser.yy" // lalr1.cc:859
+  case 138:
+#line 593 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1213,8 +1213,8 @@ namespace isc { namespace dhcp {
 #line 1214 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 594 "dhcp6_parser.yy" // lalr1.cc:859
+  case 139:
+#line 597 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1223,16 +1223,16 @@ namespace isc { namespace dhcp {
 #line 1224 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 624 "dhcp6_parser.yy" // lalr1.cc:859
+  case 160:
+#line 627 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
 #line 1232 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 626 "dhcp6_parser.yy" // lalr1.cc:859
+  case 161:
+#line 629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1240,40 +1240,40 @@ namespace isc { namespace dhcp {
 #line 1241 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 161:
-#line 631 "dhcp6_parser.yy" // lalr1.cc:859
+  case 162:
+#line 634 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1247 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 162:
-#line 632 "dhcp6_parser.yy" // lalr1.cc:859
+  case 163:
+#line 635 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1253 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 633 "dhcp6_parser.yy" // lalr1.cc:859
+  case 164:
+#line 636 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1259 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 164:
-#line 634 "dhcp6_parser.yy" // lalr1.cc:859
+  case 165:
+#line 637 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 #line 1265 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 637 "dhcp6_parser.yy" // lalr1.cc:859
+  case 166:
+#line 640 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1273 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 166:
-#line 639 "dhcp6_parser.yy" // lalr1.cc:859
+  case 167:
+#line 642 "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);
@@ -1282,16 +1282,16 @@ namespace isc { namespace dhcp {
 #line 1283 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 167:
-#line 645 "dhcp6_parser.yy" // lalr1.cc:859
+  case 168:
+#line 648 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 168:
-#line 647 "dhcp6_parser.yy" // lalr1.cc:859
+  case 169:
+#line 650 "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);
@@ -1300,16 +1300,16 @@ namespace isc { namespace dhcp {
 #line 1301 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 169:
-#line 653 "dhcp6_parser.yy" // lalr1.cc:859
+  case 170:
+#line 656 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1309 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 655 "dhcp6_parser.yy" // lalr1.cc:859
+  case 171:
+#line 658 "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);
@@ -1318,8 +1318,8 @@ namespace isc { namespace dhcp {
 #line 1319 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 661 "dhcp6_parser.yy" // lalr1.cc:859
+  case 172:
+#line 664 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
@@ -1327,16 +1327,16 @@ namespace isc { namespace dhcp {
 #line 1328 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 666 "dhcp6_parser.yy" // lalr1.cc:859
+  case 173:
+#line 669 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1336 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 668 "dhcp6_parser.yy" // lalr1.cc:859
+  case 174:
+#line 671 "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);
@@ -1345,8 +1345,8 @@ namespace isc { namespace dhcp {
 #line 1346 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 674 "dhcp6_parser.yy" // lalr1.cc:859
+  case 175:
+#line 677 "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);
@@ -1354,8 +1354,8 @@ namespace isc { namespace dhcp {
 #line 1355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 679 "dhcp6_parser.yy" // lalr1.cc:859
+  case 176:
+#line 682 "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);
@@ -1363,8 +1363,8 @@ namespace isc { namespace dhcp {
 #line 1364 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 684 "dhcp6_parser.yy" // lalr1.cc:859
+  case 177:
+#line 687 "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);
@@ -1372,8 +1372,8 @@ namespace isc { namespace dhcp {
 #line 1373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 689 "dhcp6_parser.yy" // lalr1.cc:859
+  case 178:
+#line 692 "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);
@@ -1381,8 +1381,8 @@ namespace isc { namespace dhcp {
 #line 1382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 694 "dhcp6_parser.yy" // lalr1.cc:859
+  case 179:
+#line 697 "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("reconnect-wait-time", n);
@@ -1390,8 +1390,8 @@ namespace isc { namespace dhcp {
 #line 1391 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 179:
-#line 699 "dhcp6_parser.yy" // lalr1.cc:859
+  case 180:
+#line 702 "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("request-timeout", n);
@@ -1399,8 +1399,8 @@ namespace isc { namespace dhcp {
 #line 1400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 180:
-#line 704 "dhcp6_parser.yy" // lalr1.cc:859
+  case 181:
+#line 707 "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("tcp-keepalive", n);
@@ -1408,8 +1408,8 @@ namespace isc { namespace dhcp {
 #line 1409 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 181:
-#line 709 "dhcp6_parser.yy" // lalr1.cc:859
+  case 182:
+#line 712 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-nodelay", n);
@@ -1417,16 +1417,16 @@ namespace isc { namespace dhcp {
 #line 1418 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 182:
-#line 714 "dhcp6_parser.yy" // lalr1.cc:859
+  case 183:
+#line 717 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1426 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 716 "dhcp6_parser.yy" // lalr1.cc:859
+  case 184:
+#line 719 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
@@ -1435,8 +1435,8 @@ namespace isc { namespace dhcp {
 #line 1436 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 722 "dhcp6_parser.yy" // lalr1.cc:859
+  case 185:
+#line 725 "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("max-reconnect-tries", n);
@@ -1444,16 +1444,16 @@ namespace isc { namespace dhcp {
 #line 1445 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 727 "dhcp6_parser.yy" // lalr1.cc:859
+  case 186:
+#line 730 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1453 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 729 "dhcp6_parser.yy" // lalr1.cc:859
+  case 187:
+#line 732 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
@@ -1462,8 +1462,8 @@ namespace isc { namespace dhcp {
 #line 1463 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 735 "dhcp6_parser.yy" // lalr1.cc:859
+  case 188:
+#line 738 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sanity-checks", m);
@@ -1473,8 +1473,8 @@ namespace isc { namespace dhcp {
 #line 1474 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 740 "dhcp6_parser.yy" // lalr1.cc:859
+  case 189:
+#line 743 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1482,16 +1482,16 @@ namespace isc { namespace dhcp {
 #line 1483 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 192:
-#line 750 "dhcp6_parser.yy" // lalr1.cc:859
+  case 193:
+#line 753 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1491 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 193:
-#line 752 "dhcp6_parser.yy" // lalr1.cc:859
+  case 194:
+#line 755 "dhcp6_parser.yy" // lalr1.cc:859
     {
 
     if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
@@ -1510,8 +1510,8 @@ namespace isc { namespace dhcp {
 #line 1511 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 768 "dhcp6_parser.yy" // lalr1.cc:859
+  case 195:
+#line 771 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
@@ -1521,8 +1521,8 @@ namespace isc { namespace dhcp {
 #line 1522 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 773 "dhcp6_parser.yy" // lalr1.cc:859
+  case 196:
+#line 776 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1530,8 +1530,8 @@ namespace isc { namespace dhcp {
 #line 1531 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 786 "dhcp6_parser.yy" // lalr1.cc:859
+  case 201:
+#line 789 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
@@ -1539,8 +1539,8 @@ namespace isc { namespace dhcp {
 #line 1540 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 201:
-#line 791 "dhcp6_parser.yy" // lalr1.cc:859
+  case 202:
+#line 794 "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);
@@ -1548,8 +1548,8 @@ namespace isc { namespace dhcp {
 #line 1549 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 202:
-#line 796 "dhcp6_parser.yy" // lalr1.cc:859
+  case 203:
+#line 799 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
@@ -1559,8 +1559,8 @@ namespace isc { namespace dhcp {
 #line 1560 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 801 "dhcp6_parser.yy" // lalr1.cc:859
+  case 204:
+#line 804 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1568,8 +1568,8 @@ namespace isc { namespace dhcp {
 #line 1569 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 815 "dhcp6_parser.yy" // lalr1.cc:859
+  case 210:
+#line 818 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
@@ -1577,8 +1577,8 @@ namespace isc { namespace dhcp {
 #line 1578 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 820 "dhcp6_parser.yy" // lalr1.cc:859
+  case 211:
+#line 823 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
@@ -1586,8 +1586,8 @@ namespace isc { namespace dhcp {
 #line 1587 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 827 "dhcp6_parser.yy" // lalr1.cc:859
+  case 212:
+#line 830 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
@@ -1597,8 +1597,8 @@ namespace isc { namespace dhcp {
 #line 1598 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 832 "dhcp6_parser.yy" // lalr1.cc:859
+  case 213:
+#line 835 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1606,8 +1606,8 @@ namespace isc { namespace dhcp {
 #line 1607 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 837 "dhcp6_parser.yy" // lalr1.cc:859
+  case 214:
+#line 840 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
@@ -1617,8 +1617,8 @@ namespace isc { namespace dhcp {
 #line 1618 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 842 "dhcp6_parser.yy" // lalr1.cc:859
+  case 215:
+#line 845 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1626,8 +1626,8 @@ namespace isc { namespace dhcp {
 #line 1627 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 219:
-#line 855 "dhcp6_parser.yy" // lalr1.cc:859
+  case 220:
+#line 858 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1636,8 +1636,8 @@ namespace isc { namespace dhcp {
 #line 1637 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 220:
-#line 859 "dhcp6_parser.yy" // lalr1.cc:859
+  case 221:
+#line 862 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1646,8 +1646,8 @@ namespace isc { namespace dhcp {
 #line 1647 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 221:
-#line 865 "dhcp6_parser.yy" // lalr1.cc:859
+  case 222:
+#line 868 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1656,8 +1656,8 @@ namespace isc { namespace dhcp {
 #line 1657 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 869 "dhcp6_parser.yy" // lalr1.cc:859
+  case 223:
+#line 872 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1666,16 +1666,16 @@ namespace isc { namespace dhcp {
 #line 1667 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 228:
-#line 884 "dhcp6_parser.yy" // lalr1.cc:859
+  case 229:
+#line 887 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1675 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 229:
-#line 886 "dhcp6_parser.yy" // lalr1.cc:859
+  case 230:
+#line 889 "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);
@@ -1684,16 +1684,16 @@ namespace isc { namespace dhcp {
 #line 1685 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 230:
-#line 892 "dhcp6_parser.yy" // lalr1.cc:859
+  case 231:
+#line 895 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1693 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 231:
-#line 894 "dhcp6_parser.yy" // lalr1.cc:859
+  case 232:
+#line 897 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1701,8 +1701,8 @@ namespace isc { namespace dhcp {
 #line 1702 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 232:
-#line 900 "dhcp6_parser.yy" // lalr1.cc:859
+  case 233:
+#line 903 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
@@ -1712,8 +1712,8 @@ namespace isc { namespace dhcp {
 #line 1713 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 233:
-#line 905 "dhcp6_parser.yy" // lalr1.cc:859
+  case 234:
+#line 908 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
@@ -1722,8 +1722,8 @@ namespace isc { namespace dhcp {
 #line 1723 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 923 "dhcp6_parser.yy" // lalr1.cc:859
+  case 243:
+#line 926 "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("reclaim-timer-wait-time", value);
@@ -1731,8 +1731,8 @@ namespace isc { namespace dhcp {
 #line 1732 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 928 "dhcp6_parser.yy" // lalr1.cc:859
+  case 244:
+#line 931 "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("flush-reclaimed-timer-wait-time", value);
@@ -1740,8 +1740,8 @@ namespace isc { namespace dhcp {
 #line 1741 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 244:
-#line 933 "dhcp6_parser.yy" // lalr1.cc:859
+  case 245:
+#line 936 "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("hold-reclaimed-time", value);
@@ -1749,8 +1749,8 @@ namespace isc { namespace dhcp {
 #line 1750 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 938 "dhcp6_parser.yy" // lalr1.cc:859
+  case 246:
+#line 941 "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("max-reclaim-leases", value);
@@ -1758,8 +1758,8 @@ namespace isc { namespace dhcp {
 #line 1759 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 943 "dhcp6_parser.yy" // lalr1.cc:859
+  case 247:
+#line 946 "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("max-reclaim-time", value);
@@ -1767,8 +1767,8 @@ namespace isc { namespace dhcp {
 #line 1768 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 948 "dhcp6_parser.yy" // lalr1.cc:859
+  case 248:
+#line 951 "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("unwarned-reclaim-cycles", value);
@@ -1776,8 +1776,8 @@ namespace isc { namespace dhcp {
 #line 1777 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 956 "dhcp6_parser.yy" // lalr1.cc:859
+  case 249:
+#line 959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
@@ -1787,8 +1787,8 @@ namespace isc { namespace dhcp {
 #line 1788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 961 "dhcp6_parser.yy" // lalr1.cc:859
+  case 250:
+#line 964 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1796,8 +1796,8 @@ namespace isc { namespace dhcp {
 #line 1797 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 981 "dhcp6_parser.yy" // lalr1.cc:859
+  case 255:
+#line 984 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1806,8 +1806,8 @@ namespace isc { namespace dhcp {
 #line 1807 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 985 "dhcp6_parser.yy" // lalr1.cc:859
+  case 256:
+#line 988 "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.
@@ -1832,8 +1832,8 @@ namespace isc { namespace dhcp {
 #line 1833 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 1007 "dhcp6_parser.yy" // lalr1.cc:859
+  case 257:
+#line 1010 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1842,8 +1842,8 @@ namespace isc { namespace dhcp {
 #line 1843 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 257:
-#line 1011 "dhcp6_parser.yy" // lalr1.cc:859
+  case 258:
+#line 1014 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1852,16 +1852,16 @@ namespace isc { namespace dhcp {
 #line 1853 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 280:
-#line 1045 "dhcp6_parser.yy" // lalr1.cc:859
+  case 281:
+#line 1048 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1861 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1047 "dhcp6_parser.yy" // lalr1.cc:859
+  case 282:
+#line 1050 "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);
@@ -1870,16 +1870,16 @@ namespace isc { namespace dhcp {
 #line 1871 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
+  case 283:
+#line 1056 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1879 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1055 "dhcp6_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1058 "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);
@@ -1888,16 +1888,16 @@ namespace isc { namespace dhcp {
 #line 1889 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1061 "dhcp6_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1064 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1897 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1063 "dhcp6_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1066 "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);
@@ -1906,16 +1906,16 @@ namespace isc { namespace dhcp {
 #line 1907 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1069 "dhcp6_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1915 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1071 "dhcp6_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1074 "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);
@@ -1924,8 +1924,8 @@ namespace isc { namespace dhcp {
 #line 1925 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1077 "dhcp6_parser.yy" // lalr1.cc:859
+  case 289:
+#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("require-client-classes", c);
@@ -1935,8 +1935,8 @@ namespace isc { namespace dhcp {
 #line 1936 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1082 "dhcp6_parser.yy" // lalr1.cc:859
+  case 290:
+#line 1085 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1944,16 +1944,16 @@ namespace isc { namespace dhcp {
 #line 1945 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1087 "dhcp6_parser.yy" // lalr1.cc:859
+  case 291:
+#line 1090 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
 #line 1953 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1089 "dhcp6_parser.yy" // lalr1.cc:859
+  case 292:
+#line 1092 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1961,26 +1961,26 @@ namespace isc { namespace dhcp {
 #line 1962 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1094 "dhcp6_parser.yy" // lalr1.cc:859
+  case 293:
+#line 1097 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
 #line 1968 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 293:
-#line 1095 "dhcp6_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1098 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
 #line 1974 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 294:
-#line 1096 "dhcp6_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1099 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
 #line 1980 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 295:
-#line 1099 "dhcp6_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1102 "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);
@@ -1988,8 +1988,8 @@ namespace isc { namespace dhcp {
 #line 1989 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 296:
-#line 1104 "dhcp6_parser.yy" // lalr1.cc:859
+  case 297:
+#line 1107 "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);
@@ -1997,8 +1997,8 @@ namespace isc { namespace dhcp {
 #line 1998 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1112 "dhcp6_parser.yy" // lalr1.cc:859
+  case 298:
+#line 1115 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
@@ -2008,8 +2008,8 @@ namespace isc { namespace dhcp {
 #line 2009 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 298:
-#line 1117 "dhcp6_parser.yy" // lalr1.cc:859
+  case 299:
+#line 1120 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2017,8 +2017,8 @@ namespace isc { namespace dhcp {
 #line 2018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1132 "dhcp6_parser.yy" // lalr1.cc:859
+  case 304:
+#line 1135 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2027,16 +2027,16 @@ namespace isc { namespace dhcp {
 #line 2028 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 304:
-#line 1136 "dhcp6_parser.yy" // lalr1.cc:859
+  case 305:
+#line 1139 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
 #line 2036 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 324:
-#line 1167 "dhcp6_parser.yy" // lalr1.cc:859
+  case 325:
+#line 1170 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
@@ -2046,8 +2046,8 @@ namespace isc { namespace dhcp {
 #line 2047 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 325:
-#line 1172 "dhcp6_parser.yy" // lalr1.cc:859
+  case 326:
+#line 1175 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2055,8 +2055,8 @@ namespace isc { namespace dhcp {
 #line 2056 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1180 "dhcp6_parser.yy" // lalr1.cc:859
+  case 327:
+#line 1183 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -2064,16 +2064,16 @@ namespace isc { namespace dhcp {
 #line 2065 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1183 "dhcp6_parser.yy" // lalr1.cc:859
+  case 328:
+#line 1186 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
 #line 2073 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1199 "dhcp6_parser.yy" // lalr1.cc:859
+  case 333:
+#line 1202 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2082,8 +2082,8 @@ namespace isc { namespace dhcp {
 #line 2083 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1203 "dhcp6_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1206 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2094,8 +2094,8 @@ namespace isc { namespace dhcp {
 #line 2095 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1214 "dhcp6_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1217 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2104,8 +2104,8 @@ namespace isc { namespace dhcp {
 #line 2105 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1218 "dhcp6_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1221 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2116,8 +2116,8 @@ namespace isc { namespace dhcp {
 #line 2117 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1250 "dhcp6_parser.yy" // lalr1.cc:859
+  case 352:
+#line 1253 "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);
@@ -2125,16 +2125,16 @@ namespace isc { namespace dhcp {
 #line 2126 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
+  case 354:
+#line 1260 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2134 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1259 "dhcp6_parser.yy" // lalr1.cc:859
+  case 355:
+#line 1262 "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);
@@ -2143,16 +2143,16 @@ namespace isc { namespace dhcp {
 #line 2144 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1265 "dhcp6_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1268 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2152 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1267 "dhcp6_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1270 "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);
@@ -2161,16 +2161,16 @@ namespace isc { namespace dhcp {
 #line 2162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 357:
-#line 1273 "dhcp6_parser.yy" // lalr1.cc:859
+  case 358:
+#line 1276 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2170 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1275 "dhcp6_parser.yy" // lalr1.cc:859
+  case 359:
+#line 1278 "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);
@@ -2179,16 +2179,16 @@ namespace isc { namespace dhcp {
 #line 2180 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 360:
-#line 1283 "dhcp6_parser.yy" // lalr1.cc:859
+  case 361:
+#line 1286 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2188 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 361:
-#line 1285 "dhcp6_parser.yy" // lalr1.cc:859
+  case 362:
+#line 1288 "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);
@@ -2197,8 +2197,8 @@ namespace isc { namespace dhcp {
 #line 2198 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1291 "dhcp6_parser.yy" // lalr1.cc:859
+  case 363:
+#line 1294 "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);
@@ -2206,8 +2206,8 @@ namespace isc { namespace dhcp {
 #line 2207 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1300 "dhcp6_parser.yy" // lalr1.cc:859
+  case 364:
+#line 1303 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
@@ -2217,8 +2217,8 @@ namespace isc { namespace dhcp {
 #line 2218 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1305 "dhcp6_parser.yy" // lalr1.cc:859
+  case 365:
+#line 1308 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2226,8 +2226,8 @@ namespace isc { namespace dhcp {
 #line 2227 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 369:
-#line 1324 "dhcp6_parser.yy" // lalr1.cc:859
+  case 370:
+#line 1327 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2236,8 +2236,8 @@ namespace isc { namespace dhcp {
 #line 2237 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 370:
-#line 1328 "dhcp6_parser.yy" // lalr1.cc:859
+  case 371:
+#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
@@ -2245,8 +2245,8 @@ namespace isc { namespace dhcp {
 #line 2246 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 371:
-#line 1336 "dhcp6_parser.yy" // lalr1.cc:859
+  case 372:
+#line 1339 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2255,8 +2255,8 @@ namespace isc { namespace dhcp {
 #line 2256 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 372:
-#line 1340 "dhcp6_parser.yy" // lalr1.cc:859
+  case 373:
+#line 1343 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
@@ -2264,16 +2264,16 @@ namespace isc { namespace dhcp {
 #line 2265 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1373 "dhcp6_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1376 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2273 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1378 "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);
@@ -2282,8 +2282,8 @@ namespace isc { namespace dhcp {
 #line 2283 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1385 "dhcp6_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1388 "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);
@@ -2291,8 +2291,8 @@ namespace isc { namespace dhcp {
 #line 2292 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1390 "dhcp6_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1393 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
@@ -2300,8 +2300,8 @@ namespace isc { namespace dhcp {
 #line 2301 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1398 "dhcp6_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1401 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
@@ -2311,8 +2311,8 @@ namespace isc { namespace dhcp {
 #line 2312 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1403 "dhcp6_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1406 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2320,8 +2320,8 @@ namespace isc { namespace dhcp {
 #line 2321 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1418 "dhcp6_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1421 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2330,8 +2330,8 @@ namespace isc { namespace dhcp {
 #line 2331 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1422 "dhcp6_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1425 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2340,8 +2340,8 @@ namespace isc { namespace dhcp {
 #line 2341 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1428 "dhcp6_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2350,8 +2350,8 @@ namespace isc { namespace dhcp {
 #line 2351 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 402:
-#line 1432 "dhcp6_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1435 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2359,16 +2359,16 @@ namespace isc { namespace dhcp {
 #line 2360 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1450 "dhcp6_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1453 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2368 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1452 "dhcp6_parser.yy" // lalr1.cc:859
+  case 414:
+#line 1455 "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);
@@ -2377,16 +2377,16 @@ namespace isc { namespace dhcp {
 #line 2378 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 414:
-#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
+  case 415:
+#line 1461 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2386 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 415:
-#line 1460 "dhcp6_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2412,16 +2412,16 @@ namespace isc { namespace dhcp {
 #line 2413 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 416:
-#line 1483 "dhcp6_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1486 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2421 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 417:
-#line 1485 "dhcp6_parser.yy" // lalr1.cc:859
+  case 418:
+#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2449,8 +2449,8 @@ namespace isc { namespace dhcp {
 #line 2450 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 418:
-#line 1513 "dhcp6_parser.yy" // lalr1.cc:859
+  case 419:
+#line 1516 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
@@ -2460,8 +2460,8 @@ namespace isc { namespace dhcp {
 #line 2461 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1518 "dhcp6_parser.yy" // lalr1.cc:859
+  case 420:
+#line 1521 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2469,8 +2469,8 @@ namespace isc { namespace dhcp {
 #line 2470 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 424:
-#line 1533 "dhcp6_parser.yy" // lalr1.cc:859
+  case 425:
+#line 1536 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2479,8 +2479,8 @@ namespace isc { namespace dhcp {
 #line 2480 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 425:
-#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
+  case 426:
+#line 1540 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2491,8 +2491,8 @@ namespace isc { namespace dhcp {
 #line 2492 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 426:
-#line 1545 "dhcp6_parser.yy" // lalr1.cc:859
+  case 427:
+#line 1548 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2501,8 +2501,8 @@ namespace isc { namespace dhcp {
 #line 2502 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 427:
-#line 1549 "dhcp6_parser.yy" // lalr1.cc:859
+  case 428:
+#line 1552 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2513,16 +2513,16 @@ namespace isc { namespace dhcp {
 #line 2514 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 441:
-#line 1574 "dhcp6_parser.yy" // lalr1.cc:859
+  case 442:
+#line 1577 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2522 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 442:
-#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
+  case 443:
+#line 1579 "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);
@@ -2531,8 +2531,8 @@ namespace isc { namespace dhcp {
 #line 2532 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 443:
-#line 1582 "dhcp6_parser.yy" // lalr1.cc:859
+  case 444:
+#line 1585 "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);
@@ -2540,16 +2540,16 @@ namespace isc { namespace dhcp {
 #line 2541 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 444:
-#line 1587 "dhcp6_parser.yy" // lalr1.cc:859
+  case 445:
+#line 1590 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2549 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 445:
-#line 1589 "dhcp6_parser.yy" // lalr1.cc:859
+  case 446:
+#line 1592 "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);
@@ -2558,8 +2558,8 @@ namespace isc { namespace dhcp {
 #line 2559 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 446:
-#line 1595 "dhcp6_parser.yy" // lalr1.cc:859
+  case 447:
+#line 1598 "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);
@@ -2567,8 +2567,8 @@ namespace isc { namespace dhcp {
 #line 2568 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 447:
-#line 1600 "dhcp6_parser.yy" // lalr1.cc:859
+  case 448:
+#line 1603 "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);
@@ -2576,8 +2576,8 @@ namespace isc { namespace dhcp {
 #line 2577 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 448:
-#line 1608 "dhcp6_parser.yy" // lalr1.cc:859
+  case 449:
+#line 1611 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
@@ -2587,8 +2587,8 @@ namespace isc { namespace dhcp {
 #line 2588 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 449:
-#line 1613 "dhcp6_parser.yy" // lalr1.cc:859
+  case 450:
+#line 1616 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2596,8 +2596,8 @@ namespace isc { namespace dhcp {
 #line 2597 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 454:
-#line 1626 "dhcp6_parser.yy" // lalr1.cc:859
+  case 455:
+#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2606,8 +2606,8 @@ namespace isc { namespace dhcp {
 #line 2607 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 455:
-#line 1630 "dhcp6_parser.yy" // lalr1.cc:859
+  case 456:
+#line 1633 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
@@ -2615,8 +2615,8 @@ namespace isc { namespace dhcp {
 #line 2616 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 456:
-#line 1635 "dhcp6_parser.yy" // lalr1.cc:859
+  case 457:
+#line 1638 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2625,8 +2625,8 @@ namespace isc { namespace dhcp {
 #line 2626 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 457:
-#line 1639 "dhcp6_parser.yy" // lalr1.cc:859
+  case 458:
+#line 1642 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
@@ -2634,8 +2634,8 @@ namespace isc { namespace dhcp {
 #line 2635 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 473:
-#line 1666 "dhcp6_parser.yy" // lalr1.cc:859
+  case 474:
+#line 1669 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
@@ -2645,8 +2645,8 @@ namespace isc { namespace dhcp {
 #line 2646 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 474:
-#line 1671 "dhcp6_parser.yy" // lalr1.cc:859
+  case 475:
+#line 1674 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2654,8 +2654,8 @@ namespace isc { namespace dhcp {
 #line 2655 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 475:
-#line 1676 "dhcp6_parser.yy" // lalr1.cc:859
+  case 476:
+#line 1679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
@@ -2665,8 +2665,8 @@ namespace isc { namespace dhcp {
 #line 2666 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 476:
-#line 1681 "dhcp6_parser.yy" // lalr1.cc:859
+  case 477:
+#line 1684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2674,16 +2674,16 @@ namespace isc { namespace dhcp {
 #line 2675 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 477:
-#line 1686 "dhcp6_parser.yy" // lalr1.cc:859
+  case 478:
+#line 1689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2683 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 478:
-#line 1688 "dhcp6_parser.yy" // lalr1.cc:859
+  case 479:
+#line 1691 "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);
@@ -2692,16 +2692,16 @@ namespace isc { namespace dhcp {
 #line 2693 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 479:
-#line 1694 "dhcp6_parser.yy" // lalr1.cc:859
+  case 480:
+#line 1697 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2701 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 480:
-#line 1696 "dhcp6_parser.yy" // lalr1.cc:859
+  case 481:
+#line 1699 "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);
@@ -2710,16 +2710,16 @@ namespace isc { namespace dhcp {
 #line 2711 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 481:
-#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
+  case 482:
+#line 1705 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2719 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1704 "dhcp6_parser.yy" // lalr1.cc:859
+  case 483:
+#line 1707 "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);
@@ -2728,16 +2728,16 @@ namespace isc { namespace dhcp {
 #line 2729 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 483:
-#line 1710 "dhcp6_parser.yy" // lalr1.cc:859
+  case 484:
+#line 1713 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2737 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 484:
-#line 1712 "dhcp6_parser.yy" // lalr1.cc:859
+  case 485:
+#line 1715 "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("flex-id", hw);
@@ -2746,8 +2746,8 @@ namespace isc { namespace dhcp {
 #line 2747 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 485:
-#line 1718 "dhcp6_parser.yy" // lalr1.cc:859
+  case 486:
+#line 1721 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
@@ -2757,8 +2757,8 @@ namespace isc { namespace dhcp {
 #line 2758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1723 "dhcp6_parser.yy" // lalr1.cc:859
+  case 487:
+#line 1726 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2766,8 +2766,8 @@ namespace isc { namespace dhcp {
 #line 2767 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1731 "dhcp6_parser.yy" // lalr1.cc:859
+  case 488:
+#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
@@ -2777,8 +2777,8 @@ namespace isc { namespace dhcp {
 #line 2778 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 488:
-#line 1736 "dhcp6_parser.yy" // lalr1.cc:859
+  case 489:
+#line 1739 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2786,16 +2786,16 @@ namespace isc { namespace dhcp {
 #line 2787 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 491:
-#line 1745 "dhcp6_parser.yy" // lalr1.cc:859
+  case 492:
+#line 1748 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2795 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 492:
-#line 1747 "dhcp6_parser.yy" // lalr1.cc:859
+  case 493:
+#line 1750 "dhcp6_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);
@@ -2804,8 +2804,8 @@ namespace isc { namespace dhcp {
 #line 2805 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 493:
-#line 1756 "dhcp6_parser.yy" // lalr1.cc:859
+  case 494:
+#line 1759 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
@@ -2815,8 +2815,8 @@ namespace isc { namespace dhcp {
 #line 2816 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 494:
-#line 1761 "dhcp6_parser.yy" // lalr1.cc:859
+  case 495:
+#line 1764 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -2824,8 +2824,8 @@ namespace isc { namespace dhcp {
 #line 2825 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 497:
-#line 1770 "dhcp6_parser.yy" // lalr1.cc:859
+  case 498:
+#line 1773 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -2834,8 +2834,8 @@ namespace isc { namespace dhcp {
 #line 2835 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 498:
-#line 1774 "dhcp6_parser.yy" // lalr1.cc:859
+  case 499:
+#line 1777 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2844,16 +2844,16 @@ namespace isc { namespace dhcp {
 #line 2845 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 511:
-#line 1799 "dhcp6_parser.yy" // lalr1.cc:859
+  case 512:
+#line 1802 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2853 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 512:
-#line 1801 "dhcp6_parser.yy" // lalr1.cc:859
+  case 513:
+#line 1804 "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);
@@ -2862,8 +2862,8 @@ namespace isc { namespace dhcp {
 #line 2863 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 513:
-#line 1807 "dhcp6_parser.yy" // lalr1.cc:859
+  case 514:
+#line 1810 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
@@ -2871,8 +2871,8 @@ namespace isc { namespace dhcp {
 #line 2872 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 514:
-#line 1815 "dhcp6_parser.yy" // lalr1.cc:859
+  case 515:
+#line 1818 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
@@ -2882,8 +2882,8 @@ namespace isc { namespace dhcp {
 #line 2883 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 515:
-#line 1820 "dhcp6_parser.yy" // lalr1.cc:859
+  case 516:
+#line 1823 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required.
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -2893,16 +2893,16 @@ namespace isc { namespace dhcp {
 #line 2894 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 527:
-#line 1842 "dhcp6_parser.yy" // lalr1.cc:859
+  case 528:
+#line 1845 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
 #line 2902 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 528:
-#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
+  case 529:
+#line 1847 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -2910,26 +2910,26 @@ namespace isc { namespace dhcp {
 #line 2911 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 529:
-#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
+  case 530:
+#line 1852 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
 #line 2917 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 530:
-#line 1850 "dhcp6_parser.yy" // lalr1.cc:859
+  case 531:
+#line 1853 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
 #line 2923 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 531:
-#line 1851 "dhcp6_parser.yy" // lalr1.cc:859
+  case 532:
+#line 1854 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
 #line 2929 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 532:
-#line 1854 "dhcp6_parser.yy" // lalr1.cc:859
+  case 533:
+#line 1857 "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);
@@ -2937,16 +2937,16 @@ namespace isc { namespace dhcp {
 #line 2938 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 533:
-#line 1859 "dhcp6_parser.yy" // lalr1.cc:859
+  case 534:
+#line 1862 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 2946 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 534:
-#line 1861 "dhcp6_parser.yy" // lalr1.cc:859
+  case 535:
+#line 1864 "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);
@@ -2955,8 +2955,8 @@ namespace isc { namespace dhcp {
 #line 2956 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 535:
-#line 1867 "dhcp6_parser.yy" // lalr1.cc:859
+  case 536:
+#line 1870 "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);
@@ -2964,8 +2964,8 @@ namespace isc { namespace dhcp {
 #line 2965 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 536:
-#line 1872 "dhcp6_parser.yy" // lalr1.cc:859
+  case 537:
+#line 1875 "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);
@@ -2973,8 +2973,8 @@ namespace isc { namespace dhcp {
 #line 2974 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 537:
-#line 1879 "dhcp6_parser.yy" // lalr1.cc:859
+  case 538:
+#line 1882 "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);
@@ -2982,8 +2982,8 @@ namespace isc { namespace dhcp {
 #line 2983 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 538:
-#line 1886 "dhcp6_parser.yy" // lalr1.cc:859
+  case 539:
+#line 1889 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
@@ -2993,8 +2993,8 @@ namespace isc { namespace dhcp {
 #line 2994 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 539:
-#line 1891 "dhcp6_parser.yy" // lalr1.cc:859
+  case 540:
+#line 1894 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -3002,16 +3002,16 @@ namespace isc { namespace dhcp {
 #line 3003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1907 "dhcp6_parser.yy" // lalr1.cc:859
+  case 548:
+#line 1910 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3011 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1909 "dhcp6_parser.yy" // lalr1.cc:859
+  case 549:
+#line 1912 "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);
@@ -3020,16 +3020,16 @@ namespace isc { namespace dhcp {
 #line 3021 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 549:
-#line 1915 "dhcp6_parser.yy" // lalr1.cc:859
+  case 550:
+#line 1918 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 3029 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 550:
-#line 1917 "dhcp6_parser.yy" // lalr1.cc:859
+  case 551:
+#line 1920 "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);
@@ -3038,641 +3038,667 @@ namespace isc { namespace dhcp {
 #line 3039 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 551:
-#line 1925 "dhcp6_parser.yy" // lalr1.cc:859
+  case 552:
+#line 1926 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 3047 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 553:
+#line 1928 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
+    ctx.stack_.back()->set("queue-control", qc);
+
+    if (!qc->contains("queue-type")) {
+        std::stringstream msg;
+        msg << "'queue-type' is required: ";
+        msg  << qc->getPosition().str() << ")";
+        error(yystack_[3].location, msg.str());
+    }
+
+    ctx.leave();
+}
+#line 3065 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 554:
+#line 1944 "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.DHCP_DDNS);
 }
-#line 3050 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3076 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 552:
-#line 1930 "dhcp6_parser.yy" // lalr1.cc:859
+  case 555:
+#line 1949 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3061 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3087 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 553:
-#line 1937 "dhcp6_parser.yy" // lalr1.cc:859
+  case 556:
+#line 1956 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3071 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3097 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 554:
-#line 1941 "dhcp6_parser.yy" // lalr1.cc:859
+  case 557:
+#line 1960 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3081 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3107 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 576:
-#line 1972 "dhcp6_parser.yy" // lalr1.cc:859
+  case 579:
+#line 1991 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 3090 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3116 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 577:
-#line 1977 "dhcp6_parser.yy" // lalr1.cc:859
+  case 580:
+#line 1996 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3098 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3124 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 578:
-#line 1979 "dhcp6_parser.yy" // lalr1.cc:859
+  case 581:
+#line 1998 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 3108 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3134 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 579:
-#line 1985 "dhcp6_parser.yy" // lalr1.cc:859
+  case 582:
+#line 2004 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3116 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3142 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 580:
-#line 1987 "dhcp6_parser.yy" // lalr1.cc:859
+  case 583:
+#line 2006 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 3126 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3152 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 581:
-#line 1993 "dhcp6_parser.yy" // lalr1.cc:859
+  case 584:
+#line 2012 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 3135 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3161 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 582:
-#line 1998 "dhcp6_parser.yy" // lalr1.cc:859
+  case 585:
+#line 2017 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3143 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3169 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 583:
-#line 2000 "dhcp6_parser.yy" // lalr1.cc:859
+  case 586:
+#line 2019 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 3153 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3179 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2006 "dhcp6_parser.yy" // lalr1.cc:859
+  case 587:
+#line 2025 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 3162 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3188 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2011 "dhcp6_parser.yy" // lalr1.cc:859
+  case 588:
+#line 2030 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 3171 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3197 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2016 "dhcp6_parser.yy" // lalr1.cc:859
+  case 589:
+#line 2035 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 3179 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3205 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 587:
-#line 2018 "dhcp6_parser.yy" // lalr1.cc:859
+  case 590:
+#line 2037 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3188 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3214 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 588:
-#line 2024 "dhcp6_parser.yy" // lalr1.cc:859
+  case 591:
+#line 2043 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3194 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3220 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 589:
-#line 2025 "dhcp6_parser.yy" // lalr1.cc:859
+  case 592:
+#line 2044 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3200 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3226 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 590:
-#line 2028 "dhcp6_parser.yy" // lalr1.cc:859
+  case 593:
+#line 2047 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3208 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3234 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 591:
-#line 2030 "dhcp6_parser.yy" // lalr1.cc:859
+  case 594:
+#line 2049 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3218 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3244 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 592:
-#line 2036 "dhcp6_parser.yy" // lalr1.cc:859
+  case 595:
+#line 2055 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 3227 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3253 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 593:
-#line 2041 "dhcp6_parser.yy" // lalr1.cc:859
+  case 596:
+#line 2060 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3236 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 594:
-#line 2046 "dhcp6_parser.yy" // lalr1.cc:859
+  case 597:
+#line 2065 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3245 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3271 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 595:
-#line 2051 "dhcp6_parser.yy" // lalr1.cc:859
+  case 598:
+#line 2070 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3253 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3279 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 596:
-#line 2053 "dhcp6_parser.yy" // lalr1.cc:859
+  case 599:
+#line 2072 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3262 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3288 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 597:
-#line 2059 "dhcp6_parser.yy" // lalr1.cc:859
+  case 600:
+#line 2078 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3270 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3296 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 598:
-#line 2062 "dhcp6_parser.yy" // lalr1.cc:859
+  case 601:
+#line 2081 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3278 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3304 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 599:
-#line 2065 "dhcp6_parser.yy" // lalr1.cc:859
+  case 602:
+#line 2084 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3286 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3312 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 600:
-#line 2068 "dhcp6_parser.yy" // lalr1.cc:859
+  case 603:
+#line 2087 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3294 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3320 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 601:
-#line 2071 "dhcp6_parser.yy" // lalr1.cc:859
+  case 604:
+#line 2090 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3303 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3329 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 602:
-#line 2077 "dhcp6_parser.yy" // lalr1.cc:859
+  case 605:
+#line 2096 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3311 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3337 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 603:
-#line 2079 "dhcp6_parser.yy" // lalr1.cc:859
+  case 606:
+#line 2098 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3321 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3347 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 604:
-#line 2085 "dhcp6_parser.yy" // lalr1.cc:859
+  case 607:
+#line 2104 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3329 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 605:
-#line 2087 "dhcp6_parser.yy" // lalr1.cc:859
+  case 608:
+#line 2106 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 3339 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3365 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 606:
-#line 2093 "dhcp6_parser.yy" // lalr1.cc:859
+  case 609:
+#line 2112 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3347 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 607:
-#line 2095 "dhcp6_parser.yy" // lalr1.cc:859
+  case 610:
+#line 2114 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 3357 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3383 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 608:
-#line 2103 "dhcp6_parser.yy" // lalr1.cc:859
+  case 611:
+#line 2122 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3365 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3391 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 609:
-#line 2105 "dhcp6_parser.yy" // lalr1.cc:859
+  case 612:
+#line 2124 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3374 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 610:
-#line 2110 "dhcp6_parser.yy" // lalr1.cc:859
+  case 613:
+#line 2129 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3382 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3408 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 611:
-#line 2112 "dhcp6_parser.yy" // lalr1.cc:859
+  case 614:
+#line 2131 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3391 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3417 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 612:
-#line 2117 "dhcp6_parser.yy" // lalr1.cc:859
+  case 615:
+#line 2136 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3399 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3425 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 613:
-#line 2119 "dhcp6_parser.yy" // lalr1.cc:859
+  case 616:
+#line 2138 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3408 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3434 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 614:
-#line 2126 "dhcp6_parser.yy" // lalr1.cc:859
+  case 617:
+#line 2145 "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 3418 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3444 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 615:
-#line 2130 "dhcp6_parser.yy" // lalr1.cc:859
+  case 618:
+#line 2149 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3426 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3452 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 616:
-#line 2135 "dhcp6_parser.yy" // lalr1.cc:859
+  case 619:
+#line 2154 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-control", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 3437 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3463 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 617:
-#line 2140 "dhcp6_parser.yy" // lalr1.cc:859
+  case 620:
+#line 2159 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3447 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3473 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 618:
-#line 2146 "dhcp6_parser.yy" // lalr1.cc:859
+  case 621:
+#line 2165 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3457 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3483 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 619:
-#line 2150 "dhcp6_parser.yy" // lalr1.cc:859
+  case 622:
+#line 2169 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No config_control params are required
     // parsing completed
 }
-#line 3466 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3492 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 624:
-#line 2165 "dhcp6_parser.yy" // lalr1.cc:859
+  case 627:
+#line 2184 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-databases", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 3477 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3503 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 625:
-#line 2170 "dhcp6_parser.yy" // lalr1.cc:859
+  case 628:
+#line 2189 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3486 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3512 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 626:
-#line 2180 "dhcp6_parser.yy" // lalr1.cc:859
+  case 629:
+#line 2199 "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 3497 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3523 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 627:
-#line 2185 "dhcp6_parser.yy" // lalr1.cc:859
+  case 630:
+#line 2204 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3506 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3532 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 628:
-#line 2190 "dhcp6_parser.yy" // lalr1.cc:859
+  case 631:
+#line 2209 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3516 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3542 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 629:
-#line 2194 "dhcp6_parser.yy" // lalr1.cc:859
+  case 632:
+#line 2213 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3524 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3550 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 633:
-#line 2210 "dhcp6_parser.yy" // lalr1.cc:859
+  case 636:
+#line 2229 "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 3535 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3561 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 634:
-#line 2215 "dhcp6_parser.yy" // lalr1.cc:859
+  case 637:
+#line 2234 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3544 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3570 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 637:
-#line 2227 "dhcp6_parser.yy" // lalr1.cc:859
+  case 640:
+#line 2246 "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 3554 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3580 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 638:
-#line 2231 "dhcp6_parser.yy" // lalr1.cc:859
+  case 641:
+#line 2250 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3562 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3588 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 648:
-#line 2248 "dhcp6_parser.yy" // lalr1.cc:859
+  case 651:
+#line 2267 "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 3571 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3597 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 649:
-#line 2253 "dhcp6_parser.yy" // lalr1.cc:859
+  case 652:
+#line 2272 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3579 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3605 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 650:
-#line 2255 "dhcp6_parser.yy" // lalr1.cc:859
+  case 653:
+#line 2274 "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 3589 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3615 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 651:
-#line 2261 "dhcp6_parser.yy" // lalr1.cc:859
+  case 654:
+#line 2280 "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 3600 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3626 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 652:
-#line 2266 "dhcp6_parser.yy" // lalr1.cc:859
+  case 655:
+#line 2285 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3609 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3635 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 655:
-#line 2275 "dhcp6_parser.yy" // lalr1.cc:859
+  case 658:
+#line 2294 "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 3619 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3645 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 656:
-#line 2279 "dhcp6_parser.yy" // lalr1.cc:859
+  case 659:
+#line 2298 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3627 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3653 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 663:
-#line 2293 "dhcp6_parser.yy" // lalr1.cc:859
+  case 666:
+#line 2312 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3635 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3661 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 664:
-#line 2295 "dhcp6_parser.yy" // lalr1.cc:859
+  case 667:
+#line 2314 "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 3645 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3671 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 665:
-#line 2301 "dhcp6_parser.yy" // lalr1.cc:859
+  case 668:
+#line 2320 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3654 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 666:
-#line 2306 "dhcp6_parser.yy" // lalr1.cc:859
+  case 669:
+#line 2325 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3663 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3689 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 667:
-#line 2311 "dhcp6_parser.yy" // lalr1.cc:859
+  case 670:
+#line 2330 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3672 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3676 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3702 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3927,122 +3953,123 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -821;
+  const short int Dhcp6Parser::yypact_ninf_ = -823;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     414,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,    64,    46,    76,    95,
-      99,   119,   126,   130,   143,   145,   157,   174,   178,   191,
-     204,   218,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,    46,    66,    44,    45,    63,   230,   190,   244,
-      65,   187,    53,   194,   -27,   362,   108,    57,  -821,   258,
-     262,   263,   270,   285,  -821,  -821,  -821,  -821,  -821,   286,
-    -821,    97,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,   288,   290,   299,   308,   310,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,   322,  -821,  -821,  -821,   112,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   333,  -821,   131,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,   336,   363,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,   132,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,   199,  -821,  -821,
-    -821,  -821,  -821,   375,  -821,   376,   389,  -821,  -821,  -821,
-    -821,  -821,  -821,   201,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   374,   368,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   387,  -821,  -821,   402,  -821,  -821,  -821,   408,  -821,
-    -821,   407,   430,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,   437,   438,  -821,  -821,
-    -821,  -821,   440,   442,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,   216,  -821,  -821,  -821,
-     447,  -821,  -821,   448,  -821,   449,   450,  -821,  -821,   451,
-     452,   453,  -821,  -821,  -821,  -821,  -821,  -821,  -821,   228,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,   246,  -821,
-    -821,  -821,  -821,   250,  -821,  -821,  -821,    46,    46,  -821,
-     170,   454,   455,   456,   458,   459,  -821,    44,  -821,    57,
-     461,   462,   463,   464,   465,   300,   301,   303,   304,   305,
-     472,   473,   474,   475,   476,   491,   492,   493,   494,   495,
-     496,   497,   500,   501,   502,   503,   338,   505,   506,    45,
-    -821,   507,   340,    63,  -821,   509,   511,   512,   513,   520,
-     355,   354,   523,   524,   525,   526,   230,  -821,   528,   190,
-    -821,   530,   366,   531,   369,   370,   244,  -821,   533,   534,
-     540,   542,   544,   545,   546,  -821,    65,  -821,   547,   548,
-     386,   553,   554,   555,   388,  -821,    53,   557,   390,   391,
-    -821,   194,   560,   579,    16,  -821,   412,   581,   582,   417,
-     584,   419,   420,   587,   588,   421,   422,   423,   592,   594,
-     595,   596,   362,  -821,   597,   108,  -821,   598,    57,  -821,
-    -821,  -821,   599,   600,   601,    46,    46,    46,  -821,   254,
-     602,   603,   604,   605,   608,  -821,  -821,  -821,  -821,  -821,
-     435,   609,   610,   611,   612,   436,   613,   616,   617,   618,
-     619,   620,   622,   623,   624,   625,  -821,   626,   627,  -821,
-     630,  -821,  -821,   631,   632,   460,   469,   470,  -821,  -821,
-     274,   630,   471,   634,  -821,   477,  -821,   478,  -821,   479,
-    -821,  -821,  -821,   630,   630,   630,   480,   481,   482,   483,
-    -821,   484,   485,  -821,   486,   487,   488,  -821,  -821,   489,
-    -821,  -821,  -821,   490,    46,  -821,  -821,   498,   499,  -821,
-     504,  -821,  -821,   105,   508,  -821,  -821,  -821,   146,   510,
-     514,   515,  -821,   637,  -821,   639,  -821,    46,    45,   108,
-    -821,  -821,  -821,  -821,    57,    63,   142,   142,   638,  -821,
-     653,   654,   655,  -821,  -821,  -821,   656,   -31,    46,   -17,
-     536,   657,   658,   659,   231,   117,    83,   362,  -821,  -821,
-     662,   663,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   -13,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,   664,   638,  -821,   260,
-     271,   272,   312,  -821,  -821,  -821,  -821,   668,   670,   671,
-     672,   673,  -821,   674,   676,  -821,   677,   678,   681,  -821,
-     320,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,   335,
-    -821,   680,   621,  -821,  -821,   682,   684,  -821,  -821,   683,
-     687,  -821,  -821,   685,   689,  -821,  -821,   688,   690,  -821,
-    -821,  -821,    54,  -821,  -821,  -821,   691,  -821,  -821,  -821,
-      93,  -821,  -821,  -821,  -821,   347,  -821,  -821,  -821,   140,
-    -821,  -821,   692,   693,  -821,  -821,   694,   696,  -821,   697,
-     698,   699,   700,   701,   702,   348,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,   703,   704,   705,  -821,  -821,
-    -821,  -821,   357,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,   365,  -821,  -821,  -821,   367,   541,
-    -821,   706,   708,  -821,  -821,   707,   711,  -821,  -821,  -821,
-     709,  -821,  -821,   159,  -821,   710,  -821,  -821,  -821,  -821,
-     714,   715,   716,   717,   552,   434,   556,   543,   558,   719,
-     559,   561,   720,   562,   563,   564,   142,  -821,  -821,   142,
-    -821,   638,   230,  -821,   653,    53,  -821,   654,   194,  -821,
-     655,   378,  -821,   656,   -31,  -821,  -821,   -17,  -821,   721,
-     536,  -821,    32,   657,  -821,    65,  -821,   658,   -27,  -821,
-     659,   565,   567,   568,   569,   570,   571,   231,  -821,   723,
-     726,   572,   573,   574,   117,  -821,   730,   741,    83,  -821,
-    -821,  -821,   740,   744,   190,  -821,   662,   244,  -821,   663,
-     745,  -821,   175,   664,  -821,  -821,   171,   583,   585,   586,
-    -821,  -821,  -821,  -821,  -821,   589,  -821,  -821,   590,  -821,
-    -821,  -821,  -821,   380,  -821,   394,  -821,   742,  -821,   743,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,   400,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,   591,  -821,  -821,   749,  -821,  -821,  -821,
-    -821,  -821,   748,   754,  -821,  -821,  -821,  -821,  -821,   753,
-    -821,   413,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-     331,   606,  -821,  -821,  -821,  -821,   607,   628,  -821,  -821,
-     640,   426,  -821,   427,  -821,   642,  -821,   759,  -821,  -821,
-    -821,  -821,  -821,   428,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,   378,  -821,  -821,   760,   576,  -821,    32,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,   762,   615,   763,   175,  -821,  -821,   649,
-    -821,  -821,   764,  -821,   652,  -821,  -821,   766,  -821,  -821,
-     202,  -821,    39,   766,  -821,  -821,   774,   775,   778,   429,
-    -821,  -821,  -821,  -821,  -821,  -821,   786,   661,   666,   667,
-      39,  -821,   660,  -821,  -821,  -821,  -821,  -821
+     316,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,    64,    46,    50,    68,
+      86,   119,   129,   141,   143,   145,   184,   188,   192,   198,
+     202,   204,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,    46,   -64,    44,    45,    63,   206,   236,    34,
+      65,    88,    53,   189,   -27,   328,    69,    57,  -823,   201,
+     229,   230,   228,   248,  -823,  -823,  -823,  -823,  -823,   260,
+    -823,   130,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,   262,   266,   275,   280,   286,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,   307,  -823,  -823,  -823,  -823,
+     132,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,   310,  -823,   178,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,   313,   323,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,   186,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   200,
+    -823,  -823,  -823,  -823,  -823,   331,  -823,   342,   346,  -823,
+    -823,  -823,  -823,  -823,  -823,   277,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,   273,   318,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,   362,  -823,  -823,   378,  -823,  -823,  -823,
+     381,  -823,  -823,   388,   395,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   382,   398,
+    -823,  -823,  -823,  -823,   401,   415,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   288,  -823,
+    -823,  -823,   418,  -823,  -823,   464,  -823,   484,   489,  -823,
+    -823,   490,   491,   492,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,   295,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+     296,  -823,  -823,  -823,  -823,   315,  -823,  -823,  -823,    46,
+      46,  -823,   249,   493,   495,   496,   497,   501,  -823,    44,
+    -823,    57,   502,   503,   504,   505,   506,   272,   340,   341,
+     343,   345,   509,   511,   513,   515,   516,   517,   518,   519,
+     520,   524,   525,   526,   527,   528,   529,   530,   364,   532,
+     534,   535,    45,  -823,   536,   368,    63,  -823,   538,   539,
+     540,   543,   546,   380,   379,   549,   550,   551,   552,   206,
+    -823,   555,   236,  -823,   557,   391,   559,   393,   394,    34,
+    -823,   562,   563,   564,   567,   569,   570,   571,  -823,    65,
+    -823,   572,   573,   407,   575,   576,   577,   410,  -823,    53,
+     580,   413,   414,  -823,   189,   581,   584,   152,  -823,   416,
+     586,   587,   421,   589,   424,   428,   590,   592,   430,   431,
+     434,   593,   594,   596,   597,   328,  -823,   598,    69,  -823,
+     602,    57,  -823,  -823,  -823,   604,   603,   605,    46,    46,
+      46,  -823,   317,   606,   607,   608,   609,   612,  -823,  -823,
+    -823,  -823,  -823,   441,   613,   614,   615,   616,   451,   617,
+     619,   620,   621,   622,   623,   625,   626,   627,   628,  -823,
+     629,   616,   630,  -823,   633,  -823,  -823,   634,   635,   457,
+     462,   463,  -823,  -823,   151,   633,   471,   636,  -823,   472,
+    -823,   474,  -823,   475,  -823,  -823,  -823,   633,   633,   633,
+     476,   477,   478,   479,  -823,   480,   481,  -823,   482,   483,
+     485,  -823,  -823,   486,  -823,  -823,  -823,   487,    46,  -823,
+    -823,   488,   494,  -823,   498,  -823,  -823,   -52,   473,  -823,
+    -823,  -823,   -24,   499,   500,   507,  -823,   649,  -823,   654,
+    -823,    46,    45,    69,  -823,  -823,  -823,  -823,    57,    63,
+     142,   142,   653,  -823,   655,   656,   658,  -823,  -823,  -823,
+     659,   -31,    46,   396,   591,   660,   664,   666,   156,   118,
+     127,  -823,   328,  -823,  -823,   667,   668,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,   -15,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,   669,   653,  -823,   335,   344,   350,   360,  -823,  -823,
+    -823,  -823,   657,   674,   675,   676,   677,  -823,   678,   679,
+    -823,   680,   681,   682,  -823,   363,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,   375,  -823,   683,   684,  -823,  -823,
+     685,   687,  -823,  -823,   686,   690,  -823,  -823,   688,   692,
+    -823,  -823,   691,   693,  -823,  -823,  -823,    73,  -823,  -823,
+    -823,   694,  -823,  -823,  -823,    99,  -823,  -823,  -823,  -823,
+     397,  -823,  -823,  -823,   139,  -823,  -823,   695,   696,  -823,
+    -823,   697,   699,  -823,   700,   701,   702,   703,   704,   705,
+     408,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+     706,   707,   708,  -823,  -823,  -823,  -823,   412,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   423,
+    -823,  -823,  -823,   425,   544,  -823,   709,   710,  -823,  -823,
+     711,   713,  -823,  -823,  -823,   712,  -823,  -823,   159,  -823,
+     715,  -823,  -823,  -823,  -823,   714,   718,   719,   720,   548,
+     553,   554,   556,   560,   723,   561,   565,   724,   566,   568,
+     574,   142,  -823,  -823,   142,  -823,   653,   206,  -823,   655,
+      53,  -823,   656,   189,  -823,   658,   268,  -823,   659,   -31,
+    -823,  -823,   396,  -823,   726,   591,  -823,   221,   660,  -823,
+      65,  -823,   664,   -27,  -823,   666,   578,   579,   582,   583,
+     585,   588,   156,  -823,   729,   730,   595,   600,   601,   118,
+    -823,   731,   734,   127,  -823,  -823,  -823,   735,   737,   236,
+    -823,   667,    34,  -823,   668,   738,  -823,   276,   669,  -823,
+    -823,   443,   599,   610,   611,  -823,  -823,  -823,  -823,  -823,
+     632,  -823,  -823,   644,  -823,  -823,  -823,  -823,   426,  -823,
+     427,  -823,   736,  -823,   740,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   429,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   646,  -823,
+    -823,   739,  -823,  -823,  -823,  -823,  -823,   743,   742,  -823,
+    -823,  -823,  -823,  -823,   744,  -823,   433,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,   383,   662,  -823,  -823,  -823,
+    -823,   671,   672,  -823,  -823,   689,   436,  -823,   437,  -823,
+     716,  -823,   751,  -823,  -823,  -823,  -823,  -823,   439,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   268,  -823,
+    -823,   753,   650,  -823,   221,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   754,   624,
+     756,   276,  -823,  -823,   721,  -823,  -823,   741,  -823,   722,
+    -823,  -823,   755,  -823,  -823,   179,  -823,   180,   755,  -823,
+    -823,   757,   759,   760,   459,  -823,  -823,  -823,  -823,  -823,
+    -823,   761,   661,   665,   698,   180,  -823,   725,  -823,  -823,
+    -823,  -823,  -823
   };
 
   const unsigned short int
@@ -4052,155 +4079,157 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,    28,    30,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     1,    47,    40,    36,    35,    32,    33,    34,
-      39,     3,    37,    38,    60,     5,    72,     7,   115,     9,
-     256,    11,   401,    13,   426,    15,   456,    17,   326,    19,
-     334,    21,   371,    23,   221,    25,   553,    27,   628,    29,
-     618,    31,    49,    43,     0,     0,     0,     0,     0,     0,
-     458,     0,   336,   373,     0,     0,     0,     0,    51,     0,
-      50,     0,     0,    44,    70,   626,   608,   610,   612,     0,
-      69,     0,    62,    64,    66,    67,    68,    65,   614,   616,
-     113,   127,   129,   131,     0,     0,     0,     0,     0,   111,
-     248,   324,   363,   414,   416,   297,   194,   211,   202,   187,
-     493,   448,   213,   232,   514,     0,   538,   551,   105,     0,
-      74,    76,    77,    78,    79,    80,   104,    83,    84,    85,
-      86,   101,    87,    89,    88,    93,    94,    81,    82,    91,
-      92,    99,   100,   102,    90,    95,    96,    97,    98,   103,
-     124,     0,   123,     0,   117,   119,   120,   121,   122,   393,
-     418,   280,   282,   284,     0,     0,   290,   288,   286,   487,
-     279,   260,   261,   262,   263,     0,   258,   267,   268,   269,
-     272,   273,   275,   270,   271,   264,   265,   277,   278,   266,
-     274,   276,   412,   411,   407,   408,   406,     0,   403,   405,
-     409,   410,   441,     0,   444,     0,     0,   440,   434,   435,
-     433,   438,   439,     0,   428,   430,   431,   436,   437,   432,
-     485,   473,   475,   477,   479,   481,   483,   472,   469,   470,
-     471,     0,   459,   460,   464,   465,   462,   466,   467,   468,
-     463,     0,   353,   172,     0,   357,   355,   360,     0,   349,
-     350,     0,   337,   338,   340,   352,   341,   342,   343,   359,
-     344,   345,   346,   347,   348,   387,     0,     0,   385,   386,
-     389,   390,     0,   374,   375,   377,   378,   379,   380,   381,
-     382,   383,   384,   228,   230,   225,     0,   223,   226,   227,
-       0,   577,   579,     0,   582,     0,     0,   586,   590,     0,
-       0,     0,   595,   602,   604,   606,   575,   573,   574,     0,
-     555,   557,   558,   559,   560,   561,   562,   563,   564,   565,
-     566,   567,   568,   569,   570,   571,   572,   633,     0,   630,
-     632,   624,   623,     0,   620,   622,    48,     0,     0,    41,
-       0,     0,     0,     0,     0,     0,    59,     0,    61,     0,
+      39,     3,    37,    38,    60,     5,    72,     7,   116,     9,
+     257,    11,   402,    13,   427,    15,   457,    17,   327,    19,
+     335,    21,   372,    23,   222,    25,   556,    27,   631,    29,
+     621,    31,    49,    43,     0,     0,     0,     0,     0,     0,
+     459,     0,   337,   374,     0,     0,     0,     0,    51,     0,
+      50,     0,     0,    44,    70,   629,   611,   613,   615,     0,
+      69,     0,    62,    64,    66,    67,    68,    65,   617,   619,
+     114,   128,   130,   132,     0,     0,     0,     0,     0,   112,
+     249,   325,   364,   415,   417,   298,   195,   212,   203,   188,
+     494,   449,   214,   233,   515,     0,   539,   552,   554,   106,
+       0,    74,    76,    77,    78,    79,    80,   105,    83,    84,
+      85,    86,   102,    87,    89,    88,    93,    94,    81,    82,
+      91,    92,   100,   101,   103,    90,    95,    96,    97,    98,
+      99,   104,   125,     0,   124,     0,   118,   120,   121,   122,
+     123,   394,   419,   281,   283,   285,     0,     0,   291,   289,
+     287,   488,   280,   261,   262,   263,   264,     0,   259,   268,
+     269,   270,   273,   274,   276,   271,   272,   265,   266,   278,
+     279,   267,   275,   277,   413,   412,   408,   409,   407,     0,
+     404,   406,   410,   411,   442,     0,   445,     0,     0,   441,
+     435,   436,   434,   439,   440,     0,   429,   431,   432,   437,
+     438,   433,   486,   474,   476,   478,   480,   482,   484,   473,
+     470,   471,   472,     0,   460,   461,   465,   466,   463,   467,
+     468,   469,   464,     0,   354,   173,     0,   358,   356,   361,
+       0,   350,   351,     0,   338,   339,   341,   353,   342,   343,
+     344,   360,   345,   346,   347,   348,   349,   388,     0,     0,
+     386,   387,   390,   391,     0,   375,   376,   378,   379,   380,
+     381,   382,   383,   384,   385,   229,   231,   226,     0,   224,
+     227,   228,     0,   580,   582,     0,   585,     0,     0,   589,
+     593,     0,     0,     0,   598,   605,   607,   609,   578,   576,
+     577,     0,   558,   560,   561,   562,   563,   564,   565,   566,
+     567,   568,   569,   570,   571,   572,   573,   574,   575,   636,
+       0,   633,   635,   627,   626,     0,   623,   625,    48,     0,
+       0,    41,     0,     0,     0,     0,     0,     0,    59,     0,
+      61,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    73,     0,     0,     0,   117,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      73,     0,     0,     0,   116,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   257,     0,     0,
-     402,     0,     0,     0,     0,     0,     0,   427,     0,     0,
-       0,     0,     0,     0,     0,   457,     0,   327,     0,     0,
-       0,     0,     0,     0,     0,   335,     0,     0,     0,     0,
-     372,     0,     0,     0,     0,   222,     0,     0,     0,     0,
+     258,     0,     0,   403,     0,     0,     0,     0,     0,     0,
+     428,     0,     0,     0,     0,     0,     0,     0,   458,     0,
+     328,     0,     0,     0,     0,     0,     0,     0,   336,     0,
+       0,     0,     0,   373,     0,     0,     0,     0,   223,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   554,     0,     0,   629,     0,     0,   619,
-      52,    45,     0,     0,     0,     0,     0,     0,    63,     0,
-       0,     0,     0,     0,     0,   106,   107,   108,   109,   110,
+       0,     0,     0,     0,     0,     0,   557,     0,     0,   632,
+       0,     0,   622,    52,    45,     0,     0,     0,     0,     0,
+       0,    63,     0,     0,     0,     0,     0,     0,   107,   108,
+     109,   110,   111,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   538,
+       0,     0,     0,    75,     0,   127,   119,     0,     0,     0,
+       0,     0,   296,   297,     0,     0,     0,     0,   260,     0,
+     405,     0,   444,     0,   447,   448,   430,     0,     0,     0,
+       0,     0,     0,     0,   462,     0,     0,   352,     0,     0,
+       0,   363,   340,     0,   392,   393,   377,     0,     0,   225,
+     579,     0,     0,   584,     0,   587,   588,     0,     0,   595,
+     596,   597,     0,     0,     0,     0,   559,     0,   634,     0,
+     624,     0,     0,     0,   612,   614,   616,   618,     0,     0,
+       0,     0,   134,   113,   251,   329,   366,    42,   416,   418,
+     300,     0,    49,     0,     0,     0,   451,   216,     0,     0,
+       0,   553,     0,    53,   126,   396,   421,   282,   284,   286,
+     293,   294,   295,   292,   290,   288,     0,   414,   443,   446,
+     487,   475,   477,   479,   481,   483,   485,   355,   174,   359,
+     357,   362,   389,   230,   232,   581,   583,   586,   591,   592,
+     590,   594,   600,   601,   602,   603,   604,   599,   606,   608,
+     610,     0,   134,    46,     0,     0,     0,     0,   160,   166,
+     168,   170,     0,     0,     0,     0,     0,   183,     0,     0,
+     186,     0,     0,     0,   159,     0,   140,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   154,   155,   156,
+     157,   152,   153,   158,     0,   138,     0,   135,   136,   255,
+       0,   252,   253,   333,     0,   330,   331,   370,     0,   367,
+     368,   304,     0,   301,   302,   201,   202,     0,   197,   199,
+     200,     0,   210,   211,   207,     0,   205,   208,   209,   193,
+       0,   190,   192,   498,     0,   496,   455,     0,   452,   453,
+     220,     0,   217,   218,     0,     0,     0,     0,     0,     0,
+       0,   235,   237,   238,   239,   240,   241,   242,   528,   534,
+       0,     0,     0,   527,   524,   525,   526,     0,   517,   519,
+     522,   520,   521,   523,   548,   550,   547,   545,   546,     0,
+     541,   543,   544,     0,    55,   400,     0,   397,   398,   425,
+       0,   422,   423,   492,   491,     0,   490,   640,     0,   638,
+       0,    71,   630,   620,   115,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   537,     0,     0,    75,
-       0,   126,   118,     0,     0,     0,     0,     0,   295,   296,
-       0,     0,     0,     0,   259,     0,   404,     0,   443,     0,
-     446,   447,   429,     0,     0,     0,     0,     0,     0,     0,
-     461,     0,     0,   351,     0,     0,     0,   362,   339,     0,
-     391,   392,   376,     0,     0,   224,   576,     0,     0,   581,
-       0,   584,   585,     0,     0,   592,   593,   594,     0,     0,
-       0,     0,   556,     0,   631,     0,   621,     0,     0,     0,
-     609,   611,   613,   615,     0,     0,     0,     0,   133,   112,
-     250,   328,   365,    42,   415,   417,   299,     0,    49,     0,
-       0,     0,   450,   215,     0,     0,     0,     0,    53,   125,
-     395,   420,   281,   283,   285,   292,   293,   294,   291,   289,
-     287,     0,   413,   442,   445,   486,   474,   476,   478,   480,
-     482,   484,   354,   173,   358,   356,   361,   388,   229,   231,
-     578,   580,   583,   588,   589,   587,   591,   597,   598,   599,
-     600,   601,   596,   603,   605,   607,     0,   133,    46,     0,
-       0,     0,     0,   159,   165,   167,   169,     0,     0,     0,
-       0,     0,   182,     0,     0,   185,     0,     0,     0,   158,
-       0,   139,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   153,   154,   155,   156,   151,   152,   157,     0,
-     137,     0,   134,   135,   254,     0,   251,   252,   332,     0,
-     329,   330,   369,     0,   366,   367,   303,     0,   300,   301,
-     200,   201,     0,   196,   198,   199,     0,   209,   210,   206,
-       0,   204,   207,   208,   192,     0,   189,   191,   497,     0,
-     495,   454,     0,   451,   452,   219,     0,   216,   217,     0,
-       0,     0,     0,     0,     0,     0,   234,   236,   237,   238,
-     239,   240,   241,   527,   533,     0,     0,     0,   526,   523,
-     524,   525,     0,   516,   518,   521,   519,   520,   522,   547,
-     549,   546,   544,   545,     0,   540,   542,   543,     0,    55,
-     399,     0,   396,   397,   424,     0,   421,   422,   491,   490,
-       0,   489,   637,     0,   635,     0,    71,   627,   617,   114,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   128,   130,     0,
-     132,     0,     0,   249,     0,   336,   325,     0,   373,   364,
-       0,     0,   298,     0,     0,   195,   212,     0,   203,     0,
-       0,   188,   499,     0,   494,   458,   449,     0,     0,   214,
-       0,     0,     0,     0,     0,     0,     0,     0,   233,     0,
-       0,     0,     0,     0,     0,   515,     0,     0,     0,   539,
-     552,    57,     0,    56,     0,   394,     0,     0,   419,     0,
-       0,   488,     0,     0,   634,   625,     0,     0,     0,     0,
-     171,   174,   175,   176,   177,     0,   184,   178,     0,   179,
-     180,   181,   140,     0,   136,     0,   253,     0,   331,     0,
-     368,   323,   318,   320,   311,   312,   307,   308,   309,   310,
-     316,   317,   315,   319,     0,   305,   313,   321,   322,   314,
-     302,   197,   205,     0,   190,   511,     0,   509,   510,   506,
-     507,   508,     0,   500,   501,   503,   504,   505,   496,     0,
-     453,     0,   218,   242,   243,   244,   245,   246,   247,   235,
-       0,     0,   532,   535,   536,   517,     0,     0,   541,    54,
-       0,     0,   398,     0,   423,     0,   651,     0,   649,   647,
-     641,   645,   646,     0,   639,   643,   644,   642,   636,   161,
-     162,   163,   164,   160,   166,   168,   170,   183,   186,   138,
-     255,   333,   370,     0,   304,   193,     0,     0,   498,     0,
-     455,   220,   529,   530,   531,   528,   534,   548,   550,    58,
-     400,   425,   492,     0,     0,     0,     0,   638,   306,     0,
-     513,   502,     0,   648,     0,   640,   512,     0,   650,   655,
-       0,   653,     0,     0,   652,   663,     0,     0,     0,     0,
-     657,   659,   660,   661,   662,   654,     0,     0,     0,     0,
-       0,   656,     0,   665,   666,   667,   658,   664
+       0,     0,   129,   131,     0,   133,     0,     0,   250,     0,
+     337,   326,     0,   374,   365,     0,     0,   299,     0,     0,
+     196,   213,     0,   204,     0,     0,   189,   500,     0,   495,
+     459,   450,     0,     0,   215,     0,     0,     0,     0,     0,
+       0,     0,     0,   234,     0,     0,     0,     0,     0,     0,
+     516,     0,     0,     0,   540,   555,    57,     0,    56,     0,
+     395,     0,     0,   420,     0,     0,   489,     0,     0,   637,
+     628,     0,     0,     0,     0,   172,   175,   176,   177,   178,
+       0,   185,   179,     0,   180,   181,   182,   141,     0,   137,
+       0,   254,     0,   332,     0,   369,   324,   319,   321,   312,
+     313,   308,   309,   310,   311,   317,   318,   316,   320,     0,
+     306,   314,   322,   323,   315,   303,   198,   206,     0,   191,
+     512,     0,   510,   511,   507,   508,   509,     0,   501,   502,
+     504,   505,   506,   497,     0,   454,     0,   219,   243,   244,
+     245,   246,   247,   248,   236,     0,     0,   533,   536,   537,
+     518,     0,     0,   542,    54,     0,     0,   399,     0,   424,
+       0,   654,     0,   652,   650,   644,   648,   649,     0,   642,
+     646,   647,   645,   639,   162,   163,   164,   165,   161,   167,
+     169,   171,   184,   187,   139,   256,   334,   371,     0,   305,
+     194,     0,     0,   499,     0,   456,   221,   530,   531,   532,
+     529,   535,   549,   551,    58,   401,   426,   493,     0,     0,
+       0,     0,   641,   307,     0,   514,   503,     0,   651,     0,
+     643,   513,     0,   653,   658,     0,   656,     0,     0,   655,
+     666,     0,     0,     0,     0,   660,   662,   663,   664,   665,
+     657,     0,     0,     0,     0,     0,   659,     0,   668,   669,
+     670,   661,   667
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,    33,  -821,   266,
-    -821,  -821,  -821,  -821,  -821,  -821,    22,  -821,  -450,  -821,
-    -821,  -821,   -74,  -821,  -821,  -821,   328,  -821,  -821,  -821,
-    -821,   236,   432,   -70,   -58,   -55,   -38,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,   232,   439,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,   158,  -821,     0,  -821,  -573,
-       7,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   -46,  -821,  -603,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,   -15,
-    -821,  -821,  -821,  -821,  -821,    -8,  -596,  -821,  -821,  -821,
-    -821,    -9,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-     -21,  -821,  -821,  -821,   -14,   397,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,   -22,  -821,  -821,  -821,  -821,  -821,  -821,
-    -820,  -821,  -821,  -821,    13,  -821,  -821,  -821,    17,   445,
-    -821,  -821,  -817,  -821,  -813,  -821,   -34,  -821,   -32,  -821,
-    -811,  -821,  -821,  -821,  -803,  -821,  -821,  -821,  -821,     5,
-    -821,  -821,  -159,   785,  -821,  -821,  -821,  -821,  -821,    20,
-    -821,  -821,  -821,    23,  -821,   424,  -821,   -42,  -821,  -821,
-    -821,  -821,  -821,   -40,  -821,  -821,  -821,  -821,  -821,   -12,
-    -821,  -821,  -821,    19,  -821,  -821,  -821,    24,  -821,   425,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,   -25,  -821,  -821,  -821,   -20,   467,  -821,  -821,   -62,
-    -821,   -50,  -821,  -821,  -821,  -821,  -821,   -26,  -821,  -821,
-    -821,   -19,   457,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-     -35,  -821,  -821,  -821,     8,  -821,  -821,  -821,    12,  -821,
-     443,   249,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -802,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,    18,  -821,  -821,  -821,  -145,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,     3,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,     1,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,   273,   416,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,  -821,
-    -821,  -821,  -821,  -821,  -821,  -821,  -821,  -344,   415,  -821,
-    -821,  -821,  -821,  -821,  -821,   302,   431,  -821,  -821,  -821,
-     -11,  -821,  -821,  -152,  -821,  -821,  -821,  -821,  -821,  -821,
-    -168,  -821,  -821,  -184,  -821,  -821,  -821,  -821,  -821
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,    14,  -823,  -447,
+    -823,   167,  -823,  -823,  -823,  -823,   162,  -823,  -347,  -823,
+    -823,  -823,   -74,  -823,  -823,  -823,   329,  -823,  -823,  -823,
+    -823,   176,   373,   -70,   -58,   -55,   -38,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,   185,   372,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,   111,  -823,   -59,  -823,  -577,
+     -51,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,   -46,  -823,  -607,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   -39,
+    -823,  -823,  -823,  -823,  -823,   -30,  -600,  -823,  -823,  -823,
+    -823,   -16,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+     -45,  -823,  -823,  -823,   -26,   399,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,   -44,  -823,  -823,  -823,  -823,  -823,  -823,
+    -822,  -823,  -823,  -823,    -1,  -823,  -823,  -823,     3,   432,
+    -823,  -823,  -818,  -823,  -816,  -823,   -34,  -823,   -32,  -823,
+    -808,  -823,  -823,  -823,  -807,  -823,  -823,  -823,  -823,    -5,
+    -823,  -823,  -174,   779,  -823,  -823,  -823,  -823,  -823,    10,
+    -823,  -823,  -823,    13,  -823,   417,  -823,   -42,  -823,  -823,
+    -823,  -823,  -823,   -40,  -823,  -823,  -823,  -823,  -823,   -12,
+    -823,  -823,  -823,     9,  -823,  -823,  -823,    18,  -823,   419,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,   -29,  -823,  -823,  -823,   -25,   453,  -823,  -823,   -62,
+    -823,   -50,  -823,  -823,  -823,  -823,  -823,   -28,  -823,  -823,
+    -823,   -23,   448,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+     -35,  -823,  -823,  -823,     6,  -823,  -823,  -823,    11,  -823,
+     444,   244,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -806,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,    16,  -823,  -823,  -823,  -152,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,    -4,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,     0,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,   267,
+     422,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,
+    -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -823,  -346,
+     420,  -823,  -823,  -823,  -823,  -823,  -823,   301,   435,  -823,
+    -823,  -823,   -20,  -823,  -823,  -155,  -823,  -823,  -823,  -823,
+    -823,  -823,  -170,  -823,  -823,  -186,  -823,  -823,  -823,  -823,
+    -823
   };
 
   const short int
@@ -4208,443 +4237,448 @@ namespace isc { namespace dhcp {
   {
       -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    88,    41,    42,
-      73,   604,    92,    93,    43,    72,    89,    90,   619,   799,
-     892,   893,   352,    45,    74,   101,   102,   103,   361,    47,
-      75,   139,   140,   141,   142,   143,   144,   145,   146,   380,
-     147,   371,    49,    76,   173,   174,   175,   401,   176,   148,
-     372,   149,   373,   150,   374,   711,   712,   713,   839,   690,
-     691,   692,   820,  1013,   693,   821,   694,   822,   695,   823,
-     696,   697,   439,   698,   699,   700,   701,   702,   703,   704,
-     705,   706,   829,   707,   708,   832,   151,   390,   745,   746,
-     747,   859,   152,   387,   732,   733,   734,   735,   153,   389,
-     740,   741,   742,   743,   154,   388,   155,   393,   756,   757,
-     758,   868,    65,    84,   306,   307,   308,   452,   309,   453,
-     156,   394,   765,   766,   767,   768,   769,   770,   771,   772,
-     157,   381,   715,   716,   717,   842,    51,    77,   195,   196,
-     197,   407,   198,   408,   199,   409,   200,   414,   201,   413,
-     202,   412,   628,   203,   204,   158,   386,   727,   728,   729,
-     851,   944,   945,   159,   382,    59,    81,   719,   720,   721,
-     845,    61,    82,   271,   272,   273,   274,   275,   276,   277,
-     438,   278,   442,   279,   441,   280,   281,   443,   282,   160,
-     383,   723,   724,   725,   848,    63,    83,   292,   293,   294,
-     295,   296,   447,   297,   298,   299,   300,   206,   405,   801,
-     802,   803,   894,    53,    78,   217,   218,   219,   418,   161,
-     384,   162,   385,   209,   406,   805,   806,   807,   897,    55,
-      79,   233,   234,   235,   421,   236,   237,   423,   238,   239,
-     163,   392,   752,   753,   754,   865,    57,    80,   251,   252,
-     253,   254,   429,   255,   430,   256,   431,   257,   432,   258,
-     433,   259,   434,   260,   428,   211,   415,   810,   811,   900,
-     164,   391,   749,   750,   862,   962,   963,   964,   965,   966,
-    1026,   967,   165,   395,   782,   783,   784,   879,  1035,   785,
-     786,   880,   787,   788,   166,   167,   397,   794,   795,   796,
-     886,   797,   887,   168,   398,    67,    85,   329,   330,   331,
-     332,   457,   333,   458,   334,   335,   460,   336,   337,   338,
-     463,   655,   339,   464,   340,   341,   342,   343,   468,   662,
-     344,   469,   345,   470,   346,   471,   104,   363,   105,   364,
-     106,   365,   169,   369,   370,    71,    87,   353,   354,   355,
-     477,   107,   362,    69,    86,   348,   349,   350,   474,   813,
-     814,   902,  1003,  1004,  1005,  1006,  1045,  1007,  1043,  1060,
-    1061,  1062,  1069,  1070,  1071,  1076,  1072,  1073,  1074
+      73,   608,    92,    93,    43,    72,    89,    90,   624,   804,
+     897,   898,   354,    45,    74,   101,   102,   103,   363,    47,
+      75,   140,   141,   142,   143,   144,   145,   146,   147,   382,
+     148,   373,    49,    76,   175,   176,   177,   404,   178,   149,
+     374,   150,   375,   151,   376,   716,   717,   718,   844,   695,
+     696,   697,   825,  1018,   698,   826,   699,   827,   700,   828,
+     701,   702,   442,   703,   704,   705,   706,   707,   708,   709,
+     710,   711,   834,   712,   713,   837,   152,   392,   750,   751,
+     752,   864,   153,   389,   737,   738,   739,   740,   154,   391,
+     745,   746,   747,   748,   155,   390,   156,   395,   761,   762,
+     763,   873,    65,    84,   308,   309,   310,   455,   311,   456,
+     157,   396,   770,   771,   772,   773,   774,   775,   776,   777,
+     158,   383,   720,   721,   722,   847,    51,    77,   197,   198,
+     199,   410,   200,   411,   201,   412,   202,   417,   203,   416,
+     204,   415,   633,   205,   206,   159,   388,   732,   733,   734,
+     856,   949,   950,   160,   384,    59,    81,   724,   725,   726,
+     850,    61,    82,   273,   274,   275,   276,   277,   278,   279,
+     441,   280,   445,   281,   444,   282,   283,   446,   284,   161,
+     385,   728,   729,   730,   853,    63,    83,   294,   295,   296,
+     297,   298,   450,   299,   300,   301,   302,   208,   408,   806,
+     807,   808,   899,    53,    78,   219,   220,   221,   421,   162,
+     386,   163,   387,   211,   409,   810,   811,   812,   902,    55,
+      79,   235,   236,   237,   424,   238,   239,   426,   240,   241,
+     164,   394,   757,   758,   759,   870,    57,    80,   253,   254,
+     255,   256,   432,   257,   433,   258,   434,   259,   435,   260,
+     436,   261,   437,   262,   431,   213,   418,   815,   816,   905,
+     165,   393,   754,   755,   867,   967,   968,   969,   970,   971,
+    1031,   972,   166,   397,   787,   788,   789,   884,  1040,   790,
+     791,   885,   792,   793,   167,   168,   399,   799,   800,   801,
+     891,   802,   892,   169,   400,   170,   401,    67,    85,   331,
+     332,   333,   334,   460,   335,   461,   336,   337,   463,   338,
+     339,   340,   466,   660,   341,   467,   342,   343,   344,   345,
+     471,   667,   346,   472,   347,   473,   348,   474,   104,   365,
+     105,   366,   106,   367,   171,   371,   372,    71,    87,   355,
+     356,   357,   480,   107,   364,    69,    86,   350,   351,   352,
+     477,   818,   819,   907,  1008,  1009,  1010,  1011,  1050,  1012,
+    1048,  1065,  1066,  1067,  1074,  1075,  1076,  1081,  1077,  1078,
+    1079
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-     100,   138,   172,   190,   213,   227,   247,   191,   269,   288,
-     305,   326,   779,   739,   177,   207,   220,   231,   249,   192,
-     283,   301,   193,   327,   709,   489,   178,   208,   221,   232,
-     250,   937,   284,   302,   938,   328,   270,   289,   939,   194,
-     942,   290,   210,   291,   214,   228,   215,   229,   943,   949,
-      40,    33,   108,    34,    94,    35,   109,   854,   110,   730,
-     855,   111,   112,   113,    32,   205,   216,   230,   248,   351,
-     303,   304,   262,   730,   737,   241,   738,   170,   171,   122,
-     263,   629,   808,    44,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   635,   636,   637,   857,   123,   124,   858,
-     367,   263,    46,   264,   265,   368,    48,   266,   267,   268,
-     123,   124,   122,   303,   304,   399,   955,   956,   123,   124,
-     400,   125,   126,   127,   128,   129,    50,   130,   123,   124,
-     123,   124,   131,    52,   403,   416,   773,    54,   731,   404,
-     417,   132,    99,   863,   133,   678,   864,   240,   123,   124,
-      56,   134,    58,   241,   242,   243,   244,   245,   246,   135,
-     136,   673,   903,   137,    60,   904,   674,   675,   676,   677,
-     678,   679,   680,   681,   682,   683,   684,   685,   686,   687,
-     688,    62,   123,   124,  1065,    64,    95,  1066,  1067,  1068,
-     263,  1009,  1010,  1011,  1012,    96,    97,    98,    66,   789,
-     790,    99,   419,   937,   426,  1063,   938,   420,  1064,   427,
-     939,    68,   942,    99,    99,    36,    37,    38,    39,   454,
-     943,   949,    99,   263,   455,    70,    99,   774,   775,   776,
-     777,   472,    99,   121,    99,    91,   473,   122,   653,   654,
-     123,   124,   263,   285,   264,   265,   286,   287,   212,   475,
-     671,   347,    99,   478,   476,   123,   124,   478,   479,   123,
-     124,   739,   593,   399,   356,   357,   923,   358,   816,   114,
-     115,   116,   117,   187,   475,   478,   188,   122,   359,   817,
-     818,   779,   657,   658,   659,   660,    99,   179,   360,   180,
-     366,   122,   375,   100,   376,   123,   124,   181,   182,   183,
-     184,   185,   186,   377,   222,   223,   224,   225,   226,   123,
-     124,    99,   378,   187,   379,   403,   188,   131,   661,   996,
-     819,   997,   998,   836,   189,   138,   396,   187,   837,   172,
-     188,   759,   760,   761,   762,   763,   764,   402,   836,   482,
-     410,   177,   190,   838,    99,   213,   191,   625,   626,   627,
-     860,   877,   227,   178,   207,   861,   878,   220,   192,    99,
-     884,   193,   247,    99,   231,   885,   208,   411,   888,   221,
-     472,   436,   269,   889,   249,   890,   232,   288,   194,   422,
-     424,   210,   435,   836,   283,   214,   250,   215,  1019,   301,
-     480,   481,   228,   425,   229,   437,   284,   416,   326,    99,
-     270,   302,  1020,  1023,   205,   289,   440,   216,  1024,   290,
-     327,   291,   444,    99,   230,   445,   454,   114,   115,   116,
-     117,  1031,   328,   120,   248,   122,   263,   123,   124,   419,
-     426,  1046,  1080,   446,  1040,  1041,  1047,  1081,  1032,  1033,
-    1034,   448,   449,   123,   124,   451,   182,   183,   450,   185,
-     186,   456,   459,   461,   462,   465,   466,   467,   483,   484,
-     485,   187,   486,   487,   188,   490,   491,   492,   493,   494,
-     495,   496,   189,   497,   498,   499,   500,   501,   502,   503,
-     504,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   505,   506,   507,   508,   509,
-     510,   511,   324,   325,   512,   513,   514,   515,   516,   517,
-     518,   520,   521,   523,   138,   524,   525,   526,   590,   591,
-     592,   172,   689,   689,   527,   528,   529,   530,   531,   532,
-     533,    99,   535,   177,   537,   539,   538,   543,   544,   540,
-     541,   778,   791,   326,   545,   178,   546,    99,   547,   548,
-     549,   551,   552,   780,   792,   327,   553,   554,   555,   556,
-     557,   559,   560,   561,   563,   781,   793,   328,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,   564,   566,   567,   568,   569,   570,   571,
-     572,   573,   574,   575,   576,   577,   578,   649,   579,   580,
-     581,   583,   585,   587,   599,   605,   911,   588,   589,   594,
-     595,   596,   597,   598,   600,   601,   602,   744,   606,    34,
-     668,   607,   608,   609,   841,   611,   610,   612,   613,   622,
-     736,   614,   615,   616,   617,   618,   620,   621,   623,   624,
-     630,   631,   666,   656,   667,   710,   632,   633,   634,   638,
-     639,   640,   641,   642,   643,   644,   645,   646,   647,   648,
-     714,   718,   722,   726,   748,   751,   755,   650,   651,   800,
-     804,   812,   824,   652,   825,   826,   827,   828,   830,   663,
-     831,   833,   834,   664,   665,   835,   840,   844,   843,   846,
-     847,   849,   850,   853,   852,   488,   867,   856,   866,   870,
-     869,   871,   872,   873,   874,   875,   876,   881,   882,   883,
-     891,   896,   895,   898,   899,   913,   905,   901,   906,   907,
-     908,   909,   910,   915,   918,   953,   912,   980,   914,   916,
-     981,   917,   919,   920,   986,   973,   921,   974,   975,   976,
-     977,   978,   982,   983,   984,   987,   989,   990,  1050,   995,
-    1021,  1022,  1014,  1027,  1015,  1016,  1028,  1029,  1017,  1018,
-    1025,  1030,   689,  1044,  1049,   689,  1052,  1054,   190,  1057,
-     603,   269,   191,  1059,   288,  1036,  1037,   931,  1077,  1078,
-     207,   932,  1079,   283,   192,  1053,   301,   193,   957,   947,
-    1082,   247,   208,   933,   305,   284,   934,  1038,   302,   270,
-     960,   948,   289,   249,   194,   936,   290,   210,   291,  1039,
-     778,  1042,   961,   935,   791,   250,   958,   940,  1056,   941,
-     213,  1058,   780,   227,   669,   815,   792,   672,   999,  1087,
-     205,   519,   220,  1083,   781,   231,  1084,  1085,   793,   946,
-    1001,   924,   522,   922,   221,   954,   951,   232,   952,   972,
-     959,   565,  1002,   248,   971,   979,  1000,   926,   950,   925,
-     214,   534,   215,   228,  1048,   229,   261,   928,   927,   930,
-     558,   992,   929,   994,   991,   970,   562,   969,   993,   550,
-     809,   968,   216,   542,  1051,   230,   536,   985,   582,   988,
-     798,   670,  1008,   586,  1055,  1075,  1086,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   584,     0,     0,     0,
+     100,   139,   174,   192,   215,   229,   249,   193,   271,   290,
+     307,   328,   784,   744,   179,   209,   222,   233,   251,   194,
+     285,   303,   195,   329,   714,   492,   180,   210,   223,   234,
+     252,    40,   286,   304,   942,   330,   272,   291,   943,   196,
+     944,   292,   212,   293,   216,   230,   217,   231,   947,   948,
+     954,    33,   108,    34,    94,    35,   109,    44,   110,   735,
+     607,   111,   112,   113,    32,   207,   218,   232,   250,   353,
+     305,   306,   264,   243,   607,    46,   859,   172,   173,   860,
+     813,   122,   658,   659,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,    48,   224,   225,   226,   227,   228,   123,
+     124,   265,   862,   266,   267,   863,    91,   268,   269,   270,
+     123,   124,   122,   662,   663,   664,   665,   189,   123,   124,
+     190,   125,   126,   127,   128,   129,    50,   130,   123,   124,
+     123,   124,   131,   369,   121,   402,    52,   778,   370,   736,
+     403,   132,   868,    99,   133,   869,   683,   242,    54,   666,
+      56,   134,    58,   243,   244,   245,   246,   247,   248,   135,
+     136,   678,   908,   137,   138,   909,   679,   680,   681,   682,
+     683,   684,   685,   686,   687,   688,   689,   690,   691,   692,
+     693,   406,  1068,   123,   124,  1069,   407,    95,   634,   419,
+     265,    60,   123,   124,   420,    62,    96,    97,    98,    64,
+     640,   641,   642,   422,    99,    66,   942,   358,   423,    68,
+     943,    70,   944,   349,    99,    99,    36,    37,    38,    39,
+     947,   948,   954,    99,   630,   631,   632,    99,   779,   780,
+     781,   782,   359,    99,   360,    99,   361,   265,   287,   266,
+     267,   288,   289,   794,   795,   114,   115,   116,   117,   305,
+     306,   362,   676,   122,   123,   124,   764,   765,   766,   767,
+     768,   769,   744,   181,   368,   182,   377,   928,   122,   265,
+     378,   123,   124,   183,   184,   185,   186,   187,   188,   379,
+     429,   438,   784,   122,   380,   430,   123,   124,    99,   189,
+     381,   457,   190,   131,   214,   100,   458,    99,   475,   478,
+     191,   123,   124,   476,   479,   960,   961,   114,   115,   116,
+     117,   398,    99,   120,   405,   122,   265,   413,   481,   189,
+     481,   439,   190,   482,   265,   597,  1070,   414,   139,  1071,
+    1072,  1073,   174,   123,   124,   425,   184,   185,   402,   187,
+     188,   123,   124,   821,   179,   192,   427,   478,   215,   193,
+     428,   189,   822,   481,   190,   229,   180,   209,   823,    99,
+     222,   194,   191,   406,   195,   249,   841,   233,   824,   210,
+     440,   842,   223,   483,   484,   271,    99,   251,   841,   234,
+     290,   196,   443,   843,   212,   447,   451,   285,   216,   252,
+     217,    99,   303,   123,   124,   230,   448,   231,   449,   286,
+     865,   328,   452,   272,   304,   866,    99,   207,   291,   453,
+     218,   882,   292,   329,   293,   889,   883,   232,   454,   485,
+     890,  1001,   459,  1002,  1003,   330,   893,   250,   475,   841,
+     419,   894,  1028,   895,  1024,  1025,   457,  1029,    99,   422,
+     429,  1036,  1051,   498,  1045,  1046,    99,  1052,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,  1085,  1014,  1015,  1016,  1017,  1086,   462,   326,
+     327,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,   735,   742,   464,   743,
+    1037,  1038,  1039,   465,   468,   469,   470,   486,    99,   487,
+     488,   489,   594,   595,   596,   490,   493,   494,   495,   496,
+     497,   499,   500,   503,   501,   504,   502,   505,   139,   506,
+     507,   508,   509,   510,   511,   174,   694,   694,   512,   513,
+     514,   515,   516,   517,   518,   519,   520,   179,   521,   522,
+     524,   525,   527,   528,   529,   783,   796,   530,   328,   180,
+     531,   532,   533,   534,   535,   536,   537,   785,   797,   539,
+     329,   541,   542,   543,   544,   545,   547,   548,   549,   786,
+     798,   550,   330,   551,   552,   553,   555,   556,   557,   558,
+     559,   560,   654,   561,   563,   567,   564,   565,   568,   570,
+     571,   572,   573,   574,   577,   575,   578,   582,   583,   576,
+     584,   585,   587,   579,   580,   673,   589,   581,   591,   661,
+     592,   603,   593,   598,   599,   600,   601,   602,   604,   605,
+     606,   609,   610,    34,   611,   612,   613,   627,   615,   614,
+     616,   617,   628,   629,   618,   619,   620,   622,   623,   625,
+     626,   635,   637,   636,   638,   639,   643,   644,   645,   646,
+     647,   648,   649,   650,   671,   651,   652,   653,   655,   672,
+     715,   829,   719,   723,   656,   727,   731,   753,   657,   668,
+     669,   756,   749,   760,   805,   809,   817,   670,   830,   831,
+     832,   833,   835,   836,   838,   839,   840,   846,   621,   845,
+     849,   848,   851,   852,   854,   855,   858,   857,   491,   872,
+     861,   871,   875,   874,   876,   877,   878,   879,   880,   881,
+     886,   887,   888,   901,   896,   900,   904,   903,   911,   915,
+     906,   910,   912,   913,   914,   917,   916,   920,   923,   918,
+     958,   919,   921,   985,   986,   991,   922,   924,   992,   925,
+     995,   994,  1000,  1032,  1026,  1034,  1062,   926,  1027,   978,
+     979,  1033,  1035,   980,   981,  1049,   982,  1054,  1057,   983,
+    1059,  1082,  1064,  1083,  1084,  1087,   987,   694,   674,  1019,
+     694,   988,   989,   192,   741,   523,   271,   193,   526,   290,
+    1020,  1021,   936,   820,   677,   209,   937,   929,   285,   194,
+     927,   303,   195,   962,   952,  1058,   249,   210,   938,   307,
+     286,   939,  1022,   304,   272,   965,   953,   291,   251,   196,
+     941,   292,   212,   293,  1023,   783,  1030,   966,   940,   796,
+     252,   963,   945,  1055,   946,   215,   959,   785,   229,   956,
+     977,   797,  1041,  1004,  1088,   207,  1089,   222,   984,   786,
+     233,  1042,  1043,   798,   951,  1006,   957,   976,   931,   223,
+     930,   538,   234,   955,  1053,   964,   569,  1007,   250,  1044,
+     263,  1005,   933,   932,   935,   216,   562,   217,   230,  1090,
+     231,   934,   997,   566,   996,   540,   999,   546,   975,   998,
+     814,   974,  1056,   554,   973,   990,  1047,   218,  1013,   803,
+     232,  1061,  1063,   993,   675,  1092,  1060,   586,  1080,  1091,
+       0,   590,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   588,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   931,
-       0,     0,     0,   932,     0,   957,     0,     0,     0,     0,
-       0,   947,     0,     0,     0,   933,     0,   960,   934,     0,
-       0,     0,   999,   948,     0,     0,     0,   936,     0,   961,
-       0,     0,     0,   958,  1001,   935,     0,     0,     0,   940,
-       0,   941,     0,     0,     0,     0,  1002,     0,     0,     0,
-    1000,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   946,     0,     0,     0,     0,     0,   959
+       0,     0,     0,     0,   936,     0,     0,     0,   937,     0,
+     962,     0,     0,     0,     0,     0,   952,     0,     0,     0,
+     938,     0,   965,   939,     0,     0,     0,  1004,   953,     0,
+       0,     0,   941,     0,   966,     0,     0,     0,   963,  1006,
+     940,     0,     0,     0,   945,     0,   946,     0,     0,     0,
+       0,  1007,     0,     0,     0,  1005,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   951,     0,     0,     0,
+       0,     0,   964
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
       74,    75,    76,    77,    78,    79,    80,    77,    82,    83,
-      84,    85,   615,   609,    76,    77,    78,    79,    80,    77,
-      82,    83,    77,    85,   597,   369,    76,    77,    78,    79,
-      80,   851,    82,    83,   851,    85,    82,    83,   851,    77,
-     851,    83,    77,    83,    78,    79,    78,    79,   851,   851,
-      17,     5,     7,     7,    10,     9,    11,     3,    13,    90,
-       6,    16,    17,    18,     0,    77,    78,    79,    80,    12,
-      97,    98,    19,    90,    91,    88,    93,    14,    15,    47,
-      48,   531,    95,     7,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,   543,   544,   545,     3,    65,    66,     6,
-       3,    48,     7,    50,    51,     8,     7,    54,    55,    56,
-      65,    66,    47,    97,    98,     3,    84,    85,    65,    66,
-       8,    76,    77,    78,    79,    80,     7,    82,    65,    66,
-      65,    66,    87,     7,     3,     3,    19,     7,   169,     8,
-       8,    96,   169,     3,    99,    28,     6,    82,    65,    66,
+      84,    85,   619,   613,    76,    77,    78,    79,    80,    77,
+      82,    83,    77,    85,   601,   371,    76,    77,    78,    79,
+      80,    17,    82,    83,   856,    85,    82,    83,   856,    77,
+     856,    83,    77,    83,    78,    79,    78,    79,   856,   856,
+     856,     5,     7,     7,    10,     9,    11,     7,    13,    90,
+     507,    16,    17,    18,     0,    77,    78,    79,    80,    12,
+      97,    98,    19,    88,   521,     7,     3,    14,    15,     6,
+      95,    47,   134,   135,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,     7,    60,    61,    62,    63,    64,    65,
+      66,    48,     3,    50,    51,     6,   170,    54,    55,    56,
+      65,    66,    47,   137,   138,   139,   140,    83,    65,    66,
+      86,    76,    77,    78,    79,    80,     7,    82,    65,    66,
+      65,    66,    87,     3,    46,     3,     7,    19,     8,   170,
+       8,    96,     3,   170,    99,     6,    28,    82,     7,   173,
        7,   106,     7,    88,    89,    90,    91,    92,    93,   114,
-     115,    19,     3,   118,     7,     6,    24,    25,    26,    27,
+     115,    19,     3,   118,   119,     6,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,     7,    65,    66,   145,     7,   142,   148,   149,   150,
-      48,    20,    21,    22,    23,   151,   152,   153,     7,   116,
-     117,   169,     3,  1023,     3,     3,  1023,     8,     6,     8,
-    1023,     7,  1023,   169,   169,   169,   170,   171,   172,     3,
-    1023,  1023,   169,    48,     8,     7,   169,   110,   111,   112,
-     113,     3,   169,    46,   169,   169,     8,    47,   133,   134,
-      65,    66,    48,    49,    50,    51,    52,    53,    58,     3,
-     594,   143,   169,     3,     8,    65,    66,     3,     8,    65,
-      66,   857,     8,     3,     6,     3,   839,     4,     8,    39,
-      40,    41,    42,    83,     3,     3,    86,    47,     8,     8,
-       8,   884,   136,   137,   138,   139,   169,    57,     3,    59,
-       4,    47,     4,   367,     4,    65,    66,    67,    68,    69,
-      70,    71,    72,     4,    60,    61,    62,    63,    64,    65,
-      66,   169,     4,    83,     4,     3,    86,    87,   172,   144,
-       8,   146,   147,     3,    94,   399,     4,    83,     8,   403,
-      86,   100,   101,   102,   103,   104,   105,     4,     3,   169,
-       4,   403,   416,     8,   169,   419,   416,    73,    74,    75,
-       3,     3,   426,   403,   416,     8,     8,   419,   416,   169,
-       3,   416,   436,   169,   426,     8,   416,     4,     3,   419,
-       3,     3,   446,     8,   436,     8,   426,   451,   416,     4,
-       4,   416,     8,     3,   446,   419,   436,   419,     8,   451,
-     357,   358,   426,     4,   426,     8,   446,     3,   472,   169,
-     446,   451,     8,     3,   416,   451,     4,   419,     8,   451,
-     472,   451,     4,   169,   426,     8,     3,    39,    40,    41,
-      42,     8,   472,    45,   436,    47,    48,    65,    66,     3,
-       3,     3,     3,     3,     8,     8,     8,     8,   107,   108,
-     109,     4,     4,    65,    66,     3,    68,    69,     8,    71,
-      72,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,    83,     4,     4,    86,     4,     4,     4,     4,     4,
-     170,   170,    94,   170,   170,   170,     4,     4,     4,     4,
-       4,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,     4,     4,     4,     4,     4,
-       4,     4,   140,   141,     4,     4,     4,     4,   170,     4,
-       4,     4,   172,     4,   588,     4,     4,     4,   485,   486,
-     487,   595,   596,   597,     4,   170,   172,     4,     4,     4,
-       4,   169,     4,   595,     4,     4,   170,     4,     4,   170,
-     170,   615,   616,   617,     4,   595,     4,   169,     4,     4,
-       4,     4,     4,   615,   616,   617,   170,     4,     4,     4,
-     172,     4,   172,   172,     4,   615,   616,   617,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,     4,   172,     4,     4,   170,     4,   170,
-     170,     4,     4,   172,   172,   172,     4,   564,     4,     4,
-       4,     4,     4,     4,   169,   169,   172,     7,     7,     7,
-       7,     7,     7,     5,     5,     5,     5,    81,     5,     7,
-     587,     5,     5,     5,     3,     5,     7,     5,     5,   169,
-     608,     7,     7,     7,     7,     5,     5,     5,   169,   169,
-     169,     7,     5,   135,     5,     7,   169,   169,   169,   169,
-     169,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-       7,     7,     7,     7,     7,     7,     7,   169,   169,     7,
-       7,     7,     4,   169,     4,     4,     4,     4,     4,   169,
-       4,     4,     4,   169,   169,     4,     6,     3,     6,     6,
-       3,     6,     3,     3,     6,   367,     3,     6,     6,     3,
-       6,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-     169,     3,     6,     6,     3,   172,     6,     8,     4,     4,
-       4,     4,   170,     4,     4,     4,   170,     4,   170,   170,
-       4,   170,   170,   170,     4,   170,   172,   170,   170,   170,
-     170,   170,   170,   170,   170,     4,     6,     3,   172,     4,
-       8,     8,   169,     4,   169,   169,     8,     3,   169,   169,
-     169,     8,   836,     4,     4,   839,     4,     4,   842,     5,
-     504,   845,   842,     7,   848,   169,   169,   851,     4,     4,
-     842,   851,     4,   845,   842,   170,   848,   842,   862,   851,
-       4,   865,   842,   851,   868,   845,   851,   169,   848,   845,
-     862,   851,   848,   865,   842,   851,   848,   842,   848,   169,
-     884,   169,   862,   851,   888,   865,   862,   851,   169,   851,
-     894,   169,   884,   897,   588,   667,   888,   595,   902,   169,
-     842,   399,   894,   172,   884,   897,   170,   170,   888,   851,
-     902,   841,   403,   836,   894,   860,   854,   897,   857,   870,
-     862,   454,   902,   865,   868,   877,   902,   844,   853,   842,
-     894,   416,   894,   897,  1023,   897,    81,   847,   845,   850,
-     446,   896,   848,   899,   894,   867,   451,   865,   897,   436,
-     631,   863,   894,   426,  1029,   897,   419,   884,   472,   888,
-     617,   589,   903,   478,  1046,  1063,  1080,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   475,    -1,    -1,    -1,
+      38,     3,     3,    65,    66,     6,     8,   143,   535,     3,
+      48,     7,    65,    66,     8,     7,   152,   153,   154,     7,
+     547,   548,   549,     3,   170,     7,  1028,     6,     8,     7,
+    1028,     7,  1028,   144,   170,   170,   170,   171,   172,   173,
+    1028,  1028,  1028,   170,    73,    74,    75,   170,   110,   111,
+     112,   113,     3,   170,     4,   170,     8,    48,    49,    50,
+      51,    52,    53,   116,   117,    39,    40,    41,    42,    97,
+      98,     3,   598,    47,    65,    66,   100,   101,   102,   103,
+     104,   105,   862,    57,     4,    59,     4,   844,    47,    48,
+       4,    65,    66,    67,    68,    69,    70,    71,    72,     4,
+       3,     8,   889,    47,     4,     8,    65,    66,   170,    83,
+       4,     3,    86,    87,    58,   369,     8,   170,     3,     3,
+      94,    65,    66,     8,     8,    84,    85,    39,    40,    41,
+      42,     4,   170,    45,     4,    47,    48,     4,     3,    83,
+       3,     3,    86,     8,    48,     8,   146,     4,   402,   149,
+     150,   151,   406,    65,    66,     4,    68,    69,     3,    71,
+      72,    65,    66,     8,   406,   419,     4,     3,   422,   419,
+       4,    83,     8,     3,    86,   429,   406,   419,     8,   170,
+     422,   419,    94,     3,   419,   439,     3,   429,     8,   419,
+       8,     8,   422,   359,   360,   449,   170,   439,     3,   429,
+     454,   419,     4,     8,   419,     4,     4,   449,   422,   439,
+     422,   170,   454,    65,    66,   429,     8,   429,     3,   449,
+       3,   475,     4,   449,   454,     8,   170,   419,   454,     8,
+     422,     3,   454,   475,   454,     3,     8,   429,     3,   170,
+       8,   145,     4,   147,   148,   475,     3,   439,     3,     3,
+       3,     8,     3,     8,     8,     8,     3,     8,   170,     3,
+       3,     8,     3,   171,     8,     8,   170,     8,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,     3,    20,    21,    22,    23,     8,     4,   141,
+     142,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,    90,    91,     4,    93,
+     107,   108,   109,     4,     4,     4,     4,     4,   170,     4,
+       4,     4,   488,   489,   490,     4,     4,     4,     4,     4,
+       4,   171,   171,     4,   171,     4,   171,     4,   592,     4,
+       4,     4,     4,     4,     4,   599,   600,   601,     4,     4,
+       4,     4,     4,     4,     4,   171,     4,   599,     4,     4,
+       4,   173,     4,     4,     4,   619,   620,     4,   622,   599,
+       4,   171,   173,     4,     4,     4,     4,   619,   620,     4,
+     622,     4,   171,     4,   171,   171,     4,     4,     4,   619,
+     620,     4,   622,     4,     4,     4,     4,     4,   171,     4,
+       4,     4,   568,   173,     4,     4,   173,   173,     4,   173,
+       4,     4,   171,     4,     4,   171,     4,     4,     4,   171,
+       4,     4,     4,   173,   173,   591,     4,   173,     4,   136,
+       7,   170,     7,     7,     7,     7,     7,     5,     5,     5,
+       5,   170,     5,     7,     5,     5,     5,   170,     5,     7,
+       5,     5,   170,   170,     7,     7,     7,     7,     5,     5,
+       5,   170,   170,     7,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,     5,   170,   170,   170,   170,     5,
+       7,     4,     7,     7,   170,     7,     7,     7,   170,   170,
+     170,     7,    81,     7,     7,     7,     7,   170,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     3,   521,     6,
+       3,     6,     6,     3,     6,     3,     3,     6,   369,     3,
+       6,     6,     3,     6,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     3,   170,     6,     3,     6,     4,   171,
+       8,     6,     4,     4,     4,   171,   173,     4,     4,   173,
+       4,   171,   171,     4,     4,     4,   171,   171,     4,   171,
+       3,     6,     4,     4,     8,     3,     5,   173,     8,   171,
+     171,     8,     8,   171,   171,     4,   171,     4,     4,   171,
+       4,     4,     7,     4,     4,     4,   171,   841,   592,   170,
+     844,   171,   171,   847,   612,   402,   850,   847,   406,   853,
+     170,   170,   856,   672,   599,   847,   856,   846,   850,   847,
+     841,   853,   847,   867,   856,   171,   870,   847,   856,   873,
+     850,   856,   170,   853,   850,   867,   856,   853,   870,   847,
+     856,   853,   847,   853,   170,   889,   170,   867,   856,   893,
+     870,   867,   856,   173,   856,   899,   865,   889,   902,   859,
+     875,   893,   170,   907,   173,   847,   171,   899,   882,   889,
+     902,   170,   170,   893,   856,   907,   862,   873,   849,   899,
+     847,   419,   902,   858,  1028,   867,   457,   907,   870,   170,
+      81,   907,   852,   850,   855,   899,   449,   899,   902,   171,
+     902,   853,   901,   454,   899,   422,   904,   429,   872,   902,
+     636,   870,  1034,   439,   868,   889,   170,   899,   908,   622,
+     902,   170,   170,   893,   593,   170,  1051,   475,  1068,  1085,
+      -1,   481,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   478,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
-      -1,    -1,    -1,  1023,    -1,  1029,    -1,    -1,    -1,    -1,
-      -1,  1023,    -1,    -1,    -1,  1023,    -1,  1029,  1023,    -1,
-      -1,    -1,  1046,  1023,    -1,    -1,    -1,  1023,    -1,  1029,
-      -1,    -1,    -1,  1029,  1046,  1023,    -1,    -1,    -1,  1023,
-      -1,  1023,    -1,    -1,    -1,    -1,  1046,    -1,    -1,    -1,
-    1046,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1023,    -1,    -1,    -1,    -1,    -1,  1029
+      -1,    -1,    -1,    -1,  1028,    -1,    -1,    -1,  1028,    -1,
+    1034,    -1,    -1,    -1,    -1,    -1,  1028,    -1,    -1,    -1,
+    1028,    -1,  1034,  1028,    -1,    -1,    -1,  1051,  1028,    -1,
+      -1,    -1,  1028,    -1,  1034,    -1,    -1,    -1,  1034,  1051,
+    1028,    -1,    -1,    -1,  1028,    -1,  1028,    -1,    -1,    -1,
+      -1,  1051,    -1,    -1,    -1,  1051,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1028,    -1,    -1,    -1,
+      -1,    -1,  1034
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,     0,     5,     7,     9,   169,   170,   171,   172,
-     190,   191,   192,   197,     7,   206,     7,   212,     7,   225,
-       7,   319,     7,   396,     7,   412,     7,   429,     7,   348,
-       7,   354,     7,   378,     7,   295,     7,   488,     7,   536,
-       7,   528,   198,   193,   207,   213,   226,   320,   397,   413,
-     430,   349,   355,   379,   296,   489,   537,   529,   190,   199,
-     200,   169,   195,   196,    10,   142,   151,   152,   153,   169,
-     205,   208,   209,   210,   519,   521,   523,   534,     7,    11,
+       0,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,     0,     5,     7,     9,   170,   171,   172,   173,
+     191,   192,   193,   198,     7,   207,     7,   213,     7,   226,
+       7,   320,     7,   397,     7,   413,     7,   430,     7,   349,
+       7,   355,     7,   379,     7,   296,     7,   491,     7,   539,
+       7,   531,   199,   194,   208,   214,   227,   321,   398,   414,
+     431,   350,   356,   380,   297,   492,   540,   532,   191,   200,
+     201,   170,   196,   197,    10,   143,   152,   153,   154,   170,
+     206,   209,   210,   211,   522,   524,   526,   537,     7,    11,
       13,    16,    17,    18,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    65,    66,    76,    77,    78,    79,    80,
-      82,    87,    96,    99,   106,   114,   115,   118,   205,   214,
-     215,   216,   217,   218,   219,   220,   221,   223,   232,   234,
-     236,   269,   275,   281,   287,   289,   303,   313,   338,   346,
-     372,   402,   404,   423,   453,   465,   477,   478,   486,   525,
-      14,    15,   205,   227,   228,   229,   231,   402,   404,    57,
-      59,    67,    68,    69,    70,    71,    72,    83,    86,    94,
-     205,   216,   217,   218,   219,   321,   322,   323,   325,   327,
-     329,   331,   333,   336,   337,   372,   390,   402,   404,   406,
-     423,   448,    58,   205,   329,   331,   372,   398,   399,   400,
-     402,   404,    60,    61,    62,    63,    64,   205,   329,   331,
-     372,   402,   404,   414,   415,   416,   418,   419,   421,   422,
-      82,    88,    89,    90,    91,    92,    93,   205,   372,   402,
-     404,   431,   432,   433,   434,   436,   438,   440,   442,   444,
-     446,   346,    19,    48,    50,    51,    54,    55,    56,   205,
-     254,   356,   357,   358,   359,   360,   361,   362,   364,   366,
-     368,   369,   371,   402,   404,    49,    52,    53,   205,   254,
-     360,   366,   380,   381,   382,   383,   384,   386,   387,   388,
-     389,   402,   404,    97,    98,   205,   297,   298,   299,   301,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   140,   141,   205,   402,   404,   490,
-     491,   492,   493,   495,   497,   498,   500,   501,   502,   505,
-     507,   508,   509,   510,   513,   515,   517,   143,   538,   539,
-     540,    12,   205,   530,   531,   532,     6,     3,     4,     8,
-       3,   211,   535,   520,   522,   524,     4,     3,     8,   526,
-     527,   224,   233,   235,   237,     4,     4,     4,     4,     4,
-     222,   314,   347,   373,   403,   405,   339,   276,   288,   282,
-     270,   454,   424,   290,   304,   466,     4,   479,   487,     3,
-       8,   230,     4,     3,     8,   391,   407,   324,   326,   328,
-       4,     4,   334,   332,   330,   449,     3,     8,   401,     3,
-       8,   417,     4,   420,     4,     4,     3,     8,   447,   435,
-     437,   439,   441,   443,   445,     8,     3,     8,   363,   255,
-       4,   367,   365,   370,     4,     8,     3,   385,     4,     4,
-       8,     3,   300,   302,     3,     8,     4,   494,   496,     4,
-     499,     4,     4,   503,   506,     4,     4,     4,   511,   514,
-     516,   518,     3,     8,   541,     3,     8,   533,     3,     8,
-     190,   190,   169,     4,     4,     4,     4,     4,   209,   530,
-       4,     4,     4,     4,     4,   170,   170,   170,   170,   170,
-       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,   170,     4,     4,   215,
-       4,   172,   228,     4,     4,     4,     4,     4,   170,   172,
-       4,     4,     4,     4,   322,     4,   399,     4,   170,     4,
-     170,   170,   415,     4,     4,     4,     4,     4,     4,     4,
-     433,     4,     4,   170,     4,     4,     4,   172,   358,     4,
-     172,   172,   382,     4,     4,   298,   172,     4,     4,   170,
-       4,   170,   170,     4,     4,   172,   172,   172,     4,     4,
-       4,     4,   491,     4,   539,     4,   531,     4,     7,     7,
-     190,   190,   190,     8,     7,     7,     7,     7,     5,   169,
-       5,     5,     5,   192,   194,   169,     5,     5,     5,     5,
-       7,     5,     5,     5,     7,     7,     7,     7,     5,   201,
-       5,     5,   169,   169,   169,    73,    74,    75,   335,   201,
-     169,     7,   169,   169,   169,   201,   201,   201,   169,   169,
-     169,   169,   169,   169,   169,   169,   169,   169,   169,   190,
-     169,   169,   169,   133,   134,   504,   135,   136,   137,   138,
-     139,   172,   512,   169,   169,   169,     5,     5,   190,   214,
-     538,   530,   227,    19,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,   205,
-     242,   243,   244,   247,   249,   251,   253,   254,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   266,   267,   242,
-       7,   238,   239,   240,     7,   315,   316,   317,     7,   350,
-     351,   352,     7,   374,   375,   376,     7,   340,   341,   342,
-      90,   169,   277,   278,   279,   280,   199,    91,    93,   279,
-     283,   284,   285,   286,    81,   271,   272,   273,     7,   455,
-     456,     7,   425,   426,   427,     7,   291,   292,   293,   100,
-     101,   102,   103,   104,   105,   305,   306,   307,   308,   309,
-     310,   311,   312,    19,   110,   111,   112,   113,   205,   256,
-     402,   404,   467,   468,   469,   472,   473,   475,   476,   116,
-     117,   205,   402,   404,   480,   481,   482,   484,   490,   202,
-       7,   392,   393,   394,     7,   408,   409,   410,    95,   434,
-     450,   451,     7,   542,   543,   238,     8,     8,     8,     8,
-     245,   248,   250,   252,     4,     4,     4,     4,     4,   265,
-       4,     4,   268,     4,     4,     4,     3,     8,     8,   241,
-       6,     3,   318,     6,     3,   353,     6,     3,   377,     6,
-       3,   343,     6,     3,     3,     6,     6,     3,     6,   274,
-       3,     8,   457,     3,     6,   428,     6,     3,   294,     6,
-       3,     4,     4,     4,     4,     4,     4,     3,     8,   470,
-     474,     4,     4,     4,     3,     8,   483,   485,     3,     8,
-       8,   169,   203,   204,   395,     6,     3,   411,     6,     3,
-     452,     8,   544,     3,     6,     6,     4,     4,     4,     4,
-     170,   172,   170,   172,   170,     4,   170,   170,     4,   170,
-     170,   172,   243,   242,   240,   321,   317,   356,   352,   380,
-     376,   205,   216,   217,   218,   219,   254,   313,   325,   327,
-     329,   331,   333,   337,   344,   345,   372,   402,   404,   448,
-     342,   278,   284,     4,   272,    84,    85,   205,   254,   372,
-     402,   404,   458,   459,   460,   461,   462,   464,   456,   431,
-     427,   297,   293,   170,   170,   170,   170,   170,   170,   306,
-       4,     4,   170,   170,   170,   468,     4,     4,   481,     6,
-       3,   398,   394,   414,   410,     4,   144,   146,   147,   205,
-     254,   402,   404,   545,   546,   547,   548,   550,   543,    20,
-      21,    22,    23,   246,   169,   169,   169,   169,   169,     8,
-       8,     8,     8,     3,     8,   169,   463,     4,     8,     3,
-       8,     8,   107,   108,   109,   471,   169,   169,   169,   169,
-       8,     8,   169,   551,     4,   549,     3,     8,   345,     4,
-     172,   460,     4,   170,     4,   546,   169,     5,   169,     7,
-     552,   553,   554,     3,     6,   145,   148,   149,   150,   555,
-     556,   557,   559,   560,   561,   553,   558,     4,     4,     4,
-       3,     8,     4,   172,   170,   170,   556,   169
+      82,    87,    96,    99,   106,   114,   115,   118,   119,   206,
+     215,   216,   217,   218,   219,   220,   221,   222,   224,   233,
+     235,   237,   270,   276,   282,   288,   290,   304,   314,   339,
+     347,   373,   403,   405,   424,   454,   466,   478,   479,   487,
+     489,   528,    14,    15,   206,   228,   229,   230,   232,   403,
+     405,    57,    59,    67,    68,    69,    70,    71,    72,    83,
+      86,    94,   206,   217,   218,   219,   220,   322,   323,   324,
+     326,   328,   330,   332,   334,   337,   338,   373,   391,   403,
+     405,   407,   424,   449,    58,   206,   330,   332,   373,   399,
+     400,   401,   403,   405,    60,    61,    62,    63,    64,   206,
+     330,   332,   373,   403,   405,   415,   416,   417,   419,   420,
+     422,   423,    82,    88,    89,    90,    91,    92,    93,   206,
+     373,   403,   405,   432,   433,   434,   435,   437,   439,   441,
+     443,   445,   447,   347,    19,    48,    50,    51,    54,    55,
+      56,   206,   255,   357,   358,   359,   360,   361,   362,   363,
+     365,   367,   369,   370,   372,   403,   405,    49,    52,    53,
+     206,   255,   361,   367,   381,   382,   383,   384,   385,   387,
+     388,   389,   390,   403,   405,    97,    98,   206,   298,   299,
+     300,   302,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   141,   142,   206,   403,
+     405,   493,   494,   495,   496,   498,   500,   501,   503,   504,
+     505,   508,   510,   511,   512,   513,   516,   518,   520,   144,
+     541,   542,   543,    12,   206,   533,   534,   535,     6,     3,
+       4,     8,     3,   212,   538,   523,   525,   527,     4,     3,
+       8,   529,   530,   225,   234,   236,   238,     4,     4,     4,
+       4,     4,   223,   315,   348,   374,   404,   406,   340,   277,
+     289,   283,   271,   455,   425,   291,   305,   467,     4,   480,
+     488,   490,     3,     8,   231,     4,     3,     8,   392,   408,
+     325,   327,   329,     4,     4,   335,   333,   331,   450,     3,
+       8,   402,     3,     8,   418,     4,   421,     4,     4,     3,
+       8,   448,   436,   438,   440,   442,   444,   446,     8,     3,
+       8,   364,   256,     4,   368,   366,   371,     4,     8,     3,
+     386,     4,     4,     8,     3,   301,   303,     3,     8,     4,
+     497,   499,     4,   502,     4,     4,   506,   509,     4,     4,
+       4,   514,   517,   519,   521,     3,     8,   544,     3,     8,
+     536,     3,     8,   191,   191,   170,     4,     4,     4,     4,
+       4,   210,   533,     4,     4,     4,     4,     4,   171,   171,
+     171,   171,   171,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,   171,
+       4,     4,     4,   216,     4,   173,   229,     4,     4,     4,
+       4,     4,   171,   173,     4,     4,     4,     4,   323,     4,
+     400,     4,   171,     4,   171,   171,   416,     4,     4,     4,
+       4,     4,     4,     4,   434,     4,     4,   171,     4,     4,
+       4,   173,   359,     4,   173,   173,   383,     4,     4,   299,
+     173,     4,     4,   171,     4,   171,   171,     4,     4,   173,
+     173,   173,     4,     4,     4,     4,   494,     4,   542,     4,
+     534,     4,     7,     7,   191,   191,   191,     8,     7,     7,
+       7,     7,     5,   170,     5,     5,     5,   193,   195,   170,
+       5,     5,     5,     5,     7,     5,     5,     5,     7,     7,
+       7,   195,     7,     5,   202,     5,     5,   170,   170,   170,
+      73,    74,    75,   336,   202,   170,     7,   170,   170,   170,
+     202,   202,   202,   170,   170,   170,   170,   170,   170,   170,
+     170,   170,   170,   170,   191,   170,   170,   170,   134,   135,
+     507,   136,   137,   138,   139,   140,   173,   515,   170,   170,
+     170,     5,     5,   191,   215,   541,   533,   228,    19,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,   206,   243,   244,   245,   248,   250,
+     252,   254,   255,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   267,   268,   243,     7,   239,   240,   241,     7,
+     316,   317,   318,     7,   351,   352,   353,     7,   375,   376,
+     377,     7,   341,   342,   343,    90,   170,   278,   279,   280,
+     281,   200,    91,    93,   280,   284,   285,   286,   287,    81,
+     272,   273,   274,     7,   456,   457,     7,   426,   427,   428,
+       7,   292,   293,   294,   100,   101,   102,   103,   104,   105,
+     306,   307,   308,   309,   310,   311,   312,   313,    19,   110,
+     111,   112,   113,   206,   257,   403,   405,   468,   469,   470,
+     473,   474,   476,   477,   116,   117,   206,   403,   405,   481,
+     482,   483,   485,   493,   203,     7,   393,   394,   395,     7,
+     409,   410,   411,    95,   435,   451,   452,     7,   545,   546,
+     239,     8,     8,     8,     8,   246,   249,   251,   253,     4,
+       4,     4,     4,     4,   266,     4,     4,   269,     4,     4,
+       4,     3,     8,     8,   242,     6,     3,   319,     6,     3,
+     354,     6,     3,   378,     6,     3,   344,     6,     3,     3,
+       6,     6,     3,     6,   275,     3,     8,   458,     3,     6,
+     429,     6,     3,   295,     6,     3,     4,     4,     4,     4,
+       4,     4,     3,     8,   471,   475,     4,     4,     4,     3,
+       8,   484,   486,     3,     8,     8,   170,   204,   205,   396,
+       6,     3,   412,     6,     3,   453,     8,   547,     3,     6,
+       6,     4,     4,     4,     4,   171,   173,   171,   173,   171,
+       4,   171,   171,     4,   171,   171,   173,   244,   243,   241,
+     322,   318,   357,   353,   381,   377,   206,   217,   218,   219,
+     220,   255,   314,   326,   328,   330,   332,   334,   338,   345,
+     346,   373,   403,   405,   449,   343,   279,   285,     4,   273,
+      84,    85,   206,   255,   373,   403,   405,   459,   460,   461,
+     462,   463,   465,   457,   432,   428,   298,   294,   171,   171,
+     171,   171,   171,   171,   307,     4,     4,   171,   171,   171,
+     469,     4,     4,   482,     6,     3,   399,   395,   415,   411,
+       4,   145,   147,   148,   206,   255,   403,   405,   548,   549,
+     550,   551,   553,   546,    20,    21,    22,    23,   247,   170,
+     170,   170,   170,   170,     8,     8,     8,     8,     3,     8,
+     170,   464,     4,     8,     3,     8,     8,   107,   108,   109,
+     472,   170,   170,   170,   170,     8,     8,   170,   554,     4,
+     552,     3,     8,   346,     4,   173,   461,     4,   171,     4,
+     549,   170,     5,   170,     7,   555,   556,   557,     3,     6,
+     146,   149,   150,   151,   558,   559,   560,   562,   563,   564,
+     556,   561,     4,     4,     4,     3,     8,     4,   173,   171,
+     171,   559,   170
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   173,   175,   174,   176,   174,   177,   174,   178,   174,
-     179,   174,   180,   174,   181,   174,   182,   174,   183,   174,
-     184,   174,   185,   174,   186,   174,   187,   174,   188,   174,
-     189,   174,   190,   190,   190,   190,   190,   190,   190,   191,
-     193,   192,   194,   195,   195,   196,   196,   198,   197,   199,
-     199,   200,   200,   202,   201,   203,   203,   204,   204,   205,
-     207,   206,   208,   208,   209,   209,   209,   209,   209,   209,
-     211,   210,   213,   212,   214,   214,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   215,   215,   215,   215,   215,
-     215,   215,   215,   215,   215,   215,   216,   217,   218,   219,
-     220,   222,   221,   224,   223,   226,   225,   227,   227,   228,
-     228,   228,   228,   228,   230,   229,   231,   233,   232,   235,
-     234,   237,   236,   238,   238,   239,   239,   241,   240,   242,
-     242,   243,   243,   243,   243,   243,   243,   243,   243,   243,
-     243,   243,   243,   243,   243,   243,   243,   243,   243,   245,
-     244,   246,   246,   246,   246,   248,   247,   250,   249,   252,
-     251,   253,   255,   254,   256,   257,   258,   259,   260,   261,
-     262,   263,   265,   264,   266,   268,   267,   270,   269,   271,
-     271,   272,   274,   273,   276,   275,   277,   277,   278,   278,
-     279,   280,   282,   281,   283,   283,   284,   284,   284,   285,
-     286,   288,   287,   290,   289,   291,   291,   292,   292,   294,
-     293,   296,   295,   297,   297,   297,   298,   298,   300,   299,
-     302,   301,   304,   303,   305,   305,   306,   306,   306,   306,
-     306,   306,   307,   308,   309,   310,   311,   312,   314,   313,
-     315,   315,   316,   316,   318,   317,   320,   319,   321,   321,
-     322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
-     322,   322,   322,   322,   322,   322,   322,   322,   322,   322,
-     324,   323,   326,   325,   328,   327,   330,   329,   332,   331,
-     334,   333,   335,   335,   335,   336,   337,   339,   338,   340,
-     340,   341,   341,   343,   342,   344,   344,   345,   345,   345,
-     345,   345,   345,   345,   345,   345,   345,   345,   345,   345,
-     345,   345,   345,   345,   347,   346,   349,   348,   350,   350,
-     351,   351,   353,   352,   355,   354,   356,   356,   357,   357,
-     358,   358,   358,   358,   358,   358,   358,   358,   358,   358,
-     359,   360,   361,   363,   362,   365,   364,   367,   366,   368,
-     370,   369,   371,   373,   372,   374,   374,   375,   375,   377,
-     376,   379,   378,   380,   380,   381,   381,   382,   382,   382,
-     382,   382,   382,   382,   382,   382,   383,   385,   384,   386,
-     387,   388,   389,   391,   390,   392,   392,   393,   393,   395,
-     394,   397,   396,   398,   398,   399,   399,   399,   399,   399,
-     399,   399,   401,   400,   403,   402,   405,   404,   407,   406,
-     408,   408,   409,   409,   411,   410,   413,   412,   414,   414,
-     415,   415,   415,   415,   415,   415,   415,   415,   415,   415,
-     415,   417,   416,   418,   420,   419,   421,   422,   424,   423,
-     425,   425,   426,   426,   428,   427,   430,   429,   431,   431,
-     432,   432,   433,   433,   433,   433,   433,   433,   433,   433,
-     433,   433,   433,   435,   434,   437,   436,   439,   438,   441,
-     440,   443,   442,   445,   444,   447,   446,   449,   448,   450,
-     450,   452,   451,   454,   453,   455,   455,   457,   456,   458,
-     458,   459,   459,   460,   460,   460,   460,   460,   460,   460,
-     461,   463,   462,   464,   466,   465,   467,   467,   468,   468,
-     468,   468,   468,   468,   468,   468,   468,   470,   469,   471,
-     471,   471,   472,   474,   473,   475,   476,   477,   479,   478,
-     480,   480,   481,   481,   481,   481,   481,   483,   482,   485,
-     484,   487,   486,   489,   488,   490,   490,   491,   491,   491,
-     491,   491,   491,   491,   491,   491,   491,   491,   491,   491,
-     491,   491,   491,   491,   491,   491,   492,   494,   493,   496,
-     495,   497,   499,   498,   500,   501,   503,   502,   504,   504,
-     506,   505,   507,   508,   509,   511,   510,   512,   512,   512,
-     512,   512,   514,   513,   516,   515,   518,   517,   520,   519,
-     522,   521,   524,   523,   526,   525,   527,   525,   529,   528,
-     530,   530,   531,   531,   533,   532,   535,   534,   537,   536,
-     538,   538,   539,   541,   540,   542,   542,   544,   543,   545,
-     545,   546,   546,   546,   546,   546,   546,   546,   547,   549,
-     548,   551,   550,   552,   552,   554,   553,   555,   555,   556,
-     556,   556,   556,   558,   557,   559,   560,   561
+       0,   174,   176,   175,   177,   175,   178,   175,   179,   175,
+     180,   175,   181,   175,   182,   175,   183,   175,   184,   175,
+     185,   175,   186,   175,   187,   175,   188,   175,   189,   175,
+     190,   175,   191,   191,   191,   191,   191,   191,   191,   192,
+     194,   193,   195,   196,   196,   197,   197,   199,   198,   200,
+     200,   201,   201,   203,   202,   204,   204,   205,   205,   206,
+     208,   207,   209,   209,   210,   210,   210,   210,   210,   210,
+     212,   211,   214,   213,   215,   215,   216,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   216,   216,   216,
+     216,   216,   216,   216,   216,   216,   216,   217,   218,   219,
+     220,   221,   223,   222,   225,   224,   227,   226,   228,   228,
+     229,   229,   229,   229,   229,   231,   230,   232,   234,   233,
+     236,   235,   238,   237,   239,   239,   240,   240,   242,   241,
+     243,   243,   244,   244,   244,   244,   244,   244,   244,   244,
+     244,   244,   244,   244,   244,   244,   244,   244,   244,   244,
+     246,   245,   247,   247,   247,   247,   249,   248,   251,   250,
+     253,   252,   254,   256,   255,   257,   258,   259,   260,   261,
+     262,   263,   264,   266,   265,   267,   269,   268,   271,   270,
+     272,   272,   273,   275,   274,   277,   276,   278,   278,   279,
+     279,   280,   281,   283,   282,   284,   284,   285,   285,   285,
+     286,   287,   289,   288,   291,   290,   292,   292,   293,   293,
+     295,   294,   297,   296,   298,   298,   298,   299,   299,   301,
+     300,   303,   302,   305,   304,   306,   306,   307,   307,   307,
+     307,   307,   307,   308,   309,   310,   311,   312,   313,   315,
+     314,   316,   316,   317,   317,   319,   318,   321,   320,   322,
+     322,   323,   323,   323,   323,   323,   323,   323,   323,   323,
+     323,   323,   323,   323,   323,   323,   323,   323,   323,   323,
+     323,   325,   324,   327,   326,   329,   328,   331,   330,   333,
+     332,   335,   334,   336,   336,   336,   337,   338,   340,   339,
+     341,   341,   342,   342,   344,   343,   345,   345,   346,   346,
+     346,   346,   346,   346,   346,   346,   346,   346,   346,   346,
+     346,   346,   346,   346,   346,   348,   347,   350,   349,   351,
+     351,   352,   352,   354,   353,   356,   355,   357,   357,   358,
+     358,   359,   359,   359,   359,   359,   359,   359,   359,   359,
+     359,   360,   361,   362,   364,   363,   366,   365,   368,   367,
+     369,   371,   370,   372,   374,   373,   375,   375,   376,   376,
+     378,   377,   380,   379,   381,   381,   382,   382,   383,   383,
+     383,   383,   383,   383,   383,   383,   383,   384,   386,   385,
+     387,   388,   389,   390,   392,   391,   393,   393,   394,   394,
+     396,   395,   398,   397,   399,   399,   400,   400,   400,   400,
+     400,   400,   400,   402,   401,   404,   403,   406,   405,   408,
+     407,   409,   409,   410,   410,   412,   411,   414,   413,   415,
+     415,   416,   416,   416,   416,   416,   416,   416,   416,   416,
+     416,   416,   418,   417,   419,   421,   420,   422,   423,   425,
+     424,   426,   426,   427,   427,   429,   428,   431,   430,   432,
+     432,   433,   433,   434,   434,   434,   434,   434,   434,   434,
+     434,   434,   434,   434,   436,   435,   438,   437,   440,   439,
+     442,   441,   444,   443,   446,   445,   448,   447,   450,   449,
+     451,   451,   453,   452,   455,   454,   456,   456,   458,   457,
+     459,   459,   460,   460,   461,   461,   461,   461,   461,   461,
+     461,   462,   464,   463,   465,   467,   466,   468,   468,   469,
+     469,   469,   469,   469,   469,   469,   469,   469,   471,   470,
+     472,   472,   472,   473,   475,   474,   476,   477,   478,   480,
+     479,   481,   481,   482,   482,   482,   482,   482,   484,   483,
+     486,   485,   488,   487,   490,   489,   492,   491,   493,   493,
+     494,   494,   494,   494,   494,   494,   494,   494,   494,   494,
+     494,   494,   494,   494,   494,   494,   494,   494,   494,   495,
+     497,   496,   499,   498,   500,   502,   501,   503,   504,   506,
+     505,   507,   507,   509,   508,   510,   511,   512,   514,   513,
+     515,   515,   515,   515,   515,   517,   516,   519,   518,   521,
+     520,   523,   522,   525,   524,   527,   526,   529,   528,   530,
+     528,   532,   531,   533,   533,   534,   534,   536,   535,   538,
+     537,   540,   539,   541,   541,   542,   544,   543,   545,   545,
+     547,   546,   548,   548,   549,   549,   549,   549,   549,   549,
+     549,   550,   552,   551,   554,   553,   555,   555,   557,   556,
+     558,   558,   559,   559,   559,   559,   561,   560,   562,   563,
+     564
   };
 
   const unsigned char
@@ -4660,63 +4694,64 @@ namespace isc { namespace dhcp {
        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,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
-       3,     0,     4,     0,     6,     0,     4,     1,     3,     1,
-       1,     1,     1,     1,     0,     4,     3,     0,     6,     0,
-       6,     0,     6,     0,     1,     1,     3,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     3,     0,     4,     3,     3,     3,     3,     3,     3,
-       3,     3,     0,     4,     3,     0,     4,     0,     6,     1,
-       3,     1,     0,     4,     0,     6,     1,     3,     1,     1,
-       1,     1,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     0,     6,     0,     6,     0,     1,     1,     3,     0,
-       4,     0,     4,     1,     3,     1,     1,     1,     0,     4,
-       0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     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,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     1,     1,     1,     3,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     3,     3,     3,
+       3,     3,     0,     4,     0,     6,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     0,     4,     3,     0,     6,
+       0,     6,     0,     6,     0,     1,     1,     3,     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,     0,     6,     0,     4,     0,     1,
-       1,     3,     0,     4,     0,     4,     0,     1,     1,     3,
+       0,     4,     1,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     3,     0,     4,     3,     3,     3,     3,     3,
+       3,     3,     3,     0,     4,     3,     0,     4,     0,     6,
+       1,     3,     1,     0,     4,     0,     6,     1,     3,     1,
+       1,     1,     1,     0,     6,     1,     3,     1,     1,     1,
+       1,     1,     0,     6,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     1,     3,     1,     1,     1,     0,
+       4,     0,     4,     0,     6,     1,     3,     1,     1,     1,
+       1,     1,     1,     3,     3,     3,     3,     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,     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,     1,     1,     1,     0,     4,     1,
-       1,     3,     3,     0,     6,     0,     1,     1,     3,     0,
-       4,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     0,     6,
-       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     0,     4,     1,     1,     1,     3,     3,     0,     6,
+       0,     1,     1,     3,     0,     4,     1,     3,     1,     1,
        1,     1,     1,     1,     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,
+       1,     1,     1,     1,     1,     0,     6,     0,     4,     0,
+       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
+       3,     1,     1,     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,     1,     1,     1,     0,     4,
+       1,     1,     3,     3,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
        1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     1,
-       1,     0,     4,     0,     6,     1,     3,     0,     4,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     1,     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,     3,     0,     6,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
-       1,     1,     3,     0,     4,     3,     3,     3,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     6,     0,     4,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       1,     1,     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,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       1,     1,     1,     3,     0,     4,     3,     3,     3,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     6,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     0,     4,     0,
-       4,     3,     0,     4,     3,     3,     0,     4,     1,     1,
-       0,     4,     3,     3,     3,     0,     4,     1,     1,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     6,     0,     4,
-       1,     3,     1,     1,     0,     6,     0,     6,     0,     4,
-       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     3,     0,
-       4,     0,     6,     1,     3,     0,     4,     1,     3,     1,
-       1,     1,     1,     0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       0,     4,     0,     4,     3,     0,     4,     3,     3,     0,
+       4,     1,     1,     0,     4,     3,     3,     3,     0,     4,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     1,     3,     1,     1,     0,     6,     0,
+       6,     0,     4,     1,     3,     1,     0,     6,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
+       1,     3,     1,     1,     1,     1,     0,     4,     3,     3,
+       3
   };
 
 
@@ -4758,9 +4793,9 @@ namespace isc { namespace dhcp {
   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"",
   "\"LLT\"", "\"EN\"", "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"",
   "\"enterprise-id\"", "\"dhcp4o6-port\"", "\"control-socket\"",
-  "\"socket-type\"", "\"socket-name\"", "\"dhcp-ddns\"",
-  "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
-  "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
+  "\"socket-type\"", "\"socket-name\"", "\"queue-control\"",
+  "\"dhcp-ddns\"", "\"enable-updates\"", "\"qualifying-suffix\"",
+  "\"server-ip\"", "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
   "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
   "\"always-include-fqdn\"", "\"override-no-update\"",
   "\"override-client-update\"", "\"replace-client-name\"",
@@ -4848,24 +4883,24 @@ namespace isc { namespace dhcp {
   "server_id_type", "$@98", "duid_type", "htype", "identifier", "$@99",
   "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@100",
   "control_socket_params", "control_socket_param", "socket_type", "$@101",
-  "socket_name", "$@102", "dhcp_ddns", "$@103", "sub_dhcp_ddns", "$@104",
-  "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
-  "qualifying_suffix", "$@105", "server_ip", "$@106", "server_port",
-  "sender_ip", "$@107", "sender_port", "max_queue_size", "ncr_protocol",
-  "$@108", "ncr_protocol_value", "ncr_format", "$@109",
+  "socket_name", "$@102", "queue_control", "$@103", "dhcp_ddns", "$@104",
+  "sub_dhcp_ddns", "$@105", "dhcp_ddns_params", "dhcp_ddns_param",
+  "enable_updates", "qualifying_suffix", "$@106", "server_ip", "$@107",
+  "server_port", "sender_ip", "$@108", "sender_port", "max_queue_size",
+  "ncr_protocol", "$@109", "ncr_protocol_value", "ncr_format", "$@110",
   "always_include_fqdn", "override_no_update", "override_client_update",
-  "replace_client_name", "$@110", "replace_client_name_value",
-  "generated_prefix", "$@111", "hostname_char_set", "$@112",
-  "hostname_char_replacement", "$@113", "dhcp4_json_object", "$@114",
-  "dhcpddns_json_object", "$@115", "control_agent_json_object", "$@116",
-  "config_control", "$@117", "$@118", "sub_config_control", "$@119",
+  "replace_client_name", "$@111", "replace_client_name_value",
+  "generated_prefix", "$@112", "hostname_char_set", "$@113",
+  "hostname_char_replacement", "$@114", "dhcp4_json_object", "$@115",
+  "dhcpddns_json_object", "$@116", "control_agent_json_object", "$@117",
+  "config_control", "$@118", "$@119", "sub_config_control", "$@120",
   "config_control_params", "config_control_param", "config_databases",
-  "$@120", "logging_object", "$@121", "sub_logging", "$@122",
-  "logging_params", "logging_param", "loggers", "$@123", "loggers_entries",
-  "logger_entry", "$@124", "logger_params", "logger_param", "debuglevel",
-  "severity", "$@125", "output_options_list", "$@126",
-  "output_options_list_content", "output_entry", "$@127",
-  "output_params_list", "output_params", "output", "$@128", "flush",
+  "$@121", "logging_object", "$@122", "sub_logging", "$@123",
+  "logging_params", "logging_param", "loggers", "$@124", "loggers_entries",
+  "logger_entry", "$@125", "logger_params", "logger_param", "debuglevel",
+  "severity", "$@126", "output_options_list", "$@127",
+  "output_options_list_content", "output_entry", "$@128",
+  "output_params_list", "output_params", "output", "$@129", "flush",
   "maxsize", "maxver", YY_NULLPTR
   };
 
@@ -4873,73 +4908,74 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   255,   255,   255,   256,   256,   257,   257,   258,   258,
-     259,   259,   260,   260,   261,   261,   262,   262,   263,   263,
-     264,   264,   265,   265,   266,   266,   267,   267,   268,   268,
-     269,   269,   277,   278,   279,   280,   281,   282,   283,   286,
-     291,   291,   302,   305,   306,   309,   313,   320,   320,   327,
-     328,   331,   335,   342,   342,   349,   350,   353,   357,   368,
-     378,   378,   393,   394,   398,   399,   400,   401,   402,   403,
-     406,   406,   421,   421,   430,   431,   436,   437,   438,   439,
-     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
-     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
-     460,   461,   462,   463,   464,   465,   468,   473,   478,   483,
-     488,   493,   493,   501,   501,   512,   512,   521,   522,   525,
-     526,   527,   528,   529,   532,   532,   542,   548,   548,   560,
-     560,   572,   572,   582,   583,   586,   587,   590,   590,   600,
-     601,   604,   605,   606,   607,   608,   609,   610,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   620,   621,   624,
-     624,   631,   632,   633,   634,   637,   637,   645,   645,   653,
-     653,   661,   666,   666,   674,   679,   684,   689,   694,   699,
-     704,   709,   714,   714,   722,   727,   727,   735,   735,   745,
-     746,   748,   750,   750,   768,   768,   778,   779,   782,   783,
-     786,   791,   796,   796,   806,   807,   810,   811,   812,   815,
-     820,   827,   827,   837,   837,   847,   848,   851,   852,   855,
-     855,   865,   865,   875,   876,   877,   880,   881,   884,   884,
-     892,   892,   900,   900,   911,   912,   915,   916,   917,   918,
-     919,   920,   923,   928,   933,   938,   943,   948,   956,   956,
-     969,   970,   973,   974,   981,   981,  1007,  1007,  1018,  1019,
-    1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,
-    1033,  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,
-    1045,  1045,  1053,  1053,  1061,  1061,  1069,  1069,  1077,  1077,
-    1087,  1087,  1094,  1095,  1096,  1099,  1104,  1112,  1112,  1123,
-    1124,  1128,  1129,  1132,  1132,  1140,  1141,  1144,  1145,  1146,
-    1147,  1148,  1149,  1150,  1151,  1152,  1153,  1154,  1155,  1156,
-    1157,  1158,  1159,  1160,  1167,  1167,  1180,  1180,  1189,  1190,
-    1193,  1194,  1199,  1199,  1214,  1214,  1228,  1229,  1232,  1233,
-    1236,  1237,  1238,  1239,  1240,  1241,  1242,  1243,  1244,  1245,
-    1248,  1250,  1255,  1257,  1257,  1265,  1265,  1273,  1273,  1281,
-    1283,  1283,  1291,  1300,  1300,  1312,  1313,  1318,  1319,  1324,
-    1324,  1336,  1336,  1348,  1349,  1354,  1355,  1360,  1361,  1362,
-    1363,  1364,  1365,  1366,  1367,  1368,  1371,  1373,  1373,  1381,
-    1383,  1385,  1390,  1398,  1398,  1410,  1411,  1414,  1415,  1418,
-    1418,  1428,  1428,  1437,  1438,  1441,  1442,  1443,  1444,  1445,
-    1446,  1447,  1450,  1450,  1458,  1458,  1483,  1483,  1513,  1513,
-    1525,  1526,  1529,  1530,  1533,  1533,  1545,  1545,  1557,  1558,
-    1561,  1562,  1563,  1564,  1565,  1566,  1567,  1568,  1569,  1570,
-    1571,  1574,  1574,  1582,  1587,  1587,  1595,  1600,  1608,  1608,
-    1618,  1619,  1622,  1623,  1626,  1626,  1635,  1635,  1644,  1645,
-    1648,  1649,  1653,  1654,  1655,  1656,  1657,  1658,  1659,  1660,
-    1661,  1662,  1663,  1666,  1666,  1676,  1676,  1686,  1686,  1694,
-    1694,  1702,  1702,  1710,  1710,  1718,  1718,  1731,  1731,  1741,
-    1742,  1745,  1745,  1756,  1756,  1766,  1767,  1770,  1770,  1780,
-    1781,  1784,  1785,  1788,  1789,  1790,  1791,  1792,  1793,  1794,
-    1797,  1799,  1799,  1807,  1815,  1815,  1827,  1828,  1831,  1832,
-    1833,  1834,  1835,  1836,  1837,  1838,  1839,  1842,  1842,  1849,
-    1850,  1851,  1854,  1859,  1859,  1867,  1872,  1879,  1886,  1886,
-    1896,  1897,  1900,  1901,  1902,  1903,  1904,  1907,  1907,  1915,
-    1915,  1925,  1925,  1937,  1937,  1947,  1948,  1951,  1952,  1953,
-    1954,  1955,  1956,  1957,  1958,  1959,  1960,  1961,  1962,  1963,
-    1964,  1965,  1966,  1967,  1968,  1969,  1972,  1977,  1977,  1985,
-    1985,  1993,  1998,  1998,  2006,  2011,  2016,  2016,  2024,  2025,
-    2028,  2028,  2036,  2041,  2046,  2051,  2051,  2059,  2062,  2065,
-    2068,  2071,  2077,  2077,  2085,  2085,  2093,  2093,  2103,  2103,
-    2110,  2110,  2117,  2117,  2126,  2126,  2135,  2135,  2146,  2146,
-    2156,  2157,  2161,  2162,  2165,  2165,  2180,  2180,  2190,  2190,
-    2201,  2202,  2206,  2210,  2210,  2222,  2223,  2227,  2227,  2235,
-    2236,  2239,  2240,  2241,  2242,  2243,  2244,  2245,  2248,  2253,
-    2253,  2261,  2261,  2271,  2272,  2275,  2275,  2283,  2284,  2287,
-    2288,  2289,  2290,  2293,  2293,  2301,  2306,  2311
+       0,   257,   257,   257,   258,   258,   259,   259,   260,   260,
+     261,   261,   262,   262,   263,   263,   264,   264,   265,   265,
+     266,   266,   267,   267,   268,   268,   269,   269,   270,   270,
+     271,   271,   279,   280,   281,   282,   283,   284,   285,   288,
+     293,   293,   304,   307,   308,   311,   315,   322,   322,   329,
+     330,   333,   337,   344,   344,   351,   352,   355,   359,   370,
+     380,   380,   395,   396,   400,   401,   402,   403,   404,   405,
+     408,   408,   423,   423,   432,   433,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
+     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
+     462,   463,   464,   465,   466,   467,   468,   471,   476,   481,
+     486,   491,   496,   496,   504,   504,   515,   515,   524,   525,
+     528,   529,   530,   531,   532,   535,   535,   545,   551,   551,
+     563,   563,   575,   575,   585,   586,   589,   590,   593,   593,
+     603,   604,   607,   608,   609,   610,   611,   612,   613,   614,
+     615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
+     627,   627,   634,   635,   636,   637,   640,   640,   648,   648,
+     656,   656,   664,   669,   669,   677,   682,   687,   692,   697,
+     702,   707,   712,   717,   717,   725,   730,   730,   738,   738,
+     748,   749,   751,   753,   753,   771,   771,   781,   782,   785,
+     786,   789,   794,   799,   799,   809,   810,   813,   814,   815,
+     818,   823,   830,   830,   840,   840,   850,   851,   854,   855,
+     858,   858,   868,   868,   878,   879,   880,   883,   884,   887,
+     887,   895,   895,   903,   903,   914,   915,   918,   919,   920,
+     921,   922,   923,   926,   931,   936,   941,   946,   951,   959,
+     959,   972,   973,   976,   977,   984,   984,  1010,  1010,  1021,
+    1022,  1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,  1034,
+    1035,  1036,  1037,  1038,  1039,  1040,  1041,  1042,  1043,  1044,
+    1045,  1048,  1048,  1056,  1056,  1064,  1064,  1072,  1072,  1080,
+    1080,  1090,  1090,  1097,  1098,  1099,  1102,  1107,  1115,  1115,
+    1126,  1127,  1131,  1132,  1135,  1135,  1143,  1144,  1147,  1148,
+    1149,  1150,  1151,  1152,  1153,  1154,  1155,  1156,  1157,  1158,
+    1159,  1160,  1161,  1162,  1163,  1170,  1170,  1183,  1183,  1192,
+    1193,  1196,  1197,  1202,  1202,  1217,  1217,  1231,  1232,  1235,
+    1236,  1239,  1240,  1241,  1242,  1243,  1244,  1245,  1246,  1247,
+    1248,  1251,  1253,  1258,  1260,  1260,  1268,  1268,  1276,  1276,
+    1284,  1286,  1286,  1294,  1303,  1303,  1315,  1316,  1321,  1322,
+    1327,  1327,  1339,  1339,  1351,  1352,  1357,  1358,  1363,  1364,
+    1365,  1366,  1367,  1368,  1369,  1370,  1371,  1374,  1376,  1376,
+    1384,  1386,  1388,  1393,  1401,  1401,  1413,  1414,  1417,  1418,
+    1421,  1421,  1431,  1431,  1440,  1441,  1444,  1445,  1446,  1447,
+    1448,  1449,  1450,  1453,  1453,  1461,  1461,  1486,  1486,  1516,
+    1516,  1528,  1529,  1532,  1533,  1536,  1536,  1548,  1548,  1560,
+    1561,  1564,  1565,  1566,  1567,  1568,  1569,  1570,  1571,  1572,
+    1573,  1574,  1577,  1577,  1585,  1590,  1590,  1598,  1603,  1611,
+    1611,  1621,  1622,  1625,  1626,  1629,  1629,  1638,  1638,  1647,
+    1648,  1651,  1652,  1656,  1657,  1658,  1659,  1660,  1661,  1662,
+    1663,  1664,  1665,  1666,  1669,  1669,  1679,  1679,  1689,  1689,
+    1697,  1697,  1705,  1705,  1713,  1713,  1721,  1721,  1734,  1734,
+    1744,  1745,  1748,  1748,  1759,  1759,  1769,  1770,  1773,  1773,
+    1783,  1784,  1787,  1788,  1791,  1792,  1793,  1794,  1795,  1796,
+    1797,  1800,  1802,  1802,  1810,  1818,  1818,  1830,  1831,  1834,
+    1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,  1845,  1845,
+    1852,  1853,  1854,  1857,  1862,  1862,  1870,  1875,  1882,  1889,
+    1889,  1899,  1900,  1903,  1904,  1905,  1906,  1907,  1910,  1910,
+    1918,  1918,  1926,  1926,  1944,  1944,  1956,  1956,  1966,  1967,
+    1970,  1971,  1972,  1973,  1974,  1975,  1976,  1977,  1978,  1979,
+    1980,  1981,  1982,  1983,  1984,  1985,  1986,  1987,  1988,  1991,
+    1996,  1996,  2004,  2004,  2012,  2017,  2017,  2025,  2030,  2035,
+    2035,  2043,  2044,  2047,  2047,  2055,  2060,  2065,  2070,  2070,
+    2078,  2081,  2084,  2087,  2090,  2096,  2096,  2104,  2104,  2112,
+    2112,  2122,  2122,  2129,  2129,  2136,  2136,  2145,  2145,  2154,
+    2154,  2165,  2165,  2175,  2176,  2180,  2181,  2184,  2184,  2199,
+    2199,  2209,  2209,  2220,  2221,  2225,  2229,  2229,  2241,  2242,
+    2246,  2246,  2254,  2255,  2258,  2259,  2260,  2261,  2262,  2263,
+    2264,  2267,  2272,  2272,  2280,  2280,  2290,  2291,  2294,  2294,
+    2302,  2303,  2306,  2307,  2308,  2309,  2312,  2312,  2320,  2325,
+    2330
   };
 
   // Print the state stack on the debug stream.
@@ -4974,8 +5010,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4978 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 2316 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 5014 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2335 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index e8bd2b99c3ddcb2ba0220182decb027701e5aa5e..f249b7f94125e5f012465f6288135401bd8d25ad 100644 (file)
@@ -462,61 +462,62 @@ namespace isc { namespace dhcp {
         TOKEN_CONTROL_SOCKET = 370,
         TOKEN_SOCKET_TYPE = 371,
         TOKEN_SOCKET_NAME = 372,
-        TOKEN_DHCP_DDNS = 373,
-        TOKEN_ENABLE_UPDATES = 374,
-        TOKEN_QUALIFYING_SUFFIX = 375,
-        TOKEN_SERVER_IP = 376,
-        TOKEN_SERVER_PORT = 377,
-        TOKEN_SENDER_IP = 378,
-        TOKEN_SENDER_PORT = 379,
-        TOKEN_MAX_QUEUE_SIZE = 380,
-        TOKEN_NCR_PROTOCOL = 381,
-        TOKEN_NCR_FORMAT = 382,
-        TOKEN_ALWAYS_INCLUDE_FQDN = 383,
-        TOKEN_OVERRIDE_NO_UPDATE = 384,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 385,
-        TOKEN_REPLACE_CLIENT_NAME = 386,
-        TOKEN_GENERATED_PREFIX = 387,
-        TOKEN_UDP = 388,
-        TOKEN_TCP = 389,
-        TOKEN_JSON = 390,
-        TOKEN_WHEN_PRESENT = 391,
-        TOKEN_NEVER = 392,
-        TOKEN_ALWAYS = 393,
-        TOKEN_WHEN_NOT_PRESENT = 394,
-        TOKEN_HOSTNAME_CHAR_SET = 395,
-        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 396,
-        TOKEN_LOGGING = 397,
-        TOKEN_LOGGERS = 398,
-        TOKEN_OUTPUT_OPTIONS = 399,
-        TOKEN_OUTPUT = 400,
-        TOKEN_DEBUGLEVEL = 401,
-        TOKEN_SEVERITY = 402,
-        TOKEN_FLUSH = 403,
-        TOKEN_MAXSIZE = 404,
-        TOKEN_MAXVER = 405,
-        TOKEN_DHCP4 = 406,
-        TOKEN_DHCPDDNS = 407,
-        TOKEN_CONTROL_AGENT = 408,
-        TOKEN_TOPLEVEL_JSON = 409,
-        TOKEN_TOPLEVEL_DHCP6 = 410,
-        TOKEN_SUB_DHCP6 = 411,
-        TOKEN_SUB_INTERFACES6 = 412,
-        TOKEN_SUB_SUBNET6 = 413,
-        TOKEN_SUB_POOL6 = 414,
-        TOKEN_SUB_PD_POOL = 415,
-        TOKEN_SUB_RESERVATION = 416,
-        TOKEN_SUB_OPTION_DEFS = 417,
-        TOKEN_SUB_OPTION_DEF = 418,
-        TOKEN_SUB_OPTION_DATA = 419,
-        TOKEN_SUB_HOOKS_LIBRARY = 420,
-        TOKEN_SUB_DHCP_DDNS = 421,
-        TOKEN_SUB_LOGGING = 422,
-        TOKEN_SUB_CONFIG_CONTROL = 423,
-        TOKEN_STRING = 424,
-        TOKEN_INTEGER = 425,
-        TOKEN_FLOAT = 426,
-        TOKEN_BOOLEAN = 427
+        TOKEN_QUEUE_CONTROL = 373,
+        TOKEN_DHCP_DDNS = 374,
+        TOKEN_ENABLE_UPDATES = 375,
+        TOKEN_QUALIFYING_SUFFIX = 376,
+        TOKEN_SERVER_IP = 377,
+        TOKEN_SERVER_PORT = 378,
+        TOKEN_SENDER_IP = 379,
+        TOKEN_SENDER_PORT = 380,
+        TOKEN_MAX_QUEUE_SIZE = 381,
+        TOKEN_NCR_PROTOCOL = 382,
+        TOKEN_NCR_FORMAT = 383,
+        TOKEN_ALWAYS_INCLUDE_FQDN = 384,
+        TOKEN_OVERRIDE_NO_UPDATE = 385,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 386,
+        TOKEN_REPLACE_CLIENT_NAME = 387,
+        TOKEN_GENERATED_PREFIX = 388,
+        TOKEN_UDP = 389,
+        TOKEN_TCP = 390,
+        TOKEN_JSON = 391,
+        TOKEN_WHEN_PRESENT = 392,
+        TOKEN_NEVER = 393,
+        TOKEN_ALWAYS = 394,
+        TOKEN_WHEN_NOT_PRESENT = 395,
+        TOKEN_HOSTNAME_CHAR_SET = 396,
+        TOKEN_HOSTNAME_CHAR_REPLACEMENT = 397,
+        TOKEN_LOGGING = 398,
+        TOKEN_LOGGERS = 399,
+        TOKEN_OUTPUT_OPTIONS = 400,
+        TOKEN_OUTPUT = 401,
+        TOKEN_DEBUGLEVEL = 402,
+        TOKEN_SEVERITY = 403,
+        TOKEN_FLUSH = 404,
+        TOKEN_MAXSIZE = 405,
+        TOKEN_MAXVER = 406,
+        TOKEN_DHCP4 = 407,
+        TOKEN_DHCPDDNS = 408,
+        TOKEN_CONTROL_AGENT = 409,
+        TOKEN_TOPLEVEL_JSON = 410,
+        TOKEN_TOPLEVEL_DHCP6 = 411,
+        TOKEN_SUB_DHCP6 = 412,
+        TOKEN_SUB_INTERFACES6 = 413,
+        TOKEN_SUB_SUBNET6 = 414,
+        TOKEN_SUB_POOL6 = 415,
+        TOKEN_SUB_PD_POOL = 416,
+        TOKEN_SUB_RESERVATION = 417,
+        TOKEN_SUB_OPTION_DEFS = 418,
+        TOKEN_SUB_OPTION_DEF = 419,
+        TOKEN_SUB_OPTION_DATA = 420,
+        TOKEN_SUB_HOOKS_LIBRARY = 421,
+        TOKEN_SUB_DHCP_DDNS = 422,
+        TOKEN_SUB_LOGGING = 423,
+        TOKEN_SUB_CONFIG_CONTROL = 424,
+        TOKEN_STRING = 425,
+        TOKEN_INTEGER = 426,
+        TOKEN_FLOAT = 427,
+        TOKEN_BOOLEAN = 428
       };
     };
 
@@ -1095,6 +1096,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_SOCKET_NAME (const location_type& l);
 
+    static inline
+    symbol_type
+    make_QUEUE_CONTROL (const location_type& l);
+
     static inline
     symbol_type
     make_DHCP_DDNS (const location_type& l);
@@ -1520,12 +1525,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 1017,     ///< Last index in yytable_.
-      yynnts_ = 389,  ///< Number of nonterminal symbols.
+      yylast_ = 1022,     ///< Last index in yytable_.
+      yynnts_ = 391,  ///< Number of nonterminal symbols.
       yyfinal_ = 32, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 173  ///< Number of tokens.
+      yyntokens_ = 174  ///< Number of tokens.
     };
 
 
@@ -1584,9 +1589,9 @@ namespace isc { namespace dhcp {
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172
+     165,   166,   167,   168,   169,   170,   171,   172,   173
     };
-    const unsigned int user_token_number_max_ = 427;
+    const unsigned int user_token_number_max_ = 428;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1619,29 +1624,29 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1662,29 +1667,29 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1764,29 +1769,29 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1813,29 +1818,29 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 190: // value
-      case 194: // map_value
-      case 246: // db_type
-      case 335: // hr_mode
-      case 471: // duid_type
-      case 504: // ncr_protocol_value
-      case 512: // replace_client_name_value
+      case 191: // value
+      case 195: // map_value
+      case 247: // db_type
+      case 336: // hr_mode
+      case 472: // duid_type
+      case 507: // ncr_protocol_value
+      case 515: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 172: // "boolean"
+      case 173: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 171: // "floating point"
+      case 172: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 170: // "integer"
+      case 171: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 169: // "constant string"
+      case 170: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1911,7 +1916,7 @@ namespace isc { namespace dhcp {
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
-     425,   426,   427
+     425,   426,   427,   428
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2612,6 +2617,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_SOCKET_NAME, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_QUEUE_CONTROL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_QUEUE_CONTROL, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_DHCP_DDNS (const location_type& l)
   {
@@ -2945,7 +2956,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2949 "dhcp6_parser.h" // lalr1.cc:377
+#line 2960 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 6c4330b77347bbe8bb7196bebf96c7152e7085bf..919b0f6df456e777134b5782b00d2d4d739ce30f 100644 (file)
@@ -172,6 +172,8 @@ using namespace std;
   SOCKET_TYPE "socket-type"
   SOCKET_NAME "socket-name"
 
+  QUEUE_CONTROL "queue-control"
+
   DHCP_DDNS "dhcp-ddns"
   ENABLE_UPDATES "enable-updates"
   QUALIFYING_SUFFIX "qualifying-suffix"
@@ -455,6 +457,7 @@ global_param: preferred_lifetime
             | server_id
             | dhcp4o6_port
             | control_socket
+            | queue_control
             | dhcp_ddns
             | user_context
             | comment
@@ -1920,6 +1923,22 @@ socket_name: SOCKET_NAME {
     ctx.leave();
 };
 
+queue_control: QUEUE_CONTROL {
+    ctx.enter(ctx.NO_KEYWORD);
+} COLON map_value {
+    ElementPtr qc = $4;
+    ctx.stack_.back()->set("queue-control", qc);
+
+    if (!qc->contains("queue-type")) {
+        std::stringstream msg;
+        msg << "'queue-type' is required: ";
+        msg  << qc->getPosition().str() << ")";
+        error(@1, msg.str());
+    }
+
+    ctx.leave();
+};
+
 // --- dhcp ddns ---------------------------------------------
 
 dhcp_ddns: DHCP_DDNS {
index c0a5aab29c2ad7a8b2e9aacafa503b889cf5a798..3a62f8e0ab4137f5ab24b1aa94edf3bff6cd45e0 100644 (file)
@@ -31,6 +31,7 @@
 #include <dhcpsrv/parsers/host_reservations_list_parser.h>
 #include <dhcpsrv/parsers/ifaces_config_parser.h>
 #include <dhcpsrv/parsers/option_data_parser.h>
+#include <dhcpsrv/parsers/queue_control_parser.h>
 #include <dhcpsrv/parsers/simple_parser6.h>
 #include <dhcpsrv/parsers/shared_networks_list_parser.h>
 #include <dhcpsrv/parsers/sanity_checks_parser.h>
@@ -482,6 +483,12 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
                 continue;
             }
 
+            if (config_pair.first == "queue-control") {
+                QueueControlParser parser(AF_INET);
+                srv_config->setQueueControlInfo(parser.parse(config_pair.second));
+                continue;
+            }
+
             if (config_pair.first == "host-reservation-identifiers") {
                 HostReservationIdsParser6 parser;
                 parser.parse(config_pair.second);
index 9c2d4e04e2ae9ad04dc6aa8f6444a6930b4c6885..2d35ef9d81e099e0b8d4f2fca51927308378cf9a 100644 (file)
@@ -174,6 +174,8 @@ Parser6Context::contextName()
         return ("duid-type");
     case CONTROL_SOCKET:
         return ("control-socket");
+    case QUEUE_CONTROL:
+        return ("queue-control");
     case POOLS:
         return ("pools");
     case PD_POOLS:
index b9c7e4a2570bee7bcf08f1c79bc7f52e749f9820..c0247177c8b42923d9415688d98896f1e94f480f 100644 (file)
@@ -271,6 +271,9 @@ public:
         /// Used while parsing Dhcp6/control-socket structures.
         CONTROL_SOCKET,
 
+        /// Used while parsing Dhcp4/queue-control structures.
+        QUEUE_CONTROL,
+
         /// Used while parsing Dhcp6/subnet6/pools structures.
         POOLS,
 
index 38f8a70161bb5b92f8f7703b011e94b7d5119bdb..92595839e828cd92f87516b7696afbaeec6a9b53 100644 (file)
@@ -6915,4 +6915,110 @@ TEST_F(Dhcp6ParserTest, serverTag) {
     ASSERT_THROW(parseDHCP6(bad_tag), std::exception);
 }
 
+// Check whether it is possible to configure queue-control 
+TEST_F(Dhcp6ParserTest, queueControl) {
+    // Config without server-tag
+    string config_no_queue = "{ " + genIfaceConfig() + "," +
+        "\"subnet6\": [  ] "
+        "}";
+
+    string config_with_queue =
+        "{ " + genIfaceConfig() + ", \n" +
+        "   \"subnet6\": [  ],  \n"
+        "   \"queue-control\": { \n"
+        "       \"queue-type\": \"some-type\", \n"
+        "       \"capacity\": 75 \n"
+        "   } \n"
+        "} \n";
+
+    string config_with_context =
+        "{ " + genIfaceConfig() + ", \n" +
+        "   \"subnet6\": [  ],  \n"
+        "   \"queue-control\": { \n"
+        "       \"queue-type\": \"some-type\", \n"
+        "       \"capacity\": 90, \n"
+        "       \"user-context\": { \"comment\": \"some text\" } \n"
+        "   } \n"
+        "} \n";
+
+    // Let's check the default. It should be empty.
+    data::ConstElementPtr control;
+    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    ASSERT_FALSE(control);
+
+    // Configuration with no queue should default to an emtpy control.
+    configure(config_no_queue, CONTROL_RESULT_SUCCESS, "");
+    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    ASSERT_FALSE(control);
+
+    // Clear the config
+    CfgMgr::instance().clear();
+
+    // Configuration with queue should be valid.
+    configure(config_with_queue, CONTROL_RESULT_SUCCESS, "");
+    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    ASSERT_TRUE(control);
+
+    // Clear the config
+    CfgMgr::instance().clear();
+
+    // Configuration with queue with context should be valid.
+    configure(config_with_context, CONTROL_RESULT_SUCCESS, "");
+    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    ASSERT_TRUE(control);
+}
+
+// Check whether it is possible to configure server-tag
+TEST_F(Dhcp6ParserTest, queueControlInvalid) {
+    struct Scenario {
+        std::string description_;
+        std::string json_;
+    };
+
+    std::vector<Scenario> scenarios = {
+        {
+            "not a map",
+            "{ " + genIfaceConfig() + ", \n" +
+            "   \"subnet6\": [  ],  \n"
+            "   \"queue-control\": 75 \n"
+            "} \n"
+        },
+        {
+            "queue type missing",
+            "{ " + genIfaceConfig() + ", \n" +
+            "   \"subnet6\": [  ],  \n"
+            "   \"queue-control\": { \n"
+            "       \"capacity\": 100 \n"
+            "   } \n"
+            "} \n"
+        },
+        {
+            "capacity missing",
+            "{ " + genIfaceConfig() + ", \n" +
+            "   \"subnet6\": [  ],  \n"
+            "   \"queue-control\": {} \n"
+            "} \n"
+        },
+        {
+            "capacity not an int",
+            "{ " + genIfaceConfig() + ", \n" +
+            "   \"subnet6\": [  ],  \n"
+            "   \"queue-control\": { \n"
+            "       \"capacity\": \"ninety\", \n"
+            "   } \n"
+            "} \n"
+        }
+    };
+
+    // Iterate over the incorrect scenarios and verify they
+    // fail as expected. Note, we use parseDHCP6() directly
+    // as all of the errors above are enforced by the grammar.
+    for (auto scenario : scenarios) {
+        SCOPED_TRACE((scenario).description_);
+        {
+            EXPECT_THROW(parseDHCP6((scenario).json_), Dhcp6ParseError);
+        }
+    }
+}
+
 };
index 7b4f6e74f47e375376d430822d36f3b884774f07..eb212256a96aac5667900ad1933fe07cdf3f0ebc 100644 (file)
@@ -29,8 +29,6 @@ QueueControlParser::QueueControlParser(const uint16_t family)
 
 data::ElementPtr 
 QueueControlParser::parse(const isc::data::ConstElementPtr& queue_elem) {
-    QueueControlPtr queue_control(new QueueControl());
-
     // All we really do here is verify that it is a map that
     // contains at least queue-type.  All other content depends 
     // on the packet queue implementation of that type.
@@ -45,8 +43,6 @@ QueueControlParser::parse(const isc::data::ConstElementPtr& queue_elem) {
         if (elem->getType() != Element::string) {
             isc_throw(DhcpConfigError, "queue-type must be a string");
         }
-
-        queue_control->setQueueType(elem->stringValue());
     }
 
     // Return a copy of it.
index 380ce10ec2b9386c507bf3390e5dae9e74506f12..e284bc7ae3a56de7ae07a0375a3c30b71d0a77f7 100644 (file)
@@ -9,7 +9,6 @@
 
 #include <cc/data.h>
 #include <cc/simple_parser.h>
-#include <dhcp/queue_control.h>
 #include <dhcpsrv/parsers/dhcp_parsers.h>
 
 namespace isc {