]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#665,!460] Implemented support in netconf agent
authorThomas Markwalder <tmark@isc.org>
Thu, 8 Aug 2019 19:10:52 +0000 (15:10 -0400)
committerTomek Mrugalski <tomasz@isc.org>
Wed, 14 Aug 2019 08:57:56 +0000 (10:57 +0200)
doc/examples/netconf/simple-dhcp4.json
doc/examples/netconf/simple-dhcp6.json

src/bin/netconf/netconf_lexer.ll
src/bin/netconf/netconf_parser.yy

src/bin/netconf/location.hh
src/bin/netconf/netconf_lexer.cc
src/bin/netconf/netconf_parser.cc
src/bin/netconf/netconf_parser.h
src/bin/netconf/position.hh
src/bin/netconf/stack.hh

doc/examples/netconf/simple-dhcp4.json
doc/examples/netconf/simple-dhcp6.json
src/bin/netconf/location.hh
src/bin/netconf/netconf_lexer.cc
src/bin/netconf/netconf_lexer.ll
src/bin/netconf/netconf_parser.cc
src/bin/netconf/netconf_parser.h
src/bin/netconf/netconf_parser.yy
src/bin/netconf/position.hh
src/bin/netconf/stack.hh

index b8f85e054fbaedd150fcd8222e9e8469a93db20e..e46b5731a160bd9598eb4b5d39590188fc0b7e41 100644 (file)
                         // kept.
                         "flush": true,
                         "maxsize": 204800,
-                        "maxver": 4
+                        "maxver": 4,
+                         // We use pattern to specify custom log message layout
+                        "pattern": "%d{%y.%m.%d %H:%M:%S.%q} %-5p [%c/%i] %m\n"
                     }
                 ],
                 // You can change the severity to DEBUG, INFO, WARN, ERROR or
index 5dbb22218eb32817a1e42430c55379999b41e121..871e74dcaf1e48b47790a249ddb10efbddeae680 100644 (file)
                         // kept.
                         "flush": true,
                         "maxsize": 204800,
-                        "maxver": 4
+                        "maxver": 4,
+                        // We use pattern to specify custom log message layout
+                        "pattern": "%d{%y.%m.%d %H:%M:%S.%q} %-5p [%c/%i] %m\n"
                     }
                 ],
                 // You can change the severity to DEBUG, INFO, WARN, ERROR or
index 7ae1e738162ffb93ab4154a5f8b79437fc26affa..69c2cf2cafebfb4b32b08482993bf889c1b2a501 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 201906181715
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Locations for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 #  endif
 # endif
 
-#line 14 "netconf_parser.yy"
+#line 14 "netconf_parser.yy" // location.cc:339
 namespace isc { namespace netconf {
-#line 60 "location.hh"
-
+#line 60 "location.hh" // location.cc:339
   /// A point in a source file.
   class position
   {
@@ -318,8 +316,7 @@ namespace isc { namespace netconf {
     return ostr;
   }
 
-#line 14 "netconf_parser.yy"
+#line 14 "netconf_parser.yy" // location.cc:339
 } } // isc::netconf
-#line 323 "location.hh"
-
+#line 322 "location.hh" // location.cc:339
 #endif // !YY_NETCONF_LOCATION_HH_INCLUDED
index 365415f3c8ab2ceeafa276e2063c16baa6071e85..0492a387e71c5ae0e64257c6b8b19ae7a30f49ad 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "netconf_lexer.cc"
+#line 2 "netconf_lexer.cc"
 
-#line 3 "netconf_lexer.cc"
+#line 4 "netconf_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 62
-#define YY_END_OF_BUFFER 63
+#define YY_NUM_RULES 63
+#define YY_END_OF_BUFFER 64
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,48 +700,49 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[367] =
+static const flex_int16_t yy_accept[373] =
     {   0,
-       55,   55,    0,    0,    0,    0,    0,    0,    0,    0,
-       63,   61,   10,   11,   61,    1,   55,   52,   55,   55,
-       61,   54,   53,   61,   61,   61,   61,   61,   48,   49,
-       61,   61,   61,   50,   51,    5,    5,    5,   61,   61,
-       61,   10,   11,    0,    0,   44,    0,    0,    0,    0,
+       56,   56,    0,    0,    0,    0,    0,    0,    0,    0,
+       64,   62,   10,   11,   62,    1,   56,   53,   56,   56,
+       62,   55,   54,   62,   62,   62,   62,   62,   49,   50,
+       62,   62,   62,   51,   52,    5,    5,    5,   62,   62,
+       62,   10,   11,    0,    0,   45,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    1,   55,   55,    0,   54,   55,    3,    2,
-        6,    0,   55,    0,    0,    0,    0,    0,    0,    4,
-        0,    0,    9,    0,   45,    0,    0,    0,    0,   47,
+        0,    0,    1,   56,   56,    0,   55,   56,    3,    2,
+        6,    0,   56,    0,    0,    0,    0,    0,    0,    4,
+        0,    0,    9,    0,   46,    0,    0,    0,    0,   48,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    2,    0,    0,    0,    0,    0,
-        0,    0,    8,    0,    0,    0,    0,   46,    0,    0,
+        0,    0,    8,    0,    0,    0,    0,   47,    0,    0,
        22,    0,    0,   21,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   60,   58,    0,   57,   56,
+        0,    0,    0,    0,    0,    0,   61,   59,    0,   58,
+       57,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   59,
-       56,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,   26,    0,    0,    0,    0,    0,
-        0,   36,    0,    0,    0,    0,    0,    0,   25,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   19,
-       20,   39,    0,    0,    0,    0,    0,    0,   23,    0,
-        0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   41,
-       38,    0,    0,    0,    0,   27,    0,    0,    0,   34,
-       12,    0,   14,    0,    0,    0,   32,   35,    0,   40,
+        0,   60,   57,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,   26,    0,    0,    0,
+        0,    0,    0,   36,    0,    0,    0,    0,    0,    0,
+        0,   25,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   19,   20,   39,    0,    0,    0,    0,    0,
+        0,   23,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    7,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   41,   38,    0,    0,    0,    0,    0,
+       27,    0,    0,    0,   34,   12,    0,   14,    0,    0,
+        0,   32,   35,    0,   40,    0,    0,   42,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   43,    0,    0,    0,
 
+        0,    0,   44,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   42,    0,
-        0,    0,   33,    0,    0,   30,    0,    0,    0,   15,
-        0,    0,    0,    0,   29,   28,    0,    0,    0,    0,
-        0,    0,    0,    0,   13,    0,    0,    0,    0,    0,
-        0,    0,   24,    0,    0,   37,    0,    0,   31,   18,
-        0,    0,    0,   17,   16,    0
+        0,    0,    0,    0,   43,    0,    0,    0,   33,    0,
+        0,   30,    0,    0,    0,   15,    0,    0,    0,    0,
+       29,   28,    0,    0,    0,    0,    0,    0,    0,    0,
+       13,    0,    0,    0,    0,    0,    0,    0,   24,    0,
+        0,   37,    0,    0,   31,   18,    0,    0,    0,   17,
+       16,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -786,97 +787,99 @@ static const YY_CHAR yy_meta[61] =
         5,    3,    5,    5,    3,    3,    3,    3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[380] =
+static const flex_int16_t yy_base[386] =
     {   0,
         0,    0,   59,   62,   65,    0,   63,   67,   47,   64,
-      291, 2481,   84,  286,  125,    0,  105, 2481,  120,  125,
-       85,  169, 2481,  262,  139,   65,   69,   82, 2481, 2481,
-       80,   84,  118, 2481, 2481, 2481,   92,  269,  230,    0,
-      256,  110,  270,   97,  186, 2481,  193,  199,  197,  210,
+      291, 2525,   84,  286,  125,    0,  105, 2525,  120,  125,
+       85,  169, 2525,  262,  139,   65,   69,   82, 2525, 2525,
+       80,   84,  118, 2525, 2525, 2525,   92,  269,  230,    0,
+      256,  110,  270,   97,  186, 2525,  193,  199,  197,  210,
       219,  234,  255,  263,  269,  278,  284,  291,  297,  303,
-      320,  338,    0,  345,  363,  375,  381,  385, 2481,    0,
-     2481,  332,  349,  121,  144,  128,  152,  171,  160, 2481,
-      222,  248, 2481,  198, 2481,  169,  405,  411,  209,  417,
+      320,  338,    0,  345,  363,  375,  381,  385, 2525,    0,
+     2525,  332,  349,  121,  144,  128,  152,  171,  160, 2525,
+      222,  248, 2525,  198, 2525,  169,  405,  411,  209,  417,
       451,  428,  439,  450,  478,  493,  499,  506,  512,  518,
 
-      532,  540,  546,  552,  574,  586,  594,  602,  608,  614,
-      622,  628,  648,  661,    0,  177,  181,  184,  189,  207,
-      204,  130, 2481,    0,  667,  673,  155, 2481,  698,  695,
-     2481,  683,  723, 2481,  739,  748,  756,  762,  768,  776,
-      782,  810,  819,  827,  833,  839,  847,  853,  862,  875,
-      895,  903,  909,  917,  222, 2481, 2481,  223, 2481, 2481,
-      103,    0,  924,  931,  967,  937,  992, 1008,  943, 1014,
-     1020, 1032, 1042, 1049, 1055, 1065, 1071, 1077, 1088, 1099,
-     1110, 1121, 1127, 1134, 1143, 1149, 1155, 1169, 1183, 2481,
-     2481,  104,    0, 1190, 1197, 1232, 1204, 1211, 1218, 1230,
-
-     1259, 1276, 1282, 1288, 2481, 1294, 1300, 1310, 1316, 1322,
-     1328, 2481, 1334, 1351, 1357, 1363, 1369, 1375, 2481, 1391,
-     1397,   64,    0, 1403, 1409, 1437, 1445, 1451, 1459, 2481,
-     2481, 2481, 1470, 1479, 1487, 1499, 1507, 1516, 2481, 1522,
-     1528, 1540, 1557, 1550, 1563, 1569, 1576, 2481, 1583, 1597,
-     1609, 1618, 1625, 1631, 1637, 1643, 1651, 1660, 1666, 2481,
-     2481, 1672, 1686, 1694, 1700, 2481, 1706, 1712, 1722, 2481,
-     2481, 1728, 2481, 1734, 1767, 1773, 2481, 2481, 1779, 2481,
-     1786, 1792, 1802, 1812, 1820, 1827, 1836, 1848, 1855, 1861,
-     1869, 1883, 1889, 1897, 1903, 1909, 2481, 1918, 1925, 1943,
-
-     1951, 1965, 1971, 1977, 1985, 1991, 2000, 2010, 2019, 2025,
-     2036, 2044, 2053, 2064, 2072, 2079, 2086, 2092, 2481, 2098,
-     2105, 2112, 2481, 2133, 2140, 2481, 2149, 2156, 2162, 2481,
-     2168, 2174, 2182, 2210, 2481, 2481, 2218, 2224, 2230, 2236,
-     2243, 2258, 2264, 2271, 2481, 2278, 2284, 2292, 2299, 2312,
-     2320, 2327, 2481, 2333, 2340, 2481, 2346, 2355, 2481, 2481,
-     2362, 2368, 2375, 2481, 2481, 2481, 2414, 2421, 2428, 2435,
-     2442, 2449, 2456, 2460, 2465, 2467, 2469, 2471, 2473
+      532,  540,  546,  552,  574,  586,  594,  602,  608,  622,
+      630,  647,  663,  669,    0,  177,  181,  184,  189,  207,
+      204,  130, 2525,    0,  675,  681,  155, 2525,  706,  703,
+     2525,  691,  731, 2525,  747,  756,  764,  770,  776,  784,
+      790,  818,  827,  835,  841,  847,  855,  861,  870,  883,
+      898,  905,  916,  923,  931,  222, 2525, 2525,  223, 2525,
+     2525,  103,    0,  938,  952,  988,  959,  975,  985, 1029,
+     1036, 1042, 1048, 1054, 1062, 1071, 1077, 1087, 1100, 1106,
+     1112, 1120, 1126, 1135, 1145, 1154, 1160, 1178, 1189, 1196,
+     1202, 2525, 2525,  104,    0, 1217, 1224, 1259, 1231, 1245,
+
+     1237, 1257, 1286, 1303, 1309, 1315, 2525, 1321, 1327, 1337,
+     1343, 1349, 1355, 2525, 1361, 1378, 1384, 1390, 1396, 1403,
+     1418, 2525, 1424, 1437,   64,    0, 1444, 1452, 1458, 1465,
+     1473, 1481, 2525, 2525, 2525, 1493, 1499, 1509, 1521, 1532,
+     1542, 2525, 1549, 1556, 1565, 1575, 1584, 1590, 1598, 1604,
+     1613, 2525, 1619, 1632, 1638, 1648, 1656, 1667, 1673, 1681,
+     1690, 1696, 1702, 2525, 2525, 1709, 1724, 1718, 1730, 1737,
+     2525, 1743, 1753, 1759, 2525, 2525, 1771, 2525, 1765, 1794,
+     1807, 2525, 2525, 1813, 2525, 1819, 1827, 2525, 1835, 1847,
+     1853, 1860, 1869, 1886, 1893, 1911, 1919, 1926, 1932, 1940,
+
+     1948, 1954, 2525, 1960, 1976, 1983, 1989, 2002, 2011, 2017,
+     2030, 2037, 2045, 2052, 2058, 2071, 2081, 2087, 2093, 2104,
+     2110, 2116, 2122, 2128, 2525, 2138, 2144, 2151, 2525, 2161,
+     2173, 2525, 2179, 2185, 2195, 2525, 2201, 2207, 2213, 2223,
+     2525, 2525, 2241, 2256, 2262, 2278, 2284, 2290, 2296, 2302,
+     2525, 2312, 2319, 2331, 2337, 2354, 2360, 2366, 2525, 2372,
+     2378, 2525, 2389, 2395, 2525, 2525, 2406, 2412, 2418, 2525,
+     2525, 2525, 2458, 2465, 2472, 2479, 2486, 2493, 2500, 2504,
+     2509, 2511, 2513, 2515, 2517
     } ;
 
-static const flex_int16_t yy_def[380] =
+static const flex_int16_t yy_def[386] =
     {   0,
-      366,    1,  367,  367,    1,    5,    5,    5,    5,    5,
-      366,  366,  366,  366,  368,  369,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  370,
-      366,  366,  366,  371,  368,  366,  368,  368,  372,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  369,  366,  366,  366,  366,  366,  366,  373,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  370,  366,  371,  366,  374,  368,  368,  375,  368,
-      372,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  373,  366,  366,  366,  366,  366,
-      366,  366,  366,  376,  368,  368,  375,  366,  372,  368,
-      366,  368,  368,  366,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  366,  366,  366,  366,  366,  366,
-      366,  377,  368,  368,  372,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  366,
-      366,  366,  378,  368,  368,  372,  368,  368,  368,  368,
-
-      368,  368,  368,  368,  366,  368,  368,  368,  368,  368,
-      368,  366,  368,  368,  368,  368,  368,  368,  366,  368,
-      368,  366,  379,  368,  368,  368,  368,  368,  368,  366,
-      366,  366,  368,  368,  368,  368,  368,  368,  366,  368,
-      368,  368,  368,  368,  368,  368,  368,  366,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  366,
-      366,  368,  368,  368,  368,  366,  368,  368,  368,  366,
-      366,  368,  366,  368,  368,  368,  366,  366,  368,  366,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  366,  368,  368,  368,
-
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  366,  368,
-      368,  368,  366,  368,  368,  366,  368,  368,  368,  366,
-      368,  368,  368,  368,  366,  366,  368,  368,  368,  368,
-      368,  368,  368,  368,  366,  368,  368,  368,  368,  368,
-      368,  368,  366,  368,  368,  366,  368,  368,  366,  366,
-      368,  368,  368,  366,  366,    0,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366
+      372,    1,  373,  373,    1,    5,    5,    5,    5,    5,
+      372,  372,  372,  372,  374,  375,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  376,
+      372,  372,  372,  377,  374,  372,  374,  374,  378,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  375,  372,  372,  372,  372,  372,  372,  379,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  376,  372,  377,  372,  380,  374,  374,  381,  374,
+      378,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  379,  372,  372,  372,  372,  372,
+      372,  372,  372,  382,  374,  374,  381,  372,  378,  374,
+      372,  374,  374,  372,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  374,  372,  372,  372,  372,  372,
+      372,  372,  383,  374,  374,  378,  374,  374,  374,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  372,  372,  372,  384,  374,  374,  378,  374,  374,
+
+      374,  374,  374,  374,  374,  374,  372,  374,  374,  374,
+      374,  374,  374,  372,  374,  374,  374,  374,  374,  374,
+      374,  372,  374,  374,  372,  385,  374,  374,  374,  374,
+      374,  374,  372,  372,  372,  374,  374,  374,  374,  374,
+      374,  372,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  372,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  372,  372,  374,  374,  374,  374,  374,
+      372,  374,  374,  374,  372,  372,  374,  372,  374,  374,
+      374,  372,  372,  374,  372,  374,  374,  372,  374,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+
+      374,  374,  372,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  374,  372,  374,  374,  374,  372,  374,
+      374,  372,  374,  374,  374,  372,  374,  374,  374,  374,
+      372,  372,  374,  374,  374,  374,  374,  374,  374,  374,
+      372,  374,  374,  374,  374,  374,  374,  374,  372,  374,
+      374,  372,  374,  374,  372,  372,  374,  374,  374,  372,
+      372,    0,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372
     } ;
 
-static const flex_int16_t yy_nxt[2542] =
+static const flex_int16_t yy_nxt[2586] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   23,   24,   12,
@@ -889,278 +892,282 @@ static const flex_int16_t yy_nxt[2542] =
        12,   12,   12,   12,   41,   42,   74,   42,   12,   12,
        12,   12,   69,   42,   12,   42,   12,   70,   12,   75,
 
-       74,   74,   85,  248,   12,   12,   12,   12,   39,   76,
+       74,   74,   85,  252,   12,   12,   12,   12,   39,   76,
        12,   42,   12,   42,   75,   77,   64,   12,   65,   65,
        65,   65,   75,   12,   12,   44,   44,   44,   66,   86,
        46,   64,   76,   67,   67,   67,   67,   78,   68,   68,
-       68,   68,  222,   66,   66,   76,  116,   72,   66,   72,
-       47,   48,   73,   73,   73,   73,  192,   49,  118,   66,
+       68,   68,  225,   66,   66,   76,  116,   72,   66,   72,
+       47,   48,   73,   73,   73,   73,  194,   49,  118,   66,
       128,   50,   51,   52,   66,   53,  116,   54,   79,  117,
-       55,   56,   57,   58,   59,  161,   60,  116,   61,   62,
+       55,   56,   57,   58,   59,  162,   60,  116,   61,   62,
        64,  118,   67,   67,   67,   67,   44,   44,   44,  117,
       118,   46,   66,   44,   44,   44,  117,  119,   46,   44,
 
-       44,   44,   90,   85,   46,  155,  156,  157,   66,   45,
-       44,   44,   44,  121,  128,   46,  120,  155,   49,   44,
-       44,   44,  124,  157,   46,   49,  156,  157,  155,   45,
-       86,   49,  156,   45,   44,   44,   44,   45,   88,   46,
-      158,   87,   49,  160,   45,  190,  190,   45,   95,   45,
-       91,   49,  159,  123,   93,   44,   44,   44,   92,  122,
-       46,  190,  191,   44,   44,   44,   49,   94,   46,   44,
+       44,   44,   90,   85,   46,  156,  157,  158,   66,   45,
+       44,   44,   44,  121,  128,   46,  120,  156,   49,   44,
+       44,   44,  124,  158,   46,   49,  157,  158,  156,   45,
+       86,   49,  157,   45,   44,   44,   44,   45,   88,   46,
+      159,   87,   49,  161,   45,  192,  192,   45,   95,   45,
+       91,   49,  160,  123,   93,   44,   44,   44,   92,  122,
+       46,  192,  193,   44,   44,   44,   49,   94,   46,   44,
        44,   44,   43,   96,   46,   83,   97,   81,   44,   44,
        44,   80,   71,   46,   44,   44,   44,   49,   43,   46,
-      366,   44,   44,   44,  366,   49,   46,   44,   44,   44,
-
-       98,   49,   46,   44,   44,   44,  366,  366,   46,  366,
-       49,   99,  101,  103,  366,  100,   49,  102,  366,  105,
-       44,   44,   44,   49,  366,   46,  104,  366,  366,   49,
-      366,  366,  107,  366,  366,   49,  366,  366,   44,   44,
-       44,  366,  108,   46,  106,   73,   73,   73,   73,  366,
-      366,  109,   49,  366,  366,  110,  111,  366,   68,   68,
-       68,   68,   73,   73,   73,   73,  366,  112,   66,  366,
-       49,  113,  366,  114,   64,  366,   65,   65,   65,   65,
-      366,  366,  366,   72,   66,   72,   66,  366,   73,   73,
-       73,   73,   64,  366,   67,   67,   67,   67,   68,   68,
-
-       68,   68,   66,  366,   66,   44,   44,   44,   66,  366,
-       46,   44,   44,   44,  366,  366,   46,   44,   44,   44,
-       66,  366,   46,  366,   66,  366,  366,  366,   44,   44,
-       44,  366,  366,   46,  366,  366,  366,   49,  366,   44,
-       44,   44,  366,   49,  131,  366,  125,  366,  366,   49,
-       44,   44,   44,  366,  366,   46,  366,  366,  366,  366,
-       49,  366,  366,  126,  129,  129,  129,  129,  366,  366,
-      366,   49,  129,  129,  129,  129,  130,  366,   44,   44,
-       44,  366,   49,  134,  366,  366,  129,  129,  129,  129,
-      129,  129,  366,   44,   44,   44,  132,  133,   46,   44,
-
-       44,   44,  366,  366,   46,  366,   44,   44,   44,  366,
-       49,   46,   44,   44,   44,  366,  366,   46,   44,   44,
-       44,  366,  366,   46,  366,   49,  366,  366,  366,  135,
-      366,   49,   44,   44,   44,  366,  136,   46,   49,  366,
-       44,   44,   44,  366,   49,   46,   44,   44,   44,  366,
-       49,   46,   44,   44,   44,  366,  366,   46,  366,  137,
-      138,  366,  366,  366,   49,  366,  366,  366,  140,  366,
-      139,  366,   49,  366,   44,   44,   44,  366,   49,   46,
-      366,  141,  366,  366,   49,  366,   44,   44,   44,  366,
-      144,   46,  366,  142,   44,   44,   44,  366,  366,   46,
-
-      366,  143,   44,   44,   44,  366,   49,   46,   44,   44,
-       44,  366,  366,   46,   44,   44,   44,  366,   49,   46,
-      145,  366,   44,   44,   44,  366,   49,   46,   44,   44,
-       44,  366,  366,   46,   49,  366,  366,  366,  146,  366,
-       49,  366,  366,  366,  147,  149,   49,  366,   44,   44,
-       44,  366,  150,   46,   49,  366,  148,  366,  151,  366,
-       49,   44,   44,   44,  366,  366,   46,   44,   44,   44,
-      366,  152,   46,   44,   44,   44,  366,  366,   46,  366,
-       49,  366,  366,   44,   44,   44,  366,  153,   46,  366,
-      366,  366,  366,   49,  366,   44,   44,   44,  366,   49,
-
-       46,  366,  366,  366,  366,   49,  154,  366,  163,  366,
-      164,  165,  165,  165,  165,   49,  366,  366,  366,  165,
-      165,  165,  165,   44,   44,   44,  366,   49,   46,  167,
-      366,  366,  366,  165,  165,  165,  165,  165,  165,   44,
-       44,   44,  366,  366,   46,  366,  366,  166,   44,   44,
-       44,  366,  366,   46,  366,   49,   44,   44,   44,  366,
-      366,   46,   44,   44,   44,  366,  366,   46,   44,   44,
-       44,   49,  366,   46,  366,  168,   44,   44,   44,  366,
-       49,   46,   44,   44,   44,  366,  366,   46,   49,  366,
-      366,  366,  169,  366,   49,  366,  366,  170,  366,  366,
-
-       49,  366,  366,  366,  366,  366,  172,  171,   49,  366,
-       44,   44,   44,  366,   49,   46,  366,  173,  366,   44,
-       44,   44,  366,  175,   46,  366,  174,   44,   44,   44,
-      366,  366,   46,   44,   44,   44,  366,  366,   46,   44,
-       44,   44,   49,  366,   46,  176,  366,   44,   44,   44,
-      366,   49,   46,   44,   44,   44,  366,  366,   46,   49,
-      366,  366,   44,   44,   44,   49,  179,   46,  366,  366,
-      177,   49,  180,  178,  366,   44,   44,   44,  366,   49,
-       46,  366,  182,  366,  366,   49,  366,  366,  181,  366,
-      366,  366,  183,  366,   49,   44,   44,   44,  366,  366,
-
-       46,  366,  366,   44,   44,   44,  184,   49,   46,   44,
-       44,   44,  366,  366,   46,  366,  366,   44,   44,   44,
-      366,  366,   46,  185,   44,   44,   44,   49,  366,   46,
-      366,   44,   44,   44,  366,   49,   46,   44,   44,   44,
-      366,   49,   46,   44,   44,   44,  186,  197,   46,   49,
-      366,  366,  366,  366,  366,  366,   49,  366,  187,  188,
-      189,  366,  366,   49,  366,  366,  366,  194,  366,   49,
-      366,  366,  366,  366,  366,   49,  366,  366,  366,  195,
-      196,  196,  196,  196,  200,  366,  366,  366,  196,  196,
-      196,  196,   44,   44,   44,  366,  366,   46,  366,  366,
-
-      366,  366,  196,  196,  196,  196,  196,  196,   44,   44,
-       44,  366,  366,   46,   44,   44,   44,  366,  366,   46,
-       44,   44,   44,  366,   49,   46,  366,  366,  366,  201,
-      202,  198,   44,   44,   44,  366,  366,   46,  366,  366,
-       49,  366,   44,   44,   44,  366,   49,  205,  366,   44,
-       44,   44,   49,  366,   46,   44,   44,   44,  199,  366,
-       46,  366,  203,  366,   49,   44,   44,   44,  366,  366,
-       46,   44,   44,   44,   49,  366,   46,   44,   44,   44,
-      366,   49,   46,  204,  206,  366,  366,   49,   44,   44,
-       44,  366,  366,   46,  207,  366,  366,   49,  366,   44,
-
-       44,   44,  366,   49,  212,  366,  208,  366,  366,   49,
-       44,   44,   44,  366,  209,   46,  210,  366,  366,  366,
-       49,   44,   44,   44,  366,  366,   46,   44,   44,   44,
-      366,   49,   46,  211,   44,   44,   44,  366,  366,   46,
-      366,  366,   49,   44,   44,   44,  366,  366,   46,   44,
-       44,   44,  366,   49,   46,   44,   44,   44,  366,   49,
-      219,  366,  366,  213,  366,  366,   49,  214,  366,   44,
-       44,   44,  366,  216,   46,   49,  366,  215,  366,  220,
-      366,   49,  366,   44,   44,   44,  218,   49,   46,  366,
-       44,   44,   44,  366,  366,   46,  217,   44,   44,   44,
-
-      366,   49,   46,  366,   44,   44,   44,  366,  366,   46,
-      366,   44,   44,   44,  366,   49,   46,  366,   44,   44,
-       44,  221,   49,   46,  366,  366,  366,  366,  366,   49,
-       44,   44,   44,  366,  366,   46,   49,  224,  366,  366,
-      366,  366,  366,   49,  225,   45,   45,   45,   45,  366,
-       49,  366,  366,   45,   45,   45,   45,  226,  227,   44,
-       44,   44,   49,  366,  230,  366,  228,   45,   45,   45,
-       45,   45,   45,  366,  366,  229,   44,   44,   44,  366,
-      366,  231,   44,   44,   44,  366,  366,  232,   44,   44,
-       44,   49,  366,   46,   44,   44,   44,  366,  233,   46,
-
-       44,   44,   44,  366,  366,   46,  366,  366,   49,  366,
-       44,   44,   44,  366,   49,   46,   44,   44,   44,  366,
-       49,   46,   44,   44,   44,  366,   49,   46,   44,   44,
-       44,  366,   49,  239,   44,   44,   44,  366,  366,   46,
-      366,  366,   49,  366,  234,  366,  366,  366,   49,  236,
-      235,   44,   44,   44,   49,  366,   46,   44,   44,   44,
-       49,  366,   46,   44,   44,   44,   49,  366,   46,   44,
-       44,   44,  238,  237,   46,   44,   44,   44,  366,  366,
-       46,  366,  366,   49,  366,  366,  240,  366,  366,   49,
-      241,   44,   44,   44,  366,   49,   46,   44,   44,   44,
-
-      242,   49,   46,   44,   44,   44,  366,   49,   46,   44,
-       44,   44,  366,  366,   46,  243,  366,  366,  366,  366,
-      366,  244,  366,   49,  366,  245,  366,  366,  246,   49,
-      366,  366,  247,  366,  366,   49,  366,   44,   44,   44,
-      366,   49,   46,  366,  249,   44,   44,   44,  366,  250,
-       46,   44,   44,   44,  366,  366,   46,  366,  366,   44,
-       44,   44,  366,  366,   46,  366,  366,  366,  366,   49,
-       44,   44,   44,  366,  366,   46,  366,   49,  366,   44,
-       44,   44,  366,   49,   46,  366,  251,   44,   44,   44,
-      366,   49,   46,  366,  366,  366,  253,  252,  254,   44,
-
-       44,   44,   49,  366,   46,  366,  366,   44,   44,   44,
-      366,   49,   46,  366,  366,  255,   44,   44,   44,   49,
-      366,  260,   44,   44,   44,  366,  366,  261,   44,   44,
-       44,   49,  366,   46,  366,  256,  366,  258,  257,   49,
-       44,   44,   44,  366,  366,   46,  259,  366,   49,  366,
-       44,   44,   44,  366,   49,  266,  262,   44,   44,   44,
-       49,  366,   46,   44,   44,   44,  366,  265,   46,   44,
-       44,   44,   49,  366,   46,  366,   44,   44,   44,  366,
-      263,   46,   49,   44,   44,   44,  366,  366,  270,   49,
-      366,  366,  264,  366,  366,   49,  366,   44,   44,   44,
-
-      366,   49,  271,  366,  366,  366,  267,  366,   49,   44,
-       44,   44,  366,  366,   46,   49,  366,  268,   44,   44,
-       44,  366,  366,  273,  366,   44,   44,   44,  269,   49,
-       46,   44,   44,   44,  366,  274,   46,   44,   44,   44,
-      366,   49,   46,   44,   44,   44,  366,  272,  277,  366,
-       49,   44,   44,   44,  366,  366,  278,   49,  366,  366,
-       44,   44,   44,   49,  366,   46,   44,   44,   44,   49,
-      279,  280,   44,   44,   44,   49,  366,   46,  366,  366,
-      276,  366,  366,   49,  366,  275,   44,   44,   44,  366,
-      366,   46,   49,  366,   44,   44,   44,  366,   49,   46,
-
-       44,   44,   44,  366,   49,   46,   44,   44,   44,  366,
-      366,   46,   44,   44,   44,  366,  366,   46,   49,  366,
-      281,  366,   44,   44,   44,  282,   49,   46,   44,   44,
-       44,  366,   49,   46,   44,   44,   44,  366,   49,   46,
-      366,  366,  287,  366,   49,  366,  366,  284,  366,  366,
-      283,  366,  285,  286,   49,  366,  366,  366,  366,  288,
-       49,  289,  366,  290,  366,  366,   49,   44,   44,   44,
-      366,  366,   46,   44,   44,   44,  366,  366,   46,   44,
-       44,   44,  366,  366,   46,  291,   44,   44,   44,  366,
-      366,   46,   44,   44,   44,  366,  366,   46,  366,   49,
-
-      366,  366,   44,   44,   44,   49,  292,  297,  366,  293,
-      366,   49,   44,   44,   44,  366,  366,   46,   49,  366,
-       44,   44,   44,  366,   49,   46,  366,   44,   44,   44,
-      294,  366,   46,  366,   49,  295,   44,   44,   44,  366,
-      366,   46,  296,  366,   49,  366,  366,  298,   44,   44,
-       44,  366,   49,   46,  366,   44,   44,   44,  366,   49,
-       46,   44,   44,   44,  366,  303,   46,  366,   49,   44,
-       44,   44,  366,  366,   46,  301,  299,  300,  366,  366,
-       49,  366,  366,   44,   44,   44,  366,   49,   46,   44,
-       44,   44,  366,   49,   46,  366,  366,   44,   44,   44,
-
-      302,   49,   46,   44,   44,   44,  366,  366,   46,   44,
-       44,   44,  366,  304,   46,   49,  366,  305,   44,   44,
-       44,   49,  366,   46,  366,   44,   44,   44,  306,   49,
-       46,  366,  366,  366,  366,   49,  308,  366,  366,  307,
-      366,   49,  366,   44,   44,   44,  366,  366,   46,  366,
-       49,   44,   44,   44,  366,  309,   46,   49,  366,  366,
-      310,  314,  366,  366,  311,   44,   44,   44,  366,  366,
-       46,   44,   44,   44,  312,   49,   46,   44,   44,   44,
-      366,  366,   46,   49,  366,   44,   44,   44,  313,  366,
-       46,   44,   44,   44,  366,  366,  319,   49,  366,  366,
-
-       44,   44,   44,   49,  315,   46,  366,  366,  316,   49,
-       44,   44,   44,  366,  366,   46,  317,   49,  366,   44,
-       44,   44,  318,   49,   46,   44,   44,   44,  366,  366,
-      323,  366,   49,  366,  366,  320,   44,   44,   44,  366,
-      366,   46,   49,  366,   44,   44,   44,  366,  366,   46,
-      366,   49,  366,   44,   44,   44,  366,   49,  326,  366,
-      321,  366,  322,  366,   44,   44,   44,  366,   49,   46,
-      366,  366,   44,   44,   44,  324,   49,   46,  366,   44,
-       44,   44,  366,  325,   46,   49,   44,   44,   44,  366,
-      366,  330,   44,   44,   44,  366,   49,   46,   44,   44,
-
-       44,  327,  366,   46,   49,   44,   44,   44,  366,  366,
-       46,   49,   44,   44,   44,  366,  366,   46,   49,  366,
-      366,  329,  366,  366,   49,  366,  366,  328,  366,  366,
-       49,  366,  366,   44,   44,   44,  331,   49,  335,  366,
-       44,   44,   44,  366,   49,  336,  366,  366,  332,   44,
-       44,   44,  366,  366,   46,  366,   44,   44,   44,  333,
-      334,   46,   44,   44,   44,   49,  366,   46,   44,   44,
-       44,  366,   49,   46,   44,   44,   44,  366,  366,   46,
-      366,   49,   44,   44,   44,  366,  366,   46,   49,  366,
-      366,  337,  366,  366,   49,  366,  366,  339,  366,  366,
-
-       49,  366,  366,  366,  366,  366,   49,  340,  338,  366,
-       44,   44,   44,  366,   49,   46,  366,  341,   44,   44,
-       44,  342,  366,   46,   44,   44,   44,  366,  366,  345,
-       44,   44,   44,  366,  366,   46,   44,   44,   44,  366,
-      366,   46,   49,   44,   44,   44,  366,  366,   46,  366,
-       49,  366,  366,  344,  366,  366,   49,  343,   44,   44,
-       44,  366,   49,   46,   44,   44,   44,  366,   49,   46,
-      366,   44,   44,   44,  366,   49,   46,  346,   44,   44,
-       44,  366,  348,   46,   44,   44,   44,  366,  347,  353,
-       49,  366,   44,   44,   44,  366,   49,   46,  366,   44,
-
-       44,   44,  366,   49,   46,  366,  366,  366,  349,  366,
-       49,  366,   44,   44,   44,  350,   49,  356,  351,  352,
-       44,   44,   44,  366,   49,   46,  366,   44,   44,   44,
-      366,   49,   46,   44,   44,   44,  366,  366,  359,  366,
-       44,   44,   44,  354,   49,  360,   44,   44,   44,  366,
-      355,   46,   49,  366,  366,   44,   44,   44,  366,   49,
-       46,  357,   44,   44,   44,   49,  358,   46,   44,   44,
-       44,  366,   49,  364,  366,   44,   44,   44,   49,  366,
-      365,  366,  366,  366,  366,  361,  366,   49,  366,  366,
-      366,  366,  366,  366,   49,  366,  366,  366,  366,  366,
-
-       49,  366,  366,  366,  366,  366,  362,   49,  366,  366,
-      366,  366,  366,  363,   36,   36,   36,   36,   36,   36,
-       36,   45,   45,   45,   45,   45,   45,   45,   63,  366,
-       63,   63,   63,   63,   63,   82,  366,   82,  366,   82,
-       82,   82,   84,   84,   84,   84,   84,   84,   84,   89,
-       89,   89,   89,   89,   89,   89,  115,  366,  115,  115,
-      115,  115,  115,   84,   84,  366,   84,  127,  127,  127,
-      127,  127,  162,  162,  193,  193,  223,  223,   84,   84,
-       11,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366
+      372,   44,   44,   44,  372,   49,   46,   44,   44,   44,
+
+       98,   49,   46,   44,   44,   44,  372,  372,   46,  372,
+       49,   99,  101,  103,  372,  100,   49,  102,  372,  105,
+       44,   44,   44,   49,  372,   46,  104,  372,  372,   49,
+      372,  372,  107,  372,  372,   49,  372,  372,   44,   44,
+       44,  372,  108,   46,  106,   73,   73,   73,   73,  372,
+      372,  109,   49,  372,  372,  110,  111,  372,   68,   68,
+       68,   68,   73,   73,   73,   73,  372,  112,   66,  372,
+       49,  113,  372,  114,   64,  372,   65,   65,   65,   65,
+      372,  372,  372,   72,   66,   72,   66,  372,   73,   73,
+       73,   73,   64,  372,   67,   67,   67,   67,   68,   68,
+
+       68,   68,   66,  372,   66,   44,   44,   44,   66,  372,
+       46,   44,   44,   44,  372,  372,   46,   44,   44,   44,
+       66,  372,   46,  372,   66,  372,  372,  372,   44,   44,
+       44,  372,  372,   46,  372,  372,  372,   49,  372,   44,
+       44,   44,  372,   49,  131,  372,  125,  372,  372,   49,
+       44,   44,   44,  372,  372,   46,  372,  372,  372,  372,
+       49,  372,  372,  126,  129,  129,  129,  129,  372,  372,
+      372,   49,  129,  129,  129,  129,  130,  372,   44,   44,
+       44,  372,   49,  134,  372,  372,  129,  129,  129,  129,
+      129,  129,  372,   44,   44,   44,  132,  133,   46,   44,
+
+       44,   44,  372,  372,   46,  372,   44,   44,   44,  372,
+       49,   46,   44,   44,   44,  372,  372,   46,   44,   44,
+       44,  372,  372,   46,  372,   49,  372,  372,  372,  135,
+      372,   49,   44,   44,   44,  372,  136,   46,   49,  372,
+       44,   44,   44,  372,   49,   46,   44,   44,   44,  372,
+       49,   46,   44,   44,   44,  372,  372,   46,  372,  137,
+      138,  372,  372,  372,   49,  372,  372,  372,  140,  372,
+      139,  372,   49,  372,   44,   44,   44,  372,   49,   46,
+      372,  141,  372,  372,   49,  372,   44,   44,   44,  372,
+      144,   46,  372,  142,   44,   44,   44,  372,  372,   46,
+
+      372,  143,   44,   44,   44,  372,   49,   46,   44,   44,
+       44,  372,  372,   46,  372,  372,  372,  372,   49,  372,
+      145,  372,   44,   44,   44,  372,   49,   46,  372,  372,
+       44,   44,   44,  372,   49,   46,  372,  372,  146,  372,
+       49,  372,  372,  372,  147,  150,  148,   44,   44,   44,
+      372,  372,   46,  372,   49,  372,  149,  372,  372,  372,
+      151,  372,   49,   44,   44,   44,  152,  372,   46,   44,
+       44,   44,  372,  372,   46,   44,   44,   44,  372,   49,
+       46,   44,   44,   44,  372,  372,   46,  372,  372,  372,
+      153,   44,   44,   44,  372,   49,   46,  372,  372,  372,
+
+      372,   49,  154,   44,   44,   44,  372,   49,   46,  372,
+      372,  372,  372,   49,  155,  372,  164,  372,  165,  166,
+      166,  166,  166,   49,  372,  372,  372,  166,  166,  166,
+      166,   44,   44,   44,  372,   49,   46,  168,  372,  372,
+      372,  166,  166,  166,  166,  166,  166,   44,   44,   44,
+      372,  372,   46,  372,  372,  167,   44,   44,   44,  372,
+      372,   46,  372,   49,   44,   44,   44,  372,  372,   46,
+       44,   44,   44,  372,  372,   46,   44,   44,   44,   49,
+      372,   46,  372,  169,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  372,  372,   46,   49,  372,  372,  372,
+
+      170,  372,   49,  372,  372,  171,  372,  372,   49,  372,
+      372,  372,  372,  372,  173,  172,   49,  372,   44,   44,
+       44,  372,   49,   46,  372,  174,  372,   44,   44,   44,
+      372,  176,   46,  372,  175,   44,   44,   44,  372,  372,
+       46,   44,   44,   44,  372,  372,   46,   44,   44,   44,
+       49,  372,   46,  177,  372,   44,   44,   44,  372,   49,
+       46,   44,   44,   44,  372,  372,   46,   49,  372,  372,
+       44,   44,   44,   49,  180,   46,  372,  372,  178,   49,
+      181,  179,  372,   44,   44,   44,  372,   49,   46,  372,
+      183,  372,  372,   49,  372,  372,  182,  372,   44,   44,
+
+       44,  372,   49,   46,  372,   44,   44,   44,  372,  185,
+       46,  372,  372,  184,  372,   49,   44,   44,   44,  372,
+      372,   46,  372,   44,   44,   44,  372,  186,   46,  372,
+       49,   44,   44,   44,  372,  372,   46,   49,   44,   44,
+       44,  372,  372,   46,  372,  372,  187,  372,   49,  372,
+      372,  372,   44,   44,   44,   49,  188,   46,  372,   44,
+       44,   44,  372,   49,   46,  372,  372,  372,  372,  199,
+       49,  189,  372,  190,  191,   44,   44,   44,  372,  372,
+       46,  196,  372,  372,   49,   44,   44,   44,  372,  372,
+       46,   49,  372,  372,  372,  372,  372,  372,  372,  372,
+
+      197,  198,  198,  198,  198,  372,  372,   49,  372,  198,
+      198,  198,  198,  372,  200,  372,  372,   49,  372,  372,
+      372,  372,  372,  198,  198,  198,  198,  198,  198,   44,
+       44,   44,  372,  372,   46,  201,   44,   44,   44,  372,
+      372,   46,   44,   44,   44,  372,  372,   46,   44,   44,
+       44,  203,  204,   46,   44,   44,   44,  372,  372,  207,
+      372,   49,   44,   44,   44,  372,  372,   46,   49,  372,
+      202,   44,   44,   44,   49,  372,   46,   44,   44,   44,
+       49,  372,   46,  372,  205,  372,   49,   44,   44,   44,
+      372,  372,   46,  372,   49,  372,  372,  208,  372,  206,
+
+       44,   44,   44,   49,  372,   46,   44,   44,   44,   49,
+      209,   46,   44,   44,   44,  372,  372,  214,  210,   49,
+       44,   44,   44,  372,  372,   46,   44,   44,   44,  372,
+      211,   46,   49,  372,  372,   44,   44,   44,   49,  212,
+       46,  372,  372,  372,   49,   44,   44,   44,  372,  372,
+       46,  213,   49,  372,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  372,  372,   46,  372,   49,  372,  372,
+      372,  372,  216,  215,  217,  372,  372,   49,   44,   44,
+       44,  372,  372,   46,  372,  372,   49,  372,  372,   44,
+       44,   44,   49,  219,  222,  218,   44,   44,   44,  372,
+
+      372,   46,   44,   44,   44,  372,  223,   46,  372,  372,
+       49,  372,  372,  220,  372,  221,  372,   44,   44,   44,
+      372,   49,   46,  372,   44,   44,   44,  372,   49,   46,
+      372,   44,   44,   44,   49,  372,   46,   44,   44,   44,
+      224,  372,   46,  372,  372,   44,   44,   44,  372,   49,
+       46,  372,  372,  372,  372,  372,   49,   44,   44,   44,
+      372,  372,   46,   49,  227,  372,  372,  372,  372,   49,
+      372,  228,   45,   45,   45,   45,  372,   49,  372,  372,
+       45,   45,   45,   45,  229,  231,   44,   44,   44,   49,
+      372,  233,  230,  372,   45,   45,   45,   45,   45,   45,
+
+      372,  372,  232,   44,   44,   44,  372,  372,  234,   44,
+       44,   44,  372,  372,  235,   44,   44,   44,   49,  372,
+       46,   44,   44,   44,  372,  236,   46,   44,   44,   44,
+      372,  372,   46,  372,  372,   49,  372,   44,   44,   44,
+      372,   49,   46,   44,   44,   44,  372,   49,   46,   44,
+       44,   44,  372,   49,   46,   44,   44,   44,  372,   49,
+      242,   44,   44,   44,  372,  372,   46,  372,  372,   49,
+      372,  237,  372,  372,  372,   49,  239,  238,   44,   44,
+       44,   49,  372,   46,   44,   44,   44,   49,  372,   46,
+       44,   44,   44,   49,  372,   46,   44,   44,   44,  241,
+
+      240,   46,  372,   44,   44,   44,  372,  372,   46,  372,
+       49,  372,  372,  243,  372,  372,   49,  244,   44,   44,
+       44,  372,   49,   46,   44,   44,   44,  372,   49,   46,
+      372,  372,  372,  246,  245,   49,  372,   44,   44,   44,
+      372,  372,   46,  372,   44,   44,   44,  372,  247,   46,
+       49,  372,   44,   44,   44,  248,   49,   46,   44,   44,
+       44,  250,  372,   46,  372,   44,   44,   44,  249,   49,
+       46,  372,  251,   44,   44,   44,   49,  372,   46,  372,
+      372,   44,   44,   44,   49,  253,   46,  372,  372,  372,
+       49,  372,  254,   44,   44,   44,  372,   49,   46,   44,
+
+       44,   44,  372,  372,   46,   49,  372,  255,  372,   44,
+       44,   44,  372,   49,   46,  372,  372,  256,  257,  372,
+      258,   44,   44,   44,  372,   49,   46,  372,  372,  372,
+      372,   49,   44,   44,   44,  372,  372,   46,  259,  372,
+      372,   49,   44,   44,   44,  372,  372,  264,  372,   44,
+       44,   44,  372,   49,  265,  260,   44,   44,   44,  262,
+      261,   46,  372,  372,   49,   44,   44,   44,  372,  372,
+       46,  263,  372,  372,   49,   44,   44,   44,  372,  372,
+       46,   49,  372,  266,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  372,  270,  271,  372,   49,   44,   44,
+
+       44,  372,  372,   46,   44,   44,   44,   49,  267,   46,
+      372,  372,  268,   44,   44,   44,   49,  372,   46,   44,
+       44,   44,   49,  372,  275,  372,  372,  269,  372,  372,
+       49,  372,   44,   44,   44,  372,   49,  276,   44,   44,
+       44,  272,  372,   46,  372,   49,  372,  372,   44,   44,
+       44,   49,  273,  278,  372,  372,   44,   44,   44,  372,
+      372,   46,  372,  372,   49,  274,  279,   44,   44,   44,
+       49,  372,   46,   44,   44,   44,  277,  372,   46,  372,
+       49,   44,   44,   44,  372,  372,  282,  372,   49,  372,
+       44,   44,   44,  372,  372,  283,   44,   44,   44,   49,
+
+      372,   46,   44,   44,   44,   49,  284,  285,  372,   44,
+       44,   44,  372,   49,   46,  372,  281,  372,   44,   44,
+       44,  280,   49,  288,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  372,   49,   46,  372,   44,   44,   44,
+      372,   49,   46,   44,   44,   44,  372,  372,   46,  372,
+       49,  372,  372,   44,   44,   44,   49,  286,   46,   44,
+       44,   44,   49,  287,   46,   44,   44,   44,  372,   49,
+       46,   44,   44,   44,  372,   49,   46,  372,  372,  293,
+      372,  372,  372,  372,  290,   49,  289,  372,  372,  291,
+      292,   49,  372,  372,   44,   44,   44,   49,  295,   46,
+
+      294,  372,  372,   49,  372,  372,  296,   44,   44,   44,
+      372,  372,   46,   44,   44,   44,  297,  372,   46,   44,
+       44,   44,  372,  372,   46,  372,   49,   44,   44,   44,
+      372,  372,   46,  298,  372,   44,   44,   44,  372,   49,
+      303,  372,  372,  299,  372,   49,  372,   44,   44,   44,
+      372,   49,   46,   44,   44,   44,  372,  372,   46,   49,
+       44,   44,   44,  372,  300,   46,  372,   49,  301,   44,
+       44,   44,  372,  372,   46,  372,  372,  302,  372,   49,
+      372,  372,  304,  372,  372,   49,   44,   44,   44,  372,
+      372,   46,   49,   44,   44,   44,  372,  372,   46,  372,
+
+      372,   49,  372,  309,  372,  372,  372,  372,  307,  305,
+      306,   44,   44,   44,  372,  372,   46,  372,   49,   44,
+       44,   44,  372,  372,   46,   49,   44,   44,   44,  372,
+      372,   46,   44,   44,   44,  372,  372,   46,  308,  372,
+       44,   44,   44,   49,  372,   46,  372,  372,   44,   44,
+       44,   49,  372,   46,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  310,   49,   46,  372,  311,  372,  372,
+      372,  312,   49,  372,  372,  372,   44,   44,   44,  314,
+       49,   46,  313,   44,   44,   44,   49,  372,   46,   44,
+       44,   44,   49,  372,   46,  372,  372,  372,  372,  320,
+
+      315,  372,   44,   44,   44,  316,  317,   46,   49,  372,
+      372,   44,   44,   44,  372,   49,   46,   44,   44,   44,
+      372,   49,   46,  372,  372,  318,  372,  372,  319,  372,
+       44,   44,   44,  372,   49,   46,  372,   44,   44,   44,
+      372,  321,  325,   49,  372,   44,   44,   44,  322,   49,
+       46,  372,   44,   44,   44,  372,  323,   46,   44,   44,
+       44,  372,   49,   46,  372,  372,  372,  324,  372,   49,
+      372,   44,   44,   44,  372,  372,  329,   49,  372,  372,
+      326,   44,   44,   44,   49,  372,   46,   44,   44,   44,
+       49,  372,   46,   44,   44,   44,  372,  372,  332,  372,
+
+      372,  328,  327,   49,   44,   44,   44,  372,  372,   46,
+       44,   44,   44,   49,  372,   46,   44,   44,   44,   49,
+      330,   46,   44,   44,   44,   49,  331,  336,   44,   44,
+       44,  372,  372,   46,  372,  372,   49,  372,   44,   44,
+       44,  333,   49,   46,   44,   44,   44,  372,   49,   46,
+      372,   44,   44,   44,   49,  372,   46,  372,  335,  372,
+       49,   44,   44,   44,  372,  334,  341,  372,  372,  372,
+       49,  372,  337,   44,   44,   44,   49,  372,  342,   44,
+       44,   44,  372,   49,   46,   44,   44,   44,  338,  372,
+       46,  372,  372,   49,  372,   44,   44,   44,  339,  340,
+
+       46,   44,   44,   44,  372,   49,   46,   44,   44,   44,
+      372,   49,   46,   44,   44,   44,  372,   49,   46,  372,
+      372,  343,  372,   44,   44,   44,  372,   49,   46,  372,
+      345,  372,  372,   49,  372,  372,  372,  344,  372,   49,
+      346,   44,   44,   44,  372,   49,   46,  372,  372,  372,
+      347,  372,  348,  372,  372,   49,   44,   44,   44,  372,
+      372,  351,   44,   44,   44,  372,  372,   46,  372,  372,
+      349,  372,  372,   49,  372,  372,  350,  372,   44,   44,
+       44,  372,  372,   46,   44,   44,   44,  372,   49,   46,
+       44,   44,   44,  372,   49,   46,   44,   44,   44,  372,
+
+      372,   46,   44,   44,   44,  372,  372,   46,  372,  352,
+       49,  372,   44,   44,   44,  372,   49,   46,  372,   44,
+       44,   44,   49,  354,  359,  372,  372,  372,   49,  372,
+      353,   44,   44,   44,   49,  372,   46,   44,   44,   44,
+      355,  372,   46,  372,   49,  372,  372,  356,  372,  357,
+      372,   49,  372,  358,   44,   44,   44,  372,  372,  362,
+       44,   44,   44,   49,  372,   46,   44,   44,   44,   49,
+      372,   46,   44,   44,   44,  372,  372,  365,   44,   44,
+       44,  372,  360,  366,  372,  372,   49,  372,  361,   44,
+       44,   44,   49,  372,   46,   44,   44,   44,   49,  372,
+
+       46,  363,  372,  372,   49,  364,   44,   44,   44,  372,
+       49,   46,   44,   44,   44,  372,  372,  370,   44,   44,
+       44,   49,  372,  371,  372,  372,  372,   49,  367,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,   49,  372,
+      372,  372,  372,  372,   49,  372,  368,  372,  372,  372,
+       49,  372,  372,  372,  372,  372,  372,  369,   36,   36,
+       36,   36,   36,   36,   36,   45,   45,   45,   45,   45,
+       45,   45,   63,  372,   63,   63,   63,   63,   63,   82,
+      372,   82,  372,   82,   82,   82,   84,   84,   84,   84,
+       84,   84,   84,   89,   89,   89,   89,   89,   89,   89,
+
+      115,  372,  115,  115,  115,  115,  115,   84,   84,  372,
+       84,  127,  127,  127,  127,  127,  163,  163,  195,  195,
+      226,  226,   84,   84,   11,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372
     } ;
 
-static const flex_int16_t yy_chk[2542] =
+static const flex_int16_t yy_chk[2586] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1173,12 +1180,12 @@ static const flex_int16_t yy_chk[2542] =
         5,    5,    5,    5,   10,   13,   26,   13,    5,    5,
         9,    5,   21,   37,    5,   37,    5,   21,    5,   27,
 
-       26,   31,   44,  222,    5,    5,    7,   10,    5,   28,
+       26,   31,   44,  225,    5,    5,    7,   10,    5,   28,
         8,   42,    5,   42,   32,   31,   17,    5,   17,   17,
        17,   17,   27,    5,    5,   15,   15,   15,   17,   44,
        15,   19,   28,   19,   19,   19,   19,   32,   20,   20,
-       20,   20,  192,   19,   17,   33,   74,   25,   20,   25,
-       15,   15,   25,   25,   25,   25,  161,   15,   76,   19,
+       20,   20,  194,   19,   17,   33,   74,   25,   20,   25,
+       15,   15,   25,   25,   25,   25,  162,   15,   76,   19,
       127,   15,   15,   15,   20,   15,   74,   15,   33,   75,
        15,   15,   15,   15,   15,  122,   15,   77,   15,   15,
        22,   76,   22,   22,   22,   22,   45,   45,   45,   75,
@@ -1188,9 +1195,9 @@ static const flex_int16_t yy_chk[2542] =
        50,   50,   50,   79,   89,   50,   78,  119,   45,   51,
        51,   51,   86,  118,   51,   47,  117,  121,  116,   49,
        84,   48,  120,   49,   52,   52,   52,   49,   48,   52,
-      119,   47,   50,  121,   49,  155,  158,   49,   52,   49,
+      119,   47,   50,  121,   49,  156,  159,   49,   52,   49,
        49,   51,  120,   82,   51,   53,   53,   53,   50,   81,
-       53,  155,  158,   54,   54,   54,   52,   51,   54,   55,
+       53,  156,  159,   54,   54,   54,   52,   51,   54,   55,
        55,   55,   43,   52,   55,   41,   52,   39,   56,   56,
        56,   38,   24,   56,   57,   57,   57,   53,   14,   57,
        11,   58,   58,   58,    0,   54,   58,   59,   59,   59,
@@ -1229,219 +1236,223 @@ static const flex_int16_t yy_chk[2542] =
       104,  106,    0,  103,  107,  107,  107,    0,    0,  107,
 
         0,  103,  108,  108,  108,    0,  105,  108,  109,  109,
-      109,    0,    0,  109,  110,  110,  110,    0,  106,  110,
-      105,    0,  111,  111,  111,    0,  107,  111,  112,  112,
-      112,    0,    0,  112,  108,    0,    0,    0,  106,    0,
-      109,    0,    0,    0,  107,  109,  110,    0,  113,  113,
-      113,    0,  110,  113,  111,    0,  108,    0,  111,    0,
-      112,  114,  114,  114,    0,    0,  114,  125,  125,  125,
-        0,  112,  125,  126,  126,  126,    0,    0,  126,    0,
-      113,    0,    0,  132,  132,  132,    0,  113,  132,    0,
-        0,    0,    0,  114,    0,  130,  130,  130,    0,  125,
-
-      130,    0,    0,    0,    0,  126,  114,    0,  125,    0,
-      126,  129,  129,  129,  129,  132,    0,    0,    0,  129,
-      129,  129,  129,  133,  133,  133,    0,  130,  133,  132,
-        0,    0,    0,  129,  129,  129,  129,  129,  129,  135,
-      135,  135,    0,    0,  135,    0,    0,  130,  136,  136,
-      136,    0,    0,  136,    0,  133,  137,  137,  137,    0,
-        0,  137,  138,  138,  138,    0,    0,  138,  139,  139,
-      139,  135,    0,  139,    0,  133,  140,  140,  140,    0,
-      136,  140,  141,  141,  141,    0,    0,  141,  137,    0,
-        0,    0,  135,    0,  138,    0,    0,  136,    0,    0,
-
-      139,    0,    0,    0,    0,    0,  138,  137,  140,    0,
-      142,  142,  142,    0,  141,  142,    0,  139,    0,  143,
-      143,  143,    0,  141,  143,    0,  140,  144,  144,  144,
-        0,    0,  144,  145,  145,  145,    0,    0,  145,  146,
-      146,  146,  142,    0,  146,  142,    0,  147,  147,  147,
-        0,  143,  147,  148,  148,  148,    0,    0,  148,  144,
-        0,    0,  149,  149,  149,  145,  144,  149,    0,    0,
-      143,  146,  145,  143,    0,  150,  150,  150,    0,  147,
-      150,    0,  147,    0,    0,  148,    0,    0,  146,    0,
-        0,    0,  148,    0,  149,  151,  151,  151,    0,    0,
-
-      151,    0,    0,  152,  152,  152,  149,  150,  152,  153,
-      153,  153,    0,    0,  153,    0,    0,  154,  154,  154,
-        0,    0,  154,  150,  163,  163,  163,  151,    0,  163,
-        0,  164,  164,  164,    0,  152,  164,  166,  166,  166,
-        0,  153,  166,  169,  169,  169,  151,  166,  169,  154,
-        0,    0,    0,    0,    0,    0,  163,    0,  152,  153,
-      154,    0,    0,  164,    0,    0,    0,  163,    0,  166,
-        0,    0,    0,    0,    0,  169,    0,    0,    0,  164,
-      165,  165,  165,  165,  169,    0,    0,    0,  165,  165,
-      165,  165,  167,  167,  167,    0,    0,  167,    0,    0,
-
-        0,    0,  165,  165,  165,  165,  165,  165,  168,  168,
-      168,    0,    0,  168,  170,  170,  170,    0,    0,  170,
-      171,  171,  171,    0,  167,  171,    0,    0,    0,  170,
-      170,  167,  172,  172,  172,    0,    0,  172,    0,    0,
-      168,    0,  173,  173,  173,    0,  170,  173,    0,  174,
-      174,  174,  171,    0,  174,  175,  175,  175,  168,    0,
-      175,    0,  171,    0,  172,  176,  176,  176,    0,    0,
-      176,  177,  177,  177,  173,    0,  177,  178,  178,  178,
-        0,  174,  178,  172,  174,    0,    0,  175,  179,  179,
-      179,    0,    0,  179,  175,    0,    0,  176,    0,  180,
-
-      180,  180,    0,  177,  180,    0,  176,    0,    0,  178,
-      181,  181,  181,    0,  177,  181,  178,    0,    0,    0,
-      179,  182,  182,  182,    0,    0,  182,  183,  183,  183,
-        0,  180,  183,  179,  184,  184,  184,    0,    0,  184,
-        0,    0,  181,  185,  185,  185,    0,    0,  185,  186,
-      186,  186,    0,  182,  186,  187,  187,  187,    0,  183,
-      187,    0,    0,  181,    0,    0,  184,  182,    0,  188,
-      188,  188,    0,  184,  188,  185,    0,  183,    0,  188,
-        0,  186,    0,  189,  189,  189,  186,  187,  189,    0,
-      194,  194,  194,    0,    0,  194,  185,  195,  195,  195,
-
-        0,  188,  195,    0,  197,  197,  197,    0,    0,  197,
-        0,  198,  198,  198,    0,  189,  198,    0,  199,  199,
-      199,  189,  194,  199,    0,    0,    0,    0,    0,  195,
-      200,  200,  200,    0,    0,  200,  197,  194,    0,    0,
-        0,    0,    0,  198,  195,  196,  196,  196,  196,    0,
-      199,    0,    0,  196,  196,  196,  196,  197,  198,  201,
-      201,  201,  200,    0,  201,    0,  199,  196,  196,  196,
-      196,  196,  196,    0,    0,  200,  202,  202,  202,    0,
-        0,  202,  203,  203,  203,    0,    0,  203,  204,  204,
-      204,  201,    0,  204,  206,  206,  206,    0,  204,  206,
-
-      207,  207,  207,    0,    0,  207,    0,    0,  202,    0,
-      208,  208,  208,    0,  203,  208,  209,  209,  209,    0,
-      204,  209,  210,  210,  210,    0,  206,  210,  211,  211,
-      211,    0,  207,  211,  213,  213,  213,    0,    0,  213,
-        0,    0,  208,    0,  206,    0,    0,    0,  209,  208,
-      207,  214,  214,  214,  210,    0,  214,  215,  215,  215,
-      211,    0,  215,  216,  216,  216,  213,    0,  216,  217,
-      217,  217,  210,  209,  217,  218,  218,  218,    0,    0,
-      218,    0,    0,  214,    0,    0,  213,    0,    0,  215,
-      214,  220,  220,  220,    0,  216,  220,  221,  221,  221,
-
-      215,  217,  221,  224,  224,  224,    0,  218,  224,  225,
-      225,  225,    0,    0,  225,  216,    0,    0,    0,    0,
-        0,  217,    0,  220,    0,  218,    0,    0,  220,  221,
-        0,    0,  221,    0,    0,  224,    0,  226,  226,  226,
-        0,  225,  226,    0,  224,  227,  227,  227,    0,  225,
-      227,  228,  228,  228,    0,    0,  228,    0,    0,  229,
-      229,  229,    0,    0,  229,    0,    0,    0,    0,  226,
-      233,  233,  233,    0,    0,  233,    0,  227,    0,  234,
-      234,  234,    0,  228,  234,    0,  226,  235,  235,  235,
-        0,  229,  235,    0,    0,    0,  228,  227,  229,  236,
-
-      236,  236,  233,    0,  236,    0,    0,  237,  237,  237,
-        0,  234,  237,    0,    0,  233,  238,  238,  238,  235,
-        0,  238,  240,  240,  240,    0,    0,  240,  241,  241,
-      241,  236,    0,  241,    0,  234,    0,  236,  235,  237,
-      242,  242,  242,    0,    0,  242,  237,    0,  238,    0,
-      244,  244,  244,    0,  240,  244,  240,  243,  243,  243,
-      241,    0,  243,  245,  245,  245,    0,  243,  245,  246,
-      246,  246,  242,    0,  246,    0,  247,  247,  247,    0,
-      241,  247,  244,  249,  249,  249,    0,    0,  249,  243,
-        0,    0,  242,    0,    0,  245,    0,  250,  250,  250,
-
-        0,  246,  250,    0,    0,    0,  245,    0,  247,  251,
-      251,  251,    0,    0,  251,  249,    0,  246,  252,  252,
-      252,    0,    0,  252,    0,  253,  253,  253,  247,  250,
-      253,  254,  254,  254,    0,  253,  254,  255,  255,  255,
-        0,  251,  255,  256,  256,  256,    0,  251,  256,    0,
-      252,  257,  257,  257,    0,    0,  257,  253,    0,    0,
-      258,  258,  258,  254,    0,  258,  259,  259,  259,  255,
-      258,  259,  262,  262,  262,  256,    0,  262,    0,    0,
-      255,    0,    0,  257,    0,  254,  263,  263,  263,    0,
-        0,  263,  258,    0,  264,  264,  264,    0,  259,  264,
-
-      265,  265,  265,    0,  262,  265,  267,  267,  267,    0,
-        0,  267,  268,  268,  268,    0,    0,  268,  263,    0,
-      262,    0,  269,  269,  269,  263,  264,  269,  272,  272,
-      272,    0,  265,  272,  274,  274,  274,    0,  267,  274,
-        0,    0,  267,    0,  268,    0,    0,  265,    0,    0,
-      264,    0,  265,  265,  269,    0,    0,    0,    0,  268,
-      272,  269,    0,  272,    0,    0,  274,  275,  275,  275,
-        0,    0,  275,  276,  276,  276,    0,    0,  276,  279,
-      279,  279,    0,    0,  279,  274,  281,  281,  281,    0,
-        0,  281,  282,  282,  282,    0,    0,  282,    0,  275,
-
-        0,    0,  283,  283,  283,  276,  275,  283,    0,  276,
-        0,  279,  284,  284,  284,    0,    0,  284,  281,    0,
-      285,  285,  285,    0,  282,  285,    0,  286,  286,  286,
-      279,    0,  286,    0,  283,  281,  287,  287,  287,    0,
-        0,  287,  282,    0,  284,    0,    0,  284,  288,  288,
-      288,    0,  285,  288,    0,  289,  289,  289,    0,  286,
-      289,  290,  290,  290,    0,  289,  290,    0,  287,  291,
-      291,  291,    0,    0,  291,  287,  285,  286,    0,    0,
-      288,    0,    0,  292,  292,  292,    0,  289,  292,  293,
-      293,  293,    0,  290,  293,    0,    0,  294,  294,  294,
-
-      288,  291,  294,  295,  295,  295,    0,    0,  295,  296,
-      296,  296,    0,  290,  296,  292,    0,  291,  298,  298,
-      298,  293,    0,  298,    0,  299,  299,  299,  292,  294,
-      299,    0,    0,    0,    0,  295,  294,    0,    0,  293,
-        0,  296,    0,  300,  300,  300,    0,    0,  300,    0,
-      298,  301,  301,  301,    0,  295,  301,  299,    0,    0,
-      296,  301,    0,    0,  298,  302,  302,  302,    0,    0,
-      302,  303,  303,  303,  299,  300,  303,  304,  304,  304,
-        0,    0,  304,  301,    0,  305,  305,  305,  300,    0,
-      305,  306,  306,  306,    0,    0,  306,  302,    0,    0,
-
-      307,  307,  307,  303,  302,  307,    0,    0,  303,  304,
-      308,  308,  308,    0,    0,  308,  304,  305,    0,  309,
-      309,  309,  305,  306,  309,  310,  310,  310,    0,    0,
-      310,    0,  307,    0,    0,  307,  311,  311,  311,    0,
-        0,  311,  308,    0,  312,  312,  312,    0,    0,  312,
-        0,  309,    0,  313,  313,  313,    0,  310,  313,    0,
-      308,    0,  309,    0,  314,  314,  314,    0,  311,  314,
-        0,    0,  315,  315,  315,  311,  312,  315,    0,  316,
-      316,  316,    0,  312,  316,  313,  317,  317,  317,    0,
-        0,  317,  318,  318,  318,    0,  314,  318,  320,  320,
-
-      320,  314,    0,  320,  315,  321,  321,  321,    0,    0,
-      321,  316,  322,  322,  322,    0,    0,  322,  317,    0,
-        0,  316,    0,    0,  318,    0,    0,  315,    0,    0,
-      320,    0,    0,  324,  324,  324,  318,  321,  324,    0,
-      325,  325,  325,    0,  322,  325,    0,    0,  320,  327,
-      327,  327,    0,    0,  327,    0,  328,  328,  328,  321,
-      322,  328,  329,  329,  329,  324,    0,  329,  331,  331,
-      331,    0,  325,  331,  332,  332,  332,    0,    0,  332,
-        0,  327,  333,  333,  333,    0,    0,  333,  328,    0,
-        0,  327,    0,    0,  329,    0,    0,  329,    0,    0,
-
-      331,    0,    0,    0,    0,    0,  332,  331,  328,    0,
-      334,  334,  334,    0,  333,  334,    0,  332,  337,  337,
-      337,  333,    0,  337,  338,  338,  338,    0,    0,  338,
-      339,  339,  339,    0,    0,  339,  340,  340,  340,    0,
-        0,  340,  334,  341,  341,  341,    0,    0,  341,    0,
-      337,    0,    0,  337,    0,    0,  338,  334,  342,  342,
-      342,    0,  339,  342,  343,  343,  343,    0,  340,  343,
-        0,  344,  344,  344,    0,  341,  344,  339,  346,  346,
-      346,    0,  341,  346,  347,  347,  347,    0,  340,  347,
-      342,    0,  348,  348,  348,    0,  343,  348,    0,  349,
-
-      349,  349,    0,  344,  349,    0,    0,    0,  342,    0,
-      346,    0,  350,  350,  350,  343,  347,  350,  344,  346,
-      351,  351,  351,    0,  348,  351,    0,  352,  352,  352,
-        0,  349,  352,  354,  354,  354,    0,    0,  354,    0,
-      355,  355,  355,  348,  350,  355,  357,  357,  357,    0,
-      349,  357,  351,    0,    0,  358,  358,  358,    0,  352,
-      358,  351,  361,  361,  361,  354,  352,  361,  362,  362,
-      362,    0,  355,  362,    0,  363,  363,  363,  357,    0,
-      363,    0,    0,    0,    0,  357,    0,  358,    0,    0,
-        0,    0,    0,    0,  361,    0,    0,    0,    0,    0,
-
-      362,    0,    0,    0,    0,    0,  358,  363,    0,    0,
-        0,    0,    0,  361,  367,  367,  367,  367,  367,  367,
-      367,  368,  368,  368,  368,  368,  368,  368,  369,    0,
-      369,  369,  369,  369,  369,  370,    0,  370,    0,  370,
-      370,  370,  371,  371,  371,  371,  371,  371,  371,  372,
-      372,  372,  372,  372,  372,  372,  373,    0,  373,  373,
-      373,  373,  373,  374,  374,    0,  374,  375,  375,  375,
-      375,  375,  376,  376,  377,  377,  378,  378,  379,  379,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
-      366
+      109,    0,    0,  109,    0,    0,    0,    0,  106,    0,
+      105,    0,  110,  110,  110,    0,  107,  110,    0,    0,
+      111,  111,  111,    0,  108,  111,    0,    0,  106,    0,
+      109,    0,    0,    0,  107,  109,  107,  112,  112,  112,
+        0,    0,  112,    0,  110,    0,  108,    0,    0,    0,
+      110,    0,  111,  113,  113,  113,  111,    0,  113,  114,
+      114,  114,    0,    0,  114,  125,  125,  125,    0,  112,
+      125,  126,  126,  126,    0,    0,  126,    0,    0,    0,
+      112,  132,  132,  132,    0,  113,  132,    0,    0,    0,
+
+        0,  114,  113,  130,  130,  130,    0,  125,  130,    0,
+        0,    0,    0,  126,  114,    0,  125,    0,  126,  129,
+      129,  129,  129,  132,    0,    0,    0,  129,  129,  129,
+      129,  133,  133,  133,    0,  130,  133,  132,    0,    0,
+        0,  129,  129,  129,  129,  129,  129,  135,  135,  135,
+        0,    0,  135,    0,    0,  130,  136,  136,  136,    0,
+        0,  136,    0,  133,  137,  137,  137,    0,    0,  137,
+      138,  138,  138,    0,    0,  138,  139,  139,  139,  135,
+        0,  139,    0,  133,  140,  140,  140,    0,  136,  140,
+      141,  141,  141,    0,    0,  141,  137,    0,    0,    0,
+
+      135,    0,  138,    0,    0,  136,    0,    0,  139,    0,
+        0,    0,    0,    0,  138,  137,  140,    0,  142,  142,
+      142,    0,  141,  142,    0,  139,    0,  143,  143,  143,
+        0,  141,  143,    0,  140,  144,  144,  144,    0,    0,
+      144,  145,  145,  145,    0,    0,  145,  146,  146,  146,
+      142,    0,  146,  142,    0,  147,  147,  147,    0,  143,
+      147,  148,  148,  148,    0,    0,  148,  144,    0,    0,
+      149,  149,  149,  145,  144,  149,    0,    0,  143,  146,
+      145,  143,    0,  150,  150,  150,    0,  147,  150,    0,
+      147,    0,    0,  148,    0,    0,  146,    0,  151,  151,
+
+      151,    0,  149,  151,    0,  152,  152,  152,    0,  149,
+      152,    0,    0,  148,    0,  150,  153,  153,  153,    0,
+        0,  153,    0,  154,  154,  154,    0,  150,  154,    0,
+      151,  155,  155,  155,    0,    0,  155,  152,  164,  164,
+      164,    0,    0,  164,    0,    0,  151,    0,  153,    0,
+        0,    0,  165,  165,  165,  154,  152,  165,    0,  167,
+      167,  167,    0,  155,  167,    0,    0,    0,    0,  167,
+      164,  153,    0,  154,  155,  168,  168,  168,    0,    0,
+      168,  164,    0,    0,  165,  169,  169,  169,    0,    0,
+      169,  167,    0,    0,    0,    0,    0,    0,    0,    0,
+
+      165,  166,  166,  166,  166,    0,    0,  168,    0,  166,
+      166,  166,  166,    0,  168,    0,    0,  169,    0,    0,
+        0,    0,    0,  166,  166,  166,  166,  166,  166,  170,
+      170,  170,    0,    0,  170,  169,  171,  171,  171,    0,
+        0,  171,  172,  172,  172,    0,    0,  172,  173,  173,
+      173,  171,  171,  173,  174,  174,  174,    0,    0,  174,
+        0,  170,  175,  175,  175,    0,    0,  175,  171,    0,
+      170,  176,  176,  176,  172,    0,  176,  177,  177,  177,
+      173,    0,  177,    0,  172,    0,  174,  178,  178,  178,
+        0,    0,  178,    0,  175,    0,    0,  175,    0,  173,
+
+      179,  179,  179,  176,    0,  179,  180,  180,  180,  177,
+      176,  180,  181,  181,  181,    0,    0,  181,  177,  178,
+      182,  182,  182,    0,    0,  182,  183,  183,  183,    0,
+      178,  183,  179,    0,    0,  184,  184,  184,  180,  179,
+      184,    0,    0,    0,  181,  185,  185,  185,    0,    0,
+      185,  180,  182,    0,  186,  186,  186,    0,  183,  186,
+      187,  187,  187,    0,    0,  187,    0,  184,    0,    0,
+        0,    0,  183,  182,  184,    0,    0,  185,  188,  188,
+      188,    0,    0,  188,    0,    0,  186,    0,    0,  189,
+      189,  189,  187,  186,  189,  185,  190,  190,  190,    0,
+
+        0,  190,  191,  191,  191,    0,  190,  191,    0,    0,
+      188,    0,    0,  187,    0,  188,    0,  196,  196,  196,
+        0,  189,  196,    0,  197,  197,  197,    0,  190,  197,
+        0,  199,  199,  199,  191,    0,  199,  201,  201,  201,
+      191,    0,  201,    0,    0,  200,  200,  200,    0,  196,
+      200,    0,    0,    0,    0,    0,  197,  202,  202,  202,
+        0,    0,  202,  199,  196,    0,    0,    0,    0,  201,
+        0,  197,  198,  198,  198,  198,    0,  200,    0,    0,
+      198,  198,  198,  198,  199,  201,  203,  203,  203,  202,
+        0,  203,  200,    0,  198,  198,  198,  198,  198,  198,
+
+        0,    0,  202,  204,  204,  204,    0,    0,  204,  205,
+      205,  205,    0,    0,  205,  206,  206,  206,  203,    0,
+      206,  208,  208,  208,    0,  206,  208,  209,  209,  209,
+        0,    0,  209,    0,    0,  204,    0,  210,  210,  210,
+        0,  205,  210,  211,  211,  211,    0,  206,  211,  212,
+      212,  212,    0,  208,  212,  213,  213,  213,    0,  209,
+      213,  215,  215,  215,    0,    0,  215,    0,    0,  210,
+        0,  208,    0,    0,    0,  211,  210,  209,  216,  216,
+      216,  212,    0,  216,  217,  217,  217,  213,    0,  217,
+      218,  218,  218,  215,    0,  218,  219,  219,  219,  212,
+
+      211,  219,    0,  220,  220,  220,    0,    0,  220,    0,
+      216,    0,    0,  215,    0,    0,  217,  216,  221,  221,
+      221,    0,  218,  221,  223,  223,  223,    0,  219,  223,
+        0,    0,    0,  218,  217,  220,    0,  224,  224,  224,
+        0,    0,  224,    0,  227,  227,  227,    0,  219,  227,
+      221,    0,  228,  228,  228,  220,  223,  228,  229,  229,
+      229,  223,    0,  229,    0,  230,  230,  230,  221,  224,
+      230,    0,  224,  231,  231,  231,  227,    0,  231,    0,
+        0,  232,  232,  232,  228,  227,  232,    0,    0,    0,
+      229,    0,  228,  236,  236,  236,    0,  230,  236,  237,
+
+      237,  237,    0,    0,  237,  231,    0,  229,    0,  238,
+      238,  238,    0,  232,  238,    0,    0,  230,  231,    0,
+      232,  239,  239,  239,    0,  236,  239,    0,    0,    0,
+        0,  237,  240,  240,  240,    0,    0,  240,  236,    0,
+        0,  238,  241,  241,  241,    0,    0,  241,    0,  243,
+      243,  243,    0,  239,  243,  237,  244,  244,  244,  239,
+      238,  244,    0,    0,  240,  245,  245,  245,    0,    0,
+      245,  240,    0,    0,  241,  246,  246,  246,    0,    0,
+      246,  243,    0,  243,  247,  247,  247,    0,  244,  247,
+      248,  248,  248,    0,  247,  248,    0,  245,  249,  249,
+
+      249,    0,    0,  249,  250,  250,  250,  246,  244,  250,
+        0,    0,  245,  251,  251,  251,  247,    0,  251,  253,
+      253,  253,  248,    0,  253,    0,    0,  246,    0,    0,
+      249,    0,  254,  254,  254,    0,  250,  254,  255,  255,
+      255,  249,    0,  255,    0,  251,    0,    0,  256,  256,
+      256,  253,  250,  256,    0,    0,  257,  257,  257,    0,
+        0,  257,    0,    0,  254,  251,  257,  258,  258,  258,
+      255,    0,  258,  259,  259,  259,  255,    0,  259,    0,
+      256,  260,  260,  260,    0,    0,  260,    0,  257,    0,
+      261,  261,  261,    0,    0,  261,  262,  262,  262,  258,
+
+        0,  262,  263,  263,  263,  259,  262,  263,    0,  266,
+      266,  266,    0,  260,  266,    0,  259,    0,  268,  268,
+      268,  258,  261,  268,  267,  267,  267,    0,  262,  267,
+      269,  269,  269,    0,  263,  269,    0,  270,  270,  270,
+        0,  266,  270,  272,  272,  272,    0,    0,  272,    0,
+      268,    0,    0,  273,  273,  273,  267,  266,  273,  274,
+      274,  274,  269,  267,  274,  279,  279,  279,    0,  270,
+      279,  277,  277,  277,    0,  272,  277,    0,    0,  272,
+        0,    0,    0,    0,  270,  273,  269,    0,    0,  270,
+      270,  274,    0,    0,  280,  280,  280,  279,  274,  280,
+
+      273,    0,    0,  277,    0,    0,  277,  281,  281,  281,
+        0,    0,  281,  284,  284,  284,  279,    0,  284,  286,
+      286,  286,    0,    0,  286,    0,  280,  287,  287,  287,
+        0,    0,  287,  280,    0,  289,  289,  289,    0,  281,
+      289,    0,    0,  281,    0,  284,    0,  290,  290,  290,
+        0,  286,  290,  291,  291,  291,    0,    0,  291,  287,
+      292,  292,  292,    0,  284,  292,    0,  289,  286,  293,
+      293,  293,    0,    0,  293,    0,    0,  287,    0,  290,
+        0,    0,  290,    0,    0,  291,  294,  294,  294,    0,
+        0,  294,  292,  295,  295,  295,    0,    0,  295,    0,
+
+        0,  293,    0,  295,    0,    0,    0,    0,  293,  291,
+      292,  296,  296,  296,    0,    0,  296,    0,  294,  297,
+      297,  297,    0,    0,  297,  295,  298,  298,  298,    0,
+        0,  298,  299,  299,  299,    0,    0,  299,  294,    0,
+      300,  300,  300,  296,    0,  300,    0,    0,  301,  301,
+      301,  297,    0,  301,  302,  302,  302,    0,  298,  302,
+      304,  304,  304,  296,  299,  304,    0,  297,    0,    0,
+        0,  298,  300,    0,    0,    0,  305,  305,  305,  300,
+      301,  305,  299,  306,  306,  306,  302,    0,  306,  307,
+      307,  307,  304,    0,  307,    0,    0,    0,    0,  307,
+
+      301,    0,  308,  308,  308,  302,  304,  308,  305,    0,
+        0,  309,  309,  309,    0,  306,  309,  310,  310,  310,
+        0,  307,  310,    0,    0,  305,    0,    0,  306,    0,
+      311,  311,  311,    0,  308,  311,    0,  312,  312,  312,
+        0,  308,  312,  309,    0,  313,  313,  313,  309,  310,
+      313,    0,  314,  314,  314,    0,  310,  314,  315,  315,
+      315,    0,  311,  315,    0,    0,    0,  311,    0,  312,
+        0,  316,  316,  316,    0,    0,  316,  313,    0,    0,
+      313,  317,  317,  317,  314,    0,  317,  318,  318,  318,
+      315,    0,  318,  319,  319,  319,    0,    0,  319,    0,
+
+        0,  315,  314,  316,  320,  320,  320,    0,    0,  320,
+      321,  321,  321,  317,    0,  321,  322,  322,  322,  318,
+      317,  322,  323,  323,  323,  319,  318,  323,  324,  324,
+      324,    0,    0,  324,    0,    0,  320,    0,  326,  326,
+      326,  320,  321,  326,  327,  327,  327,    0,  322,  327,
+        0,  328,  328,  328,  323,    0,  328,    0,  322,    0,
+      324,  330,  330,  330,    0,  321,  330,    0,    0,    0,
+      326,    0,  324,  331,  331,  331,  327,    0,  331,  333,
+      333,  333,    0,  328,  333,  334,  334,  334,  326,    0,
+      334,    0,    0,  330,    0,  335,  335,  335,  327,  328,
+
+      335,  337,  337,  337,    0,  331,  337,  338,  338,  338,
+        0,  333,  338,  339,  339,  339,    0,  334,  339,    0,
+        0,  333,    0,  340,  340,  340,    0,  335,  340,    0,
+      335,    0,    0,  337,    0,    0,    0,  334,    0,  338,
+      337,  343,  343,  343,    0,  339,  343,    0,    0,    0,
+      338,    0,  339,    0,    0,  340,  344,  344,  344,    0,
+        0,  344,  345,  345,  345,    0,    0,  345,    0,    0,
+      340,    0,    0,  343,    0,    0,  343,    0,  346,  346,
+      346,    0,    0,  346,  347,  347,  347,    0,  344,  347,
+      348,  348,  348,    0,  345,  348,  349,  349,  349,    0,
+
+        0,  349,  350,  350,  350,    0,    0,  350,    0,  345,
+      346,    0,  352,  352,  352,    0,  347,  352,    0,  353,
+      353,  353,  348,  347,  353,    0,    0,    0,  349,    0,
+      346,  354,  354,  354,  350,    0,  354,  355,  355,  355,
+      348,    0,  355,    0,  352,    0,    0,  349,    0,  350,
+        0,  353,    0,  352,  356,  356,  356,    0,    0,  356,
+      357,  357,  357,  354,    0,  357,  358,  358,  358,  355,
+        0,  358,  360,  360,  360,    0,    0,  360,  361,  361,
+      361,    0,  354,  361,    0,    0,  356,    0,  355,  363,
+      363,  363,  357,    0,  363,  364,  364,  364,  358,    0,
+
+      364,  357,    0,    0,  360,  358,  367,  367,  367,    0,
+      361,  367,  368,  368,  368,    0,    0,  368,  369,  369,
+      369,  363,    0,  369,    0,    0,    0,  364,  363,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  367,    0,
+        0,    0,    0,    0,  368,    0,  364,    0,    0,    0,
+      369,    0,    0,    0,    0,    0,    0,  367,  373,  373,
+      373,  373,  373,  373,  373,  374,  374,  374,  374,  374,
+      374,  374,  375,    0,  375,  375,  375,  375,  375,  376,
+        0,  376,    0,  376,  376,  376,  377,  377,  377,  377,
+      377,  377,  377,  378,  378,  378,  378,  378,  378,  378,
+
+      379,    0,  379,  379,  379,  379,  379,  380,  380,    0,
+      380,  381,  381,  381,  381,  381,  382,  382,  383,  383,
+      384,  384,  385,  385,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1450,15 +1461,15 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[62] =
+static const flex_int16_t yy_rule_linenum[63] =
     {   0,
       133,  135,  137,  142,  143,  148,  149,  150,  162,  165,
       170,  177,  186,  198,  210,  220,  230,  240,  249,  258,
       267,  276,  285,  294,  303,  312,  321,  330,  339,  348,
       357,  366,  375,  384,  393,  403,  412,  421,  430,  439,
-      448,  457,  466,  475,  574,  579,  584,  589,  590,  591,
-      592,  593,  594,  596,  614,  627,  632,  636,  638,  640,
-      642
+      448,  457,  466,  475,  484,  583,  588,  593,  598,  599,
+      600,  601,  602,  603,  605,  623,  636,  641,  645,  647,
+      649,  651
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1513,7 +1524,7 @@ using isc::netconf::NetconfParser;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::netconf::ParserContext::fatal(msg)
-#line 1516 "netconf_lexer.cc"
+#line 1528 "netconf_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
@@ -1539,8 +1550,8 @@ using isc::netconf::NetconfParser;
    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 1542 "netconf_lexer.cc"
-#line 1543 "netconf_lexer.cc"
+#line 1554 "netconf_lexer.cc"
+#line 1555 "netconf_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1854,7 +1865,7 @@ YY_DECL
     }
 
 
-#line 1857 "netconf_lexer.cc"
+#line 1869 "netconf_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1883,13 +1894,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 >= 367 )
+                               if ( yy_current_state >= 373 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 366 );
+               while ( yy_current_state != 372 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1908,13 +1919,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 62 )
+                       else if ( yy_act < 63 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 62 )
+                       else if ( yy_act == 63 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 63 )
+                       else if ( yy_act == 64 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2391,6 +2402,18 @@ YY_RULE_SETUP
 case 42:
 YY_RULE_SETUP
 #line 457 "netconf_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case ParserContext::OUTPUT_OPTIONS:
+        return NetconfParser::make_PATTERN(driver.loc_);
+    default:
+        return NetconfParser::make_STRING("pattern", driver.loc_);
+    }
+}
+       YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 466 "netconf_lexer.ll"
 {
     switch(driver.ctx_) {
     case ParserContext::LOGGERS:
@@ -2400,9 +2423,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 44:
 YY_RULE_SETUP
-#line 466 "netconf_lexer.ll"
+#line 475 "netconf_lexer.ll"
 {
     switch(driver.ctx_) {
     case ParserContext::LOGGERS:
@@ -2412,9 +2435,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 45:
 YY_RULE_SETUP
-#line 475 "netconf_lexer.ll"
+#line 484 "netconf_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -2514,65 +2537,65 @@ YY_RULE_SETUP
     return NetconfParser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 45:
-/* rule 45 can match eol */
+case 46:
+/* rule 46 can match eol */
 YY_RULE_SETUP
-#line 574 "netconf_lexer.ll"
+#line 583 "netconf_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
 }
        YY_BREAK
-case 46:
-/* rule 46 can match eol */
+case 47:
+/* rule 47 can match eol */
 YY_RULE_SETUP
-#line 579 "netconf_lexer.ll"
+#line 588 "netconf_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
 }
        YY_BREAK
-case 47:
+case 48:
 YY_RULE_SETUP
-#line 584 "netconf_lexer.ll"
+#line 593 "netconf_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
 }
        YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 589 "netconf_lexer.ll"
+#line 598 "netconf_lexer.ll"
 { return NetconfParser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 590 "netconf_lexer.ll"
+#line 599 "netconf_lexer.ll"
 { return NetconfParser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 591 "netconf_lexer.ll"
+#line 600 "netconf_lexer.ll"
 { return NetconfParser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 592 "netconf_lexer.ll"
+#line 601 "netconf_lexer.ll"
 { return NetconfParser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 593 "netconf_lexer.ll"
+#line 602 "netconf_lexer.ll"
 { return NetconfParser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 53:
+case 54:
 YY_RULE_SETUP
-#line 594 "netconf_lexer.ll"
+#line 603 "netconf_lexer.ll"
 { return NetconfParser::make_COLON(driver.loc_); }
        YY_BREAK
-case 54:
+case 55:
 YY_RULE_SETUP
-#line 596 "netconf_lexer.ll"
+#line 605 "netconf_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -2591,9 +2614,9 @@ YY_RULE_SETUP
     return NetconfParser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 55:
+case 56:
 YY_RULE_SETUP
-#line 614 "netconf_lexer.ll"
+#line 623 "netconf_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -2607,43 +2630,43 @@ YY_RULE_SETUP
     return NetconfParser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 56:
+case 57:
 YY_RULE_SETUP
-#line 627 "netconf_lexer.ll"
+#line 636 "netconf_lexer.ll"
 {
     string tmp(yytext);
     return NetconfParser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 57:
+case 58:
 YY_RULE_SETUP
-#line 632 "netconf_lexer.ll"
+#line 641 "netconf_lexer.ll"
 {
    return NetconfParser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 58:
+case 59:
 YY_RULE_SETUP
-#line 636 "netconf_lexer.ll"
+#line 645 "netconf_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 59:
+case 60:
 YY_RULE_SETUP
-#line 638 "netconf_lexer.ll"
+#line 647 "netconf_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 60:
+case 61:
 YY_RULE_SETUP
-#line 640 "netconf_lexer.ll"
+#line 649 "netconf_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 642 "netconf_lexer.ll"
+#line 651 "netconf_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 644 "netconf_lexer.ll"
+#line 653 "netconf_lexer.ll"
 {
     if (driver.states_.empty()) {
         return NetconfParser::make_END(driver.loc_);
@@ -2667,12 +2690,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 62:
+case 63:
 YY_RULE_SETUP
-#line 667 "netconf_lexer.ll"
+#line 676 "netconf_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2675 "netconf_lexer.cc"
+#line 2699 "netconf_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -2991,7 +3014,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 >= 367 )
+                       if ( yy_current_state >= 373 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -3024,11 +3047,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 >= 367 )
+               if ( yy_current_state >= 373 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 366);
+       yy_is_jam = (yy_current_state == 372);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3777,7 +3800,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 667 "netconf_lexer.ll"
+#line 676 "netconf_lexer.ll"
 
 
 using namespace isc::dhcp;
index 26b3e5117b2414d6e82834f6d41626841f433e26..c0227c9b8fca60f6001754b5c0c06b89c990d5a0 100644 (file)
@@ -453,6 +453,15 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"pattern\" {
+    switch(driver.ctx_) {
+    case ParserContext::OUTPUT_OPTIONS:
+        return NetconfParser::make_PATTERN(driver.loc_);
+    default:
+        return NetconfParser::make_STRING("pattern", driver.loc_);
+    }
+}
+
 \"debuglevel\" {
     switch(driver.ctx_) {
     case ParserContext::LOGGERS:
index b8f8bcb93478e84c46928fedb9db4f7b055b1916..792d1e917f376614e7536f0e32fdcb2591903f89 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
 
 
 // Unqualified %code blocks.
-#line 33 "netconf_parser.yy"
+#line 33 "netconf_parser.yy" // lalr1.cc:438
 
 #include <netconf/parser_context.h>
 
-#line 51 "netconf_parser.cc"
+#line 51 "netconf_parser.cc" // lalr1.cc:438
 
 
 #ifndef YY_
@@ -88,7 +88,7 @@
         {                                                               \
           (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
         }                                                               \
-    while (false)
+    while (/*CONSTCOND*/ false)
 # endif
 
 
 #define YYERROR         goto yyerrorlab
 #define YYRECOVERING()  (!!yyerrstatus_)
 
-#line 14 "netconf_parser.yy"
+#line 14 "netconf_parser.yy" // lalr1.cc:513
 namespace isc { namespace netconf {
-#line 146 "netconf_parser.cc"
-
+#line 146 "netconf_parser.cc" // lalr1.cc:513
 
   /* Return YYSTR after stripping away unnecessary quotes and
      backslashes, so that it's suitable for yyerror.  The heuristic is
@@ -155,7 +154,7 @@ namespace isc { namespace netconf {
   {
     if (*yystr == '"')
       {
-        std::string yyr;
+        std::string yyr = "";
         char const *yyp = yystr;
 
         for (;;)
@@ -168,10 +167,7 @@ namespace isc { namespace netconf {
             case '\\':
               if (*++yyp != '\\')
                 goto do_not_strip_quotes;
-              else
-                goto append;
-
-            append:
+              // Fall through.
             default:
               yyr += *yyp;
               break;
@@ -199,8 +195,6 @@ namespace isc { namespace netconf {
   NetconfParser::~NetconfParser ()
   {}
 
-  NetconfParser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
-  {}
 
   /*---------------.
   | Symbol types.  |
@@ -209,16 +203,16 @@ namespace isc { namespace netconf {
 
 
   // by_state.
-  NetconfParser::by_state::by_state () YY_NOEXCEPT
+  NetconfParser::by_state::by_state ()
     : state (empty_state)
   {}
 
-  NetconfParser::by_state::by_state (const by_state& that) YY_NOEXCEPT
-    : state (that.state)
+  NetconfParser::by_state::by_state (const by_state& other)
+    : state (other.state)
   {}
 
   void
-  NetconfParser::by_state::clear () YY_NOEXCEPT
+  NetconfParser::by_state::clear ()
   {
     state = empty_state;
   }
@@ -230,12 +224,12 @@ namespace isc { namespace netconf {
     that.clear ();
   }
 
-  NetconfParser::by_state::by_state (state_type s) YY_NOEXCEPT
+  NetconfParser::by_state::by_state (state_type s)
     : state (s)
   {}
 
   NetconfParser::symbol_number_type
-  NetconfParser::by_state::type_get () const YY_NOEXCEPT
+  NetconfParser::by_state::type_get () const
   {
     if (state == empty_state)
       return empty_symbol;
@@ -251,25 +245,25 @@ namespace isc { namespace netconf {
   {
     switch (that.type_get ())
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
         value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 48: // "boolean"
+      case 49: // "boolean"
         value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
         break;
 
-      case 47: // "floating point"
+      case 48: // "floating point"
         value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
         break;
 
-      case 46: // "integer"
+      case 47: // "integer"
         value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 45: // "constant string"
+      case 46: // "constant string"
         value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
         break;
 
@@ -277,7 +271,7 @@ namespace isc { namespace netconf {
         break;
     }
 
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     // that is emptied.
     that.state = empty_state;
 #endif
@@ -288,25 +282,25 @@ namespace isc { namespace netconf {
   {
     switch (that.type_get ())
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
         value.move< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 48: // "boolean"
+      case 49: // "boolean"
         value.move< bool > (YY_MOVE (that.value));
         break;
 
-      case 47: // "floating point"
+      case 48: // "floating point"
         value.move< double > (YY_MOVE (that.value));
         break;
 
-      case 46: // "integer"
+      case 47: // "integer"
         value.move< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 45: // "constant string"
+      case 46: // "constant string"
         value.move< std::string > (YY_MOVE (that.value));
         break;
 
@@ -318,32 +312,32 @@ namespace isc { namespace netconf {
     that.type = empty_symbol;
   }
 
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
   NetconfParser::stack_symbol_type&
   NetconfParser::stack_symbol_type::operator= (stack_symbol_type& that)
   {
     state = that.state;
     switch (that.type_get ())
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 48: // "boolean"
+      case 49: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 47: // "floating point"
+      case 48: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 46: // "integer"
+      case 47: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 45: // "constant string"
+      case 46: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -375,59 +369,65 @@ namespace isc { namespace netconf {
     std::ostream& yyoutput = yyo;
     YYUSE (yyoutput);
     symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
     // Avoid a (spurious) G++ 4.8 warning about "array subscript is
     // below array bounds".
     if (yysym.empty ())
       std::abort ();
-#endif
     yyo << (yytype < yyntokens_ ? "token" : "nterm")
         << ' ' << yytname_[yytype] << " ("
         << yysym.location << ": ";
     switch (yytype)
     {
-      case 45: // "constant string"
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < std::string > (); }
-#line 393 "netconf_parser.cc"
+            case 46: // "constant string"
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< std::string > (); }
+#line 386 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 46: // "integer"
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < int64_t > (); }
-#line 399 "netconf_parser.cc"
+      case 47: // "integer"
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< int64_t > (); }
+#line 393 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 47: // "floating point"
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < double > (); }
-#line 405 "netconf_parser.cc"
+      case 48: // "floating point"
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< double > (); }
+#line 400 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 48: // "boolean"
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < bool > (); }
-#line 411 "netconf_parser.cc"
+      case 49: // "boolean"
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< bool > (); }
+#line 407 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 57: // value
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 417 "netconf_parser.cc"
+      case 58: // value
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 414 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 60: // map_value
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 423 "netconf_parser.cc"
+      case 61: // map_value
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 421 "netconf_parser.cc" // lalr1.cc:672
         break;
 
-      case 119: // socket_type_value
-#line 107 "netconf_parser.yy"
-        { yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 429 "netconf_parser.cc"
+      case 120: // socket_type_value
+
+#line 108 "netconf_parser.yy" // lalr1.cc:672
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 428 "netconf_parser.cc" // lalr1.cc:672
         break;
 
+
       default:
         break;
     }
@@ -446,7 +446,7 @@ namespace isc { namespace netconf {
   void
   NetconfParser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
   {
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
     yypush_ (m, stack_symbol_type (s, std::move (sym)));
 #else
     stack_symbol_type ss (s, sym);
@@ -550,22 +550,17 @@ namespace isc { namespace netconf {
     yystack_.clear ();
     yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
 
-  /*-----------------------------------------------.
-  | yynewstate -- push a new symbol on the stack.  |
-  `-----------------------------------------------*/
+    // A new symbol was pushed on the stack.
   yynewstate:
     YYCDEBUG << "Entering state " << yystack_[0].state << '\n';
 
     // Accept?
     if (yystack_[0].state == yyfinal_)
-      YYACCEPT;
+      goto yyacceptlab;
 
     goto yybackup;
 
-
-  /*-----------.
-  | yybackup.  |
-  `-----------*/
+    // Backup.
   yybackup:
     // Try to take a decision without lookahead.
     yyn = yypact_[yystack_[0].state];
@@ -586,7 +581,6 @@ namespace isc { namespace netconf {
 #if YY_EXCEPTIONS
         catch (const syntax_error& yyexc)
           {
-            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
             error (yyexc);
             goto yyerrlab1;
           }
@@ -618,7 +612,6 @@ namespace isc { namespace netconf {
     yypush_ ("Shifting", yyn, YY_MOVE (yyla));
     goto yynewstate;
 
-
   /*-----------------------------------------------------------.
   | yydefault -- do the default action for the current state.  |
   `-----------------------------------------------------------*/
@@ -628,9 +621,8 @@ namespace isc { namespace netconf {
       goto yyerrlab;
     goto yyreduce;
 
-
   /*-----------------------------.
-  | yyreduce -- do a reduction.  |
+  | yyreduce -- Do a reduction.  |
   `-----------------------------*/
   yyreduce:
     yylen = yyr2_[yyn];
@@ -642,25 +634,25 @@ namespace isc { namespace netconf {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
         yylhs.value.emplace< ElementPtr > ();
         break;
 
-      case 48: // "boolean"
+      case 49: // "boolean"
         yylhs.value.emplace< bool > ();
         break;
 
-      case 47: // "floating point"
+      case 48: // "floating point"
         yylhs.value.emplace< double > ();
         break;
 
-      case 46: // "integer"
+      case 47: // "integer"
         yylhs.value.emplace< int64_t > ();
         break;
 
-      case 45: // "constant string"
+      case 46: // "constant string"
         yylhs.value.emplace< std::string > ();
         break;
 
@@ -671,8 +663,8 @@ namespace isc { namespace netconf {
 
       // Default location.
       {
-        stack_type::slice range (yystack_, yylen);
-        YYLLOC_DEFAULT (yylhs.location, range, yylen);
+        slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
+        YYLLOC_DEFAULT (yylhs.location, slice, yylen);
         yyerror_range[1].location = yylhs.location;
       }
 
@@ -685,206 +677,206 @@ namespace isc { namespace netconf {
           switch (yyn)
             {
   case 2:
-#line 118 "netconf_parser.yy"
+#line 119 "netconf_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NO_KEYWORDS; }
-#line 691 "netconf_parser.cc"
+#line 683 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 4:
-#line 119 "netconf_parser.yy"
+#line 120 "netconf_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG; }
-#line 697 "netconf_parser.cc"
+#line 689 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 6:
-#line 120 "netconf_parser.yy"
+#line 121 "netconf_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NETCONF; }
-#line 703 "netconf_parser.cc"
+#line 695 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 8:
-#line 128 "netconf_parser.yy"
+#line 129 "netconf_parser.yy" // lalr1.cc:907
     {
     // Parse the Netconf map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 713 "netconf_parser.cc"
+#line 705 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 9:
-#line 132 "netconf_parser.yy"
+#line 133 "netconf_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
-#line 721 "netconf_parser.cc"
+#line 713 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 10:
-#line 139 "netconf_parser.yy"
+#line 140 "netconf_parser.yy" // lalr1.cc:907
     {
     // Push back the JSON value on the stack
-    ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 730 "netconf_parser.cc"
+#line 722 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 11:
-#line 145 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 736 "netconf_parser.cc"
+#line 146 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
+#line 728 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 12:
-#line 146 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 742 "netconf_parser.cc"
+#line 147 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
+#line 734 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 13:
-#line 147 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 748 "netconf_parser.cc"
+#line 148 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
+#line 740 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 14:
-#line 148 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 754 "netconf_parser.cc"
+#line 149 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
+#line 746 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 15:
-#line 149 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 760 "netconf_parser.cc"
+#line 150 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
+#line 752 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 16:
-#line 150 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 766 "netconf_parser.cc"
+#line 151 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 758 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 17:
-#line 151 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 772 "netconf_parser.cc"
+#line 152 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 764 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 18:
-#line 155 "netconf_parser.yy"
+#line 156 "netconf_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 783 "netconf_parser.cc"
+#line 775 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 19:
-#line 160 "netconf_parser.yy"
+#line 161 "netconf_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 793 "netconf_parser.cc"
+#line 785 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 20:
-#line 166 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 799 "netconf_parser.cc"
+#line 167 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 791 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 23:
-#line 180 "netconf_parser.yy"
+#line 181 "netconf_parser.yy" // lalr1.cc:907
     {
                   // map containing a single entry
-                  ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 808 "netconf_parser.cc"
+#line 800 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 24:
-#line 184 "netconf_parser.yy"
+#line 185 "netconf_parser.yy" // lalr1.cc:907
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
-                  ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 818 "netconf_parser.cc"
+#line 810 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 25:
-#line 191 "netconf_parser.yy"
+#line 192 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 827 "netconf_parser.cc"
+#line 819 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 26:
-#line 194 "netconf_parser.yy"
+#line 195 "netconf_parser.yy" // lalr1.cc:907
     {
 }
-#line 834 "netconf_parser.cc"
+#line 826 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 29:
-#line 201 "netconf_parser.yy"
+#line 202 "netconf_parser.yy" // lalr1.cc:907
     {
                   // List consisting of a single element.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 843 "netconf_parser.cc"
+#line 835 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 30:
-#line 205 "netconf_parser.yy"
+#line 206 "netconf_parser.yy" // lalr1.cc:907
     {
                   // List ending with , and a value.
-                  ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
+                  ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 852 "netconf_parser.cc"
+#line 844 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 31:
-#line 218 "netconf_parser.yy"
+#line 219 "netconf_parser.yy" // lalr1.cc:907
     {
     const std::string& where = ctx.contextName();
-    const std::string& keyword = yystack_[1].value.as < std::string > ();
+    const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 863 "netconf_parser.cc"
+#line 855 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 32:
-#line 226 "netconf_parser.yy"
+#line 227 "netconf_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 874 "netconf_parser.cc"
+#line 866 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 33:
-#line 231 "netconf_parser.yy"
+#line 232 "netconf_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 884 "netconf_parser.cc"
+#line 876 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 38:
-#line 248 "netconf_parser.yy"
+#line 249 "netconf_parser.yy" // lalr1.cc:907
     {
 
     // Let's create a MapElement that will represent it, add it to the
@@ -896,60 +888,60 @@ namespace isc { namespace netconf {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NETCONF);
 }
-#line 900 "netconf_parser.cc"
+#line 892 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 39:
-#line 258 "netconf_parser.yy"
+#line 259 "netconf_parser.yy" // lalr1.cc:907
     {
     // Ok, we're done with parsing Netconf. Let's take the map
     // off the stack.
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 911 "netconf_parser.cc"
+#line 903 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 53:
-#line 286 "netconf_parser.yy"
+#line 287 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flag(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-update", flag);
 }
-#line 920 "netconf_parser.cc"
+#line 912 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 54:
-#line 291 "netconf_parser.yy"
+#line 292 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flag(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subscribe-changes", flag);
 }
-#line 929 "netconf_parser.cc"
+#line 921 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 55:
-#line 296 "netconf_parser.yy"
+#line 297 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flag(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("validate-changes", flag);
 }
-#line 938 "netconf_parser.cc"
+#line 930 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 56:
-#line 301 "netconf_parser.yy"
+#line 302 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 946 "netconf_parser.cc"
+#line 938 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 57:
-#line 303 "netconf_parser.yy"
+#line 304 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
-    ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
+    ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
     ConstElementPtr old = parent->get("user-context");
 
     // Handle already existing user context
@@ -969,23 +961,23 @@ namespace isc { namespace netconf {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 973 "netconf_parser.cc"
+#line 965 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 58:
-#line 326 "netconf_parser.yy"
+#line 327 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 981 "netconf_parser.cc"
+#line 973 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 59:
-#line 328 "netconf_parser.yy"
+#line 329 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
-    ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr comment(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     user_context->set("comment", comment);
 
     // Handle already existing user context
@@ -1006,480 +998,497 @@ namespace isc { namespace netconf {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 1010 "netconf_parser.cc"
+#line 1002 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 60:
-#line 354 "netconf_parser.yy"
+#line 355 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1021 "netconf_parser.cc"
+#line 1013 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 61:
-#line 359 "netconf_parser.yy"
+#line 360 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1030 "netconf_parser.cc"
+#line 1022 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 66:
-#line 372 "netconf_parser.yy"
+#line 373 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1040 "netconf_parser.cc"
+#line 1032 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 67:
-#line 376 "netconf_parser.yy"
+#line 377 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1048 "netconf_parser.cc"
+#line 1040 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 73:
-#line 389 "netconf_parser.yy"
+#line 390 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1056 "netconf_parser.cc"
+#line 1048 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 74:
-#line 391 "netconf_parser.yy"
+#line 392 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1066 "netconf_parser.cc"
+#line 1058 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 75:
-#line 397 "netconf_parser.yy"
+#line 398 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1074 "netconf_parser.cc"
+#line 1066 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 76:
-#line 399 "netconf_parser.yy"
+#line 400 "netconf_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1083 "netconf_parser.cc"
+#line 1075 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 77:
-#line 407 "netconf_parser.yy"
+#line 408 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[2].location)));
     ctx.stack_.back()->set("managed-servers", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.MANAGED_SERVERS);
 }
-#line 1094 "netconf_parser.cc"
+#line 1086 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 78:
-#line 412 "netconf_parser.yy"
+#line 413 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1103 "netconf_parser.cc"
+#line 1095 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 88:
-#line 436 "netconf_parser.yy"
+#line 437 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1114 "netconf_parser.cc"
+#line 1106 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 89:
-#line 441 "netconf_parser.yy"
+#line 442 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1123 "netconf_parser.cc"
+#line 1115 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 90:
-#line 447 "netconf_parser.yy"
+#line 448 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp6", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1134 "netconf_parser.cc"
+#line 1126 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 91:
-#line 452 "netconf_parser.yy"
+#line 453 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1143 "netconf_parser.cc"
+#line 1135 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 92:
-#line 458 "netconf_parser.yy"
+#line 459 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("d2", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1154 "netconf_parser.cc"
+#line 1146 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 93:
-#line 463 "netconf_parser.yy"
+#line 464 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1163 "netconf_parser.cc"
+#line 1155 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 94:
-#line 469 "netconf_parser.yy"
+#line 470 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ca", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER);
 }
-#line 1174 "netconf_parser.cc"
+#line 1166 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 95:
-#line 474 "netconf_parser.yy"
+#line 475 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1183 "netconf_parser.cc"
+#line 1175 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 106:
-#line 496 "netconf_parser.yy"
+#line 497 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1191 "netconf_parser.cc"
+#line 1183 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 107:
-#line 498 "netconf_parser.yy"
+#line 499 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr model(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr model(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("model", model);
     ctx.leave();
 }
-#line 1201 "netconf_parser.cc"
+#line 1193 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 108:
-#line 505 "netconf_parser.yy"
+#line 506 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 1212 "netconf_parser.cc"
+#line 1204 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 109:
-#line 510 "netconf_parser.yy"
+#line 511 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1221 "netconf_parser.cc"
+#line 1213 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 118:
-#line 528 "netconf_parser.yy"
+#line 529 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.SOCKET_TYPE);
 }
-#line 1229 "netconf_parser.cc"
+#line 1221 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 119:
-#line 530 "netconf_parser.yy"
+#line 531 "netconf_parser.yy" // lalr1.cc:907
     {
-    ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
+    ctx.stack_.back()->set("socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1238 "netconf_parser.cc"
+#line 1230 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 120:
-#line 536 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 1244 "netconf_parser.cc"
+#line 537 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
+#line 1236 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 121:
-#line 537 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
-#line 1250 "netconf_parser.cc"
+#line 538 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
+#line 1242 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 122:
-#line 538 "netconf_parser.yy"
-    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stdout", ctx.loc2pos(yystack_[0].location))); }
-#line 1256 "netconf_parser.cc"
+#line 539 "netconf_parser.yy" // lalr1.cc:907
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("stdout", ctx.loc2pos(yystack_[0].location))); }
+#line 1248 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 123:
-#line 541 "netconf_parser.yy"
+#line 542 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1264 "netconf_parser.cc"
+#line 1256 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 124:
-#line 543 "netconf_parser.yy"
+#line 544 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 1274 "netconf_parser.cc"
+#line 1266 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 125:
-#line 550 "netconf_parser.yy"
+#line 551 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1282 "netconf_parser.cc"
+#line 1274 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 126:
-#line 552 "netconf_parser.yy"
+#line 553 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr url(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr url(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-url", url);
     ctx.leave();
 }
-#line 1292 "netconf_parser.cc"
+#line 1284 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 127:
-#line 565 "netconf_parser.yy"
+#line 566 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 1303 "netconf_parser.cc"
+#line 1295 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 128:
-#line 570 "netconf_parser.yy"
+#line 571 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1312 "netconf_parser.cc"
+#line 1304 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 132:
-#line 587 "netconf_parser.yy"
+#line 588 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1323 "netconf_parser.cc"
+#line 1315 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 133:
-#line 592 "netconf_parser.yy"
+#line 593 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1332 "netconf_parser.cc"
+#line 1324 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 136:
-#line 604 "netconf_parser.yy"
+#line 605 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1342 "netconf_parser.cc"
+#line 1334 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 137:
-#line 608 "netconf_parser.yy"
+#line 609 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1350 "netconf_parser.cc"
+#line 1342 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 147:
-#line 625 "netconf_parser.yy"
+#line 626 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1358 "netconf_parser.cc"
+#line 1350 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 148:
-#line 627 "netconf_parser.yy"
+#line 628 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1368 "netconf_parser.cc"
+#line 1360 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 149:
-#line 633 "netconf_parser.yy"
+#line 634 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 1377 "netconf_parser.cc"
+#line 1369 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 150:
-#line 638 "netconf_parser.yy"
+#line 639 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1385 "netconf_parser.cc"
+#line 1377 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 151:
-#line 640 "netconf_parser.yy"
+#line 641 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 1395 "netconf_parser.cc"
+#line 1387 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 152:
-#line 646 "netconf_parser.yy"
+#line 647 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1406 "netconf_parser.cc"
+#line 1398 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 153:
-#line 651 "netconf_parser.yy"
+#line 652 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1415 "netconf_parser.cc"
+#line 1407 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 156:
-#line 660 "netconf_parser.yy"
+#line 661 "netconf_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1425 "netconf_parser.cc"
+#line 1417 "netconf_parser.cc" // lalr1.cc:907
     break;
 
   case 157:
-#line 664 "netconf_parser.yy"
+#line 665 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1433 "netconf_parser.cc"
+#line 1425 "netconf_parser.cc" // lalr1.cc:907
     break;
 
-  case 164:
-#line 678 "netconf_parser.yy"
+  case 165:
+#line 680 "netconf_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORDS);
 }
-#line 1441 "netconf_parser.cc"
+#line 1433 "netconf_parser.cc" // lalr1.cc:907
     break;
 
-  case 165:
-#line 680 "netconf_parser.yy"
+  case 166:
+#line 682 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 1451 "netconf_parser.cc"
+#line 1443 "netconf_parser.cc" // lalr1.cc:907
     break;
 
-  case 166:
-#line 686 "netconf_parser.yy"
+  case 167:
+#line 688 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 1460 "netconf_parser.cc"
+#line 1452 "netconf_parser.cc" // lalr1.cc:907
     break;
 
-  case 167:
-#line 691 "netconf_parser.yy"
+  case 168:
+#line 693 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 1469 "netconf_parser.cc"
+#line 1461 "netconf_parser.cc" // lalr1.cc:907
     break;
 
-  case 168:
-#line 696 "netconf_parser.yy"
+  case 169:
+#line 698 "netconf_parser.yy" // lalr1.cc:907
     {
-    ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 1478 "netconf_parser.cc"
+#line 1470 "netconf_parser.cc" // lalr1.cc:907
+    break;
+
+  case 170:
+#line 703 "netconf_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORDS);
+}
+#line 1478 "netconf_parser.cc" // lalr1.cc:907
     break;
 
+  case 171:
+#line 705 "netconf_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("pattern", sev);
+    ctx.leave();
+}
+#line 1488 "netconf_parser.cc" // lalr1.cc:907
+    break;
 
-#line 1482 "netconf_parser.cc"
 
+#line 1492 "netconf_parser.cc" // lalr1.cc:907
             default:
               break;
             }
@@ -1487,7 +1496,6 @@ namespace isc { namespace netconf {
 #if YY_EXCEPTIONS
       catch (const syntax_error& yyexc)
         {
-          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
           error (yyexc);
           YYERROR;
         }
@@ -1502,7 +1510,6 @@ namespace isc { namespace netconf {
     }
     goto yynewstate;
 
-
   /*--------------------------------------.
   | yyerrlab -- here on detecting error.  |
   `--------------------------------------*/
@@ -1539,18 +1546,18 @@ namespace isc { namespace netconf {
   | yyerrorlab -- error raised explicitly by YYERROR.  |
   `---------------------------------------------------*/
   yyerrorlab:
-    /* Pacify compilers when the user code never invokes YYERROR and
-       the label yyerrorlab therefore never appears in user code.  */
-    if (false)
-      YYERROR;
 
+    /* Pacify compilers like GCC when the user code never invokes
+       YYERROR and the label yyerrorlab therefore never appears in user
+       code.  */
+    if (false)
+      goto yyerrorlab;
     /* Do not reclaim the symbols of the rule whose action triggered
        this YYERROR.  */
     yypop_ (yylen);
     yylen = 0;
     goto yyerrlab1;
 
-
   /*-------------------------------------------------------------.
   | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   `-------------------------------------------------------------*/
@@ -1591,26 +1598,16 @@ namespace isc { namespace netconf {
     }
     goto yynewstate;
 
-
-  /*-------------------------------------.
-  | yyacceptlab -- YYACCEPT comes here.  |
-  `-------------------------------------*/
+    // Accept.
   yyacceptlab:
     yyresult = 0;
     goto yyreturn;
 
-
-  /*-----------------------------------.
-  | yyabortlab -- YYABORT comes here.  |
-  `-----------------------------------*/
+    // Abort.
   yyabortlab:
     yyresult = 1;
     goto yyreturn;
 
-
-  /*-----------------------------------------------------.
-  | yyreturn -- parsing is finished, return the result.  |
-  `-----------------------------------------------------*/
   yyreturn:
     if (!yyla.empty ())
       yy_destroy_ ("Cleanup: discarding lookahead", yyla);
@@ -1749,42 +1746,42 @@ namespace isc { namespace netconf {
   }
 
 
-  const signed char NetconfParser::yypact_ninf_ = -83;
+  const signed char NetconfParser::yypact_ninf_ = -92;
 
   const signed char NetconfParser::yytable_ninf_ = -1;
 
   const short
   NetconfParser::yypact_[] =
   {
-      76,   -83,   -83,   -83,     6,    12,     0,    11,   -83,   -83,
-     -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,
-     -83,   -83,   -83,   -83,    12,     4,    -5,    -1,   -83,    14,
-      48,    73,    82,   104,   -83,   -83,    44,   -83,   -83,   -83,
-     -83,   -83,   108,   109,   123,   124,   -83,   -83,   125,   -83,
-     122,   128,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,
-     -83,   -83,    12,    12,   -83,    87,   129,   130,    -5,   -83,
-     131,   132,    89,    90,    91,   133,   137,   138,   -83,   -83,
-      -1,   -83,   -83,   139,   140,   141,   -83,   142,    99,   -83,
-     -83,   -83,   -83,   145,   146,   -83,    12,    -1,   112,   -83,
-     -83,   -83,     5,   147,   148,   -83,   144,    77,   -83,   -83,
-     -83,   -83,   -83,   -83,   -83,   152,   143,   -83,   -83,   -83,
-     -83,   -83,   -83,   150,   158,   -83,   -83,    62,   -83,   -83,
-     112,   -83,   149,   159,   160,   161,   -83,     5,    51,   -83,
-     147,    29,   148,   -83,   -83,   155,   162,   163,   164,   -83,
-     -83,   -83,   -83,    83,   -83,   -83,   -83,   -83,   -83,   -83,
-     168,   -83,   -83,   -83,   -83,    84,   -83,   -83,   -83,   -83,
-     -83,   -83,    24,    24,    24,    24,   169,   170,     3,   -83,
-     171,   172,   120,   173,    29,   -83,   -83,   -83,   -83,   -83,
-     -83,   -83,   -83,   -83,    85,   -83,   -83,   -83,    86,    94,
-      95,   134,    12,   -83,   135,   176,   -83,   151,   -83,   174,
-     179,    24,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   177,
-     -83,   153,   178,   -83,   -83,   102,   -83,   -83,    72,   -10,
-     177,   -83,   -83,   -83,   -83,   -83,   -83,   -83,    98,   -83,
-     -83,   -83,   -83,   -83,   182,   183,   184,   101,   -83,   -83,
-     -83,   -83,   -83,   -83,   185,   186,   187,    72,   -83,   188,
-     119,   154,   165,   -10,   -83,    97,   167,   175,   -83,   180,
-     -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,
-     -83
+      -8,   -92,   -92,   -92,    27,    11,    44,    99,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,    11,    35,     9,    -1,   -92,   106,
+     104,   109,   110,   116,   -92,   -92,    26,   -92,   -92,   -92,
+     -92,   -92,   122,   123,   124,   125,   -92,   -92,   126,   -92,
+     127,   128,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,    11,    11,   -92,    87,   130,   132,     9,   -92,
+     133,   134,    83,    90,    91,   135,   137,   139,   -92,   -92,
+      -1,   -92,   -92,   140,   138,   141,   -92,   142,   100,   -92,
+     -92,   -92,   -92,   145,   146,   -92,    11,    -1,   114,   -92,
+     -92,   -92,     6,   147,   148,   -92,   144,    30,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   152,   150,   -92,   -92,   -92,
+     -92,   -92,   -92,   155,   153,   -92,   -92,    74,   -92,   -92,
+     114,   -92,   158,   159,   160,   161,   -92,     6,     0,   -92,
+     147,    53,   148,   -92,   -92,   162,   163,   164,   165,   -92,
+     -92,   -92,   -92,    60,   -92,   -92,   -92,   -92,   -92,   -92,
+     169,   -92,   -92,   -92,   -92,    66,   -92,   -92,   -92,   -92,
+     -92,   -92,    71,    71,    71,    71,   170,   171,    36,   -92,
+     172,   173,   119,   174,    53,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,    86,   -92,   -92,   -92,    92,    93,
+      94,   121,    11,   -92,   143,   175,   -92,   149,   -92,   177,
+     179,    71,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   178,
+     -92,   151,   180,   -92,   -92,   102,   -92,   -92,    -6,     8,
+     178,   -92,   -92,   -92,   -92,   -92,   -92,   -92,    95,   -92,
+     -92,   -92,   -92,   -92,   182,   184,   186,   -92,   101,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   187,   188,   189,    -6,
+     -92,   190,   156,   157,   166,   192,     8,   -92,    96,   154,
+     168,   -92,   176,   -92,   -92,   -92,   181,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92
   };
 
   const unsigned char
@@ -1814,27 +1811,27 @@ namespace isc { namespace netconf {
        0,     0,    89,    91,    93,    95,    74,    76,   148,     0,
      151,     0,     0,    97,   156,     0,   154,   107,     0,     0,
        0,   153,   118,   123,   125,   117,   115,   116,     0,   110,
-     112,   113,   114,   164,     0,     0,     0,     0,   158,   160,
-     161,   162,   163,   155,     0,     0,     0,     0,   109,     0,
-       0,     0,     0,     0,   157,     0,     0,     0,   111,     0,
-     166,   167,   168,   159,   120,   121,   122,   119,   124,   126,
-     165
+     112,   113,   114,   165,     0,     0,     0,   170,     0,   158,
+     160,   161,   162,   163,   164,   155,     0,     0,     0,     0,
+     109,     0,     0,     0,     0,     0,     0,   157,     0,     0,
+       0,   111,     0,   167,   168,   169,     0,   159,   120,   121,
+     122,   119,   124,   126,   166,   171
   };
 
   const signed char
   NetconfParser::yypgoto_[] =
   {
-     -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -20,    81,
-     -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -27,   -83,
-     -83,   -83,   126,   -83,   -83,    96,   -83,   115,   -24,   -19,
-     -18,   -26,   -83,   -25,   -83,   -83,   -83,   -83,   -83,    57,
-     -83,   -83,    21,   -83,   -83,   -83,   -83,   -83,   -83,   -83,
-     -83,    67,   -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,
-     -49,    -6,   -83,   -83,   -83,   -83,   -83,   -51,   -83,   -83,
-     -83,   -83,   -83,   -83,   -83,   -83,   -83,   -83,    78,   -82,
-     -83,   -83,    65,   -83,   -83,    25,   -83,   -83,   -83,   -83,
-     -83,   -83,   -83,   -83,   -17,   -83,   -83,   -53,   -83,   -83,
-     -83,   -83,   -83
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -20,    81,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -27,   -92,
+     -92,   -92,   111,   -92,   -92,   112,   -92,   118,   -24,   -19,
+     -18,   -26,   -92,   -25,   -92,   -92,   -92,   -92,   -92,    59,
+     -92,   -92,    28,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,    47,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -50,    -4,   -92,   -92,   -92,   -92,   -92,   -51,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,    80,   -91,
+     -92,   -92,    69,   -92,   -92,    31,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -14,   -92,   -92,   -54,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92
   };
 
   const short
@@ -1846,125 +1843,126 @@ namespace isc { namespace netconf {
      191,   192,    70,   193,    71,    58,    76,   123,   124,   125,
      138,   153,   154,   155,   176,   156,   177,    59,   102,   115,
      116,   117,   118,   132,   119,   133,   120,   134,   121,   135,
-     194,   195,   196,   209,   197,   210,   238,   239,   240,   254,
-     277,   241,   255,   242,   256,    39,    67,   107,   108,    60,
+     194,   195,   196,   209,   197,   210,   238,   239,   240,   256,
+     281,   241,   257,   242,   258,    39,    67,   107,   108,    60,
       77,   127,   128,   141,   165,   166,   167,   180,   168,   169,
-     183,   170,   181,   225,   226,   229,   247,   248,   249,   259,
-     250,   251,   252
+     183,   170,   181,   225,   226,   229,   248,   249,   250,   261,
+     251,   252,   253,   254,   265
   };
 
   const unsigned short
   NetconfParser::yytable_[] =
   {
-      49,    56,    57,    53,    28,    34,     8,    20,    54,    55,
-      40,    41,    42,    43,    44,    45,   109,     9,    22,    10,
-      61,    11,   110,   111,   112,   113,   243,    35,    46,   244,
-     245,   246,    47,   150,   151,    40,    41,    42,    43,    44,
-      40,    41,    81,    82,    48,   186,   187,    68,   109,    31,
-      48,    62,    69,    49,    56,    57,    53,    12,    13,    14,
-      15,    54,    55,   158,   159,   142,   160,   161,   143,    48,
-      49,    56,    57,    53,    48,   114,   105,    63,    54,    55,
-     130,   150,   151,    40,    41,   131,   178,   184,   211,   211,
-      64,   179,   185,   212,   213,   232,    48,   211,   211,   233,
-     234,   257,   214,   215,   263,   230,   258,    65,   231,   264,
-     114,   152,    72,    73,   162,   163,   164,    48,     1,     2,
-       3,   274,   275,   276,   198,   199,   200,    74,    75,    78,
-      79,    80,    83,    84,    85,    87,    88,    89,    90,    91,
-      92,    93,    94,    96,   101,    47,   137,    97,    98,    10,
-     103,   104,   129,   145,   122,   126,   139,   162,   163,   164,
-     136,   140,   172,   146,   147,   148,   206,   270,    99,   173,
-     174,   175,   182,   201,   202,   204,   205,   207,   221,   216,
-     218,   219,   217,   222,   224,   228,   260,   261,   262,   265,
-     266,   267,   269,   106,    86,    95,   220,   157,   227,   203,
-     271,   235,   236,   237,   149,   223,   268,   171,   144,   208,
-     273,   272,   278,   253,     0,     0,     0,     0,     0,     0,
-     279,     0,     0,     0,     0,   280,     0,     0,     0,     0,
-     235,   236,   237
+      49,    56,    57,    53,    28,    40,    41,   109,    54,    55,
+      40,    41,    42,    43,    44,    45,     9,   232,    10,    34,
+      11,   233,   234,   110,   111,   112,   113,     8,    46,    68,
+     150,   151,    47,   130,    69,     1,     2,     3,   131,   109,
+      48,    35,    81,    82,   243,    48,    48,   244,   245,   246,
+     247,    20,    48,    49,    56,    57,    53,    12,    13,    14,
+      15,    54,    55,   178,    40,    41,   150,   151,   179,   184,
+      49,    56,    57,    53,   185,   114,   105,   142,    54,    55,
+     143,    31,    40,    41,    42,    43,    44,   158,   159,   211,
+     160,   161,   186,   187,   212,   211,   211,   211,   259,    48,
+     213,   214,   215,   260,   266,   230,    22,    62,   231,   267,
+     114,   152,    61,    63,   162,   163,   164,    48,    64,    65,
+     278,   279,   280,   198,   199,   200,    72,    73,    74,    75,
+      78,    80,    89,    83,    84,    79,    85,    87,    88,    90,
+      91,    93,    92,    94,    96,    97,   101,    47,    98,    10,
+     103,   104,   129,   137,   122,   126,   140,   162,   163,   164,
+     136,   139,   145,   146,   147,   148,   206,   216,    99,   172,
+     173,   174,   175,   182,   201,   202,   204,   205,   207,    86,
+     219,   221,   217,   222,   149,   224,   262,   228,   263,   218,
+     264,   268,   269,   270,   272,   220,   276,   227,    95,   157,
+     282,   235,   236,   237,   274,   273,   203,   223,   271,   106,
+     144,   171,   277,   275,   283,   208,   255,     0,     0,     0,
+       0,     0,   284,     0,     0,     0,     0,   285,     0,     0,
+       0,     0,   235,   236,   237
   };
 
   const short
   NetconfParser::yycheck_[] =
   {
-      27,    27,    27,    27,    24,    10,     0,     7,    27,    27,
-      11,    12,    13,    14,    15,    16,    98,     5,     7,     7,
-       6,     9,    17,    18,    19,    20,    36,    32,    29,    39,
-      40,    41,    33,    30,    31,    11,    12,    13,    14,    15,
-      11,    12,    62,    63,    45,    21,    22,     3,   130,    45,
-      45,     3,     8,    80,    80,    80,    80,    45,    46,    47,
-      48,    80,    80,    34,    35,     3,    37,    38,     6,    45,
-      97,    97,    97,    97,    45,   102,    96,     4,    97,    97,
-       3,    30,    31,    11,    12,     8,     3,     3,     3,     3,
-       8,     8,     8,     8,     8,    23,    45,     3,     3,    27,
-      28,     3,     8,     8,     3,     3,     8,     3,     6,     8,
-     137,   138,     4,     4,   141,   141,   141,    45,    42,    43,
-      44,    24,    25,    26,   173,   174,   175,     4,     4,     4,
-       8,     3,    45,     4,     4,     4,     4,    48,    48,    48,
-       7,     4,     4,     4,    45,    33,     3,     7,     7,     7,
-       5,     5,     8,     4,     7,     7,     6,   184,   184,   184,
-       8,     3,     7,     4,     4,     4,    46,    48,    87,     7,
-       7,     7,     4,     4,     4,     4,     4,     4,     4,    45,
-      45,     5,   202,     4,     7,     7,     4,     4,     4,     4,
-       4,     4,     4,    97,    68,    80,    45,   140,    45,   178,
-      46,   228,   228,   228,   137,   211,   257,   142,   130,   184,
-     263,    46,    45,   230,    -1,    -1,    -1,    -1,    -1,    -1,
-      45,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
-     257,   257,   257
+      27,    27,    27,    27,    24,    11,    12,    98,    27,    27,
+      11,    12,    13,    14,    15,    16,     5,    23,     7,    10,
+       9,    27,    28,    17,    18,    19,    20,     0,    29,     3,
+      30,    31,    33,     3,     8,    43,    44,    45,     8,   130,
+      46,    32,    62,    63,    36,    46,    46,    39,    40,    41,
+      42,     7,    46,    80,    80,    80,    80,    46,    47,    48,
+      49,    80,    80,     3,    11,    12,    30,    31,     8,     3,
+      97,    97,    97,    97,     8,   102,    96,     3,    97,    97,
+       6,    46,    11,    12,    13,    14,    15,    34,    35,     3,
+      37,    38,    21,    22,     8,     3,     3,     3,     3,    46,
+       8,     8,     8,     8,     3,     3,     7,     3,     6,     8,
+     137,   138,     6,     4,   141,   141,   141,    46,     8,     3,
+      24,    25,    26,   173,   174,   175,     4,     4,     4,     4,
+       4,     3,    49,    46,     4,     8,     4,     4,     4,    49,
+      49,     4,     7,     4,     4,     7,    46,    33,     7,     7,
+       5,     5,     8,     3,     7,     7,     3,   184,   184,   184,
+       8,     6,     4,     4,     4,     4,    47,    46,    87,     7,
+       7,     7,     7,     4,     4,     4,     4,     4,     4,    68,
+       5,     4,   202,     4,   137,     7,     4,     7,     4,    46,
+       4,     4,     4,     4,     4,    46,     4,    46,    80,   140,
+      46,   228,   228,   228,    47,    49,   178,   211,   259,    97,
+     130,   142,   266,    47,    46,   184,   230,    -1,    -1,    -1,
+      -1,    -1,    46,    -1,    -1,    -1,    -1,    46,    -1,    -1,
+      -1,    -1,   259,   259,   259
   };
 
   const unsigned char
   NetconfParser::yystos_[] =
   {
-       0,    42,    43,    44,    50,    51,    52,    53,     0,     5,
-       7,     9,    45,    46,    47,    48,    56,    57,    58,    63,
-       7,    68,     7,    54,    64,    59,    69,    55,    57,    65,
-      66,    45,    61,    62,    10,    32,    70,    71,    72,   124,
-      11,    12,    13,    14,    15,    16,    29,    33,    45,    67,
-      74,    75,    76,    77,    78,    79,    80,    82,    84,    96,
-     128,     6,     3,     4,     8,     3,    73,   125,     3,     8,
-      81,    83,     4,     4,     4,     4,    85,   129,     4,     8,
-       3,    57,    57,    45,     4,     4,    71,     4,     4,    48,
-      48,    48,     7,     4,     4,    76,     4,     7,     7,    58,
-      60,    45,    97,     5,     5,    57,    74,   126,   127,   128,
-      17,    18,    19,    20,    67,    98,    99,   100,   101,   103,
-     105,   107,     7,    86,    87,    88,     7,   130,   131,     8,
-       3,     8,   102,   104,   106,   108,     8,     3,    89,     6,
-       3,   132,     3,     6,   127,     4,     4,     4,     4,   100,
-      30,    31,    67,    90,    91,    92,    94,    88,    34,    35,
-      37,    38,    67,    80,    82,   133,   134,   135,   137,   138,
-     140,   131,     7,     7,     7,     7,    93,    95,     3,     8,
-     136,   141,     4,   139,     3,     8,    21,    22,    67,    77,
-      78,    79,    80,    82,   109,   110,   111,   113,   109,   109,
-     109,     4,     4,    91,     4,     4,    46,     4,   134,   112,
-     114,     3,     8,     8,     8,     8,    45,    57,    45,     5,
-      45,     4,     4,   110,     7,   142,   143,    45,     7,   144,
-       3,     6,    23,    27,    28,    67,    80,    82,   115,   116,
-     117,   120,   122,    36,    39,    40,    41,   145,   146,   147,
-     149,   150,   151,   143,   118,   121,   123,     3,     8,   148,
-       4,     4,     4,     3,     8,     4,     4,     4,   116,     4,
-      48,    46,    46,   146,    24,    25,    26,   119,    45,    45,
-      45
+       0,    43,    44,    45,    51,    52,    53,    54,     0,     5,
+       7,     9,    46,    47,    48,    49,    57,    58,    59,    64,
+       7,    69,     7,    55,    65,    60,    70,    56,    58,    66,
+      67,    46,    62,    63,    10,    32,    71,    72,    73,   125,
+      11,    12,    13,    14,    15,    16,    29,    33,    46,    68,
+      75,    76,    77,    78,    79,    80,    81,    83,    85,    97,
+     129,     6,     3,     4,     8,     3,    74,   126,     3,     8,
+      82,    84,     4,     4,     4,     4,    86,   130,     4,     8,
+       3,    58,    58,    46,     4,     4,    72,     4,     4,    49,
+      49,    49,     7,     4,     4,    77,     4,     7,     7,    59,
+      61,    46,    98,     5,     5,    58,    75,   127,   128,   129,
+      17,    18,    19,    20,    68,    99,   100,   101,   102,   104,
+     106,   108,     7,    87,    88,    89,     7,   131,   132,     8,
+       3,     8,   103,   105,   107,   109,     8,     3,    90,     6,
+       3,   133,     3,     6,   128,     4,     4,     4,     4,   101,
+      30,    31,    68,    91,    92,    93,    95,    89,    34,    35,
+      37,    38,    68,    81,    83,   134,   135,   136,   138,   139,
+     141,   132,     7,     7,     7,     7,    94,    96,     3,     8,
+     137,   142,     4,   140,     3,     8,    21,    22,    68,    78,
+      79,    80,    81,    83,   110,   111,   112,   114,   110,   110,
+     110,     4,     4,    92,     4,     4,    47,     4,   135,   113,
+     115,     3,     8,     8,     8,     8,    46,    58,    46,     5,
+      46,     4,     4,   111,     7,   143,   144,    46,     7,   145,
+       3,     6,    23,    27,    28,    68,    81,    83,   116,   117,
+     118,   121,   123,    36,    39,    40,    41,    42,   146,   147,
+     148,   150,   151,   152,   153,   144,   119,   122,   124,     3,
+       8,   149,     4,     4,     4,   154,     3,     8,     4,     4,
+       4,   117,     4,    49,    47,    47,     4,   147,    24,    25,
+      26,   120,    46,    46,    46,    46
   };
 
   const unsigned char
   NetconfParser::yyr1_[] =
   {
-       0,    49,    51,    50,    52,    50,    53,    50,    55,    54,
-      56,    57,    57,    57,    57,    57,    57,    57,    59,    58,
-      60,    61,    61,    62,    62,    64,    63,    65,    65,    66,
-      66,    67,    69,    68,    70,    70,    71,    71,    73,    72,
-      74,    74,    75,    75,    76,    76,    76,    76,    76,    76,
-      76,    76,    76,    77,    78,    79,    81,    80,    83,    82,
-      85,    84,    86,    86,    87,    87,    89,    88,    90,    90,
-      90,    91,    91,    93,    92,    95,    94,    97,    96,    98,
-      98,    99,    99,   100,   100,   100,   100,   100,   102,   101,
-     104,   103,   106,   105,   108,   107,   109,   109,   110,   110,
-     110,   110,   110,   110,   110,   110,   112,   111,   114,   113,
-     115,   115,   116,   116,   116,   116,   116,   116,   118,   117,
-     119,   119,   119,   121,   120,   123,   122,   125,   124,   126,
-     126,   127,   129,   128,   130,   130,   132,   131,   133,   133,
-     134,   134,   134,   134,   134,   134,   134,   136,   135,   137,
-     139,   138,   141,   140,   142,   142,   144,   143,   145,   145,
-     146,   146,   146,   146,   148,   147,   149,   150,   151
+       0,    50,    52,    51,    53,    51,    54,    51,    56,    55,
+      57,    58,    58,    58,    58,    58,    58,    58,    60,    59,
+      61,    62,    62,    63,    63,    65,    64,    66,    66,    67,
+      67,    68,    70,    69,    71,    71,    72,    72,    74,    73,
+      75,    75,    76,    76,    77,    77,    77,    77,    77,    77,
+      77,    77,    77,    78,    79,    80,    82,    81,    84,    83,
+      86,    85,    87,    87,    88,    88,    90,    89,    91,    91,
+      91,    92,    92,    94,    93,    96,    95,    98,    97,    99,
+      99,   100,   100,   101,   101,   101,   101,   101,   103,   102,
+     105,   104,   107,   106,   109,   108,   110,   110,   111,   111,
+     111,   111,   111,   111,   111,   111,   113,   112,   115,   114,
+     116,   116,   117,   117,   117,   117,   117,   117,   119,   118,
+     120,   120,   120,   122,   121,   124,   123,   126,   125,   127,
+     127,   128,   130,   129,   131,   131,   133,   132,   134,   134,
+     135,   135,   135,   135,   135,   135,   135,   137,   136,   138,
+     140,   139,   142,   141,   143,   143,   145,   144,   146,   146,
+     147,   147,   147,   147,   147,   149,   148,   150,   151,   152,
+     154,   153
   };
 
   const unsigned char
@@ -1986,7 +1984,8 @@ namespace isc { namespace netconf {
        3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     0,     4,     3,
        0,     4,     0,     6,     1,     3,     0,     4,     1,     3,
-       1,     1,     1,     1,     0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     0,     4,     3,     3,     3,
+       0,     4
   };
 
 
@@ -2005,16 +2004,16 @@ namespace isc { namespace netconf {
   "\"socket-url\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
   "\"Logging\"", "\"loggers\"", "\"name\"", "\"output_options\"",
   "\"output\"", "\"debuglevel\"", "\"severity\"", "\"flush\"",
-  "\"maxsize\"", "\"maxver\"", "START_JSON", "START_NETCONF",
-  "START_SUB_NETCONF", "\"constant string\"", "\"integer\"",
-  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
-  "$@3", "sub_netconf", "$@4", "json", "value", "map", "$@5", "map_value",
-  "map_content", "not_empty_map", "list_generic", "$@6", "list_content",
-  "not_empty_list", "unknown_map_entry", "netconf_syntax_map", "$@7",
-  "global_objects", "global_object", "netconf_object", "$@8",
-  "global_params", "not_empty_global_params", "global_param",
-  "boot_update", "subscribe_changes", "validate_changes", "user_context",
-  "$@9", "comment", "$@10", "hooks_libraries", "$@11",
+  "\"maxsize\"", "\"maxver\"", "\"pattern\"", "START_JSON",
+  "START_NETCONF", "START_SUB_NETCONF", "\"constant string\"",
+  "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
+  "$@1", "$@2", "$@3", "sub_netconf", "$@4", "json", "value", "map", "$@5",
+  "map_value", "map_content", "not_empty_map", "list_generic", "$@6",
+  "list_content", "not_empty_list", "unknown_map_entry",
+  "netconf_syntax_map", "$@7", "global_objects", "global_object",
+  "netconf_object", "$@8", "global_params", "not_empty_global_params",
+  "global_param", "boot_update", "subscribe_changes", "validate_changes",
+  "user_context", "$@9", "comment", "$@10", "hooks_libraries", "$@11",
   "hooks_libraries_list", "not_empty_hooks_libraries_list",
   "hooks_library", "$@12", "hooks_params", "hooks_param", "library",
   "$@13", "parameters", "$@14", "managed_servers", "$@15",
@@ -2029,30 +2028,31 @@ namespace isc { namespace netconf {
   "debuglevel", "severity", "$@29", "output_options_list", "$@30",
   "output_options_list_content", "output_entry", "$@31",
   "output_params_list", "output_params", "output", "$@32", "flush",
-  "maxsize", "maxver", YY_NULLPTR
+  "maxsize", "maxver", "pattern", "$@33", YY_NULLPTR
   };
 
 #if NETCONF_DEBUG
   const unsigned short
   NetconfParser::yyrline_[] =
   {
-       0,   118,   118,   118,   119,   119,   120,   120,   128,   128,
-     139,   145,   146,   147,   148,   149,   150,   151,   155,   155,
-     166,   171,   172,   180,   184,   191,   191,   197,   198,   201,
-     205,   218,   226,   226,   238,   239,   243,   244,   248,   248,
-     265,   266,   269,   270,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   286,   291,   296,   301,   301,   326,   326,
-     354,   354,   364,   365,   368,   369,   372,   372,   380,   381,
-     382,   385,   386,   389,   389,   397,   397,   407,   407,   417,
-     418,   421,   422,   428,   429,   430,   431,   432,   436,   436,
-     447,   447,   458,   458,   469,   469,   480,   481,   485,   486,
-     487,   488,   489,   490,   491,   492,   496,   496,   505,   505,
-     516,   517,   520,   521,   522,   523,   524,   525,   528,   528,
-     536,   537,   538,   541,   541,   550,   550,   565,   565,   578,
-     579,   583,   587,   587,   599,   600,   604,   604,   612,   613,
-     616,   617,   618,   619,   620,   621,   622,   625,   625,   633,
-     638,   638,   646,   646,   656,   657,   660,   660,   668,   669,
-     672,   673,   674,   675,   678,   678,   686,   691,   696
+       0,   119,   119,   119,   120,   120,   121,   121,   129,   129,
+     140,   146,   147,   148,   149,   150,   151,   152,   156,   156,
+     167,   172,   173,   181,   185,   192,   192,   198,   199,   202,
+     206,   219,   227,   227,   239,   240,   244,   245,   249,   249,
+     266,   267,   270,   271,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   287,   292,   297,   302,   302,   327,   327,
+     355,   355,   365,   366,   369,   370,   373,   373,   381,   382,
+     383,   386,   387,   390,   390,   398,   398,   408,   408,   418,
+     419,   422,   423,   429,   430,   431,   432,   433,   437,   437,
+     448,   448,   459,   459,   470,   470,   481,   482,   486,   487,
+     488,   489,   490,   491,   492,   493,   497,   497,   506,   506,
+     517,   518,   521,   522,   523,   524,   525,   526,   529,   529,
+     537,   538,   539,   542,   542,   551,   551,   566,   566,   579,
+     580,   584,   588,   588,   600,   601,   605,   605,   613,   614,
+     617,   618,   619,   620,   621,   622,   623,   626,   626,   634,
+     639,   639,   647,   647,   657,   658,   661,   661,   669,   670,
+     673,   674,   675,   676,   677,   680,   680,   688,   693,   698,
+     703,   703
   };
 
   // Print the state stack on the debug stream.
@@ -2085,11 +2085,10 @@ namespace isc { namespace netconf {
 #endif // NETCONF_DEBUG
 
 
-#line 14 "netconf_parser.yy"
+#line 14 "netconf_parser.yy" // lalr1.cc:1218
 } } // isc::netconf
-#line 2091 "netconf_parser.cc"
-
-#line 701 "netconf_parser.yy"
+#line 2091 "netconf_parser.cc" // lalr1.cc:1218
+#line 711 "netconf_parser.yy" // lalr1.cc:1219
 
 
 void
index c9b03ee7336f4c6f0e3cd525a0feaf16f5edfdd7..f2658b9796005ef66222a2cbb86c71bc2844449d 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
 #ifndef YY_NETCONF_NETCONF_PARSER_H_INCLUDED
 # define YY_NETCONF_NETCONF_PARSER_H_INCLUDED
 // //                    "%code requires" blocks.
-#line 17 "netconf_parser.yy"
+#line 17 "netconf_parser.yy" // lalr1.cc:404
 
 #include <string>
 #include <cc/data.h>
@@ -55,7 +55,7 @@ using namespace isc::netconf;
 using namespace isc::data;
 using namespace std;
 
-#line 59 "netconf_parser.h"
+#line 59 "netconf_parser.h" // lalr1.cc:404
 
 # include <cassert>
 # include <cstdlib> // std::abort
@@ -64,14 +64,8 @@ using namespace std;
 # include <string>
 # include <vector>
 
-#if defined __cplusplus
-# define YY_CPLUSPLUS __cplusplus
-#else
-# define YY_CPLUSPLUS 199711L
-#endif
-
 // Support move semantics when possible.
-#if 201103L <= YY_CPLUSPLUS
+#if defined __cplusplus && 201103L <= __cplusplus
 # define YY_MOVE           std::move
 # define YY_MOVE_OR_COPY   move
 # define YY_MOVE_REF(Type) Type&&
@@ -84,22 +78,6 @@ using namespace std;
 # define YY_RVREF(Type)    const Type&
 # define YY_COPY(Type)     const Type&
 #endif
-
-// Support noexcept when possible.
-#if 201103L <= YY_CPLUSPLUS
-# define YY_NOEXCEPT noexcept
-# define YY_NOTHROW
-#else
-# define YY_NOEXCEPT
-# define YY_NOTHROW throw ()
-#endif
-
-// Support constexpr when possible.
-#if 201703 <= YY_CPLUSPLUS
-# define YY_CONSTEXPR constexpr
-#else
-# define YY_CONSTEXPR
-#endif
 # include "location.hh"
 #include <typeinfo>
 #ifndef YYASSERT
@@ -177,80 +155,193 @@ using namespace std;
 # endif /* ! defined YYDEBUG */
 #endif  /* ! defined NETCONF_DEBUG */
 
-#line 14 "netconf_parser.yy"
+#line 14 "netconf_parser.yy" // lalr1.cc:404
 namespace isc { namespace netconf {
-#line 183 "netconf_parser.h"
+#line 161 "netconf_parser.h" // lalr1.cc:404
+
+  /// A stack with random access from its top.
+  template <typename T, typename S = std::vector<T> >
+  class stack
+  {
+  public:
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+    typedef typename S::size_type size_type;
 
+    stack (size_type n = 200)
+      : seq_ (n)
+    {}
+
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (size_type i)
+    {
+      return seq_[size () - 1 - i];
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    T&
+    operator[] (int i)
+    {
+      return operator[] (size_type (i));
+    }
 
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (size_type i) const
+    {
+      return seq_[size () - 1 - i];
+    }
 
-  /// A Bison parser.
-  class NetconfParser
+    /// Random access.
+    ///
+    /// Index 0 returns the topmost element.
+    const T&
+    operator[] (int i) const
+    {
+      return operator[] (size_type (i));
+    }
+
+    /// Steal the contents of \a t.
+    ///
+    /// Close to move-semantics.
+    void
+    push (YY_MOVE_REF (T) t)
+    {
+      seq_.push_back (T ());
+      operator[](0).move (t);
+    }
+
+    void
+    pop (int n = 1)
+    {
+      for (; 0 < n; --n)
+        seq_.pop_back ();
+    }
+
+    void
+    clear ()
+    {
+      seq_.clear ();
+    }
+
+    size_type
+    size () const
+    {
+      return seq_.size ();
+    }
+
+    const_iterator
+    begin () const
+    {
+      return seq_.rbegin ();
+    }
+
+    const_iterator
+    end () const
+    {
+      return seq_.rend ();
+    }
+
+  private:
+    stack (const stack&);
+    stack& operator= (const stack&);
+    /// The wrapped container.
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <typename T, typename S = stack<T> >
+  class slice
   {
   public:
-#ifndef NETCONF_STYPE
-  /// A buffer to store and retrieve objects.
+    slice (const S& stack, int range)
+      : stack_ (stack)
+      , range_ (range)
+    {}
+
+    const T&
+    operator[] (int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+    const S& stack_;
+    int range_;
+  };
+
+
+
+  /// A char[S] buffer to store and retrieve objects.
   ///
   /// Sort of a variant, but does not keep track of the nature
   /// of the stored data, since that knowledge is available
-  /// via the current parser state.
-  class semantic_type
+  /// via the current state.
+  template <size_t S>
+  struct variant
   {
-  public:
     /// Type of *this.
-    typedef semantic_type self_type;
+    typedef variant<S> self_type;
 
     /// Empty construction.
-    semantic_type () YY_NOEXCEPT
+    variant ()
       : yybuffer_ ()
       , yytypeid_ (YY_NULLPTR)
     {}
 
     /// Construct and fill.
     template <typename T>
-    semantic_type (YY_RVREF (T) t)
+    variant (YY_RVREF (T) t)
       : yytypeid_ (&typeid (T))
     {
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       new (yyas_<T> ()) T (YY_MOVE (t));
     }
 
     /// Destruction, allowed only if empty.
-    ~semantic_type () YY_NOEXCEPT
+    ~variant ()
     {
       YYASSERT (!yytypeid_);
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Instantiate a \a T in here from \a t.
-    template <typename T, typename... U>
-    T&
-    emplace (U&&... u)
-    {
-      YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
-      yytypeid_ = & typeid (T);
-      return *new (yyas_<T> ()) T (std::forward <U>(u)...);
-    }
-# else
     /// Instantiate an empty \a T in here.
     template <typename T>
     T&
     emplace ()
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T ();
     }
 
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Instantiate a \a T in here from \a t.
+    template <typename T, typename U>
+    T&
+    emplace (U&& u)
+    {
+      YYASSERT (!yytypeid_);
+      YYASSERT (sizeof (T) <= S);
+      yytypeid_ = & typeid (T);
+      return *new (yyas_<T> ()) T (std::forward <U>(u));
+    }
+# else
     /// Instantiate a \a T in here from \a t.
     template <typename T>
     T&
     emplace (const T& t)
     {
       YYASSERT (!yytypeid_);
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T (t);
     }
@@ -277,75 +368,75 @@ namespace isc { namespace netconf {
     /// Accessor to a built \a T.
     template <typename T>
     T&
-    as () YY_NOEXCEPT
+    as ()
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
     /// Const accessor to a built \a T (for %printer).
     template <typename T>
     const T&
-    as () const YY_NOEXCEPT
+    as () const
     {
       YYASSERT (yytypeid_);
       YYASSERT (*yytypeid_ == typeid (T));
-      YYASSERT (sizeof (T) <= size);
+      YYASSERT (sizeof (T) <= S);
       return *yyas_<T> ();
     }
 
-    /// Swap the content with \a that, of same type.
+    /// Swap the content with \a other, of same type.
     ///
     /// Both variants must be built beforehand, because swapping the actual
     /// data requires reading it (with as()), and this is not possible on
     /// unconstructed variants: it would require some dynamic testing, which
     /// should not be the variant's responsibility.
     /// Swapping between built and (possibly) non-built is done with
-    /// self_type::move ().
+    /// variant::move ().
     template <typename T>
     void
-    swap (self_type& that) YY_NOEXCEPT
+    swap (self_type& other)
     {
       YYASSERT (yytypeid_);
-      YYASSERT (*yytypeid_ == *that.yytypeid_);
-      std::swap (as<T> (), that.as<T> ());
+      YYASSERT (*yytypeid_ == *other.yytypeid_);
+      std::swap (as<T> (), other.as<T> ());
     }
 
-    /// Move the content of \a that to this.
+    /// Move the content of \a other to this.
     ///
-    /// Destroys \a that.
+    /// Destroys \a other.
     template <typename T>
     void
-    move (self_type& that)
+    move (self_type& other)
     {
-# if 201103L <= YY_CPLUSPLUS
-      emplace<T> (std::move (that.as<T> ()));
+# if defined __cplusplus && 201103L <= __cplusplus
+      emplace<T> (std::move (other.as<T> ()));
 # else
       emplace<T> ();
-      swap<T> (that);
+      swap<T> (other);
 # endif
-      that.destroy<T> ();
+      other.destroy<T> ();
     }
 
-# if 201103L <= YY_CPLUSPLUS
-    /// Move the content of \a that to this.
+# if defined __cplusplus && 201103L <= __cplusplus
+    /// Move the content of \a other to this.
     template <typename T>
     void
-    move (self_type&& that)
+    move (self_type&& other)
     {
-      emplace<T> (std::move (that.as<T> ()));
-      that.destroy<T> ();
+      emplace<T> (std::move (other.as<T> ()));
+      other.destroy<T> ();
     }
 #endif
 
-    /// Copy the content of \a that to this.
+    /// Copy the content of \a other to this.
     template <typename T>
     void
-    copy (const self_type& that)
+    copy (const self_type& other)
     {
-      emplace<T> (that.as<T> ());
+      emplace<T> (other.as<T> ());
     }
 
     /// Destroy the stored \a T.
@@ -360,12 +451,12 @@ namespace isc { namespace netconf {
   private:
     /// Prohibit blind copies.
     self_type& operator= (const self_type&);
-    semantic_type (const self_type&);
+    variant (const self_type&);
 
     /// Accessor to raw memory as \a T.
     template <typename T>
     T*
-    yyas_ () YY_NOEXCEPT
+    yyas_ ()
     {
       void *yyp = yybuffer_.yyraw;
       return static_cast<T*> (yyp);
@@ -374,12 +465,30 @@ namespace isc { namespace netconf {
     /// Const accessor to raw memory as \a T.
     template <typename T>
     const T*
-    yyas_ () const YY_NOEXCEPT
+    yyas_ () const
     {
       const void *yyp = yybuffer_.yyraw;
       return static_cast<const T*> (yyp);
      }
 
+    union
+    {
+      /// Strongest alignment constraints.
+      long double yyalign_me;
+      /// A buffer large enough to store any of the semantic values.
+      char yyraw[S];
+    } yybuffer_;
+
+    /// Whether the content is built: if defined, the name of the stored type.
+    const std::type_info *yytypeid_;
+  };
+
+
+  /// A Bison parser.
+  class NetconfParser
+  {
+  public:
+#ifndef NETCONF_STYPE
     /// An auxiliary type to compute the largest semantic type.
     union union_type
     {
@@ -399,24 +508,10 @@ namespace isc { namespace netconf {
 
       // "constant string"
       char dummy5[sizeof (std::string)];
-    };
-
-    /// The size of the largest semantic type.
-    enum { size = sizeof (union_type) };
-
-    /// A buffer to store semantic values.
-    union
-    {
-      /// Strongest alignment constraints.
-      long double yyalign_me;
-      /// A buffer large enough to store any of the semantic values.
-      char yyraw[size];
-    } yybuffer_;
-
-    /// Whether the content is built: if defined, the name of the stored type.
-    const std::type_info *yytypeid_;
-  };
+};
 
+    /// Symbol semantic values.
+    typedef variant<sizeof (union_type)> semantic_type;
 #else
     typedef NETCONF_STYPE semantic_type;
 #endif
@@ -426,18 +521,7 @@ namespace isc { namespace netconf {
     /// Syntax errors thrown from user actions.
     struct syntax_error : std::runtime_error
     {
-      syntax_error (const location_type& l, const std::string& m)
-        : std::runtime_error (m)
-        , location (l)
-      {}
-
-      syntax_error (const syntax_error& s)
-        : std::runtime_error (s.what ())
-        , location (s.location)
-      {}
-
-      ~syntax_error () YY_NOEXCEPT YY_NOTHROW;
-
+      syntax_error (const location_type& l, const std::string& m);
       location_type location;
     };
 
@@ -486,13 +570,14 @@ namespace isc { namespace netconf {
         TOKEN_FLUSH = 294,
         TOKEN_MAXSIZE = 295,
         TOKEN_MAXVER = 296,
-        TOKEN_START_JSON = 297,
-        TOKEN_START_NETCONF = 298,
-        TOKEN_START_SUB_NETCONF = 299,
-        TOKEN_STRING = 300,
-        TOKEN_INTEGER = 301,
-        TOKEN_FLOAT = 302,
-        TOKEN_BOOLEAN = 303
+        TOKEN_PATTERN = 297,
+        TOKEN_START_JSON = 298,
+        TOKEN_START_NETCONF = 299,
+        TOKEN_START_SUB_NETCONF = 300,
+        TOKEN_STRING = 301,
+        TOKEN_INTEGER = 302,
+        TOKEN_FLOAT = 303,
+        TOKEN_BOOLEAN = 304
       };
     };
 
@@ -521,150 +606,29 @@ namespace isc { namespace netconf {
       typedef Base super_type;
 
       /// Default constructor.
-      basic_symbol ()
-        : value ()
-        , location ()
-      {}
-
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      basic_symbol (basic_symbol&& that);
-#endif
+      basic_symbol ();
+
+      /// Move or copy constructor.
+      basic_symbol (YY_RVREF (basic_symbol) other);
 
-      /// Copy constructor.
-      basic_symbol (const basic_symbol& that);
 
       /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, location_type&& l)
-        : Base (t)
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const location_type& l)
-        : Base (t)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
-        : Base (t)
-        , value (std::move (v))
-        , location (std::move (l))
-      {}
-#else
-      basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
-        : Base (t)
-        , value (v)
-        , location (l)
-      {}
-#endif
+      basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l);
+      basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l);
+
 
       /// Destroy the symbol.
-      ~basic_symbol ()
-      {
-        clear ();
-      }
+      ~basic_symbol ();
 
       /// Destroy contents, and record that is empty.
-      void clear ()
-      {
-        // User destructor.
-        symbol_number_type yytype = this->type_get ();
-        basic_symbol<Base>& yysym = *this;
-        (void) yysym;
-        switch (yytype)
-        {
-       default:
-          break;
-        }
-
-        // Type destructor.
-switch (yytype)
-    {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
-        value.template destroy< ElementPtr > ();
-        break;
-
-      case 48: // "boolean"
-        value.template destroy< bool > ();
-        break;
-
-      case 47: // "floating point"
-        value.template destroy< double > ();
-        break;
-
-      case 46: // "integer"
-        value.template destroy< int64_t > ();
-        break;
-
-      case 45: // "constant string"
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-        Base::clear ();
-      }
+      void clear ();
 
       /// Whether empty.
-      bool empty () const YY_NOEXCEPT;
+      bool empty () const;
 
       /// Destructive move, \a s is emptied into this.
       void move (basic_symbol& s);
@@ -676,9 +640,9 @@ switch (yytype)
       location_type location;
 
     private:
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
       /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& that);
+      basic_symbol& operator= (const basic_symbol& other);
 #endif
     };
 
@@ -688,13 +652,8 @@ switch (yytype)
       /// Default constructor.
       by_type ();
 
-#if 201103L <= YY_CPLUSPLUS
-      /// Move constructor.
-      by_type (by_type&& that);
-#endif
-
       /// Copy constructor.
-      by_type (const by_type& that);
+      by_type (const by_type& other);
 
       /// The symbol type as needed by the constructor.
       typedef token_type kind_type;
@@ -710,10 +669,10 @@ switch (yytype)
 
       /// The (internal) type number (corresponding to \a type).
       /// \a empty when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+      symbol_number_type type_get () const;
 
       /// The token.
-      token_type token () const YY_NOEXCEPT;
+      token_type token () const;
 
       /// The symbol type.
       /// \a empty_symbol when empty.
@@ -722,81 +681,7 @@ switch (yytype)
     };
 
     /// "External" symbols: returned by the scanner.
-    struct symbol_type : basic_symbol<by_type>
-    {
-      /// Superclass.
-      typedef basic_symbol<by_type> super_type;
-
-      /// Empty symbol.
-      symbol_type () {}
-
-      /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, location_type l)
-        : super_type(token_type (tok), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
-      }
-#else
-      symbol_type (int tok, const location_type& l)
-        : super_type(token_type (tok), l)
-      {
-        YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, bool v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#else
-      symbol_type (int tok, const bool& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_BOOLEAN);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, double v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#else
-      symbol_type (int tok, const double& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_FLOAT);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, int64_t v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#else
-      symbol_type (int tok, const int64_t& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_INTEGER);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      symbol_type (int tok, std::string v, location_type l)
-        : super_type(token_type (tok), std::move (v), std::move (l))
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#else
-      symbol_type (int tok, const std::string& v, const location_type& l)
-        : super_type(token_type (tok), v, l)
-      {
-        YYASSERT (tok == token::TOKEN_STRING);
-      }
-#endif
-    };
+    typedef basic_symbol<by_type> symbol_type;
 
     /// Build a parser object.
     NetconfParser (isc::netconf::ParserContext& ctx_yyarg);
@@ -832,712 +717,199 @@ switch (yytype)
     /// Report a syntax error.
     void error (const syntax_error& err);
 
-    // Implementation of make_symbol for each symbol type.
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_END (location_type l)
-      {
-        return symbol_type (token::TOKEN_END, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_END (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_END, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMA (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMA, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMA (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMA, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COLON (location_type l)
-      {
-        return symbol_type (token::TOKEN_COLON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COLON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COLON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RSQUARE_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RSQUARE_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_RCURLY_BRACKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_RCURLY_BRACKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_RCURLY_BRACKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NULL_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NULL_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NULL_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NETCONF (location_type l)
-      {
-        return symbol_type (token::TOKEN_NETCONF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NETCONF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NETCONF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_USER_CONTEXT (location_type l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_USER_CONTEXT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_USER_CONTEXT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_COMMENT (location_type l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_COMMENT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_COMMENT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_BOOT_UPDATE (location_type l)
-      {
-        return symbol_type (token::TOKEN_BOOT_UPDATE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_BOOT_UPDATE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_BOOT_UPDATE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SUBSCRIBE_CHANGES (location_type l)
-      {
-        return symbol_type (token::TOKEN_SUBSCRIBE_CHANGES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SUBSCRIBE_CHANGES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SUBSCRIBE_CHANGES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_VALIDATE_CHANGES (location_type l)
-      {
-        return symbol_type (token::TOKEN_VALIDATE_CHANGES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_VALIDATE_CHANGES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_VALIDATE_CHANGES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MANAGED_SERVERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_MANAGED_SERVERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MANAGED_SERVERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MANAGED_SERVERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP4_SERVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP4_SERVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP4_SERVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP4_SERVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DHCP6_SERVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_DHCP6_SERVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DHCP6_SERVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DHCP6_SERVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_D2_SERVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_D2_SERVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_D2_SERVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_D2_SERVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CA_SERVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_CA_SERVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CA_SERVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CA_SERVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MODEL (location_type l)
-      {
-        return symbol_type (token::TOKEN_MODEL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MODEL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MODEL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_CONTROL_SOCKET (location_type l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_CONTROL_SOCKET (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_CONTROL_SOCKET, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_TYPE (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_TYPE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_TYPE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_UNIX (location_type l)
-      {
-        return symbol_type (token::TOKEN_UNIX, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_UNIX (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_UNIX, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HTTP (location_type l)
-      {
-        return symbol_type (token::TOKEN_HTTP, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HTTP (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HTTP, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_STDOUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_STDOUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_STDOUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_STDOUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SOCKET_URL (location_type l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_URL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SOCKET_URL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SOCKET_URL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (location_type l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_HOOKS_LIBRARIES (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_HOOKS_LIBRARIES, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LIBRARY (location_type l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LIBRARY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LIBRARY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_PARAMETERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_PARAMETERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_PARAMETERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGING (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGING (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGING, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_LOGGERS (location_type l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_LOGGERS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_LOGGERS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_NAME (location_type l)
-      {
-        return symbol_type (token::TOKEN_NAME, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_NAME (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_NAME, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT_OPTIONS (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_OUTPUT (location_type l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_OUTPUT (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_OUTPUT, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_DEBUGLEVEL (location_type l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_DEBUGLEVEL (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_DEBUGLEVEL, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_SEVERITY (location_type l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_SEVERITY (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_SEVERITY, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLUSH (location_type l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLUSH (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLUSH, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXSIZE (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXSIZE (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXSIZE, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_MAXVER (location_type l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_MAXVER (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_MAXVER, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_START_JSON (location_type l)
-      {
-        return symbol_type (token::TOKEN_START_JSON, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_START_JSON (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_START_JSON, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_START_NETCONF (location_type l)
-      {
-        return symbol_type (token::TOKEN_START_NETCONF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_START_NETCONF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_START_NETCONF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_START_SUB_NETCONF (location_type l)
-      {
-        return symbol_type (token::TOKEN_START_SUB_NETCONF, std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_START_SUB_NETCONF (const location_type& l)
-      {
-        return symbol_type (token::TOKEN_START_SUB_NETCONF, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_STRING (std::string v, location_type l)
-      {
-        return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_STRING (const std::string& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_STRING, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_INTEGER (int64_t v, location_type l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_INTEGER (const int64_t& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_INTEGER, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_FLOAT (double v, location_type l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_FLOAT (const double& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_FLOAT, v, l);
-      }
-#endif
-#if 201103L <= YY_CPLUSPLUS
-      static
-      symbol_type
-      make_BOOLEAN (bool v, location_type l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l));
-      }
-#else
-      static
-      symbol_type
-      make_BOOLEAN (const bool& v, const location_type& l)
-      {
-        return symbol_type (token::TOKEN_BOOLEAN, v, l);
-      }
-#endif
+    // Symbol constructors declarations.
+    static
+    symbol_type
+    make_END (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMA (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COLON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RSQUARE_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_RCURLY_BRACKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NULL_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NETCONF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_USER_CONTEXT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_COMMENT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_BOOT_UPDATE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SUBSCRIBE_CHANGES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_VALIDATE_CHANGES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MANAGED_SERVERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP4_SERVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DHCP6_SERVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_D2_SERVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CA_SERVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MODEL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_CONTROL_SOCKET (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_TYPE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_UNIX (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HTTP (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_STDOUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SOCKET_URL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_HOOKS_LIBRARIES (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LIBRARY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PARAMETERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGING (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_LOGGERS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_NAME (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_OUTPUT (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_DEBUGLEVEL (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_SEVERITY (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLUSH (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXSIZE (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_MAXVER (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_PATTERN (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_START_JSON (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_START_NETCONF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_START_SUB_NETCONF (YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l);
+
+    static
+    symbol_type
+    make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l);
+
 
 
   private:
@@ -1645,26 +1017,26 @@ switch (yytype)
     struct by_state
     {
       /// Default constructor.
-      by_state () YY_NOEXCEPT;
+      by_state ();
 
       /// The symbol type as needed by the constructor.
       typedef state_type kind_type;
 
       /// Constructor.
-      by_state (kind_type s) YY_NOEXCEPT;
+      by_state (kind_type s);
 
       /// Copy constructor.
-      by_state (const by_state& that) YY_NOEXCEPT;
+      by_state (const by_state& other);
 
       /// Record that this symbol is empty.
-      void clear () YY_NOEXCEPT;
+      void clear ();
 
       /// Steal the symbol type from \a that.
       void move (by_state& that);
 
       /// The (internal) type number (corresponding to \a state).
       /// \a empty_symbol when empty.
-      symbol_number_type type_get () const YY_NOEXCEPT;
+      symbol_number_type type_get () const;
 
       /// The state number used to denote an empty symbol.
       enum { empty_state = -1 };
@@ -1685,137 +1057,13 @@ switch (yytype)
       stack_symbol_type (YY_RVREF (stack_symbol_type) that);
       /// Steal the contents from \a sym to build this.
       stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
+#if !defined __cplusplus || __cplusplus < 201103L
       /// Assignment, needed by push_back by some old implementations.
       /// Moves the contents of that.
       stack_symbol_type& operator= (stack_symbol_type& that);
 #endif
     };
 
-    /// A stack with random access from its top.
-    template <typename T, typename S = std::vector<T> >
-    class stack
-    {
-    public:
-      // Hide our reversed order.
-      typedef typename S::reverse_iterator iterator;
-      typedef typename S::const_reverse_iterator const_iterator;
-      typedef typename S::size_type size_type;
-
-      stack (size_type n = 200)
-        : seq_ (n)
-      {}
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (size_type i)
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      T&
-      operator[] (int i)
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (size_type i) const
-      {
-        return seq_[size () - 1 - i];
-      }
-
-      /// Random access.
-      ///
-      /// Index 0 returns the topmost element.
-      const T&
-      operator[] (int i) const
-      {
-        return operator[] (size_type (i));
-      }
-
-      /// Steal the contents of \a t.
-      ///
-      /// Close to move-semantics.
-      void
-      push (YY_MOVE_REF (T) t)
-      {
-        seq_.push_back (T ());
-        operator[] (0).move (t);
-      }
-
-      /// Pop elements from the stack.
-      void
-      pop (int n = 1) YY_NOEXCEPT
-      {
-        for (; 0 < n; --n)
-          seq_.pop_back ();
-      }
-
-      /// Pop all elements from the stack.
-      void
-      clear () YY_NOEXCEPT
-      {
-        seq_.clear ();
-      }
-
-      /// Number of elements on the stack.
-      size_type
-      size () const YY_NOEXCEPT
-      {
-        return seq_.size ();
-      }
-
-      /// Iterator on top of the stack (going downwards).
-      const_iterator
-      begin () const YY_NOEXCEPT
-      {
-        return seq_.rbegin ();
-      }
-
-      /// Bottom of the stack.
-      const_iterator
-      end () const YY_NOEXCEPT
-      {
-        return seq_.rend ();
-      }
-
-      /// Present a slice of the top of a stack.
-      class slice
-      {
-      public:
-        slice (const stack& stack, int range)
-          : stack_ (stack)
-          , range_ (range)
-        {}
-
-        const T&
-        operator[] (int i) const
-        {
-          return stack_[range_ - i];
-        }
-
-      private:
-        const stack& stack_;
-        int range_;
-      };
-
-    private:
-      stack (const stack&);
-      stack& operator= (const stack&);
-      /// The wrapped container.
-      S seq_;
-    };
-
-
     /// Stack type.
     typedef stack<stack_symbol_type> stack_type;
 
@@ -1844,12 +1092,12 @@ switch (yytype)
     enum
     {
       yyeof_ = 0,
-      yylast_ = 232,     ///< Last index in yytable_.
-      yynnts_ = 103,  ///< Number of nonterminal symbols.
+      yylast_ = 234,     ///< Last index in yytable_.
+      yynnts_ = 105,  ///< Number of nonterminal symbols.
       yyfinal_ = 8, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 49  ///< Number of tokens.
+      yyntokens_ = 50  ///< Number of tokens.
     };
 
 
@@ -1857,17 +1105,16 @@ switch (yytype)
     isc::netconf::ParserContext& ctx;
   };
 
+  // Symbol number corresponding to token number t.
   inline
   NetconfParser::token_number_type
   NetconfParser::yytranslate_ (token_type t)
   {
-    // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
-    // TOKEN-NUM as returned by yylex.
     static
     const token_number_type
     translate_table[] =
     {
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1897,9 +1144,9 @@ switch (yytype)
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48
+      45,    46,    47,    48,    49
     };
-    const unsigned user_token_number_max_ = 303;
+    const unsigned user_token_number_max_ = 304;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int> (t) <= yyeof_)
@@ -1910,36 +1157,47 @@ switch (yytype)
       return undef_token_;
   }
 
+  inline
+  NetconfParser::syntax_error::syntax_error (const location_type& l, const std::string& m)
+    : std::runtime_error (m)
+    , location (l)
+  {}
+
   // basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
   template <typename Base>
-  NetconfParser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
-    : Base (std::move (that))
+  NetconfParser::basic_symbol<Base>::basic_symbol ()
+    : value ()
+    , location ()
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (YY_RVREF (basic_symbol) other)
+    : Base (YY_MOVE (other))
     , value ()
-    , location (std::move (that.location))
+    , location (YY_MOVE (other.location))
   {
-    switch (this->type_get ())
+    switch (other.type_get ())
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
-        value.move< ElementPtr > (std::move (that.value));
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
+        value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value));
         break;
 
-      case 48: // "boolean"
-        value.move< bool > (std::move (that.value));
+      case 49: // "boolean"
+        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value));
         break;
 
-      case 47: // "floating point"
-        value.move< double > (std::move (that.value));
+      case 48: // "floating point"
+        value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value));
         break;
 
-      case 46: // "integer"
-        value.move< int64_t > (std::move (that.value));
+      case 47: // "integer"
+        value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value));
         break;
 
-      case 45: // "constant string"
-        value.move< std::string > (std::move (that.value));
+      case 46: // "constant string"
+        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value));
         break;
 
       default:
@@ -1947,49 +1205,107 @@ switch (yytype)
     }
 
   }
-#endif
 
+
+  // Implementation of basic_symbol constructor for each type.
   template <typename Base>
-  NetconfParser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
-    : Base (that)
-    , value ()
-    , location (that.location)
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l)
+    : Base (t)
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l)
+    : Base (t)
+    , value (YY_MOVE (v))
+    , location (YY_MOVE (l))
+  {}
+
+
+
+  template <typename Base>
+  NetconfParser::basic_symbol<Base>::~basic_symbol ()
   {
-    switch (this->type_get ())
+    clear ();
+  }
+
+  template <typename Base>
+  void
+  NetconfParser::basic_symbol<Base>::clear ()
+  {
+    // User destructor.
+    symbol_number_type yytype = this->type_get ();
+    basic_symbol<Base>& yysym = *this;
+    (void) yysym;
+    switch (yytype)
+    {
+   default:
+      break;
+    }
+
+    // Type destructor.
+  switch (yytype)
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
-        value.copy< ElementPtr > (YY_MOVE (that.value));
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
+        value.template destroy< ElementPtr > ();
         break;
 
-      case 48: // "boolean"
-        value.copy< bool > (YY_MOVE (that.value));
+      case 49: // "boolean"
+        value.template destroy< bool > ();
         break;
 
-      case 47: // "floating point"
-        value.copy< double > (YY_MOVE (that.value));
+      case 48: // "floating point"
+        value.template destroy< double > ();
         break;
 
-      case 46: // "integer"
-        value.copy< int64_t > (YY_MOVE (that.value));
+      case 47: // "integer"
+        value.template destroy< int64_t > ();
         break;
 
-      case 45: // "constant string"
-        value.copy< std::string > (YY_MOVE (that.value));
+      case 46: // "constant string"
+        value.template destroy< std::string > ();
         break;
 
       default:
         break;
     }
 
+    Base::clear ();
   }
 
-
-
   template <typename Base>
   bool
-  NetconfParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
+  NetconfParser::basic_symbol<Base>::empty () const
   {
     return Base::type_get () == empty_symbol;
   }
@@ -2001,25 +1317,25 @@ switch (yytype)
     super_type::move (s);
     switch (this->type_get ())
     {
-      case 57: // value
-      case 60: // map_value
-      case 119: // socket_type_value
+      case 58: // value
+      case 61: // map_value
+      case 120: // socket_type_value
         value.move< ElementPtr > (YY_MOVE (s.value));
         break;
 
-      case 48: // "boolean"
+      case 49: // "boolean"
         value.move< bool > (YY_MOVE (s.value));
         break;
 
-      case 47: // "floating point"
+      case 48: // "floating point"
         value.move< double > (YY_MOVE (s.value));
         break;
 
-      case 46: // "integer"
+      case 47: // "integer"
         value.move< int64_t > (YY_MOVE (s.value));
         break;
 
-      case 45: // "constant string"
+      case 46: // "constant string"
         value.move< std::string > (YY_MOVE (s.value));
         break;
 
@@ -2036,18 +1352,9 @@ switch (yytype)
     : type (empty_symbol)
   {}
 
-#if 201103L <= YY_CPLUSPLUS
-  inline
-  NetconfParser::by_type::by_type (by_type&& that)
-    : type (that.type)
-  {
-    that.clear ();
-  }
-#endif
-
   inline
-  NetconfParser::by_type::by_type (const by_type& that)
-    : type (that.type)
+  NetconfParser::by_type::by_type (const by_type& other)
+    : type (other.type)
   {}
 
   inline
@@ -2072,14 +1379,14 @@ switch (yytype)
 
   inline
   int
-  NetconfParser::by_type::type_get () const YY_NOEXCEPT
+  NetconfParser::by_type::type_get () const
   {
     return type;
   }
 
   inline
   NetconfParser::token_type
-  NetconfParser::by_type::token () const YY_NOEXCEPT
+  NetconfParser::by_type::token () const
   {
     // YYTOKNUM[NUM] -- (External) token number corresponding to the
     // (internal) symbol number NUM (which must be that of a token).  */
@@ -2091,15 +1398,352 @@ switch (yytype)
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304
     };
-    return token_type (yytoken_number_[type]);
+    return static_cast<token_type> (yytoken_number_[type]);
   }
 
-#line 14 "netconf_parser.yy"
-} } // isc::netconf
-#line 2102 "netconf_parser.h"
+  // Implementation of make_symbol for each symbol type.
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_END (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_END, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_COMMA (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMA, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_COLON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COLON, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_LSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_RSQUARE_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_LCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_RCURLY_BRACKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_NULL_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_NETCONF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NETCONF, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_USER_CONTEXT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_COMMENT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_BOOT_UPDATE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_BOOT_UPDATE, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_SUBSCRIBE_CHANGES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SUBSCRIBE_CHANGES, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_VALIDATE_CHANGES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_VALIDATE_CHANGES, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_MANAGED_SERVERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MANAGED_SERVERS, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_DHCP4_SERVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP4_SERVER, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_DHCP6_SERVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DHCP6_SERVER, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_D2_SERVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_D2_SERVER, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_CA_SERVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CA_SERVER, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_MODEL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MODEL, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_CONTROL_SOCKET (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_SOCKET_TYPE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_TYPE, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_UNIX (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_UNIX, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_HTTP (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HTTP, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_STDOUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_STDOUT, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_SOCKET_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_NAME, YY_MOVE (l));
+  }
 
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_SOCKET_URL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SOCKET_URL, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_HOOKS_LIBRARIES (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_HOOKS_LIBRARIES, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_LIBRARY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LIBRARY, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_PARAMETERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PARAMETERS, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_LOGGING (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_LOGGERS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_NAME (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_NAME, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_OUTPUT (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_DEBUGLEVEL (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_SEVERITY (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_FLUSH (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_MAXSIZE (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_MAXVER (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_PATTERN (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_PATTERN, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_START_JSON (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_START_JSON, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_START_NETCONF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_START_NETCONF, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_START_SUB_NETCONF (YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_START_SUB_NETCONF, YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l));
+  }
+
+  inline
+  NetconfParser::symbol_type
+  NetconfParser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l));
+  }
+
+
+#line 14 "netconf_parser.yy" // lalr1.cc:404
+} } // isc::netconf
+#line 1747 "netconf_parser.h" // lalr1.cc:404
 
 
 
index 56898e07b974f0184d92ef605cf21498b851bff5..438e253fb38c4977315c2944c8d99f28f956123b 100644 (file)
@@ -85,6 +85,7 @@ using namespace std;
   FLUSH "flush"
   MAXSIZE "maxsize"
   MAXVER "maxver"
+  PATTERN "pattern"
 
   // Not real tokens, just a way to signal what the parser is expected to
   // parse. This define the starting point. It either can be full grammar
@@ -673,6 +674,7 @@ output_params: output
              | flush
              | maxsize
              | maxver
+             | pattern
              ;
 
 output: OUTPUT {
@@ -698,6 +700,14 @@ maxver: MAXVER COLON INTEGER {
     ctx.stack_.back()->set("maxver", maxver);
 };
 
+pattern: PATTERN {
+    ctx.enter(ctx.NO_KEYWORDS);
+} COLON STRING {
+    ElementPtr sev(new StringElement($4, ctx.loc2pos(@4)));
+    ctx.stack_.back()->set("pattern", sev);
+    ctx.leave();
+};
+
 %%
 
 void
index 4640297fec34b109881e886e8bf418c08321b05e..22ef35f744d2e26eb583a751ca8d621cf4b3a5bd 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201906181715
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined in "location.hh".
index 5bfd9a64429fbdede4d8e2142b22aca031bb7ba4..81e152d836b96a78a0b6b5cd75d1557e8601f5d0 100644 (file)
@@ -1,5 +1,4 @@
-// Generated 201906181715
-// A Bison parser, made by GNU Bison 3.4.1.
+// A Bison parser, made by GNU Bison 3.2.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined with the parser itself.