]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2719] Renamed parameter and added it to classes
authorThomas Markwalder <tmark@isc.org>
Mon, 6 Mar 2023 15:25:24 +0000 (10:25 -0500)
committerThomas Markwalder <tmark@isc.org>
Thu, 23 Mar 2023 11:17:48 +0000 (07:17 -0400)
Renamed offer-lft to offer-lifetime to match other
lifetime parameters.

29 files changed:
doc/examples/kea4/all-keys.json
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/tests/get_config_unittest.cc
src/lib/dhcpsrv/alloc_engine.cc
src/lib/dhcpsrv/cfg_globals.cc
src/lib/dhcpsrv/cfg_globals.h
src/lib/dhcpsrv/client_class_def.cc
src/lib/dhcpsrv/client_class_def.h
src/lib/dhcpsrv/network.cc
src/lib/dhcpsrv/network.h
src/lib/dhcpsrv/parsers/base_network_parser.cc
src/lib/dhcpsrv/parsers/base_network_parser.h
src/lib/dhcpsrv/parsers/client_class_def_parser.cc
src/lib/dhcpsrv/parsers/dhcp_parsers.cc
src/lib/dhcpsrv/parsers/shared_network_parser.cc
src/lib/dhcpsrv/parsers/simple_parser4.cc
src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc
src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc
src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc
src/lib/dhcpsrv/tests/client_class_def_unittest.cc
src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc
src/lib/dhcpsrv/tests/network_unittest.cc
src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc

index ec19ee74fc0aefd62e7d81ddf1a7f28b52933853..075b54d301c2f1a04167f0952e41ba33a711044c 100644 (file)
 
                 // If greater than zero, it is the lifetime of leases temporarily allocated
                 // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
-                "offer-lft" : 60,
+                "offer-lifetime" : 60,
 
                 // List of shared network specific DHCP options.
                 "option-data": [],
 
                         // If greater than zero, it is the lifetime of leases temporarily allocated
                         // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
-                        "offer-lft" : 60,
+                        "offer-lifetime" : 60,
 
                         // Turn on storage of extended information (e.g. relay agent
                         // information) with each lease for this subnet.
 
         // If greater than zero, it is the lifetime of leases temporarily allocated
         // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
-        "offer-lft" : 60,
+        "offer-lifetime" : 60,
 
         // Look at advanced example for the use of user-contexts.
         "user-context": { }
index 19a8325e1327b656ab36dfdbc3ee91ba45625cb8..47a225a4eb22e33ea9e83d0c7666d9d445965f7a 100644 (file)
@@ -700,7 +700,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[2199] =
+static const flex_int16_t yy_accept[2204] =
     {   0,
       217,  217,    0,    0,    0,    0,    0,    0,    0,    0,
       225,  223,   10,   11,  223,    1,  217,  214,  217,  217,
@@ -835,7 +835,7 @@ static const flex_int16_t yy_accept[2199] =
         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,  204,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,  168,    0,    0,    0,  166,    0,    0,    0,
@@ -849,101 +849,102 @@ static const flex_int16_t yy_accept[2199] =
         0,    0,    0,    0,    0,  128,    0,   23,    0,  139,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,  172,    0,   87,    0,    0,    0,
-       82,    0,    0,    0,    0,    0,    0,  142,    0,   38,
-        0,  161,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   66,    0,    0,
-        0,    0,    0,    0,    0,  107,  108,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   86,
-        0,    0,    0,    0,    0,   59,    0,    0,    0,    0,
-
+        0,   82,    0,    0,    0,    0,    0,    0,  142,    0,
+       38,    0,  161,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   66,    0,
+        0,    0,    0,    0,    0,    0,  107,  108,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
+       86,    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,  194,    0,   83,
-       98,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   63,    0,    0,    0,    0,    0,    0,
-      169,    0,    0,  167,    0,    0,  158,  157,    0,    0,
-        0,    0,    0,    0,    0,    0,   22,    0,    0,    0,
-        0,    0,  182,    0,    0,    0,    0,    0,  122,    0,
-
+      136,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  151,    0,    0,    0,
-      160,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  140,    0,   15,    0,    0,   44,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  171,
-        0,    0,    0,    0,    0,    0,    0,    0,   46,   64,
-        0,    0,  135,    0,    0,    0,  126,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  194,    0,
+        0,   83,   98,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   63,    0,    0,    0,    0,
+        0,    0,  169,    0,    0,  167,    0,    0,  158,  157,
+        0,    0,    0,    0,    0,    0,    0,    0,   22,    0,
+        0,    0,    0,    0,  182,    0,    0,    0,    0,    0,
+
+      122,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  151,    0,
+        0,    0,  160,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  140,    0,   15,    0,
+        0,   44,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  171,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   46,   64,    0,    0,  135,    0,    0,    0,  126,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   56,    0,   90,    0,    0,  188,    0,    0,  193,
-        0,  110,    0,    0,    0,  200,    0,    0,    0,    0,
+        0,    0,    0,    0,   56,    0,   90,    0,    0,  188,
+        0,    0,  193,    0,  110,    0,    0,    0,  200,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   14,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  124,    0,    0,
-        0,   47,    0,    0,  196,    0,    0,  120,   31,    0,
-        0,    0,  156,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  191,    0,  164,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,   29,    0,
-        0,    0,    0,   28,    0,    0,  170,    0,    0,    0,
-       55,    0,    0,    0,    0,    0,  112,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   14,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  124,    0,    0,    0,   47,    0,    0,  196,    0,
+        0,  120,   31,    0,    0,    0,  156,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  191,
+
+        0,  164,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   29,    0,    0,    0,    0,   28,    0,    0,
+      170,    0,    0,    0,   55,    0,    0,    0,  204,    0,
+        0,  112,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   60,    0,    0,  109,    0,    0,    0,
-       45,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   60,    0,
+        0,  109,    0,    0,    0,   45,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      141,    0,    0,    0,   30,    0,    0,    0,    0,  192,
-        0,    0,    0,    0,    0,  152,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  141,    0,    0,    0,   30,
+        0,    0,    0,    0,  192,    0,    0,    0,    0,    0,
+
+      152,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   21,    0,    0,
+      195,    0,   81,    0,   51,    0,    0,    0,    0,  189,
+      187,    0,   32,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   17,    0,    0,    0,    0,    0,
+        0,  176,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  149,    0,    0,    0,  125,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   95,    0,    0,    0,
+        0,    0,   52,    0,    0,    0,    0,   48,  154,    0,
+        0,    0,    0,    0,    0,    0,    0,   71,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   21,    0,    0,  195,    0,   81,    0,   51,
-        0,    0,    0,    0,  189,  187,    0,   32,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   17,
-        0,    0,    0,    0,    0,    0,  176,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  149,    0,    0,    0,
-      125,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   95,    0,    0,    0,    0,    0,   52,    0,    0,
-        0,    0,   48,  154,    0,    0,    0,    0,    0,    0,
-        0,    0,   71,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  177,    0,   13,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  155,    0,
-      165,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  177,    0,   13,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  155,    0,  165,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  159,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  148,    0,
-       62,   61,   20,    0,  173,    0,    0,    0,    0,    0,
+      159,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  148,    0,   62,   61,   20,    0,  173,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  147,    0,    0,
-
-        0,    0,    0,   54,    0,   67,    0,   49,  175,    0,
-      101,    0,    0,    0,    0,    0,    0,    0,    0,   80,
-        0,    0,    0,    0,    0,    0,    0,   77,    0,    0,
-        0,    0,    0,    0,   16,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   53,    0,    0,
-        0,    0,    0,    0,   75,    0,    0,    0,    0,    0,
-        0,    0,    0,  203,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  106,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   33,    0,    0,   76,    0,    0,    0,    0,
-      153,    0,    0,    0,    0,    0,  198,  201,  174,    0,
-
-      121,  102,    0,    0,    0,    0,    0,    0,    0,    0,
-       72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      145,    0,    0,    0,    0,    0,    0,  150,    0,   74,
-        0,   65,    0,    0,    0,    0,    0,    0,    0,  103,
-        0,    0,    0,    0,    0,    0,    0,  144,    0,    0,
-      178,  202,  199,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   73,    0,
-        0,    0,    0,   27,   25,    0,    0,    0,   78,    0,
-        0,  105,    0,   70,    0,    0,    0,    0,    0,    0,
-        0,    0,   69,    0,  146,   26,  197,    0
 
+        0,    0,  147,    0,    0,    0,    0,    0,   54,    0,
+       67,    0,   49,  175,    0,  101,    0,    0,    0,    0,
+        0,    0,    0,    0,   80,    0,    0,    0,    0,    0,
+        0,    0,   77,    0,    0,    0,    0,    0,    0,   16,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   53,    0,    0,    0,    0,    0,    0,   75,
+        0,    0,    0,    0,    0,    0,    0,    0,  203,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   33,    0,    0,
+       76,    0,    0,    0,    0,  153,    0,    0,    0,    0,
+
+        0,  198,  201,  174,    0,  121,  102,    0,    0,    0,
+        0,    0,    0,    0,    0,   72,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  145,    0,    0,    0,    0,
+        0,    0,  150,    0,   74,    0,   65,    0,    0,    0,
+        0,    0,    0,    0,  103,    0,    0,    0,    0,    0,
+        0,    0,  144,    0,    0,  178,  202,  199,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   73,    0,    0,    0,    0,   27,   25,
+        0,    0,    0,   78,    0,    0,  105,    0,   70,    0,
+        0,    0,    0,    0,    0,    0,    0,   69,    0,  146,
+
+       26,  197,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -990,282 +991,283 @@ static const YY_CHAR yy_meta[74] =
         1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[2207] =
+static const flex_int16_t yy_base[2212] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     2589, 2590,   34, 2585,  145,    0,  207, 2590,  214,  221,
-       13,  228, 2590, 2565,  118,   25,    2,    6, 2590, 2590,
-       73,   11,   17, 2590, 2590, 2590,  104, 2573, 2526,    0,
-     2563,  108, 2580,   24,  262, 2590, 2522,   67, 2528,   84,
-       75,   88,  224,   91,   89,  290,  220, 2520,  206,  285,
-      236,  204,  197,   60,  291, 2529,  247,  308,  315,  214,
-      286, 2512,  212,  320,  344,  318, 2531,  335,    0,  385,
-      401,  415,  422,  427, 2590,    0, 2590,  441,  446,  236,
-      314,  238,  326,  353,  309, 2590, 2528, 2569, 2590,  263,
-
-     2590,  440, 2556,  308, 2525,  364,   10,  329,  359,  384,
-      391,  241, 2566,    0,  501,  408, 2508, 2505, 2509,  418,
-     2505,   80, 2513,  422, 2499, 2500, 2505,   78, 2515, 2498,
-     2507, 2497, 2506,  341,  343,  340, 2499, 2497,  410, 2545,
-     2549, 2495, 2488, 2541, 2481,  174, 2502, 2502, 2496,  340,
-     2489, 2487, 2488, 2480, 2485, 2479,  429, 2490,  412, 2475,
-     2474, 2488,  425, 2474,  422,  447, 2468,  497,  436,  471,
-     2489, 2486, 2487,  432, 2485, 2520, 2519,  450,  446, 2466,
-      471, 2467,  478, 2459, 2476, 2468, 2470,    0,  477,  483,
-      473,  496,  489,  515, 2466, 2590, 2511,  530, 2460,  499,
-
-      523,  530, 2514,  535, 2513,  532, 2512, 2590, 2590,  578,
-      441,  543, 2471, 2463, 2450, 2461, 2465, 2466, 2446, 2457,
-     2461, 2458, 2457,  475,  516, 2495, 2459, 2440, 2437, 2445,
-     2440, 2454, 2450, 2441, 2437, 2449, 2449, 2437, 2439, 2442,
-     2422, 2426, 2439, 2441, 2438, 2430, 2420, 2438, 2590, 2423,
-     2432,  523, 2470, 2416, 2425, 2467, 2414, 2424, 2427,  510,
-     2423, 2462, 2407, 2409, 2420, 2458,  557, 2403,  562, 2416,
-     2396, 2411,  561, 2401, 2407,  527, 2398, 2396, 2396, 2402,
-     2393, 2392, 2399, 2389, 2448, 2404, 2403, 2397,  530, 2404,
-     2399, 2391, 2381, 2396, 2395, 2390, 2394, 2375, 2391, 2377,
-
-     2383, 2390, 2372,  536, 2377, 2374, 2373,  603, 2372, 2367,
-     2381,  571, 2380, 2423, 2382,  560, 2373, 2361,  561, 2590,
-     2590,  583, 2590, 2590, 2359,  566,  461, 2407,  586, 2417,
-      580, 2590, 2416, 2590, 2410,  630, 2590, 2372,  590, 2349,
-     2358, 2406, 2366, 2349, 2366, 2402, 2362, 2345, 2351, 2403,
-     2358, 2361, 2352, 2355, 2341, 2352, 2396, 2390, 2348, 2345,
-      621, 2351, 2391, 2326, 2384, 2337, 2332, 2326, 2328, 2331,
-     2378, 2335, 2324, 2340, 2374, 2320,  628, 2334, 2319, 2318,
-     2331, 2329, 2327, 2327, 2326, 2321, 2328, 2323, 2319,  599,
-     2317, 2320, 2315, 2301, 2313, 2309, 2359,  589,  602, 2353,
-
-     2590, 2300, 2316, 2350, 2300, 2299, 2298, 2291, 2293, 2305,
-     2296, 2303, 2284, 2301, 2296,  610, 2343, 2296, 2293, 2296,
-     2590, 2295,  559, 2285, 2297,  600, 2272, 2273, 2294, 2285,
-     2275, 2326, 2271, 2285,  614, 2271, 2283, 2282, 2281, 2276,
-     2318, 2278, 2277, 2276, 2275, 2258, 2266, 2316, 2275, 2255,
-     2313, 2590, 2255, 2254,  661, 2267, 2265, 2590, 2590, 2265,
-     2254, 2246,  605, 2305, 2304, 2590, 2303, 2590,  639,  687,
-     2262,  606, 2301, 2243, 2254, 2293, 2246, 2248, 2250, 2237,
-     2245, 2233, 2590, 2238, 2231, 2243, 2246, 2233, 2232, 2590,
-      631, 2234, 2231,  626, 2229, 2231, 2590, 2276, 2238, 2235,
-
-     2220, 2234, 2232, 2232, 2226,  678, 2233, 2221, 2214, 2265,
-     2590, 2212, 2228, 2262, 2223, 2221, 2219, 2220, 2204, 2213,
-     2255, 2206, 2205, 2200, 2199, 2250, 2194,  636, 2213, 2187,
-     2194, 2199, 2209, 2243, 2247, 2590, 2192, 2188,  710, 2186,
-     2238, 2194, 2193, 2187, 2194, 2178, 2178, 2188, 2176, 2190,
-     2190, 2178, 2174, 2172, 2590, 2229, 2590, 2171, 2182, 2221,
-     2166, 2165, 2170, 2179, 2173, 2167, 2176, 2218, 2212, 2174,
-     2158, 2153, 2173, 2148, 2154,  589, 2168, 2161, 2165, 2148,
-     2206, 2147, 2147, 2198, 2143, 2144, 2143, 2141, 2158, 2590,
-     2154, 2191, 2590, 2142, 2140, 2590, 2151, 2187, 2186, 2146,
-
-     2130, 2147, 2187, 2590, 2590, 2590,  649,  664, 2127,  711,
-     2590, 2137, 2136,  660, 2143, 2123, 2133, 2175, 2120, 2173,
-     2118, 2128, 2170, 2115, 2122, 2115, 2127, 2109, 2109, 2124,
-     2123,  659, 2122, 2121, 2121, 2103, 2108, 2149, 2116, 2113,
-     2107, 2152, 2096, 2111, 2111, 2109, 2109, 2590, 2094, 2091,
-     2149, 2104, 2096, 2102, 2093, 2101, 2086, 2137, 2101, 2083,
-     2095, 2087,  530, 2078, 2077, 2071, 2076, 2091, 2088, 2089,
-     2068, 2078, 2084, 2127, 2082, 2074, 2065, 2590, 2066, 2068,
-     2063, 2076, 2068, 2067, 2072, 2111, 2110, 2061,   16, 2070,
-     2107, 2052, 2105, 2052, 2055, 2048, 2590, 2062, 2041, 2045,
-
-     2059, 2054, 2050, 2095, 2047, 2054, 2092, 2590, 2037, 2051,
-     2050, 2053, 2034, 2086, 2085, 2032, 2083, 2043, 2027, 2076,
-       20, 2590,  188,  224,  239,  702,  324,  363,  377,  457,
-      606,  572,  599,  585,  625,  649,  642, 2590,  674,  667,
-     2590,  691,  702,  670,  667,  667,  682,  694,  688,  677,
+     2594, 2595,   34, 2590,  145,    0,  207, 2595,  214,  221,
+       13,  228, 2595, 2570,  118,   25,    2,    6, 2595, 2595,
+       73,   11,   17, 2595, 2595, 2595,  104, 2578, 2531,    0,
+     2568,  108, 2585,   24,  262, 2595, 2527,   67, 2533,   84,
+       75,   88,  224,   91,   89,  290,  220, 2525,  206,  285,
+      236,  204,  197,   60,  291, 2534,  247,  308,  315,  214,
+      286, 2517,  212,  320,  344,  318, 2536,  335,    0,  385,
+      401,  415,  422,  427, 2595,    0, 2595,  441,  446,  236,
+      314,  238,  326,  353,  309, 2595, 2533, 2574, 2595,  263,
+
+     2595,  440, 2561,  308, 2530,  364,   10,  329,  359,  384,
+      391,  241, 2571,    0,  501,  408, 2513, 2510, 2514,  418,
+     2510,   80, 2518,  422, 2504, 2505, 2510,   78, 2520, 2503,
+     2512, 2502, 2511,  341,  343,  340, 2504, 2502,  410, 2550,
+     2554, 2500, 2493, 2546, 2486,  174, 2507, 2507, 2501,  340,
+     2494, 2492, 2493, 2485, 2490, 2484,  429, 2495,  412, 2480,
+     2479, 2493,  425, 2479,  422,  447, 2473,  497,  436,  471,
+     2494, 2491, 2492,  432, 2490, 2525, 2524,  450,  446, 2471,
+      471, 2472,  478, 2464, 2481, 2473, 2475,    0,  477,  483,
+      473,  496,  489,  515, 2471, 2595, 2516,  530, 2465,  499,
+
+      523,  530, 2519,  535, 2518,  532, 2517, 2595, 2595,  578,
+      441,  543, 2476, 2468, 2455, 2466, 2470, 2471, 2451, 2462,
+     2466, 2463, 2462,  475,  516, 2500, 2464, 2445, 2442, 2450,
+     2445, 2459, 2455, 2446, 2442, 2454, 2454, 2442, 2444, 2447,
+     2427, 2431, 2444, 2446, 2443, 2435, 2425, 2443, 2595, 2428,
+     2437,  523, 2475, 2421, 2430, 2472, 2419, 2429, 2432,  510,
+     2428, 2467, 2412, 2414, 2425, 2463,  557, 2408,  562, 2421,
+     2401, 2416,  561, 2406, 2412,  527, 2403, 2401, 2401, 2407,
+     2398, 2397, 2404, 2394, 2453, 2409, 2408, 2402,  530, 2409,
+     2404, 2396, 2386, 2401, 2400, 2395, 2399, 2380, 2396, 2382,
+
+     2388, 2395, 2377,  536, 2382, 2379, 2378,  603, 2377, 2372,
+     2386,  571, 2385, 2428, 2387,  560, 2378, 2366,  561, 2595,
+     2595,  583, 2595, 2595, 2364,  566,  461, 2412,  586, 2422,
+      580, 2595, 2421, 2595, 2415,  630, 2595, 2377,  590, 2354,
+     2363, 2411, 2371, 2354, 2371, 2407, 2367, 2350, 2356, 2408,
+     2363, 2366, 2357, 2360, 2346, 2357, 2401, 2395, 2353, 2350,
+      621, 2356, 2396, 2331, 2389, 2342, 2337, 2331, 2333, 2336,
+     2383, 2340, 2329, 2345, 2379, 2325,  628, 2339, 2324, 2323,
+     2336, 2334, 2332, 2332, 2331, 2326, 2333, 2328, 2324,  599,
+     2322, 2325, 2320, 2306, 2318, 2314, 2364,  589,  602, 2358,
+
+     2595, 2305, 2321, 2355, 2305, 2304, 2303, 2296, 2298, 2310,
+     2301, 2308, 2289, 2306, 2301,  610, 2348, 2301, 2298, 2301,
+     2595, 2300,  559, 2290, 2302,  600, 2277, 2278, 2299, 2290,
+     2280, 2331, 2276, 2290,  614, 2276, 2288, 2287, 2286, 2281,
+     2323, 2283, 2282, 2281, 2280, 2263, 2271, 2321, 2280, 2260,
+     2318, 2595, 2260, 2259,  661, 2272, 2270, 2595, 2595, 2270,
+     2259, 2251,  605, 2310, 2309, 2595, 2308, 2595,  639,  687,
+     2267,  606, 2306, 2248, 2259, 2298, 2251, 2253, 2255, 2242,
+     2250, 2238, 2595, 2243, 2236, 2248, 2251, 2238, 2237, 2595,
+      631, 2239, 2236,  626, 2234, 2236, 2595, 2281, 2243, 2240,
+
+     2225, 2239, 2237, 2237, 2231,  678, 2238, 2226, 2219, 2270,
+     2595, 2217, 2233, 2267, 2228, 2226, 2224, 2225, 2209, 2218,
+     2260, 2211, 2210, 2205, 2204, 2255, 2199,  636, 2218, 2192,
+     2199, 2204, 2214, 2248, 2252, 2595, 2197, 2193,  710, 2191,
+     2243, 2199, 2198, 2192, 2199, 2183, 2183, 2193, 2181, 2195,
+     2195, 2183, 2179, 2177, 2595, 2234, 2595, 2176, 2187, 2226,
+     2171, 2170, 2175, 2184, 2178, 2172, 2181, 2223, 2217, 2179,
+     2163, 2158, 2178, 2153, 2159,  589, 2173, 2166, 2170, 2153,
+     2211, 2152, 2152, 2203, 2148, 2149, 2148, 2146, 2163, 2595,
+     2159, 2196, 2595, 2147, 2145, 2595, 2156, 2192, 2191, 2151,
+
+     2135, 2152, 2192, 2595, 2595, 2595,  649,  664, 2132,  711,
+     2595, 2142, 2141,  660, 2148, 2128, 2138, 2180, 2125, 2178,
+     2123, 2133, 2175, 2120, 2127, 2120, 2132, 2114, 2114, 2129,
+     2128,  659, 2127, 2126, 2126, 2108, 2113, 2154, 2121, 2118,
+     2112, 2157, 2101, 2116, 2116, 2114, 2114, 2595, 2099, 2096,
+     2154, 2109, 2101, 2107, 2098, 2106, 2091, 2142, 2106, 2088,
+     2100, 2092,  530, 2083, 2082, 2076, 2081, 2096, 2093, 2094,
+     2073, 2083, 2089, 2132, 2087, 2079, 2070, 2595, 2071, 2073,
+     2068, 2081, 2073, 2072, 2077, 2116, 2115, 2066,   16, 2075,
+     2112, 2057, 2110, 2057, 2060, 2053, 2595, 2067, 2046, 2050,
+
+     2064, 2059, 2055, 2100, 2052, 2059, 2097, 2595, 2042, 2056,
+     2055, 2058, 2039, 2091, 2090, 2037, 2088, 2048, 2032, 2081,
+       20, 2595,  188,  224,  239,  702,  324,  363,  377,  457,
+      606,  572,  599,  585,  625,  649,  642, 2595,  674,  667,
+     2595,  691,  702,  670,  667,  667,  682,  694,  688,  677,
       673,  687,  688,  735,  699,  742,  702,  706,  739,  740,
       700,  700,  710,  715,  701,  704,  715,  715,  699,  756,
       709,  719,  722,  760,  723,  716,  720,  717,  719,  766,
-      767,  731,  775,  732,  734, 2590,  737,  732,  723,  738,
+      767,  731,  775,  732,  734, 2595,  737,  732,  723,  738,
       743,  740,  728,  744,  743,  731,  745,  743,  751,  787,
 
-      749,  794,  795,  745,  737,  747,  794,  752,  802, 2590,
-      803,  756,  758,  754,  748,  764,  752,  765,  811,  807,
-      770,  759,  772, 2590,  762,  773,  762,  775,  765,  778,
+      749,  794,  795,  745,  737,  747,  794,  752,  802, 2595,
+      803,  756,  758,  754,  748,  764,  752,  762,  811,  807,
+      770,  759,  772, 2595,  762,  773,  762,  775,  765,  778,
       822,  823,  766,  777,  762,  785,  776,  765,  771,  826,
       790,  774,  786,  830,  831,  778,  833,  797,  792,  797,
-      795,  839,  781,  793,  796,  800,  792,  789, 2590,  853,
+      795,  839,  781,  793,  796,  800,  792,  789, 2595,  853,
       812,  813,  801,  815,  805,  808,  819,  804,  811,  817,
       818,  810,  824,  864,  840,  814,  828,  833,  830,  812,
-      819,  833,  878,  835,  832,  833,  831,  840, 2590,  836,
+      819,  833,  878,  835,  832,  833,  831,  840, 2595,  836,
       831,  846,  843,  829,  831,  850,  847,  835,  842,  843,
 
       852,  856,  892,  855,  845,  843,  842,  853,  849,  905,
-      852,  863,  848,  849,  855,  871,  867,  862,  909, 2590,
+      852,  863,  848,  849,  855,  871,  867,  862,  909, 2595,
       873,  873,  866,  877,  875,  920,  862,  864,  883,  880,
-      868,  866,  928,  885,  871,  877,  875, 2590, 2590,  885,
-      890,  895,  883,  893,  895, 2590, 2590,  896,  883,  901,
-      888,  890,  883,  886, 2590,  889,  907,  894,  944,  895,
-      947,  893,  897,  915,  956, 2590, 2590,  901,  905,  904,
+      868,  866,  928,  885,  871,  877,  875, 2595, 2595,  885,
+      890,  895,  883,  893,  895, 2595, 2595,  896,  883,  901,
+      888,  890,  883,  900, 2595,  889,  907,  894,  944,  895,
+      947,  893,  897,  915,  956, 2595, 2595,  901,  905,  904,
       901,  917,  962,  915,  905,  906,  902,  915,  926,  927,
       922,  923,  925,  918,  920,  916,  922,  922,  924,  939,
-      922,  981,  938,  943,  920,  943,  929,  928, 2590,  935,
+      922,  981,  938,  943,  920,  943,  929,  928, 2595,  935,
 
       936,  985,  986,  938,  951,  989,  947,  937,  952,  946,
       954,  941,  973,  981, 1003,  951,  946, 1001, 1002,  964,
-     1004, 2590, 1010,  953,  969,  973, 1014,  964,  963,  958,
+     1004, 2595, 1010,  953,  969,  973, 1014,  964,  963,  958,
       959,  971,  966,  962,  965,  966,  976,  986, 1022,  970,
-      988,  980,  975, 1033,  990,  991,  982, 2590,  996,  985,
+      988,  980,  975, 1033,  990,  991,  982, 2595,  996,  985,
       988,  996,  998,  983,  995, 1000,  997,  995, 1042, 1008,
-      992,  993, 2590, 1009, 1012,  995, 1006, 1055,  998, 1017,
-     2590, 1016, 1019, 1005, 1000, 1018, 1058, 1016, 1012, 1009,
-     1062, 1063, 1025, 1011, 1029, 1029, 1029, 1074, 1031, 1017,
-     1032, 1024, 1031, 1021, 1039, 1038, 1025, 1042, 2590, 1034,
+      992,  993, 2595, 1009, 1012,  995, 1006, 1055,  998, 1017,
+     2595, 1016, 1019, 1005, 1000, 1018, 1058, 1016, 1012, 1009,
+     1062, 1063, 1025, 1011, 1029, 1029, 1029, 1030, 1031, 1017,
+     1032, 1024, 1031, 1021, 1039, 1038, 1025, 1042, 2595, 1034,
 
-     1040, 1043, 1088, 1035, 2590, 1038, 1043, 1088, 1039, 1051,
+     1040, 1043, 1088, 1035, 2595, 1038, 1043, 1088, 1039, 1051,
      1045, 1046, 1044, 1046, 1056, 1101, 1045, 1046, 1046, 1105,
-     1049, 1061, 1054, 2590, 1050, 1058, 1056, 1107, 1050, 1071,
+     1049, 1061, 1054, 2595, 1050, 1058, 1056, 1107, 1050, 1071,
      1057, 1058, 1059, 1060, 1066, 1074, 1065, 1070, 1080, 1081,
-     1082, 1087, 1128, 1100, 1105, 2590, 1087, 1084, 1080, 1094,
-     1077, 1077, 2590, 1078, 1138, 1081, 2590, 1092, 1082, 1102,
+     1082, 1087, 1128, 1100, 1105, 2595, 1087, 1084, 1080, 1094,
+     1077, 1077, 2595, 1078, 1138, 1081, 2595, 1092, 1082, 1102,
      1101, 1092, 1103, 1146, 1107, 1100, 1104, 1108, 1091, 1108,
-     1099, 1154, 1101, 2590, 1151, 1100, 1103, 1121, 1103, 1104,
+     1099, 1154, 1101, 2595, 1151, 1100, 1103, 1121, 1103, 1104,
      1104, 1125, 1122, 1110, 1128, 1116, 1130, 1116, 1124, 1133,
-     1113, 1128, 1135, 1177, 1173, 2590, 1179, 1180, 1122, 1132,
+     1113, 1128, 1135, 1177, 1173, 2595, 1179, 1180, 1122, 1132,
 
      1142, 1126, 1146, 1134, 1130, 1137, 1146, 1134, 1141, 1142,
-     1154, 1195, 1142, 1197, 1141, 2590, 1143, 1160, 1201, 1151,
-     1150, 1156, 1154, 1152, 1147, 1208, 1159, 1210, 1206, 1212,
-     2590, 1153, 1170, 1163, 1154, 1173, 1161, 1171, 1172, 1168,
-     1181, 1181, 2590, 1166, 1162, 1168, 2590, 1169, 1229, 1188,
-     1169, 1188, 1189, 1191, 1230, 1183, 1237, 1238, 1191, 1196,
-     1190, 1188, 1199, 1198, 1182, 1187, 1193, 1206, 2590, 1228,
-     1219, 1251, 1191, 1213, 1208, 1208, 1212, 1257, 2590, 1200,
-     1200, 1203, 1220, 1215, 1219, 1214, 2590, 1206, 1223, 1203,
-     1224, 1214, 1265, 1218, 2590, 1232, 1232, 1270, 1217, 1226,
-
-     1274, 1232, 1237, 1223, 1283, 1226, 1227, 1241, 1239, 1231,
-     1237, 1233, 1251, 1252, 1253, 2590, 1243, 2590, 1253, 2590,
-     1238, 1249, 1240, 1259, 1252, 1250, 1243, 1255, 1299, 1263,
-     1252, 1259, 1260, 1266, 2590, 1259, 2590, 1311, 1252, 1313,
-     2590, 1314, 1256, 1262, 1269, 1313, 1275, 2590, 1276, 2590,
-     1263, 2590, 1263, 1266, 1280, 1285, 1268, 1327, 1284, 1285,
-     1325, 1277, 1282, 1333, 1329, 1282, 1336, 2590, 1287, 1284,
-     1339, 1340, 1297, 1298, 1300, 2590, 2590, 1292, 1287, 1341,
-     1290, 1306, 1349, 1291, 1303, 1292, 1309, 1324, 1355, 2590,
-     1312, 1305, 1314, 1305, 1316, 2590, 1361, 1298, 1309, 1324,
-
-     1360, 1312, 1323, 1324, 1325, 1322, 1366, 1329, 1319, 1329,
-     1335, 1322, 1318, 1378, 1374, 1332, 1376, 1384, 1341, 2590,
-     1327, 1343, 1334, 1337, 1346, 1347, 1344, 1334, 1337, 1337,
-     1348, 1343, 1398, 1345, 1400, 1343, 1348, 1403, 1399, 1341,
-     1356, 1349, 1352, 1365, 1366, 1364, 1413, 2590, 1366, 2590,
-     2590, 1372, 1364, 1374, 1359, 1415, 1362, 1362, 1423, 1424,
-     1368, 1378, 1427, 2590, 1375, 1376, 1378, 1431, 1372, 1375,
-     2590, 1393, 1394, 2590, 1394, 1382, 2590, 2590, 1395, 1378,
-     1398, 1399, 1385, 1387, 1446, 1396, 2590, 1448, 1397, 1391,
-     1451, 1431, 2590, 1453, 1410, 1455, 1406, 1453, 2590, 1401,
-
-     1460, 1410, 1404, 1401, 1404, 1406, 1423, 1462, 1415, 1427,
-     1430, 1418, 1421, 1414, 1421, 1412, 2590, 1420, 1435, 1420,
-     2590, 1422, 1476, 1424, 1478, 1440, 1440, 1443, 1443, 1440,
-     1484, 1446, 1438, 1439, 2590, 1440, 2590, 1450, 1442, 2590,
-     1448, 1453, 1454, 1451, 1495, 1443, 1458, 1459, 1451, 2590,
-     1448, 1449, 1449, 1455, 1454, 1452, 1506, 1467, 2590, 2590,
-     1508, 1455, 2590, 1456, 1457, 1463, 2590, 1472, 1466, 1521,
-     1468, 1461, 1473, 1468, 1478, 1489, 1482, 1488, 1478, 1533,
-     1486, 2590, 1495, 2590, 1492, 1537, 2590, 1490, 1513, 2590,
-     1540, 2590, 1498, 1483, 1543, 2590, 1544, 1501, 1506, 1488,
-
-     1548, 1544, 1508, 1505, 1501, 1494, 1549, 1507, 1508, 1498,
-     1503, 1515, 1560, 1515, 1563, 1513, 1560, 1525, 1525, 1521,
-     1565, 1513, 1518, 1516, 1575, 1526, 1532, 1520, 1579, 1575,
-     1538, 1582, 1543, 1532, 1526, 1586, 1528, 1529, 1543, 1546,
-     1546, 1592, 1534, 1551, 1547, 1545, 1552, 1536, 1594, 1595,
-     1596, 1559, 1552, 1551, 1551, 1546, 1564, 2590, 1555, 1561,
-     1566, 1553, 1554, 1553, 1555, 1610, 1556, 2590, 1552, 1570,
-     1619, 2590, 1577, 1590, 2590, 1622, 1575, 2590, 2590, 1566,
-     1577, 1626, 2590, 1572, 1577, 1575, 1625, 1583, 1588, 1577,
-     1593, 1582, 1580, 1594, 1581, 2590, 1583, 2590, 1601, 1587,
-
-     1596, 1639, 1582, 1587, 1647, 1595, 1606, 1607, 2590, 1652,
-     1648, 1606, 1650, 2590, 1601, 1657, 2590, 1600, 1615, 1603,
-     2590, 1613, 1614, 1663, 1621, 1625, 2590, 1661, 1627, 1603,
-     1621, 1622, 1631, 1613, 1620, 1632, 1631, 1622, 1672, 1624,
-     1620, 1680, 1622, 1623, 1683, 1679, 1685, 1635, 1687, 1640,
-     1630, 1646, 1639, 2590, 1692, 1693, 2590, 1642, 1695, 1637,
-     2590, 1640, 1650, 1694, 1642, 1657, 1644, 1659, 1645, 1652,
-     1652, 1707, 1664, 1665, 1652, 1654, 1668, 1654, 1714, 1667,
-     2590, 1711, 1662, 1659, 2590, 1661, 1674, 1661, 1682, 2590,
-     1679, 1724, 1677, 1674, 1675, 2590, 1728, 1687, 1670, 1672,
-
-     1688, 1681, 1671, 1687, 1688, 1697, 1687, 1739, 1699, 1683,
-     1692, 1738, 2590, 1696, 1745, 2590, 1694, 2590, 1688, 2590,
-     1695, 1749, 1750, 1747, 2590, 2590, 1709, 2590, 1749, 1711,
-     1712, 1697, 1698, 1706, 1760, 1708, 1757, 1758, 1713, 2590,
-     1708, 1726, 1708, 1714, 1727, 1722, 2590, 1719, 1724, 1722,
-     1774, 1731, 1776, 1724, 1721, 1721, 2590, 1736, 1737, 1738,
-     2590, 1739, 1729, 1741, 1786, 1739, 1788, 1730, 1738, 1739,
-     1752, 2590, 1753, 1734, 1735, 1742, 1744, 2590, 1758, 1755,
-     1795, 1756, 2590, 2590, 1760, 1745, 1745, 1760, 1753, 1752,
-     1763, 1750, 2590, 1766, 1754, 1757, 1813, 1753, 1772, 1811,
-
-     1775, 1768, 1767, 1776, 1778, 1782, 2590, 1772, 2590, 1776,
-     1767, 1826, 1769, 1828, 1829, 1830, 1788, 1832, 2590, 1774,
-     2590, 1829, 1791, 1792, 1779, 1787, 1798, 1785, 1796, 1782,
-     1780, 1788, 1787, 1792, 1784, 1849, 1802, 1803, 1793, 1810,
-     1809, 1850, 1794, 1813, 1814, 2590, 1819, 1812, 1851, 1818,
-     1805, 1820, 1865, 1822, 1825, 1824, 1813, 1822, 2590, 1871,
-     2590, 2590, 2590, 1832, 2590, 1873, 1815, 1875, 1876, 1819,
-     1878, 1826, 1875, 1876, 1838, 1878, 1824, 1828, 1846, 1887,
-     1846, 2590, 1837, 1827, 1886, 1852, 1845, 1841, 1895, 1838,
-     1840, 1839, 1846, 1889, 1843, 1902, 1846, 2590, 1851, 1861,
-
-     1864, 1847, 1855, 2590, 1850, 2590, 1862, 2590, 2590, 1867,
-     2590, 1868, 1868, 1859, 1915, 1859, 1869, 1854, 1867, 2590,
-     1869, 1877, 1922, 1863, 1865, 1862, 1886, 2590, 1873, 1880,
-     1881, 1884, 1931, 1874, 2590, 1928, 1875, 1883, 1877, 1893,
-     1892, 1895, 1888, 1883, 1883, 1895, 1890, 2590, 1901, 1889,
-     1942, 1893, 1905, 1950, 2590, 1896, 1908, 1953, 1902, 1904,
-     1902, 1903, 1958, 2590, 1911, 1898, 1913, 1918, 1915, 1964,
-     1965, 1966, 1923, 1968, 1969, 1913, 1917, 1913, 1929, 1912,
-     1924, 1918, 2590, 1934, 1978, 2590, 1935, 1920, 1938, 1929,
-     2590, 1930, 1944, 1940, 1933, 1933, 2590, 2590, 2590, 1988,
-
-     2590, 2590, 1931, 1939, 1934, 1987, 1953, 1950, 1995, 1956,
-     2590, 1997, 1939, 1999, 1942, 1955, 1954, 1955, 1945, 1952,
-     2590, 1947, 2007, 1960, 1969, 1962, 2006, 2590, 1953, 2590,
-     1965, 2590, 2009, 2015, 1957, 1973, 2018, 2019, 2020, 2590,
-     1977, 1971, 1964, 1984, 1981, 1973, 1977, 2590, 2024, 1973,
-     2590, 2590, 2590, 1973, 1981, 2028, 1988, 1981, 2036, 1984,
-     1984, 1980, 1982, 2041, 2042, 1984, 2000, 1985, 2590, 2046,
-     1993, 2000, 2049, 2590, 2590, 2002, 2051, 1999, 2590, 2003,
-     2002, 2590, 2003, 2590, 1997, 1997, 2014, 2015, 2060, 2006,
-     2062, 2063, 2590, 2064, 2590, 2590, 2590, 2590, 2070, 2073,
-
-     2076, 2077, 2079, 2082, 2085, 2088
+     1154, 1195, 1142, 1197, 1141, 1140, 1144, 1161, 1202, 1152,
+     1151, 1157, 1155, 1153, 1148, 1209, 1160, 1211, 1207, 1213,
+     2595, 1154, 1171, 1164, 1155, 1174, 1162, 1172, 1173, 1169,
+     1182, 1183, 2595, 1167, 1163, 1169, 2595, 1170, 1230, 1189,
+     1170, 1189, 1190, 1192, 1231, 1184, 1238, 1239, 1192, 1197,
+     1191, 1189, 1200, 1199, 1183, 1188, 1194, 1207, 2595, 1229,
+     1220, 1252, 1192, 1214, 1209, 1209, 1213, 1258, 2595, 1201,
+     1201, 1204, 1221, 1216, 1220, 1215, 2595, 1207, 1224, 1204,
+     1225, 1215, 1266, 1219, 2595, 1233, 1233, 1271, 1218, 1227,
+
+     1275, 1233, 1238, 1224, 1284, 1227, 1228, 1242, 1240, 1232,
+     1238, 1234, 1252, 1253, 1254, 2595, 1244, 2595, 1254, 2595,
+     1239, 1250, 1241, 1260, 1253, 1251, 1244, 1256, 1300, 1264,
+     1253, 1260, 1261, 1267, 2595, 1260, 2595, 1312, 1265, 1254,
+     1315, 2595, 1316, 1258, 1264, 1271, 1315, 1277, 2595, 1278,
+     2595, 1265, 2595, 1265, 1268, 1282, 1287, 1270, 1329, 1286,
+     1287, 1327, 1279, 1284, 1335, 1331, 1284, 1338, 2595, 1289,
+     1286, 1341, 1342, 1299, 1300, 1302, 2595, 2595, 1294, 1289,
+     1343, 1292, 1308, 1351, 1293, 1305, 1294, 1311, 1326, 1357,
+     2595, 1314, 1307, 1316, 1307, 1318, 2595, 1363, 1300, 1311,
+
+     1326, 1362, 1314, 1325, 1326, 1327, 1324, 1368, 1331, 1321,
+     1331, 1337, 1324, 1320, 1380, 1376, 1334, 1378, 1386, 1343,
+     2595, 1329, 1345, 1336, 1339, 1348, 1349, 1346, 1336, 1339,
+     1339, 1350, 1345, 1400, 1347, 1402, 1345, 1350, 1405, 1401,
+     1343, 1358, 1351, 1354, 1367, 1368, 1366, 1415, 2595, 1364,
+     1370, 2595, 2595, 1375, 1367, 1377, 1362, 1418, 1365, 1365,
+     1426, 1427, 1371, 1381, 1430, 2595, 1378, 1379, 1381, 1434,
+     1375, 1378, 2595, 1396, 1397, 2595, 1397, 1385, 2595, 2595,
+     1398, 1381, 1401, 1402, 1388, 1390, 1449, 1399, 2595, 1451,
+     1400, 1394, 1454, 1434, 2595, 1456, 1413, 1458, 1409, 1456,
+
+     2595, 1404, 1463, 1413, 1407, 1404, 1407, 1409, 1426, 1465,
+     1418, 1430, 1433, 1421, 1424, 1417, 1424, 1415, 2595, 1423,
+     1438, 1423, 2595, 1425, 1479, 1427, 1481, 1443, 1443, 1446,
+     1446, 1443, 1487, 1449, 1441, 1442, 2595, 1443, 2595, 1453,
+     1445, 2595, 1451, 1456, 1457, 1454, 1498, 1446, 1461, 1462,
+     1454, 2595, 1464, 1452, 1453, 1453, 1459, 1458, 1456, 1510,
+     1471, 2595, 2595, 1512, 1459, 2595, 1460, 1461, 1467, 2595,
+     1476, 1470, 1525, 1472, 1465, 1477, 1472, 1482, 1493, 1486,
+     1492, 1482, 1537, 1490, 2595, 1499, 2595, 1496, 1541, 2595,
+     1494, 1517, 2595, 1544, 2595, 1502, 1487, 1547, 2595, 1548,
+
+     1505, 1510, 1492, 1552, 1548, 1512, 1509, 1505, 1498, 1553,
+     1511, 1512, 1502, 1507, 1519, 1564, 1519, 1567, 1517, 1564,
+     1529, 1529, 1525, 1569, 1517, 1522, 1520, 1579, 1530, 1536,
+     1524, 1583, 1579, 1542, 1586, 1547, 1536, 1530, 1590, 1532,
+     1533, 1547, 1594, 1551, 1551, 1597, 1539, 1556, 1552, 1550,
+     1557, 1541, 1599, 1600, 1601, 1564, 1557, 1556, 1556, 1551,
+     1569, 2595, 1560, 1566, 1571, 1558, 1559, 1558, 1560, 1615,
+     1561, 2595, 1557, 1575, 1624, 2595, 1582, 1595, 2595, 1627,
+     1580, 2595, 2595, 1571, 1582, 1631, 2595, 1577, 1582, 1580,
+     1630, 1588, 1594, 1582, 1598, 1587, 1585, 1599, 1586, 2595,
+
+     1588, 2595, 1606, 1592, 1601, 1644, 1587, 1592, 1652, 1600,
+     1611, 1612, 2595, 1657, 1653, 1611, 1655, 2595, 1606, 1662,
+     2595, 1605, 1620, 1608, 2595, 1618, 1619, 1668, 2595, 1626,
+     1630, 2595, 1666, 1632, 1608, 1626, 1627, 1636, 1618, 1625,
+     1637, 1636, 1627, 1677, 1629, 1625, 1685, 1627, 1628, 1688,
+     1684, 1690, 1640, 1692, 1645, 1635, 1651, 1644, 2595, 1697,
+     1698, 2595, 1647, 1700, 1642, 2595, 1645, 1655, 1699, 1647,
+     1662, 1649, 1664, 1650, 1657, 1657, 1712, 1669, 1670, 1657,
+     1659, 1673, 1659, 1719, 1672, 2595, 1716, 1667, 1664, 2595,
+     1666, 1679, 1666, 1687, 2595, 1684, 1729, 1682, 1679, 1680,
+
+     2595, 1733, 1692, 1675, 1677, 1693, 1686, 1676, 1692, 1693,
+     1702, 1692, 1744, 1704, 1688, 1697, 1743, 2595, 1701, 1750,
+     2595, 1699, 2595, 1693, 2595, 1700, 1754, 1755, 1752, 2595,
+     2595, 1714, 2595, 1754, 1716, 1717, 1702, 1703, 1711, 1765,
+     1713, 1762, 1763, 1718, 2595, 1713, 1731, 1713, 1719, 1732,
+     1727, 2595, 1724, 1729, 1727, 1779, 1736, 1781, 1729, 1726,
+     1726, 2595, 1741, 1742, 1743, 2595, 1744, 1734, 1746, 1791,
+     1744, 1793, 1735, 1743, 1744, 1757, 2595, 1758, 1739, 1740,
+     1747, 1749, 2595, 1763, 1760, 1800, 1761, 2595, 2595, 1765,
+     1750, 1750, 1765, 1758, 1757, 1768, 1755, 2595, 1771, 1759,
+
+     1762, 1818, 1758, 1777, 1816, 1780, 1773, 1772, 1781, 1783,
+     1787, 2595, 1777, 2595, 1781, 1772, 1831, 1774, 1833, 1834,
+     1835, 1793, 1837, 2595, 1779, 2595, 1834, 1796, 1797, 1784,
+     1792, 1803, 1790, 1801, 1787, 1785, 1793, 1792, 1797, 1789,
+     1854, 1807, 1808, 1798, 1815, 1814, 1855, 1799, 1818, 1819,
+     2595, 1824, 1817, 1856, 1823, 1810, 1825, 1870, 1827, 1830,
+     1829, 1818, 1827, 2595, 1876, 2595, 2595, 2595, 1837, 2595,
+     1878, 1820, 1880, 1881, 1824, 1883, 1831, 1880, 1881, 1843,
+     1883, 1829, 1833, 1851, 1892, 1851, 2595, 1842, 1832, 1891,
+     1857, 1850, 1846, 1900, 1843, 1845, 1844, 1851, 1894, 1848,
+
+     1907, 1851, 2595, 1856, 1866, 1869, 1852, 1860, 2595, 1855,
+     2595, 1867, 2595, 2595, 1872, 2595, 1873, 1873, 1864, 1920,
+     1864, 1874, 1859, 1872, 2595, 1874, 1882, 1927, 1868, 1870,
+     1867, 1891, 2595, 1878, 1885, 1886, 1889, 1936, 1879, 2595,
+     1933, 1880, 1888, 1882, 1898, 1897, 1900, 1893, 1888, 1888,
+     1900, 1895, 2595, 1906, 1894, 1947, 1898, 1910, 1955, 2595,
+     1901, 1913, 1958, 1907, 1909, 1907, 1908, 1963, 2595, 1916,
+     1903, 1918, 1923, 1920, 1969, 1970, 1971, 1928, 1973, 1974,
+     1918, 1922, 1918, 1934, 1917, 1929, 1923, 2595, 1939, 1983,
+     2595, 1940, 1925, 1943, 1934, 2595, 1935, 1949, 1945, 1938,
+
+     1938, 2595, 2595, 2595, 1993, 2595, 2595, 1936, 1944, 1939,
+     1992, 1958, 1955, 2000, 1961, 2595, 2002, 1944, 2004, 1947,
+     1960, 1959, 1960, 1950, 1957, 2595, 1952, 2012, 1965, 1974,
+     1967, 2011, 2595, 1958, 2595, 1970, 2595, 2014, 2020, 1962,
+     1978, 2023, 2024, 2025, 2595, 1982, 1976, 1969, 1989, 1986,
+     1978, 1982, 2595, 2029, 1978, 2595, 2595, 2595, 1978, 1986,
+     2033, 1993, 1986, 2041, 1989, 1989, 1985, 1987, 2046, 2047,
+     1989, 2005, 1990, 2595, 2051, 1998, 2005, 2054, 2595, 2595,
+     2007, 2056, 2004, 2595, 2008, 2007, 2595, 2008, 2595, 2002,
+     2002, 2019, 2020, 2065, 2011, 2067, 2068, 2595, 2069, 2595,
+
+     2595, 2595, 2595, 2075, 2078, 2081, 2082, 2084, 2087, 2090,
+     2093
     } ;
 
-static const flex_int16_t yy_def[2207] =
+static const flex_int16_t yy_def[2212] =
     {   0,
-     2199, 2199, 2200, 2200, 2199, 2199, 2199, 2199, 2199, 2199,
-     2198, 2198, 2198, 2198, 2198, 2201, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202,
-     2198, 2198, 2198, 2203,   15, 2198,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2204,   45,   45,   45,   45,
+     2204, 2204, 2205, 2205, 2204, 2204, 2204, 2204, 2204, 2204,
+     2203, 2203, 2203, 2203, 2203, 2206, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2207,
+     2203, 2203, 2203, 2208,   15, 2203,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2209,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2201, 2198,
-     2198, 2198, 2198, 2198, 2198, 2205, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202, 2198, 2203,
+       45,   45,   45,   45,   45,   45,   45,   45, 2206, 2203,
+     2203, 2203, 2203, 2203, 2203, 2210, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2207, 2203, 2208,
 
-     2198, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2206,   45, 2204,   45,   45,   45,   45,   45,
+     2203, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2211,   45, 2209,   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,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2205, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2210, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 2206, 2198, 2198,  115,
+       45,   45,   45,   45,   45,   45, 2211, 2203, 2203,  115,
        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, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   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,
@@ -1273,9 +1275,9 @@ static const flex_int16_t yy_def[2207] =
        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, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198,   45,   45,   45,   45,   45,
-       45, 2198,   45, 2198,   45,  115, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203,   45,   45,   45,   45,   45,
+       45, 2203,   45, 2203,   45,  115, 2203,   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,
@@ -1283,210 +1285,211 @@ static const flex_int16_t yy_def[2207] =
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2203,   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, 2198,   45,   45,   45,   45,   45, 2198, 2198, 2198,
-       45,   45,   45,   45,   45, 2198,   45, 2198,   45,  115,
+       45, 2203,   45,   45,   45,   45,   45, 2203, 2203, 2203,
+       45,   45,   45,   45,   45, 2203,   45, 2203,   45,  115,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45,   45,   45, 2203,
+       45,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2198,   45, 2198,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45, 2203,   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, 2198,
-       45,   45, 2198,   45,   45, 2198,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2203,
+       45,   45, 2203,   45,   45, 2203,   45,   45,   45, 2203,
 
-       45,   45,   45, 2198, 2198, 2198,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203, 2203, 2203,   45,   45,   45,   45,
+     2203,   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, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   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, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
+     2203,   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, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2203,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   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, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   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, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   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, 2198,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2203,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198, 2198,   45,
-       45,   45,   45,   45,   45, 2198, 2198,   45,   45,   45,
-       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203, 2203,   45,
+       45,   45,   45,   45,   45, 2203, 2203,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203, 2203,   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, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   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, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45,   45,   45,   45,
+     2203,   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, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
 
-       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45, 2203,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
-       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
-
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45, 2198,   45, 2198,
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45, 2203,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2198,   45, 2198,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
-       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-       45,   45,   45,   45,   45, 2198, 2198,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45, 2203,   45, 2203,   45, 2203,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45, 2203,   45,   45,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45, 2203,   45,
+     2203,   45, 2203,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45,   45,   45,   45,   45,   45, 2203, 2203,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45, 2198,   45,   45, 2198, 2198,   45,   45,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45,   45,   45, 2198,   45,
+     2203,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2198,   45, 2198,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198, 2198,
-       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2198,   45, 2198,   45,   45, 2198,   45,   45, 2198,
-       45, 2198,   45,   45,   45, 2198,   45,   45,   45,   45,
+     2203,   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, 2203,   45,
+       45, 2203, 2203,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45, 2203,   45,   45, 2203, 2203,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45,   45, 2203,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2203,   45, 2203,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203, 2203,   45,   45, 2203,   45,   45,   45, 2203,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45, 2203,   45,   45, 2203,
+       45,   45, 2203,   45, 2203,   45,   45,   45, 2203,   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, 2198,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-       45, 2198,   45,   45, 2198,   45,   45, 2198, 2198,   45,
-       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2198,   45, 2198,   45,   45,
-
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-       45,   45,   45, 2198,   45,   45, 2198,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45, 2203,   45,   45, 2203,   45,
+       45, 2203, 2203,   45,   45,   45, 2203,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2203,
+
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45, 2203,   45,   45,
+     2203,   45,   45,   45, 2203,   45,   45,   45, 2203,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45, 2198,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
+       45, 2203,   45,   45,   45, 2203,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45, 2198,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45, 2203,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
+     2203,   45, 2203,   45, 2203,   45,   45,   45,   45, 2203,
+     2203,   45, 2203,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45,   45,   45, 2203,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45, 2203, 2203,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45, 2198,   45, 2198,   45, 2198,
-       45,   45,   45,   45, 2198, 2198,   45, 2198,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2198,   45,   45,   45,   45,   45, 2198,   45,   45,
-       45,   45, 2198, 2198,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45, 2198,   45, 2198,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2203,   45, 2203,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   45, 2203,   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, 2198,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-     2198, 2198, 2198,   45, 2198,   45,   45,   45,   45,   45,
+     2203,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   45, 2203, 2203, 2203,   45, 2203,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2203,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45, 2203,   45,   45,   45,   45,   45, 2203,   45,
+     2203,   45, 2203, 2203,   45, 2203,   45,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45,   45,   45, 2203,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-
-       45,   45,   45, 2198,   45, 2198,   45, 2198, 2198,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
-       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45,   45,   45,   45,   45, 2203,
+       45,   45,   45,   45,   45,   45,   45,   45, 2203,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45,   45, 2198,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45, 2198, 2198, 2198,   45,
-
-     2198, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2198,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
-       45, 2198,   45,   45,   45,   45,   45,   45,   45, 2198,
-       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
-     2198, 2198, 2198,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
-       45,   45,   45, 2198, 2198,   45,   45,   45, 2198,   45,
-       45, 2198,   45, 2198,   45,   45,   45,   45,   45,   45,
-       45,   45, 2198,   45, 2198, 2198, 2198,    0, 2198, 2198,
-
-     2198, 2198, 2198, 2198, 2198, 2198
+       45,   45,   45,   45,   45,   45,   45, 2203,   45,   45,
+     2203,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
+
+       45, 2203, 2203, 2203,   45, 2203, 2203,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2203,   45,   45,   45,   45,
+       45,   45, 2203,   45, 2203,   45, 2203,   45,   45,   45,
+       45,   45,   45,   45, 2203,   45,   45,   45,   45,   45,
+       45,   45, 2203,   45,   45, 2203, 2203, 2203,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2203,   45,   45,   45,   45, 2203, 2203,
+       45,   45,   45, 2203,   45,   45, 2203,   45, 2203,   45,
+       45,   45,   45,   45,   45,   45,   45, 2203,   45, 2203,
+
+     2203, 2203,    0, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203
     } ;
 
-static const flex_int16_t yy_nxt[2664] =
+static const flex_int16_t yy_nxt[2669] =
     {   0,
-     2198,   13,   14,   13, 2198,   15,   16, 2198,   17,   18,
+     2203,   13,   14,   13, 2203,   15,   16, 2203,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
        85,  824,   37,   14,   37,   86,   25,   26,   38,  101,
       855,   27,   37,   14,   37,   42,   28,   42,   38,   91,
@@ -1625,49 +1628,49 @@ static const flex_int16_t yy_nxt[2664] =
      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, 1388, 1411, 1412,
-     1413, 1414, 1415, 1389, 1416, 1417, 1418, 1419, 1420, 1421,
+     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1389, 1412,
+     1413, 1414, 1415, 1416, 1390, 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, 1457, 1458, 1459, 1460, 1461,
-     1462, 1463, 1464, 1465, 1466, 1467, 1469, 1470, 1471, 1472,
+     1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1471, 1472,
      1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482,
      1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492,
-     1493, 1494, 1495, 1496, 1497, 1498, 1499, 1501, 1502, 1503,
+     1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1503,
      1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513,
-     1514, 1515, 1516, 1517, 1518, 1519, 1520, 1492, 1468, 1521,
-     1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531,
+     1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1494,
+     1470, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531,
 
      1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541,
-     1500, 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1550, 1551,
-     1544, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560,
-     1561, 1562, 1563, 1564, 1565, 1566, 1567, 1569, 1570, 1573,
-     1571, 1568, 1572, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
-     1581, 1582, 1583, 1584, 1585, 1586, 1587, 1589, 1590, 1591,
-     1592, 1588, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600,
+     1542, 1543, 1502, 1544, 1545, 1547, 1548, 1549, 1550, 1551,
+     1552, 1553, 1546, 1554, 1555, 1556, 1557, 1558, 1559, 1560,
+     1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570,
+     1572, 1573, 1576, 1574, 1571, 1575, 1577, 1578, 1579, 1580,
+     1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590,
+     1592, 1593, 1594, 1595, 1591, 1596, 1597, 1598, 1599, 1600,
      1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610,
-     1589, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
+     1611, 1612, 1613, 1592, 1614, 1615, 1616, 1617, 1618, 1619,
      1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629,
 
      1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639,
      1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649,
-     1650, 1651, 1652, 1653, 1657, 1654, 1658, 1659, 1655, 1660,
-     1661, 1656, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669,
+     1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1661, 1658,
+     1662, 1663, 1659, 1664, 1665, 1660, 1666, 1667, 1668, 1669,
      1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679,
-     1680, 1681, 1682, 1683, 1684, 1685, 1687, 1688, 1689, 1690,
-     1691, 1692, 1693, 1694, 1695, 1696, 1686, 1697, 1698, 1699,
-     1700, 1674, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708,
-     1709, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719,
+     1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689,
+     1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700,
+     1690, 1701, 1702, 1703, 1704, 1678, 1705, 1706, 1707, 1708,
+     1709, 1710, 1711, 1712, 1713, 1715, 1716, 1717, 1718, 1719,
      1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729,
 
      1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
      1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749,
      1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759,
-     1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1710, 1768,
-     1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
-     1779, 1780, 1781, 1782, 1756, 1783, 1784, 1785, 1786, 1787,
+     1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769,
+     1770, 1771, 1714, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
+     1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1761,
      1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797,
      1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807,
      1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817,
@@ -1678,8 +1681,8 @@ static const flex_int16_t yy_nxt[2664] =
      1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857,
      1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867,
      1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877,
-     1878, 1879, 1881, 1882, 1883, 1884, 1880, 1885, 1886, 1887,
-     1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+     1878, 1879, 1880, 1881, 1882, 1883, 1884, 1886, 1887, 1888,
+     1889, 1885, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
      1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907,
      1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917,
      1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927,
@@ -1689,7 +1692,7 @@ static const flex_int16_t yy_nxt[2664] =
      1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957,
      1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
      1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
-     1979, 1980, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
+     1978, 1979, 1980, 1981, 1982, 1984, 1985, 1983, 1986, 1987,
      1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
      1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
      2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
@@ -1709,79 +1712,79 @@ static const flex_int16_t yy_nxt[2664] =
      2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137,
      2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147,
      2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157,
-     2159, 2158, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+     2158, 2159, 2160, 2161, 2162, 2164, 2163, 2165, 2166, 2167,
      2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177,
      2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187,
      2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197,
-       12,   12,   12,   36,   36,   36,   79,   98,   79,  100,
-      100,  100,  113,  113,  113,  188,  854,  188,  207,  207,
-      207,  853,  852,  851,  850,  849,  848,  847,  846,  845,
-
-      844,  843,  842,  841,  840,  839,  838,  837,  836,  835,
-      834,  833,  832,  831,  830,  829,  828,  827,  826,  823,
-      822,  821,  820,  819,  818,  817,  816,  815,  814,  813,
-      812,  811,  810,  809,  808,  807,  806,  805,  804,  803,
-      802,  801,  800,  797,  796,  795,  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,  766,  765,  764,  763,  762,  761,  760,  759,
-      758,  757,  756,  755,  754,  753,  752,  751,  750,  747,
-      746,  744,  741,  740,  739,  738,  737,  736,  735,  734,
-
-      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
-      723,  722,  721,  720,  719,  718,  715,  714,  713,  712,
-      711,  710,  709,  708,  707,  706,  705,  704,  703,  702,
-      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
-      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  669,
-      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  647,
-      646,  645,  644,  643,  642,  641,  640,  639,  638,  634,
-      633,  626,  625,  624,  623,  622,  621,  620,  619,  618,
-
-      617,  616,  615,  614,  613,  612,  611,  609,  606,  605,
-      604,  602,  601,  600,  599,  598,  595,  594,  593,  592,
-      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
-      581,  580,  579,  578,  575,  574,  573,  572,  571,  570,
-      569,  568,  565,  564,  561,  560,  559,  558,  557,  554,
-      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
-      543,  542,  541,  540,  536,  535,  534,  533,  532,  531,
-      530,  526,  525,  524,  523,  522,  521,  520,  519,  518,
-      517,  516,  515,  510,  509,  508,  507,  506,  505,  504,
-      503,  502,  501,  500,  499,  498,  497,  496,  493,  492,
-
-      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
-      481,  480,  479,  478,  477,  476,  475,  474,  473,  471,
-      469,  468,  466,  464,  460,  457,  456,  453,  452,  451,
-      449,  448,  447,  445,  444,  443,  440,  439,  438,  437,
-      436,  435,  434,  433,  432,  431,  430,  429,  428,  427,
-      424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
-      414,  413,  410,  409,  405,  404,  403,  400,  398,  397,
-      396,  395,  394,  393,  389,  388,  387,  386,  385,  384,
-      383,  380,  379,  378,  377,  376,  375,  374,  373,  372,
-      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
-
-      361,  360,  359,  358,  357,  356,  350,  349,  348,  347,
-      346,  345,  344,  343,  342,  341,  340,  208,  334,  332,
-      328,  326,  325,  318,  317,  316,  315,  313,  311,  307,
-      306,  305,  302,  301,  300,  285,  279,  274,  273,  272,
-      269,  266,  265,  264,  263,  262,  261,  258,  257,  256,
-      253,  252,  251,  250,  249,  248,  244,  243,  235,  234,
-      233,  232,  231,  228,  227,  226,  222,  219,  215,  214,
-      213,  208,  199,  197,  196,  195,  186,  166,  145,  119,
-      105,  103,   43,   99,   97,   96,   87,   43, 2198,   11,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198
+     2198, 2199, 2200, 2201, 2202,   12,   12,   12,   36,   36,
+       36,   79,   98,   79,  100,  100,  100,  113,  113,  113,
+      188,  854,  188,  207,  207,  207,  853,  852,  851,  850,
+
+      849,  848,  847,  846,  845,  844,  843,  842,  841,  840,
+      839,  838,  837,  836,  835,  834,  833,  832,  831,  830,
+      829,  828,  827,  826,  823,  822,  821,  820,  819,  818,
+      817,  816,  815,  814,  813,  812,  811,  810,  809,  808,
+      807,  806,  805,  804,  803,  802,  801,  800,  797,  796,
+      795,  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,  766,  765,  764,
+      763,  762,  761,  760,  759,  758,  757,  756,  755,  754,
+      753,  752,  751,  750,  747,  746,  744,  741,  740,  739,
+
+      738,  737,  736,  735,  734,  733,  732,  731,  730,  729,
+      728,  727,  726,  725,  724,  723,  722,  721,  720,  719,
+      718,  715,  714,  713,  712,  711,  710,  709,  708,  707,
+      706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
+      696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
+      686,  685,  684,  683,  682,  680,  679,  678,  677,  676,
+      675,  674,  673,  672,  669,  668,  667,  666,  665,  664,
+      663,  662,  661,  660,  659,  658,  657,  656,  655,  654,
+      653,  652,  651,  650,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  634,  633,  626,  625,  624,  623,
+
+      622,  621,  620,  619,  618,  617,  616,  615,  614,  613,
+      612,  611,  609,  606,  605,  604,  602,  601,  600,  599,
+      598,  595,  594,  593,  592,  591,  590,  589,  588,  587,
+      586,  585,  584,  583,  582,  581,  580,  579,  578,  575,
+      574,  573,  572,  571,  570,  569,  568,  565,  564,  561,
+      560,  559,  558,  557,  554,  553,  552,  551,  550,  549,
+      548,  547,  546,  545,  544,  543,  542,  541,  540,  536,
+      535,  534,  533,  532,  531,  530,  526,  525,  524,  523,
+      522,  521,  520,  519,  518,  517,  516,  515,  510,  509,
+      508,  507,  506,  505,  504,  503,  502,  501,  500,  499,
+
+      498,  497,  496,  493,  492,  491,  490,  489,  488,  487,
+      486,  485,  484,  483,  482,  481,  480,  479,  478,  477,
+      476,  475,  474,  473,  471,  469,  468,  466,  464,  460,
+      457,  456,  453,  452,  451,  449,  448,  447,  445,  444,
+      443,  440,  439,  438,  437,  436,  435,  434,  433,  432,
+      431,  430,  429,  428,  427,  424,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  410,  409,  405,
+      404,  403,  400,  398,  397,  396,  395,  394,  393,  389,
+      388,  387,  386,  385,  384,  383,  380,  379,  378,  377,
+      376,  375,  374,  373,  372,  371,  370,  369,  368,  367,
+
+      366,  365,  364,  363,  362,  361,  360,  359,  358,  357,
+      356,  350,  349,  348,  347,  346,  345,  344,  343,  342,
+      341,  340,  208,  334,  332,  328,  326,  325,  318,  317,
+      316,  315,  313,  311,  307,  306,  305,  302,  301,  300,
+      285,  279,  274,  273,  272,  269,  266,  265,  264,  263,
+      262,  261,  258,  257,  256,  253,  252,  251,  250,  249,
+      248,  244,  243,  235,  234,  233,  232,  231,  228,  227,
+      226,  222,  219,  215,  214,  213,  208,  199,  197,  196,
+      195,  186,  166,  145,  119,  105,  103,   43,   99,   97,
+       96,   87,   43, 2203,   11, 2203, 2203, 2203, 2203, 2203,
+
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203
     } ;
 
-static const flex_int16_t yy_chk[2664] =
+static const flex_int16_t yy_chk[2669] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1915,167 +1918,167 @@ static const flex_int16_t yy_chk[2664] =
      1192, 1193, 1194, 1195, 1197, 1198, 1199, 1200, 1201, 1197,
      1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211,
 
-     1212, 1213, 1214, 1215, 1217, 1218, 1219, 1220, 1221, 1222,
-     1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232, 1233,
-     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1198,
-     1244, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
-     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274, 1275,
-     1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1285, 1286,
-     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1270, 1296, 1297,
-     1298, 1299, 1300, 1271, 1301, 1302, 1303, 1304, 1305, 1306,
-     1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1317,
-
-     1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329,
-     1330, 1331, 1332, 1333, 1334, 1336, 1338, 1339, 1340, 1342,
-     1343, 1344, 1345, 1346, 1347, 1349, 1351, 1353, 1354, 1355,
-     1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
-     1366, 1367, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1378,
-     1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388,
-     1389, 1391, 1392, 1393, 1394, 1395, 1397, 1398, 1399, 1400,
-     1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410,
-     1411, 1412, 1413, 1414, 1415, 1416, 1417, 1388, 1361, 1418,
-     1419, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429,
-
-     1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439,
-     1397, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1449,
-     1441, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460,
-     1461, 1462, 1463, 1465, 1466, 1467, 1468, 1469, 1470, 1473,
-     1472, 1468, 1472, 1475, 1476, 1479, 1480, 1481, 1482, 1483,
-     1484, 1485, 1486, 1488, 1489, 1490, 1491, 1492, 1494, 1495,
-     1496, 1491, 1497, 1498, 1500, 1501, 1502, 1503, 1504, 1505,
-     1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515,
-     1492, 1516, 1518, 1519, 1520, 1522, 1523, 1524, 1525, 1526,
-     1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1536, 1538,
-
-     1539, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549,
-     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1561, 1562,
-     1564, 1565, 1566, 1568, 1569, 1568, 1570, 1571, 1568, 1572,
-     1573, 1568, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
-     1583, 1585, 1586, 1588, 1589, 1591, 1593, 1594, 1595, 1597,
-     1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
-     1608, 1609, 1610, 1611, 1612, 1613, 1603, 1614, 1615, 1616,
-     1617, 1589, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1624,
-     1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634,
-     1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644,
-
-     1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
-     1655, 1656, 1657, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
-     1666, 1667, 1669, 1670, 1671, 1673, 1674, 1676, 1677, 1680,
-     1681, 1682, 1684, 1685, 1686, 1687, 1688, 1689, 1625, 1690,
-     1691, 1692, 1693, 1694, 1695, 1697, 1699, 1700, 1701, 1702,
-     1703, 1704, 1705, 1706, 1674, 1707, 1708, 1710, 1711, 1712,
-     1713, 1715, 1716, 1718, 1719, 1720, 1722, 1723, 1724, 1725,
-     1726, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736,
+     1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221,
+     1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232,
+     1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1198,
+     1242, 1244, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1253,
+     1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263,
+     1264, 1265, 1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274,
+     1275, 1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1285,
+     1286, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1270, 1296,
+     1297, 1298, 1299, 1300, 1271, 1301, 1302, 1303, 1304, 1305,
+     1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315,
+
+     1317, 1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328,
+     1329, 1330, 1331, 1332, 1333, 1334, 1336, 1338, 1339, 1340,
+     1341, 1343, 1344, 1345, 1346, 1347, 1348, 1350, 1352, 1354,
+     1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364,
+     1365, 1366, 1367, 1368, 1370, 1371, 1372, 1373, 1374, 1375,
+     1376, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387,
+     1388, 1389, 1390, 1392, 1393, 1394, 1395, 1396, 1398, 1399,
+     1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409,
+     1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1389,
+     1362, 1419, 1420, 1422, 1423, 1424, 1425, 1426, 1427, 1428,
+
+     1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438,
+     1439, 1440, 1398, 1441, 1442, 1443, 1444, 1445, 1446, 1447,
+     1448, 1450, 1442, 1451, 1454, 1455, 1456, 1457, 1458, 1459,
+     1460, 1461, 1462, 1463, 1464, 1465, 1467, 1468, 1469, 1470,
+     1471, 1472, 1475, 1474, 1470, 1474, 1477, 1478, 1481, 1482,
+     1483, 1484, 1485, 1486, 1487, 1488, 1490, 1491, 1492, 1493,
+     1494, 1496, 1497, 1498, 1493, 1499, 1500, 1502, 1503, 1504,
+     1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514,
+     1515, 1516, 1517, 1494, 1518, 1520, 1521, 1522, 1524, 1525,
+     1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535,
+
+     1536, 1538, 1540, 1541, 1543, 1544, 1545, 1546, 1547, 1548,
+     1549, 1550, 1551, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
+     1560, 1561, 1564, 1565, 1567, 1568, 1569, 1571, 1572, 1571,
+     1573, 1574, 1571, 1575, 1576, 1571, 1577, 1578, 1579, 1580,
+     1581, 1582, 1583, 1584, 1586, 1588, 1589, 1591, 1592, 1594,
+     1596, 1597, 1598, 1600, 1601, 1602, 1603, 1604, 1605, 1606,
+     1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616,
+     1606, 1617, 1618, 1619, 1620, 1592, 1621, 1622, 1623, 1624,
+     1625, 1626, 1627, 1627, 1628, 1629, 1630, 1631, 1632, 1633,
+     1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
+
+     1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653,
+     1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1663, 1664,
+     1665, 1666, 1667, 1668, 1669, 1670, 1671, 1673, 1674, 1675,
+     1677, 1678, 1680, 1681, 1684, 1685, 1686, 1688, 1689, 1690,
+     1691, 1692, 1628, 1693, 1694, 1695, 1696, 1697, 1698, 1699,
+     1701, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1678,
+     1711, 1712, 1714, 1715, 1716, 1717, 1719, 1720, 1722, 1723,
+     1724, 1726, 1727, 1728, 1730, 1731, 1733, 1734, 1735, 1736,
      1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
-     1747, 1748, 1749, 1750, 1751, 1752, 1753, 1755, 1756, 1758,
+     1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756,
 
-     1759, 1760, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769,
+     1757, 1758, 1760, 1761, 1763, 1764, 1765, 1767, 1768, 1769,
      1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779,
-     1780, 1782, 1783, 1784, 1786, 1787, 1788, 1789, 1791, 1792,
-     1793, 1794, 1795, 1797, 1798, 1799, 1800, 1801, 1802, 1803,
-     1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1814,
-     1815, 1817, 1819, 1821, 1822, 1823, 1817, 1824, 1827, 1829,
-     1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839,
-     1841, 1842, 1843, 1844, 1845, 1846, 1848, 1849, 1850, 1851,
-     1852, 1853, 1854, 1855, 1856, 1858, 1859, 1860, 1862, 1863,
-     1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1873, 1874,
-
-     1875, 1876, 1877, 1879, 1880, 1881, 1882, 1885, 1886, 1887,
-     1888, 1889, 1890, 1891, 1892, 1894, 1895, 1896, 1897, 1898,
-     1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1908, 1910,
-     1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1920, 1922,
-     1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932,
-     1933, 1934, 1932, 1935, 1936, 1937, 1938, 1939, 1940, 1941,
-     1942, 1943, 1944, 1945, 1947, 1948, 1949, 1950, 1951, 1952,
-     1953, 1954, 1955, 1956, 1957, 1958, 1960, 1964, 1966, 1967,
-     1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
-     1978, 1979, 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988,
-
-     1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
-     2000, 2001, 2002, 2003, 2005, 2007, 2010, 2012, 2013, 2014,
-     2015, 2016, 2017, 2018, 2019, 2021, 2022, 2023, 2024, 2025,
-     2026, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2036, 2037,
-     2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
-     2049, 2050, 2051, 2052, 2053, 2054, 2056, 2057, 2058, 2059,
-     2060, 2061, 2062, 2063, 2065, 2066, 2067, 2068, 2069, 2070,
+     1780, 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1789, 1791,
+     1792, 1793, 1794, 1796, 1797, 1798, 1799, 1800, 1802, 1803,
+     1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813,
+     1814, 1815, 1816, 1817, 1819, 1820, 1822, 1824, 1826, 1827,
+     1828, 1822, 1829, 1832, 1834, 1835, 1836, 1837, 1838, 1839,
+     1840, 1841, 1842, 1843, 1844, 1846, 1847, 1848, 1849, 1850,
+     1851, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861,
+     1863, 1864, 1865, 1867, 1868, 1869, 1870, 1871, 1872, 1873,
+
+     1874, 1875, 1876, 1878, 1879, 1880, 1881, 1882, 1884, 1885,
+     1886, 1887, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+     1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908,
+     1909, 1910, 1911, 1913, 1915, 1916, 1917, 1918, 1919, 1920,
+     1921, 1922, 1923, 1925, 1927, 1928, 1929, 1930, 1931, 1932,
+     1933, 1934, 1935, 1936, 1937, 1938, 1939, 1937, 1940, 1941,
+     1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1952,
+     1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962,
+     1963, 1965, 1969, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
+     1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1988,
+
+     1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+     1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2010,
+     2012, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024,
+     2026, 2027, 2028, 2029, 2030, 2031, 2032, 2034, 2035, 2036,
+     2037, 2038, 2039, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
+     2048, 2049, 2050, 2051, 2052, 2054, 2055, 2056, 2057, 2058,
+     2059, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2070,
      2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080,
-     2081, 2082, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093,
-     2094, 2095, 2096, 2100, 2103, 2104, 2105, 2106, 2107, 2108,
-
-     2109, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119,
-     2120, 2122, 2123, 2124, 2125, 2126, 2127, 2129, 2131, 2133,
-     2134, 2135, 2136, 2137, 2138, 2139, 2141, 2142, 2143, 2144,
-     2145, 2144, 2146, 2147, 2149, 2150, 2154, 2155, 2156, 2157,
-     2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
-     2168, 2170, 2171, 2172, 2173, 2176, 2177, 2178, 2180, 2181,
-     2183, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2194,
-     2199, 2199, 2199, 2200, 2200, 2200, 2201, 2202, 2201, 2203,
-     2203, 2203, 2204, 2204, 2204, 2205,  720, 2205, 2206, 2206,
-     2206,  719,  718,  717,  716,  715,  714,  713,  712,  711,
-
-      710,  709,  707,  706,  705,  704,  703,  702,  701,  700,
-      699,  698,  696,  695,  694,  693,  692,  691,  690,  688,
-      687,  686,  685,  684,  683,  682,  681,  680,  679,  677,
-      676,  675,  674,  673,  672,  671,  670,  669,  668,  667,
-      666,  665,  664,  662,  661,  660,  659,  658,  657,  656,
-      655,  654,  653,  652,  651,  650,  649,  647,  646,  645,
-      644,  643,  642,  641,  640,  639,  638,  637,  636,  635,
-      634,  633,  631,  630,  629,  628,  627,  626,  625,  624,
-      623,  622,  621,  620,  619,  618,  617,  616,  615,  613,
-      612,  609,  603,  602,  601,  600,  599,  598,  597,  595,
-
-      594,  592,  591,  589,  588,  587,  586,  585,  584,  583,
-      582,  581,  580,  579,  578,  577,  575,  574,  573,  572,
-      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
-      561,  560,  559,  558,  556,  554,  553,  552,  551,  550,
-      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
-      538,  537,  535,  534,  533,  532,  531,  530,  529,  527,
-      526,  525,  524,  523,  522,  521,  520,  519,  518,  517,
-      516,  515,  514,  513,  512,  510,  509,  508,  507,  505,
-      504,  503,  502,  501,  500,  499,  498,  496,  495,  493,
-      492,  489,  488,  487,  486,  485,  484,  482,  481,  480,
-
-      479,  478,  477,  476,  475,  474,  473,  471,  467,  465,
-      464,  462,  461,  460,  457,  456,  454,  453,  451,  450,
-      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
-      439,  438,  437,  436,  434,  433,  432,  431,  430,  429,
-      428,  427,  425,  424,  422,  420,  419,  418,  417,  415,
-      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
-      404,  403,  402,  400,  397,  396,  395,  394,  393,  392,
-      391,  389,  388,  387,  386,  385,  384,  383,  382,  381,
-      380,  379,  378,  376,  375,  374,  373,  372,  371,  370,
-      369,  368,  367,  366,  365,  364,  363,  362,  360,  359,
-
-      358,  357,  356,  355,  354,  353,  352,  351,  350,  349,
-      348,  347,  346,  345,  344,  343,  342,  341,  340,  338,
-      335,  333,  330,  328,  325,  318,  317,  315,  314,  313,
-      311,  310,  309,  307,  306,  305,  303,  302,  301,  300,
-      299,  298,  297,  296,  295,  294,  293,  292,  291,  290,
-      288,  287,  286,  285,  284,  283,  282,  281,  280,  279,
-      278,  277,  275,  274,  272,  271,  270,  268,  266,  265,
-      264,  263,  262,  261,  259,  258,  257,  256,  255,  254,
-      253,  251,  250,  248,  247,  246,  245,  244,  243,  242,
-      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
-
-      231,  230,  229,  228,  227,  226,  223,  222,  221,  220,
-      219,  218,  217,  216,  215,  214,  213,  207,  205,  203,
-      199,  197,  195,  187,  186,  185,  184,  182,  180,  177,
-      176,  175,  173,  172,  171,  167,  164,  162,  161,  160,
-      158,  156,  155,  154,  153,  152,  151,  149,  148,  147,
-      145,  144,  143,  142,  141,  140,  138,  137,  133,  132,
-      131,  130,  129,  127,  126,  125,  123,  121,  119,  118,
-      117,  113,  105,  103,   98,   97,   77,   72,   66,   58,
-       49,   47,   43,   41,   39,   38,   24,   14,   11, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
-     2198, 2198, 2198
+     2081, 2082, 2083, 2084, 2085, 2086, 2087, 2089, 2090, 2092,
+     2093, 2094, 2095, 2097, 2098, 2099, 2100, 2101, 2105, 2108,
+
+     2109, 2110, 2111, 2112, 2113, 2114, 2115, 2117, 2118, 2119,
+     2120, 2121, 2122, 2123, 2124, 2125, 2127, 2128, 2129, 2130,
+     2131, 2132, 2134, 2136, 2138, 2139, 2140, 2141, 2142, 2143,
+     2144, 2146, 2147, 2148, 2149, 2150, 2149, 2151, 2152, 2154,
+     2155, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+     2168, 2169, 2170, 2171, 2172, 2173, 2175, 2176, 2177, 2178,
+     2181, 2182, 2183, 2185, 2186, 2188, 2190, 2191, 2192, 2193,
+     2194, 2195, 2196, 2197, 2199, 2204, 2204, 2204, 2205, 2205,
+     2205, 2206, 2207, 2206, 2208, 2208, 2208, 2209, 2209, 2209,
+     2210,  720, 2210, 2211, 2211, 2211,  719,  718,  717,  716,
+
+      715,  714,  713,  712,  711,  710,  709,  707,  706,  705,
+      704,  703,  702,  701,  700,  699,  698,  696,  695,  694,
+      693,  692,  691,  690,  688,  687,  686,  685,  684,  683,
+      682,  681,  680,  679,  677,  676,  675,  674,  673,  672,
+      671,  670,  669,  668,  667,  666,  665,  664,  662,  661,
+      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+      650,  649,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  636,  635,  634,  633,  631,  630,  629,
+      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
+      618,  617,  616,  615,  613,  612,  609,  603,  602,  601,
+
+      600,  599,  598,  597,  595,  594,  592,  591,  589,  588,
+      587,  586,  585,  584,  583,  582,  581,  580,  579,  578,
+      577,  575,  574,  573,  572,  571,  570,  569,  568,  567,
+      566,  565,  564,  563,  562,  561,  560,  559,  558,  556,
+      554,  553,  552,  551,  550,  549,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  538,  537,  535,  534,  533,
+      532,  531,  530,  529,  527,  526,  525,  524,  523,  522,
+      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
+      510,  509,  508,  507,  505,  504,  503,  502,  501,  500,
+      499,  498,  496,  495,  493,  492,  489,  488,  487,  486,
+
+      485,  484,  482,  481,  480,  479,  478,  477,  476,  475,
+      474,  473,  471,  467,  465,  464,  462,  461,  460,  457,
+      456,  454,  453,  451,  450,  449,  448,  447,  446,  445,
+      444,  443,  442,  441,  440,  439,  438,  437,  436,  434,
+      433,  432,  431,  430,  429,  428,  427,  425,  424,  422,
+      420,  419,  418,  417,  415,  414,  413,  412,  411,  410,
+      409,  408,  407,  406,  405,  404,  403,  402,  400,  397,
+      396,  395,  394,  393,  392,  391,  389,  388,  387,  386,
+      385,  384,  383,  382,  381,  380,  379,  378,  376,  375,
+      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
+
+      364,  363,  362,  360,  359,  358,  357,  356,  355,  354,
+      353,  352,  351,  350,  349,  348,  347,  346,  345,  344,
+      343,  342,  341,  340,  338,  335,  333,  330,  328,  325,
+      318,  317,  315,  314,  313,  311,  310,  309,  307,  306,
+      305,  303,  302,  301,  300,  299,  298,  297,  296,  295,
+      294,  293,  292,  291,  290,  288,  287,  286,  285,  284,
+      283,  282,  281,  280,  279,  278,  277,  275,  274,  272,
+      271,  270,  268,  266,  265,  264,  263,  262,  261,  259,
+      258,  257,  256,  255,  254,  253,  251,  250,  248,  247,
+      246,  245,  244,  243,  242,  241,  240,  239,  238,  237,
+
+      236,  235,  234,  233,  232,  231,  230,  229,  228,  227,
+      226,  223,  222,  221,  220,  219,  218,  217,  216,  215,
+      214,  213,  207,  205,  203,  199,  197,  195,  187,  186,
+      185,  184,  182,  180,  177,  176,  175,  173,  172,  171,
+      167,  164,  162,  161,  160,  158,  156,  155,  154,  153,
+      152,  151,  149,  148,  147,  145,  144,  143,  142,  141,
+      140,  138,  137,  133,  132,  131,  130,  129,  127,  126,
+      125,  123,  121,  119,  118,  117,  113,  105,  103,   98,
+       97,   77,   72,   66,   58,   49,   47,   43,   41,   39,
+       38,   24,   14,   11, 2203, 2203, 2203, 2203, 2203, 2203,
+
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2164,7 +2167,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 2168 "dhcp4_lexer.cc"
+#line 2171 "dhcp4_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
@@ -2190,8 +2193,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 2194 "dhcp4_lexer.cc"
-#line 2195 "dhcp4_lexer.cc"
+#line 2197 "dhcp4_lexer.cc"
+#line 2198 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2519,7 +2522,7 @@ YY_DECL
     }
 
 
-#line 2523 "dhcp4_lexer.cc"
+#line 2526 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2548,13 +2551,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 >= 2199 )
+                               if ( yy_current_state >= 2204 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 2198 );
+               while ( yy_current_state != 2203 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -5174,7 +5177,7 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lifetime", driver.loc_);
     }
 }
        YY_BREAK
@@ -5516,7 +5519,7 @@ YY_RULE_SETUP
 #line 2375 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 5520 "dhcp4_lexer.cc"
+#line 5523 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -5835,7 +5838,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 >= 2199 )
+                       if ( yy_current_state >= 2204 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5868,11 +5871,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 >= 2199 )
+               if ( yy_current_state >= 2204 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 2198);
+       yy_is_jam = (yy_current_state == 2203);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
index 22d36a5cf4c699da1ff6ebe09b813d03468a8e7a..94941790deb780a8e9eb7272a2e87caaa2302951 100644 (file)
@@ -2093,14 +2093,14 @@ ControlCharacterFill            [^"\\]|\\["\\/bfnrtu]
     }
 }
 
-\"offer-lft\" {
+\"offer-lifetime\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
     case isc::dhcp::Parser4Context::SUBNET4:
     case isc::dhcp::Parser4Context::SHARED_NETWORK:
         return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lifetime", driver.loc_);
     }
 }
 
index afcfcd548e261c6d730f4d04cf341a2ac8f732f3..82c49e04644ebc5d2521f42a00b14a5244e1da3a 100644 (file)
@@ -1553,12 +1553,12 @@ namespace isc { namespace dhcp {
 #line 1554 "dhcp4_parser.cc"
     break;
 
-  case 181: // offer_lft: "offer-lft" ":" "integer"
+  case 181: // offer_lft: "offer-lifetime" ":" "integer"
 #line 797 "dhcp4_parser.yy"
                                    {
-    ctx.unique("offer-lft", ctx.loc2pos(yystack_[2].location));
+    ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr offer_lft(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("offer-lft", offer_lft);
+    ctx.stack_.back()->set("offer-lifetime", offer_lft);
 }
 #line 1564 "dhcp4_parser.cc"
     break;
@@ -6017,7 +6017,7 @@ namespace isc { namespace dhcp {
   "\"service-sockets-max-retries\"", "\"sanity-checks\"",
   "\"lease-checks\"", "\"extended-info-checks\"", "\"echo-client-id\"",
   "\"match-client-id\"", "\"authoritative\"", "\"next-server\"",
-  "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lft\"",
+  "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lifetime\"",
   "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"",
   "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"user\"",
   "\"password\"", "\"host\"", "\"port\"", "\"persist\"",
index 8d0a3714a07a699902d64b8978f854a7b96e9b3e..34864c7492a96ddccfe3e344edc44c6402e6ec61 100644 (file)
@@ -519,7 +519,7 @@ namespace isc { namespace dhcp {
     TOKEN_NEXT_SERVER = 287,       // "next-server"
     TOKEN_SERVER_HOSTNAME = 288,   // "server-hostname"
     TOKEN_BOOT_FILE_NAME = 289,    // "boot-file-name"
-    TOKEN_OFFER_LFT = 290,         // "offer-lft"
+    TOKEN_OFFER_LFT = 290,         // "offer-lifetime"
     TOKEN_LEASE_DATABASE = 291,    // "lease-database"
     TOKEN_HOSTS_DATABASE = 292,    // "hosts-database"
     TOKEN_HOSTS_DATABASES = 293,   // "hosts-databases"
@@ -753,7 +753,7 @@ namespace isc { namespace dhcp {
         S_NEXT_SERVER = 32,                      // "next-server"
         S_SERVER_HOSTNAME = 33,                  // "server-hostname"
         S_BOOT_FILE_NAME = 34,                   // "boot-file-name"
-        S_OFFER_LFT = 35,                        // "offer-lft"
+        S_OFFER_LFT = 35,                        // "offer-lifetime"
         S_LEASE_DATABASE = 36,                   // "lease-database"
         S_HOSTS_DATABASE = 37,                   // "hosts-database"
         S_HOSTS_DATABASES = 38,                  // "hosts-databases"
index 6f1e4ad8ba755db1c9a4a466d79585dfea92cb74..d8d737d7567bcc2df10a717c13cc2762808fb4f4 100644 (file)
@@ -78,7 +78,7 @@ using namespace std;
   NEXT_SERVER "next-server"
   SERVER_HOSTNAME "server-hostname"
   BOOT_FILE_NAME "boot-file-name"
-  OFFER_LFT "offer-lft"
+  OFFER_LFT "offer-lifetime"
 
   LEASE_DATABASE "lease-database"
   HOSTS_DATABASE "hosts-database"
@@ -795,9 +795,9 @@ reservations_lookup_first: RESERVATIONS_LOOKUP_FIRST COLON BOOLEAN {
 };
 
 offer_lft: OFFER_LFT COLON INTEGER {
-    ctx.unique("offer-lft", ctx.loc2pos(@1));
+    ctx.unique("offer-lifetime", ctx.loc2pos(@1));
     ElementPtr offer_lft(new IntElement($3, ctx.loc2pos(@3)));
-    ctx.stack_.back()->set("offer-lft", offer_lft);
+    ctx.stack_.back()->set("offer-lifetime", offer_lft);
 };
 
 interfaces_config: INTERFACES_CONFIG {
index 0a399963569b3273f7c3847c34950d2ea39ab1fc..fd0378ced0f656b5bfeef9f40d5785d0f25b8664 100644 (file)
@@ -684,7 +684,7 @@ processDhcp4Config(isc::data::ConstElementPtr config_set) {
                  (config_pair.first == "reservations-lookup-first") ||
                  (config_pair.first == "parked-packet-limit") ||
                  (config_pair.first == "allocator") ||
-                 (config_pair.first == "offer-lft") ) {
+                 (config_pair.first == "offer-lifetime") ) {
                 CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
                                                                         config_pair.second);
                 continue;
index ee5f486f513cfe8f4e5df43239f4261ab99651b1..5edeb5381f5777b2cfc4580cfa13f8814b1681fe 100644 (file)
@@ -2438,7 +2438,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2523,7 +2523,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2552,7 +2552,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2636,7 +2636,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2665,7 +2665,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2751,7 +2751,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2781,7 +2781,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 5000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2866,7 +2866,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2896,7 +2896,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2925,7 +2925,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2954,7 +2954,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2983,7 +2983,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3068,7 +3068,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3098,7 +3098,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3127,7 +3127,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 34,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3156,7 +3156,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 100,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3185,7 +3185,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1024,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3270,7 +3270,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"1.2.3.4\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3300,7 +3300,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3385,7 +3385,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3417,7 +3417,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3503,7 +3503,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"192.0.0.1\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3535,7 +3535,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3621,7 +3621,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3651,7 +3651,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3736,7 +3736,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3766,7 +3766,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3969,7 +3969,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4000,7 +4000,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": true,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4030,7 +4030,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": false,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4115,7 +4115,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4146,7 +4146,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": false,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4175,7 +4175,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4260,7 +4260,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4291,7 +4291,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4321,7 +4321,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4406,7 +4406,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4437,7 +4437,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4466,7 +4466,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4553,7 +4553,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4583,7 +4583,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 5,\n"
 "                \"min-valid-lifetime\": 3,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4668,7 +4668,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4698,7 +4698,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4731,7 +4731,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4820,7 +4820,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4850,7 +4850,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4935,7 +4935,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5028,7 +5028,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5121,7 +5121,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5223,7 +5223,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5316,7 +5316,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5409,7 +5409,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5502,7 +5502,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5595,7 +5595,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -5644,7 +5644,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -5729,7 +5729,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -5759,7 +5759,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -5863,7 +5863,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -5922,7 +5922,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6007,7 +6007,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6130,7 +6130,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6216,7 +6216,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 3000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6301,7 +6301,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6341,7 +6341,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6445,7 +6445,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6475,7 +6475,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6514,7 +6514,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6609,7 +6609,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6639,7 +6639,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6743,7 +6743,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6773,7 +6773,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6882,7 +6882,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6931,7 +6931,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7016,7 +7016,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7139,7 +7139,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7216,7 +7216,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 3000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7301,7 +7301,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7348,7 +7348,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7433,7 +7433,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7483,7 +7483,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7568,7 +7568,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7653,7 +7653,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7738,7 +7738,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7768,7 +7768,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7853,7 +7853,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7883,7 +7883,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7968,7 +7968,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7998,7 +7998,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8083,7 +8083,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8113,7 +8113,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4,\n"
 "                \"min-valid-lifetime\": 4,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8198,7 +8198,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8228,7 +8228,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4,\n"
 "                \"min-valid-lifetime\": 4,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8313,7 +8313,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8344,7 +8344,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8374,7 +8374,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8404,7 +8404,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8433,7 +8433,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8518,7 +8518,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8548,7 +8548,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8648,7 +8648,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8678,7 +8678,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 123,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8707,7 +8707,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 234,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8795,7 +8795,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 542,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8930,7 +8930,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -8970,7 +8970,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 234,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9076,7 +9076,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9106,7 +9106,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9138,7 +9138,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9170,7 +9170,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9201,7 +9201,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9232,7 +9232,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 5,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9261,7 +9261,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 6,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9293,7 +9293,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 7,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9381,7 +9381,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9411,7 +9411,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9443,7 +9443,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9528,7 +9528,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9611,7 +9611,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9694,7 +9694,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9777,7 +9777,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9860,7 +9860,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9890,7 +9890,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9975,7 +9975,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10005,7 +10005,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10090,7 +10090,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10120,7 +10120,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10205,7 +10205,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10235,7 +10235,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10320,7 +10320,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10350,7 +10350,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10461,7 +10461,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10491,7 +10491,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10597,7 +10597,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10625,7 +10625,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10731,7 +10731,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10759,7 +10759,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10842,7 +10842,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10872,7 +10872,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10957,7 +10957,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10987,7 +10987,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11073,7 +11073,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11103,7 +11103,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11193,7 +11193,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11223,7 +11223,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11327,7 +11327,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11459,7 +11459,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -11506,7 +11506,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
 "                \"name\": \"foo\",\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"relay\": {\n"
 "                    \"ip-addresses\": [ ]\n"
@@ -11522,7 +11522,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 100,\n"
 "                        \"max-valid-lifetime\": 7200,\n"
 "                        \"min-valid-lifetime\": 7200,\n"
-"                        \"offer-lft\": 0,\n"
+"                        \"offer-lifetime\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11652,7 +11652,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11741,7 +11741,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 123,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11770,7 +11770,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 542,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11855,7 +11855,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11876,7 +11876,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"name\": \"foo\",\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"relay\": {\n"
 "                    \"ip-addresses\": [ ]\n"
@@ -11892,7 +11892,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 100,\n"
 "                        \"max-valid-lifetime\": 4000,\n"
 "                        \"min-valid-lifetime\": 4000,\n"
-"                        \"offer-lft\": 0,\n"
+"                        \"offer-lifetime\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11919,7 +11919,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 200,\n"
 "                        \"max-valid-lifetime\": 4000,\n"
 "                        \"min-valid-lifetime\": 4000,\n"
-"                        \"offer-lft\": 0,\n"
+"                        \"offer-lifetime\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11956,7 +11956,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 300,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12039,7 +12039,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12069,7 +12069,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12098,7 +12098,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12183,7 +12183,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12213,7 +12213,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12242,7 +12242,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
-"                \"offer-lft\": 0,\n"
+"                \"offer-lifetime\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12327,7 +12327,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12412,7 +12412,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12495,7 +12495,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 48\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
-"        \"offer-lft\": 0,\n"
+"        \"offer-lifetime\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
index 8d01430f25a52d1a9ae836a5c05d249f0de4af22..6948742790bdaa131ad39f52f282ddab686a7bcc 100644 (file)
@@ -3869,8 +3869,6 @@ AllocEngine::getOfferLft(const ClientContext4& ctx) {
 
     util::Optional<uint32_t> offer_lft;
 
-#if 0
-    /// @todo TKM need this when we add offer-lst to client class.
     // If specified in one of our classes use it.
     // We use the first one we find.
     const ClientClasses classes = ctx.query_->getClasses();
@@ -3889,7 +3887,6 @@ AllocEngine::getOfferLft(const ClientContext4& ctx) {
             }
         }
     }
-#endif
 
     // If no classes specified it, get it from the subnet.
     if (offer_lft.unspecified()) {
index 823bfe663a28a4157496fc816907cc93c497addd..e267d5856a77b734ca8962d1c8e7c710ca440d9c 100644 (file)
@@ -59,7 +59,7 @@ CfgGlobals::nameToIndex = {
     { "next-server", NEXT_SERVER },
     { "server-hostname", SERVER_HOSTNAME },
     { "boot-file-name", BOOT_FILE_NAME },
-    { "offer-lft", OFFER_LFT },
+    { "offer-lifetime", OFFER_LIFETIME },
 
     // DHCPv6 specific parameters.
     { "data-directory", DATA_DIRECTORY },
index 20062c87cf3f4c1c2250d2bf7f2924a0e42d93ef..c3c39a5e4b8aa9dac78febbfb069989533ca09f9 100644 (file)
@@ -82,7 +82,7 @@ public:
         NEXT_SERVER,
         SERVER_HOSTNAME,
         BOOT_FILE_NAME,
-        OFFER_LFT,
+        OFFER_LIFETIME,
 
         // DHCPv6 specific parameters.
         DATA_DIRECTORY,
index bc43ba98c3a0c304de8808de6bed0d2689368cd0..25bf9a99b810f01f11204d1c326bc9e22b8d6f64 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2015-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -259,6 +259,12 @@ ClientClassDef::toElement() const {
         result->set("server-hostname", Element::create(sname_));
         // Set boot-file-name
         result->set("boot-file-name", Element::create(filename_));
+
+        // Set offer-lifetime
+        if (!offer_lft_.unspecified()) {
+            result->set("offer-lifetime",
+                    Element::create(static_cast<long long>(offer_lft_.get())));
+        }
     } else {
         // V6 only
         // Set preferred-lifetime
@@ -346,7 +352,8 @@ ClientClassDictionary::addClass(const std::string& name,
                                 const std::string& filename,
                                 const util::Triplet<uint32_t>& valid,
                                 const util::Triplet<uint32_t>& preferred,
-                                bool is_template) {
+                                bool is_template,
+                                const util::Optional<uint32_t>& offer_lft) {
     ClientClassDefPtr cclass;
     if (is_template) {
         cclass.reset(new TemplateClientClassDef(name, match_expr, cfg_option));
@@ -363,6 +370,7 @@ ClientClassDictionary::addClass(const std::string& name,
     cclass->setFilename(filename);
     cclass->setValid(valid);
     cclass->setPreferred(preferred);
+    cclass->setOfferLft(offer_lft);
     addClass(cclass);
 }
 
index 4e8e981314ce49ef9ffaf8f6a0efc9b7666d2895..80655974de292db30bf34b32221be3713292cae8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2015-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 #include <cc/user_context.h>
 #include <dhcpsrv/cfg_option.h>
 #include <dhcpsrv/cfg_option_def.h>
-#include <util/triplet.h>
 #include <eval/token.h>
 #include <exceptions/exceptions.h>
+#include <util/triplet.h>
+#include <util/optional.h>
 
 #include <string>
 #include <unordered_map>
@@ -221,6 +222,21 @@ public:
         preferred_ = preferred;
     }
 
+    /// @brief Sets offer lifetime for the class.
+    ///
+    /// Will be used for the offer lifetime (may be empty if not defined)
+    void setOfferLft(const util::Optional<uint32_t>& offer_lft) {
+        offer_lft_ = offer_lft;
+    }
+
+    /// @brief Returns offer lifetime for the class.
+    ///
+    /// @param inheritance inheritance mode to be used.
+    /// @return offer lifetime value
+    util::Optional<uint32_t> getOfferLft() const {
+        return (offer_lft_);
+    }
+
     /// @brief Test method which checks if the packet belongs to the class
     ///
     /// If the packet belongs to the class, the class is added to the packet.
@@ -289,6 +305,9 @@ private:
 
     /// @brief a Triplet (min/default/max) holding allowed preferred lifetime values
     util::Triplet<uint32_t> preferred_;
+
+    /// @brief offer lifetime for this class (V4 only).
+    util::Optional<uint32_t> offer_lft_;
 };
 
 class TemplateClientClassDef : public ClientClassDef {
@@ -377,9 +396,10 @@ public:
                   asiolink::IOAddress next_server = asiolink::IOAddress("0.0.0.0"),
                   const std::string& sname = std::string(),
                   const std::string& filename = std::string(),
-                  const util::Triplet<uint32_t>&valid = util::Triplet<uint32_t>(),
-                  const util::Triplet<uint32_t>&preferred = util::Triplet<uint32_t>(),
-                  bool is_template = false);
+                  const util::Triplet<uint32_t>& valid = util::Triplet<uint32_t>(),
+                  const util::Triplet<uint32_t>& preferred = util::Triplet<uint32_t>(),
+                  bool is_template = false,
+                  const util::Optional<uint32_t>& offer_lft = util::Optional<uint32_t>());
 
     /// @brief Adds a new class to the list
     ///
index ccb002f50205fa15fbe8294636f6480ab52e0b9c..f56e8dfa6e1407ff75c4492319ef40286ef95ac5 100644 (file)
@@ -320,9 +320,9 @@ Network4::toElement() const {
         map->set("boot-file-name",Element::create(filename_.get()));
     }
 
-    // Set offer-lft
+    // Set offer-lifetime
     if (!offer_lft_.unspecified()) {
-        map->set("offer-lft",Element::create(offer_lft_.get()));
+        map->set("offer-lifetime",Element::create(offer_lft_.get()));
     }
 
     return (map);
index 8f2acff806429e9fa9ea8754b39905fd1abb3cfb..e6b81bfc25492c4f8273a8020a5124142c338105 100644 (file)
@@ -1325,7 +1325,7 @@ public:
     getOfferLft(const Inheritance& inheritance = Inheritance::ALL) const {
         return (getProperty<Network4>(&Network4::getOfferLft, offer_lft_,
                                       inheritance,
-                                      CfgGlobals::OFFER_LFT));
+                                      CfgGlobals::OFFER_LIFETIME));
     }
 
     /// @brief Unparses network object.
index 0358b30fb92b546d31e9441fb3d5a133585b763a..69b79eb24c493194e6a5920eb5ce26b181b336ee 100644 (file)
@@ -301,12 +301,12 @@ BaseNetworkParser::parsePdAllocatorParams(const data::ConstElementPtr& network_d
 void
 BaseNetworkParser::parseOfferLft(const data::ConstElementPtr& network_data,
                                         Network4Ptr& network) {
-    if (network_data->contains("offer-lft")) {
-        auto value = getInteger(network_data, "offer-lft");
+    if (network_data->contains("offer-lifetime")) {
+        auto value = getInteger(network_data, "offer-lifetime");
         if (value < 0) {
-            isc_throw(DhcpConfigError, "the value of offer-lft '"
+            isc_throw(DhcpConfigError, "the value of offer-lifetime '"
                       << value << "' must be a positive number ("
-                      << getPosition("offer-lft", network_data) << ")");
+                      << getPosition("offer-lifetime", network_data) << ")");
         }
 
         network->setOfferLft(value);
index 36b44c0ba6ca976a43829745cede1725b236f258..b2359f83bdc3f3bef2e8a0b49e7b07c5699f516f 100644 (file)
@@ -131,7 +131,7 @@ protected:
     void parsePdAllocatorParams(const data::ConstElementPtr& network_data,
                                 Network6Ptr& network);
 
-    /// @brief Parses offer-lft parameter (v4 only)
+    /// @brief Parses offer-lifetime parameter (v4 only)
     ///
     /// @param network_data Data element holding shared network
     /// configuration to be parsed.
index 162977f2f4cda0ef449c609b156ab4857ecb7cf9..f1a1a1fc61a10f110b8a95d578c40e041c5ed52d 100644 (file)
@@ -229,6 +229,18 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary,
         }
     }
 
+    Optional<uint32_t> offer_lft;
+    if (class_def_cfg->contains("offer-lifetime")) {
+        auto value = getInteger(class_def_cfg, "offer-lifetime");
+        if (value < 0) {
+            isc_throw(DhcpConfigError, "the value of offer-lifetime '"
+                      << value << "' must be a positive number ("
+                      << getPosition("offer-lifetime", class_def_cfg) << ")");
+        }
+
+        offer_lft = value;
+    }
+
     // Parse valid lifetime triplet.
     Triplet<uint32_t> valid_lft = parseIntTriplet(class_def_cfg, "valid-lifetime");
 
@@ -266,7 +278,7 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary,
         class_dictionary->addClass(name, match_expr, test, required,
                                    depend_on_known, options, defs,
                                    user_context, next_server, sname, filename,
-                                   valid_lft, preferred_lft, is_template);
+                                   valid_lft, preferred_lft, is_template, offer_lft);
     } catch (const std::exception& ex) {
         std::ostringstream s;
         s << "Can't add class: " << ex.what();
index a4867e74700b5a3666718c0a5e343cb62ec98189..6053d722c34f642ab40dce981dd9c12910fbae3b 100644 (file)
@@ -961,12 +961,12 @@ Subnet4ConfigParser::initSubnet(data::ConstElementPtr params,
     parseCacheParams(params, network);
 
     // Set the offer_lft value for the subnet.
-    if (params->contains("offer-lft")) {
-        uint32_t offer_lft = getInteger(params, "offer-lft");
+    if (params->contains("offer-lifetime")) {
+        uint32_t offer_lft = getInteger(params, "offer-lifetime");
         subnet4->setOfferLft(offer_lft);
     }
 
-    // Parse offer-lft parameter.
+    // Parse offer-lifetime parameter.
     Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(subnet4);
     parseOfferLft(params, network4);
 
index 6a103914802d76c34a9e2d7f7b43d9937b0c9682..0e8dcb42b85e47850c62f6a92113752573cfc4f8 100644 (file)
@@ -201,7 +201,7 @@ SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
         // Parse allocator params.
         parseAllocatorParams(shared_network_data, network);
 
-        // Parse offer-lft parameter.
+        // Parse offer-lifetime parameter.
         Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(shared_network);
         parseOfferLft(shared_network_data, network4);
 
index ea8f13b066221b33999dc49c41bf0471786e2220..b3c44f103cb1c7235b0303318f783168f926fbb0 100644 (file)
@@ -100,7 +100,7 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = {
     { "compatibility",                    Element::map },
     { "parked-packet-limit",              Element::integer },
     { "allocator",                        Element::string },
-    { "offer-lft",                        Element::integer },
+    { "offer-lifetime",                   Element::integer },
 };
 
 /// @brief This table defines default global values for DHCPv4
@@ -143,7 +143,7 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = {
     { "ddns-use-conflict-resolution",     Element::boolean, "true" },
     { "parked-packet-limit",              Element::integer, "256" },
     { "allocator",                        Element::string,  "iterative" },
-    { "offer-lft",                        Element::integer, "0" },
+    { "offer-lifetime",                   Element::integer, "0" },
 };
 
 /// @brief This table defines all option definition parameters.
@@ -257,7 +257,7 @@ const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = {
     { "ddns-update-on-renew",           Element::boolean },
     { "ddns-use-conflict-resolution",   Element::boolean },
     { "allocator",                      Element::string },
-    { "offer-lft",                      Element::integer }
+    { "offer-lifetime",                 Element::integer }
 };
 
 /// @brief This table defines default values for each IPv4 subnet.
@@ -312,7 +312,7 @@ const ParamsList SimpleParser4::INHERIT_TO_SUBNET4 = {
     "cache-threshold",
     "cache-max-age",
     "allocator",
-    "offer-lft",
+    "offer-lifetime",
 };
 
 /// @brief This table defines all pool parameters.
@@ -377,7 +377,7 @@ const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = {
     { "ddns-update-on-renew",           Element::boolean },
     { "ddns-use-conflict-resolution",   Element::boolean },
     { "allocator",                      Element::string },
-    { "offer-lft",                      Element::integer }
+    { "offer-lifetime",                 Element::integer }
 };
 
 /// @brief This table defines default values for each IPv4 shared network.
index a09e6873a69400ef1c8d9de534a278f8d18a7971..d2e650d913bfc62c7c64a3f93b8b66cb438090c2 100644 (file)
@@ -5670,7 +5670,7 @@ TEST_F(AllocEngine4Test, discoverOfferLft) {
     pool_ = Pool4Ptr(new Pool4(addr, addr)); // just a single address
     subnet_->addPool(pool_);
 
-    // Set subnet's offer-lft to a non-zero, positive value.
+    // Set subnet's offer-lifetime to a non-zero, positive value.
     uint32_t offer_lft = (subnet_->getValid() / 3);
     subnet_->setOfferLft(offer_lft);
     ASSERT_EQ(offer_lft, subnet_->getOfferLft().get());
@@ -5730,7 +5730,7 @@ TEST_F(AllocEngine4Test, discoverOfferLftReuseExpiredLease4) {
     pool_ = Pool4Ptr(new Pool4(addr, addr)); // just a single address
     subnet_->addPool(pool_);
 
-    // Set subnet's offer-lft to a non-zero, positive value.
+    // Set subnet's offer-lifetime to a non-zero, positive value.
     uint32_t offer_lft = (subnet_->getValid() / 3);
     subnet_->setOfferLft(offer_lft);
     ASSERT_EQ(offer_lft, subnet_->getOfferLft().get());
@@ -5780,6 +5780,103 @@ TEST_F(AllocEngine4Test, discoverOfferLftReuseExpiredLease4) {
     EXPECT_FALSE(from_mgr->fqdn_rev_);
 }
 
+// Verifies that AllocEngine::getOfferLft(ctx4) returns the appropriate
+// lifetime value based on the context content.
+TEST_F(AllocEngine4Test, getOfferft4) {
+    AllocEngine engine(0);
+
+    // Let's make three classes, two with offer-lifetime and one without,
+    // and add them to the dictionary.
+    ClientClassDictionaryPtr dictionary = CfgMgr::instance().getStagingCfg()->getClientClassDictionary();
+
+    ClientClassDefPtr class_def(new ClientClassDef("offer_lft_one", ExpressionPtr()));
+    Optional<uint32_t> offer_lft_one(100);
+    class_def->setOfferLft(offer_lft_one);
+    dictionary->addClass(class_def);
+
+    class_def.reset(new ClientClassDef("offer_lft_two", ExpressionPtr()));
+    Optional<uint32_t>offer_lft_two(200);
+    class_def->setOfferLft(offer_lft_two);
+    dictionary->addClass(class_def);
+
+    class_def.reset(new ClientClassDef("offer_lft_zero", ExpressionPtr()));
+    Optional<uint32_t>offer_lft_zero(0);
+    class_def->setOfferLft(offer_lft_zero);
+    dictionary->addClass(class_def);
+
+    class_def.reset(new ClientClassDef("offer_lft_unspec", ExpressionPtr()));
+    dictionary->addClass(class_def);
+
+    // Commit our class changes.
+    CfgMgr::instance().commit();
+
+    // Update the subnet's triplet to something more useful.
+    subnet_->setOfferLft(Optional<uint32_t>(300));
+
+    // Describes a test scenario.
+    struct Scenario {
+        std::string desc_;                  // descriptive text for logging
+        std::vector<std::string> classes_;  // class list of assigned classes
+        uint32_t exp_valid_lft_;            // expected lease lifetime
+    };
+
+    // Scenarios to test.
+    std::vector<Scenario> scenarios = {
+        {
+            "BOOTP",
+            { "BOOTP" },
+            Lease::INFINITY_LFT
+        },
+        {
+            "no classes",
+            {},
+            subnet_->getOfferLft()
+        },
+        {
+            "class unspecified",
+            { "offer_lft_unspec" },
+            subnet_->getOfferLft()
+        },
+        {
+            "from last class",
+            { "offer_lft_unspec", "offer_lft_one" },
+            offer_lft_one.get()
+        },
+        {
+            "from first class",
+            { "offer_lft_two", "offer_lft_one" },
+            offer_lft_two.get()
+        },
+        {
+            // Useing class value of zero should override non-zero set at
+            // subnet level, lease should have actual valid lft
+            "zero from class",
+            { "offer_lft_zero" },
+            subnet_->getValid()
+        }
+    };
+
+    // Iterate over the scenarios and verify the correct outcome.
+    for (auto scenario : scenarios) {
+        SCOPED_TRACE(scenario.desc_); {
+            // Create a context;
+            AllocEngine::ClientContext4 ctx(subnet_, ClientIdPtr(), hwaddr_,
+                                            IOAddress("0.0.0.0"), false, false,
+                                            "", true);
+            ctx.query_.reset(new Pkt4(DHCPDISCOVER, 1234));
+
+            // Add client classes (if any)
+            for (auto class_name : scenario.classes_) {
+                ctx.query_->addClass(class_name);
+            }
+
+            Lease4Ptr lease = engine.allocateLease4(ctx);
+            ASSERT_TRUE(lease);
+            EXPECT_EQ(lease->valid_lft_, scenario.exp_valid_lft_);
+        }
+    }
+}
+
 }  // namespace test
 }  // namespace dhcp
 }  // namespace isc
index e9d517afbf947b7982dc06bbfe6c2808723c3b64..971cb8c9314b6e4a0eebda5eec8bcfd9ddc0303c 100644 (file)
@@ -272,7 +272,7 @@ TEST(CfgSharedNetworks4Test, unparse) {
         "    \"hostname-char-replacement\": \"x\",\n"
         "    \"hostname-char-set\": \"[^A-Z]\",\n"
         "    \"cache-threshold\": .20,\n"
-        "    \"offer-lft\": 77\n"
+        "    \"offer-lifetime\": 77\n"
         "  }\n"
         "]\n";
 
index 757638ff05cb1736189b2ad63e8daf232a3c9349..9def3054741751a718e91986cd36d9ee024889c6 100644 (file)
@@ -1133,7 +1133,7 @@ TEST(CfgSubnets4Test, unparseSubnet) {
         "    \"pools\": [ ],\n"
         "    \"store-extended-info\": true,\n"
         "    \"cache-max-age\": 80,\n"
-        "    \"offer-lft\": 99\n"
+        "    \"offer-lifetime\": 99\n"
         "},{\n"
         "    \"id\": 125,\n"
         "    \"subnet\": \"192.0.2.128/26\",\n"
index a97b1c88471ade3821ba021ee2316d4b8f2f4e97..d0f3f989c01231826fe251ac99d9097735f7191b 100644 (file)
@@ -1334,6 +1334,7 @@ TEST_F(ClientClassDefParserTest, noFixedFields4) {
     EXPECT_EQ(IOAddress("0.0.0.0"), cclass->getNextServer());
     EXPECT_EQ(0, cclass->getSname().size());
     EXPECT_EQ(0, cclass->getFilename().size());
+    EXPECT_TRUE(cclass->getOfferLft().unspecified());
 
     // Nor option definitions
     CfgOptionDefPtr cfg = cclass->getCfgOptionDef();
@@ -1497,6 +1498,7 @@ TEST_F(ClientClassDefParserTest, nextServer) {
     EXPECT_EQ(IOAddress("192.0.2.254"), cclass->getNextServer());
     EXPECT_EQ(0, cclass->getSname().size());
     EXPECT_EQ(0, cclass->getFilename().size());
+    EXPECT_TRUE(cclass->getOfferLft().unspecified());
 }
 
 // Test verifies that the parser rejects bogus next-server value.
@@ -2053,4 +2055,37 @@ TEST_F(ClientClassDefParserTest, invalidUserContext) {
                  DhcpConfigError, "User context has to be a map (<string>:3:21)");
 }
 
+// Test verifies that it is possible to define offer-lifetime field and it
+// is actually set in the class properly.
+TEST_F(ClientClassDefParserTest, offerLft) {
+    std::string cfg_text =
+        "{ \n"
+        "    \"name\": \"MICROSOFT\", \n"
+        "    \"offer-lifetime\": 99\n"
+        "} \n";
+
+    ClientClassDefPtr cclass;
+    ASSERT_NO_THROW(cclass = parseClientClassDef(cfg_text, AF_INET));
+
+    // We should find our class.
+    ASSERT_TRUE(cclass);
+
+    auto offer_lft = cclass->getOfferLft();
+    ASSERT_FALSE(offer_lft.unspecified());
+    EXPECT_EQ(99, offer_lft);
+}
+
+// Test verifies that the parser rejects bogus server-hostname value.
+TEST_F(ClientClassDefParserTest, offerLftInvalid) {
+    std::string cfg_text =
+        "{ \n"
+        "    \"name\": \"MICROSOFT\", \n"
+        "    \"offer-lifetime\": -24\n"
+        "} \n";
+
+    EXPECT_THROW_MSG(parseClientClassDef(cfg_text, AF_INET), DhcpConfigError,
+                     "the value of offer-lifetime '-24' must be a positive number"
+                     " (<string>:3:23)");
+}
+
 } // end of anonymous namespace
index e89696927b6ec02cf2339ae0b735785719a51bf5..61edaf5994e0af784d89962c5e2aa1d95e78469d 100644 (file)
@@ -630,6 +630,7 @@ TEST(ClientClassDef, fixedFieldsDefaults) {
     ASSERT_EQ(IOAddress("0.0.0.0"), cclass->getNextServer());
     EXPECT_EQ(empty, cclass->getSname());
     EXPECT_EQ(empty, cclass->getFilename());
+    EXPECT_TRUE(cclass->getOfferLft().unspecified());
 }
 
 // Tests basic operations of fixed fields
index 897199f09fc0edcfb3c30543a20f2d9201300ebc..9b6eb3c467887169a3832a3af40c97edb68597d1 100644 (file)
@@ -3426,14 +3426,14 @@ TEST_F(ParseConfigTest, selfEncapsulationTest) {
     cfg.runCfgOptionsTest(family_, config);
 }
 
-// This test verifies parsing offer-lft for Subnet4.
+// This test verifies parsing offer-lifetime for Subnet4.
 TEST_F(ParseConfigTest, subnet4OfferLft) {
     std::string config =
         "{"
         "    \"subnet4\": [ {"
         "        \"subnet\": \"192.0.2.0/24\","
         "        \"id\": 123,"
-        "        \"offer-lft\": 888"
+        "        \"offer-lifetime\": 888"
         "    } ]"
         "}";
 
@@ -3447,14 +3447,14 @@ TEST_F(ParseConfigTest, subnet4OfferLft) {
     EXPECT_EQ(888, subnet->getOfferLft().get());
 }
 
-// This test verifies parsing invalid offer-lft for Subnet4.
+// This test verifies parsing invalid offer-lifetime for Subnet4.
 TEST_F(ParseConfigTest, subnet4InvalidOfferLft) {
     std::string config =
         "{"
         "    \"subnet4\": [ {"
         "        \"subnet\": \"192.0.2.0/24\","
         "        \"id\": 123,"
-        "        \"offer-lft\": -77"
+        "        \"offer-lifetime\": -77"
         "    } ]"
         "}";
 
index 85ad150bfb32b98c730fff2aa8dabff29a19375b..921ac8ba39952a0f552d3b3980ac0b8350fda641 100644 (file)
@@ -181,7 +181,7 @@ TEST_F(NetworkTest, inheritanceSupport4) {
     globals_->set("ddns-update-on-renew", Element::create(true));
     globals_->set("ddns-use-conflict-resolution", Element::create(true));
     globals_->set("allocator", Element::create("random"));
-    globals_->set("offer-lft", Element::create(45));
+    globals_->set("offer-lifetime", Element::create(45));
 
     // For each parameter for which inheritance is supported run
     // the test that checks if the values are inherited properly.
@@ -361,7 +361,7 @@ TEST_F(NetworkTest, inheritanceSupport4) {
                                              "iterative", "random");
     }
     {
-        SCOPED_TRACE("offer-lft");
+        SCOPED_TRACE("offer-lifetime");
         testNetworkInheritance<TestNetwork4>(&Network4::getOfferLft,
                                              &Network4::setOfferLft,
                                              10, 45);
index 24312fff0b58a3c2463596a4159ee3ffca594f95..1f5287cb4ffbc66245ea10a70e19fd3acbe00b9c 100644 (file)
@@ -153,7 +153,7 @@ public:
                 "    \"store-extended-info\": true,"
                 "    \"cache-threshold\": 0.123,"
                 "    \"cache-max-age\": 123,"
-                "    \"offer-lft\": 777,"
+                "    \"offer-lifetime\": 777,"
                 "    \"ddns-update-on-renew\": true,"
                 "    \"option-data\": ["
                 "        {"