]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- access-control-tag config directive.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Jun 2016 08:33:59 +0000 (08:33 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 6 Jun 2016 08:33:59 +0000 (08:33 +0000)
git-svn-id: file:///svn/unbound/trunk@3754 be551aaa-1e26-0410-a405-d3ace91eadb9

13 files changed:
daemon/acl_list.c
daemon/acl_list.h
doc/Changelog
doc/example.conf.in
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/storage/dnstree.c
util/storage/dnstree.h

index 84d099ca5092b12fc945c3f8c3cfc4c9bc342fa0..d663295bd23227079a728fcde19350703f575b80 100644 (file)
@@ -71,7 +71,7 @@ acl_list_delete(struct acl_list* acl)
 }
 
 /** insert new address into acl_list structure */
-static int
+static struct acl_addr*
 acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr, 
        socklen_t addrlen, int net, enum acl_access control, 
        int complain_duplicates)
@@ -79,13 +79,15 @@ acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr,
        struct acl_addr* node = regional_alloc(acl->region,
                sizeof(struct acl_addr));
        if(!node)
-               return 0;
+               return NULL;
        node->control = control;
+       node->taglist = NULL;
+       node->taglen = 0;
        if(!addr_tree_insert(&acl->tree, &node->node, addr, addrlen, net)) {
                if(complain_duplicates)
                        verbose(VERB_QUERY, "duplicate acl address ignored.");
        }
-       return 1;
+       return node;
 }
 
 /** apply acl_list string */
@@ -125,6 +127,40 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2,
        return 1;
 }
 
+/** apply acl_tag string */
+static int
+acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap,
+       size_t bitmaplen)
+{
+       struct sockaddr_storage addr;
+       int net;
+       socklen_t addrlen;
+       struct acl_addr* node;
+       if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) {
+               log_err("cannot parse netblock in access-control-tag: %s", str);
+               return 0;
+       }
+       /* find or create node */
+       if(!(node=(struct acl_addr*)addr_tree_find(&acl->tree, &addr,
+               addrlen, net))) {
+               /* create node, type 'allow' since otherwise tags are
+                * pointless, can override with specific access-control: cfg */
+               if(!(node=(struct acl_addr*)acl_list_insert(acl, &addr,
+                       addrlen, net, acl_allow, 1))) {
+                       log_err("out of memory");
+                       return 0;
+               }
+       }
+       log_assert(node);
+       node->taglen = bitmaplen;
+       node->taglist = regional_alloc_init(acl->region, bitmap, bitmaplen);
+       if(!node->taglist) {
+               log_err("out of memory");
+               return 0;
+       }
+       return 1;
+}
+
 /** read acl_list config */
 static int 
 read_acl_list(struct acl_list* acl, struct config_file* cfg)
@@ -138,6 +174,19 @@ read_acl_list(struct acl_list* acl, struct config_file* cfg)
        return 1;
 }
 
+/** read acl tags config */
+static int 
+read_acl_tags(struct acl_list* acl, struct config_file* cfg)
+{
+       struct config_strbytelist* p;
+       for(p = cfg->acl_tags; p; p = p->next) {
+               log_assert(p->str && p->str2);
+               if(!acl_list_tags_cfg(acl, p->str, p->str2, p->str2len))
+                       return 0;
+       }
+       return 1;
+}
+
 int 
 acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg)
 {
@@ -145,6 +194,8 @@ acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg)
        addr_tree_init(&acl->tree);
        if(!read_acl_list(acl, cfg))
                return 0;
+       if(!read_acl_tags(acl, cfg))
+               return 0;
        /* insert defaults, with '0' to ignore them if they are duplicates */
        if(!acl_list_str_cfg(acl, "0.0.0.0/0", "refuse", 0))
                return 0;
index 2323697d5b84dddf509605e785f93370734c2fa9..c3f033f2a2e6ec373511ad391fccd11b5e59d1b3 100644 (file)
@@ -87,6 +87,10 @@ struct acl_addr {
        struct addr_tree_node node;
        /** access control on this netblock */
        enum acl_access control;
+       /** tag bitlist */
+       uint8_t* taglist;
+       /** length of the taglist (in bytes) */
+       size_t taglen;
 };
 
 /**
index 86cb5f277253af64c4ea744706b802cc443fa36c..5e0810fc5b71fa9089d5e0d151f2f627c9859c70 100644 (file)
@@ -1,5 +1,6 @@
 6 June 2016: Wouter
        - Better help text from -h (from Ray Griffith).
+       - access-control-tag config directive.
 
 3 June 2016: Wouter
        - Fix to not ignore return value of chown() in daemon startup.
index 179008f45d9ed72c1c8ccae11f4f359a1110c93b..84bb145072401625479aaf79f1adc02bdc6c13c9 100644 (file)
@@ -203,6 +203,11 @@ server:
        # access-control: ::1 allow
        # access-control: ::ffff:127.0.0.1 allow
 
+       # tag access-control with list of tags (in "" with spaces between)
+       # Clients using this access control element use localzones that
+       # are tagged with one of these tags.
+       # access-control-tag: "192.0.2.0/24" "tag2 tag3"
+
        # if given, a chroot(2) is done to the given directory.
        # i.e. you can chroot to the working directory, for example,
        # for extra security, but make sure all files are in that directory.
index 3e72bcad06b11942cc7d39c9abc3ee899454b55f..76c7f2cc887988509cd3ea4c9d04b2d1e85edbd2 100644 (file)
@@ -784,6 +784,7 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_YNO(opt, "qname-minimisation", qname_minimisation)
        else O_IFC(opt, "define-tag", num_tags, tagname)
        else O_LTG(opt, "local-zone-tag", local_zone_tags)
+       else O_LTG(opt, "access-control-tag", acl_tags)
        /* not here:
         * outgoing-permit, outgoing-avoid - have list of ports
         * local-zone - zones and nodefault variables
@@ -1022,6 +1023,7 @@ config_delete(struct config_file* cfg)
        config_delstrlist(cfg->local_data);
        config_del_strarray(cfg->tagname, cfg->num_tags);
        config_del_strbytelist(cfg->local_zone_tags);
+       config_del_strbytelist(cfg->acl_tags);
        config_delstrlist(cfg->control_ifs);
        free(cfg->server_key_file);
        free(cfg->server_cert_file);
index a51cdb464c0c7282f5ac95f595930236d66020a7..9a82a8f6d58f735f1f222bd0acad2180fb70b485 100644 (file)
@@ -298,6 +298,8 @@ struct config_file {
        int insecure_lan_zones;
        /** list of zonename, tagbitlist */
        struct config_strbytelist* local_zone_tags;
+       /** list of aclname, tagbitlist */
+       struct config_strbytelist* acl_tags;
        /** tag list, array with tagname[i] is malloced string */
        char** tagname;
        /** number of items in the taglist */
index 9223aacf7f95c94e21163a5fcf8ff79cb077e180..940f484cae4af97814c02ca7710e4d558f73222a 100644 (file)
@@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 183
-#define YY_END_OF_BUFFER 184
+#define YY_NUM_RULES 184
+#define YY_END_OF_BUFFER 185
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -387,211 +387,212 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[1847] =
+static yyconst flex_int16_t yy_accept[1852] =
     {   0,
-        1,    1,  165,  165,  169,  169,  173,  173,  177,  177,
-        1,    1,  184,  181,    1,  163,  163,  182,    2,  182,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      165,  166,  166,  167,  182,  169,  170,  170,  171,  182,
-      176,  173,  174,  174,  175,  182,  177,  178,  178,  179,
-      182,  180,  164,    2,  168,  182,  180,  181,    0,    1,
-        2,    2,    2,    2,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  165,    0,  169,    0,
-      176,    0,  173,  177,    0,  180,    0,    2,    2,  180,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  180,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  180,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   74,  181,  181,  181,  181,  181,  181,    7,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  180,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  180,  181,  181,  181,  181,  181,   34,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  143,  181,
-       13,   14,  181,   16,   15,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  134,  181,  181,  181,
-      181,  181,  181,  181,    3,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  180,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  172,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   37,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,   38,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,   18,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,   89,  172,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-       88,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,   72,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,   23,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   35,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,   36,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   25,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  157,  181,  181,  181,  181,  181,  181,   29,
-      181,   30,  181,  181,  181,   75,  181,   76,  181,   73,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,    6,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  141,
-      181,  181,  181,  181,   91,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,   26,  181,
-      181,  181,  181,  181,  181,  117,  181,  116,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,   39,  181,  181,  181,  181,  181,  181,
-      181,  181,   78,   77,  181,  181,  181,  181,  181,  181,
-      181,  113,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,   57,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,   61,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   33,  181,  181,  181,  181,  181,  181,  181,  115,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,    5,
-
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  109,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  127,  181,  110,  181,  181,  139,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,   24,  181,  181,
-      181,  181,   80,  181,   81,   79,  181,  181,  181,  181,
-      181,  181,  181,   87,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  111,  181,  181,  181,
-
-      181,  181,  138,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,   71,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   31,  181,  181,   20,  181,  181,  181,   17,  181,
-       96,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,   46,   48,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  144,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-       82,  181,  181,  181,  181,  181,  181,   86,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  181,  181,  181,  181,  181,   90,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      133,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  100,  181,  104,  181,  181,  181,  181,
-       85,  181,  181,   67,  181,  125,  181,  181,  181,  181,
-      181,  140,  181,  181,  181,  181,  181,  181,  181,  149,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  103,  181,  181,  181,  181,  181,   49,   50,  181,
-      181,   32,   56,  105,  181,  118,  142,  114,  181,  181,
-
-       42,  181,  107,  181,  181,  181,  181,  181,    8,  181,
-      181,  181,   70,  181,  181,  181,  181,  159,  181,  124,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,   92,  148,
-      181,  181,  181,  181,  181,  181,  181,  181,  135,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  106,  181,   41,   43,  181,  181,
-      181,  181,  181,  181,  181,   69,  181,  181,  181,  181,
-      158,  181,  181,  181,  181,  129,   21,   22,  181,  181,
-
-      181,  181,  181,  181,  181,   66,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  131,  128,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,   40,  181,  181,
-      181,  181,  181,  181,  181,   12,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,   11,  181,  181,   19,  181,
-      181,  181,  162,  181,   44,  181,  137,  130,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,   99,
-       98,  181,  181,  132,  126,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,   51,  181,  181,  136,  181,  181,
-
-      181,  181,  181,  181,  181,  181,   45,  181,  181,  181,
-       93,   95,  119,  181,  181,  181,   97,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  145,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      120,  181,  181,   27,  181,  181,  181,    4,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  147,  181,  181,  123,  181,
-      181,  181,  181,  181,  181,  181,   54,  181,   28,  181,
-       10,  181,  181,  181,  181,  181,  121,   58,  181,  181,
-      181,  102,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      146,   83,  181,  181,  181,  181,   60,   64,   59,  181,
-       52,  181,    9,  181,  181,  160,  181,  181,  101,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-       65,   63,  181,   53,  181,  112,  181,  122,  181,  181,
-       94,   47,  181,  181,  181,  181,  181,  181,  181,   84,
-       62,   55,  161,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,   68,  181,  156,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-
-      181,  108,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      152,  181,  181,  181,  181,  181,  181,  181,  181,  181,
-      181,  181,  181,  181,  150,  181,  153,  154,  181,  181,
-      181,  181,  181,  151,  155,    0
+        1,    1,  166,  166,  170,  170,  174,  174,  178,  178,
+        1,    1,  185,  182,    1,  164,  164,  183,    2,  183,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      166,  167,  167,  168,  183,  170,  171,  171,  172,  183,
+      177,  174,  175,  175,  176,  183,  178,  179,  179,  180,
+      183,  181,  165,    2,  169,  183,  181,  182,    0,    1,
+        2,    2,    2,    2,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  166,    0,  170,    0,
+      177,    0,  174,  178,    0,  181,    0,    2,    2,  181,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  181,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  181,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   74,  182,  182,  182,  182,  182,  182,    7,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  181,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  181,  182,  182,  182,  182,  182,   34,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  144,  182,
+       13,   14,  182,   16,   15,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  134,  182,  182,  182,
+      182,  182,  182,  182,    3,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  181,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  173,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   37,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,   38,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,   18,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,   89,  173,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       88,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,   72,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,   23,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   35,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,   36,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   25,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  158,  182,  182,  182,  182,  182,  182,   29,
+      182,   30,  182,  182,  182,   75,  182,   76,  182,   73,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,    6,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  141,
+      182,  182,  182,  182,   91,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   26,  182,
+      182,  182,  182,  182,  182,  117,  182,  116,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,   39,  182,  182,  182,  182,  182,  182,
+      182,  182,   78,   77,  182,  182,  182,  182,  182,  182,
+      182,  113,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,   57,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   61,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   33,  182,  182,  182,  182,  182,  182,  182,  115,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,    5,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  109,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  127,  182,  110,  182,  182,  139,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,   24,  182,  182,
+      182,  182,   80,  182,   81,   79,  182,  182,  182,  182,
+      182,  182,  182,   87,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  111,  182,  182,  182,
+
+      182,  182,  138,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,   71,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,   31,  182,  182,   20,  182,  182,  182,   17,  182,
+       96,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,   46,   48,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  145,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       82,  182,  182,  182,  182,  182,  182,   86,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,   90,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      133,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  100,  182,  104,  182,  182,  182,  182,
+      182,   85,  182,  182,   67,  182,  125,  182,  182,  182,
+      182,  182,  140,  182,  182,  182,  182,  182,  182,  182,
+      150,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  103,  182,  182,  182,  182,  182,   49,   50,
+      182,  182,   32,   56,  105,  182,  118,  142,  114,  182,
+
+      182,   42,  182,  107,  182,  182,  182,  182,  182,    8,
+      182,  182,  182,   70,  182,  182,  182,  182,  160,  182,
+      124,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       92,  149,  182,  182,  182,  182,  182,  182,  182,  182,
+      135,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  106,  182,   41,   43,
+      182,  182,  182,  182,  182,  182,  182,   69,  182,  182,
+      182,  182,  159,  182,  182,  182,  182,  129,   21,   22,
+
+      182,  182,  182,  182,  182,  182,  182,   66,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  131,
+      128,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+       40,  182,  182,  182,  182,  182,  182,  182,   12,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   11,  182,
+      182,   19,  182,  182,  182,  163,  182,   44,  182,  137,
+      130,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,   99,   98,  182,  182,  182,  132,  126,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,   51,  182,
+
+      182,  136,  182,  182,  182,  182,  182,  182,  182,  182,
+       45,  182,  182,  182,   93,   95,  119,  182,  182,  182,
+       97,  182,  143,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  146,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  120,  182,  182,   27,  182,
+      182,  182,    4,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      148,  182,  182,  123,  182,  182,  182,  182,  182,  182,
+      182,   54,  182,   28,  182,   10,  182,  182,  182,  182,
+      182,  121,   58,  182,  182,  182,  102,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  147,   83,  182,  182,  182,
+      182,   60,   64,   59,  182,   52,  182,    9,  182,  182,
+      161,  182,  182,  101,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,   65,   63,  182,   53,  182,
+      112,  182,  122,  182,  182,   94,   47,  182,  182,  182,
+      182,  182,  182,  182,   84,   62,   55,  162,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,   68,  182,  157,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  108,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  153,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  151,
+      182,  154,  155,  182,  182,  182,  182,  182,  152,  156,
+        0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -634,10 +635,10 @@ static yyconst YY_CHAR yy_meta[40] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[1861] =
+static yyconst flex_uint16_t yy_base[1866] =
     {   0,
         0,    0,   37,   40,   44,   51,   63,   75,   56,   68,
-       87,  108, 2620, 2459,   50, 3655, 3655, 3655,  129,   94,
+       87,  108, 3326, 2459,   50, 3655, 3655, 3655,  129,   94,
        70,  104,  130,   90,   92,  115,  127,   95,   84,  111,
       137,  148,   50,  170,  122,  150,  157,  160,  140,  166,
      2191, 3655, 3655, 3655,   70, 2071, 3655, 3655, 3655,   42,
@@ -773,281 +774,283 @@ static yyconst flex_uint16_t yy_base[1861] =
      2489, 2491, 2493, 2499, 2496, 2495, 2502, 2503, 2505, 2508,
      2504, 3655, 2518, 2519, 3655, 2509, 2510, 2511, 3655, 2520,
      3655, 2525, 2521, 2528, 2529, 2533, 2534, 2540, 2535, 2537,
-     2542, 2544, 2546, 2548, 2549, 3655, 3655, 2551, 2552, 2559,
-     2562, 2555, 2560, 2570, 2566, 2573, 3655, 2564, 2574, 2568,
-     2575, 2576, 2577, 2580, 2583, 2584, 2585, 2587, 2586, 2594,
-     3655, 2593, 2597, 2598, 2599, 2602, 2601, 3655, 2604, 2605,
-     2606, 2609, 2611, 2625, 2628, 2630, 2618, 2631, 2635, 2637,
-
-     2639, 2632, 2641, 2643, 2646, 2647, 3655, 2610, 2649, 2650,
-     2653, 2654, 2655, 2656, 2657, 2663, 2660, 2665, 2664, 2668,
-     3655, 2670, 2671, 2674, 2677, 2676, 2678, 2685, 2682, 2686,
-     2691, 2692, 2688, 2695, 2696, 2698, 2701, 2699, 2702, 2703,
-     2707, 2710, 2713, 3655, 2715, 3655, 2716, 2722, 2729, 2727,
-     3655, 2718, 2730, 3655, 2726, 3655, 2731, 2732, 2740, 2741,
-     2743, 3655, 2745, 2747, 2748, 2746, 2750, 2751, 2754, 3655,
-     2752, 2759, 2766, 2763, 2757, 2767, 2769, 2771, 2774, 2780,
-     2772, 3655, 2776, 2782, 2788, 2785, 2784, 3655, 3655, 2789,
-     2794, 3655, 3655, 3655, 2797, 3655, 3655, 3655, 2799, 2801,
-
-     3655, 2806, 3655, 2807, 2808, 2798, 2790, 2810, 3655, 2811,
-     2813, 2817, 3655, 2818, 2824, 2820, 2821, 3655, 2823, 3655,
-     2826, 2832, 2828, 2835, 2844, 2846, 2848, 2829, 2833, 2837,
-     2850, 2852, 2853, 2839, 2855, 2856, 2857, 2860, 2861, 2863,
-     2867, 2866, 2868, 2870, 2871, 2873, 2878, 2885, 3655, 3655,
-     2869, 2879, 2882, 2888, 2891, 2892, 2893, 2894, 3655, 2899,
-     2896, 2902, 2901, 2903, 2906, 2907, 2910, 2914, 2920, 2917,
-     2918, 2919, 2922, 2925, 3655, 2928, 3655, 3655, 2926, 2931,
-     2937, 2939, 2930, 2941, 2949, 3655, 2942, 2951, 2944, 2950,
-     3655, 2959, 2952, 2961, 2965, 3655, 3655, 3655, 2966, 2956,
-
-     2968, 2969, 2970, 2962, 2972, 3655, 2973, 2979, 2982, 2976,
-     2986, 2990, 2997, 2993, 2995, 3000, 3655, 3655, 2983, 3006,
-     3003, 3004, 3002, 3005, 3008, 3010, 3012, 3655, 3014, 3013,
-     3019, 3018, 3021, 3022, 3025, 3655, 3026, 3028, 3033, 3036,
-     3037, 3029, 3040, 3041, 3042, 3655, 3044, 3046, 3655, 3050,
-     3043, 3051, 3655, 3060, 3655, 3063, 3655, 3655, 3055, 3064,
-     3067, 3069, 3072, 3074, 3058, 3077, 3083, 3080, 3081, 3655,
-     3655, 3082, 3089, 3655, 3655, 3087, 3086, 3090, 3093, 3094,
-     3096, 3098, 3099, 3100, 3101, 3105, 3112, 3107, 3116, 3102,
-     3109, 3115, 3117, 3119, 3655, 3126, 3127, 3655, 3128, 3132,
-
-     3129, 3134, 3136, 3141, 3142, 3138, 3655, 3144, 3145, 3148,
-     3655, 3655, 3655, 3149, 3158, 3152, 3655, 3160, 3162, 3150,
-     3168, 3156, 3164, 3166, 3172, 3174, 3176, 3655, 3178, 3179,
-     3181, 3182, 3183, 3185, 3187, 3188, 3190, 3189, 3203, 3191,
-     3655, 3205, 3193, 3655, 3208, 3200, 3209, 3655, 3211, 3213,
-     3214, 3217, 3219, 3221, 3222, 3223, 3225, 3226, 3228, 3230,
-     3237, 3231, 3244, 3229, 3252, 3655, 3254, 3241, 3655, 3256,
-     3235, 3257, 3259, 3264, 3266, 3267, 3655, 3269, 3655, 3270,
-     3655, 3274, 3275, 3276, 3278, 3279, 3655, 3655, 3280, 3282,
-     3286, 3655, 3287, 3283, 3290, 3293, 3294, 3296, 3297, 3299,
-
-     3655, 3655, 3300, 3302, 3306, 3303, 3655, 3655, 3655, 3309,
-     3655, 3312, 3655, 3322, 3315, 3655, 3324, 3317, 3655, 3319,
-     3326, 3328, 3330, 3331, 3333, 3334, 3336, 3338, 3339, 3345,
-     3655, 3655, 3347, 3655, 3350, 3655, 3352, 3655, 3342, 3359,
-     3655, 3655, 3361, 3362, 3353, 3363, 3365, 3369, 3366, 3655,
-     3655, 3655, 3655, 3370, 3371, 3372, 3373, 3375, 3377, 3376,
-     3378, 3381, 3380, 3388, 3390, 3393, 3399, 3385, 3400, 3406,
-     3402, 3655, 3405, 3655, 3407, 3413, 3414, 3411, 3417, 3412,
-     3418, 3419, 3421, 3422, 3423, 3424, 3428, 3427, 3436, 3439,
-     3440, 3443, 3441, 3452, 3450, 3451, 3453, 3454, 3461, 3455,
-
-     3457, 3655, 3459, 3462, 3463, 3465, 3466, 3471, 3468, 3479,
-     3483, 3485, 3486, 3469, 3492, 3489, 3494, 3495, 3497, 3498,
-     3655, 3499, 3500, 3503, 3506, 3507, 3509, 3510, 3511, 3516,
-     3513, 3519, 3524, 3526, 3655, 3527, 3655, 3655, 3530, 3521,
-     3531, 3537, 3539, 3655, 3655, 3655, 3563, 3570, 3577, 3584,
-     3591,   94, 3598, 3605, 3612, 3619, 3626, 3633, 3640, 3647
+     2542, 2544, 2550, 2548, 2546, 3655, 3655, 2552, 2555, 2559,
+     2560, 2562, 2563, 2570, 2567, 2569, 3655, 2571, 2573, 2575,
+     2576, 2577, 2579, 2583, 2585, 2586, 2580, 2587, 2588, 2589,
+     3655, 2593, 2594, 2600, 2601, 2603, 2602, 3655, 2605, 2606,
+     2607, 2610, 2612, 2626, 2629, 2631, 2617, 2621, 2636, 2638,
+
+     2640, 2633, 2642, 2644, 2646, 2647, 3655, 2648, 2650, 2651,
+     2655, 2656, 2657, 2658, 2659, 2665, 2662, 2667, 2668, 2672,
+     3655, 2669, 2673, 2676, 2679, 2678, 2680, 2685, 2686, 2692,
+     2688, 2690, 2695, 2694, 2698, 2701, 2703, 2705, 2704, 2706,
+     2707, 2714, 2723, 3655, 2710, 3655, 2716, 2717, 2729, 2731,
+     2726, 3655, 2728, 2733, 3655, 2735, 3655, 2734, 2736, 2738,
+     2739, 2745, 3655, 2749, 2750, 2752, 2754, 2755, 2756, 2759,
+     3655, 2757, 2762, 2768, 2771, 2763, 2770, 2773, 2772, 2774,
+     2785, 2781, 3655, 2778, 2786, 2793, 2782, 2611, 3655, 3655,
+     2789, 2795, 3655, 3655, 3655, 2798, 3655, 3655, 3655, 2799,
+
+     2801, 3655, 2806, 3655, 2807, 2808, 2810, 2811, 2812, 3655,
+     2813, 2815, 2819, 3655, 2814, 2821, 2820, 2822, 3655, 2825,
+     3655, 2829, 2828, 2831, 2835, 2842, 2844, 2847, 2836, 2839,
+     2849, 2850, 2851, 2853, 2852, 2855, 2856, 2859, 2860, 2864,
+     2866, 2867, 2868, 2870, 2871, 2873, 2874, 2876, 2883, 2886,
+     3655, 3655, 2884, 2889, 2891, 2892, 2894, 2895, 2896, 2897,
+     3655, 2900, 2901, 2902, 2905, 2906, 2908, 2911, 2916, 2918,
+     2928, 2919, 2921, 2922, 2925, 2929, 3655, 2931, 3655, 3655,
+     2932, 2939, 2934, 2938, 2940, 2944, 2947, 3655, 2945, 2955,
+     2957, 2948, 3655, 2963, 2946, 2967, 2969, 3655, 3655, 3655,
+
+     2970, 2954, 2964, 2972, 2974, 2975, 2978, 3655, 2980, 2982,
+     2983, 2981, 2985, 2990, 2991, 2997, 2999, 3001, 3003, 3655,
+     3655, 2993, 3010, 3007, 3008, 3009, 3012, 3014, 3015, 3016,
+     3655, 3021, 3017, 3019, 3025, 3029, 3030, 3033, 3655, 3026,
+     3023, 3036, 3040, 3037, 3041, 3047, 3044, 3048, 3655, 3049,
+     3051, 3655, 3057, 3054, 3059, 3655, 3062, 3655, 3066, 3655,
+     3655, 3060, 3069, 3072, 3077, 3079, 3082, 3067, 3073, 3088,
+     3090, 3091, 3655, 3655, 3093, 3094, 3101, 3655, 3655, 3097,
+     3086, 3105, 3098, 3099, 3106, 3108, 3109, 3113, 3111, 3114,
+     3117, 3122, 3124, 3112, 3123, 3125, 3126, 3127, 3655, 3136,
+
+     3137, 3655, 3133, 3142, 3139, 3144, 3145, 3155, 3071, 3148,
+     3655, 3150, 3152, 3131, 3655, 3655, 3655, 3158, 3161, 3165,
+     3655, 3166, 3655, 3167, 3168, 3175, 3169, 3172, 3173, 3183,
+     3179, 3181, 3655, 3182, 3184, 3186, 3189, 3187, 3192, 3194,
+     3195, 3197, 3198, 3206, 3200, 3655, 3210, 3207, 3655, 3215,
+     3211, 3216, 3655, 3217, 3220, 3221, 3223, 3226, 3227, 3228,
+     3229, 3233, 3230, 3235, 3238, 3245, 3237, 3252, 3236, 3258,
+     3655, 3260, 3244, 3655, 3261, 3248, 3264, 3268, 3271, 3273,
+     3274, 3655, 3276, 3655, 3277, 3655, 3281, 3251, 3282, 3284,
+     3285, 3655, 3655, 3286, 3288, 3292, 3655, 3293, 3289, 3295,
+
+     3296, 3299, 3300, 3302, 3304, 3655, 3655, 3305, 3307, 3311,
+     3308, 3655, 3655, 3655, 3320, 3655, 3322, 3655, 3328, 3316,
+     3655, 3332, 3321, 3655, 3324, 3334, 3338, 3335, 3329, 3341,
+     3339, 3343, 3344, 3345, 3347, 3655, 3655, 3351, 3655, 3353,
+     3655, 3358, 3655, 3355, 3361, 3655, 3655, 3363, 3370, 3359,
+     3369, 3368, 3371, 3372, 3655, 3655, 3655, 3655, 3375, 3376,
+     3380, 3377, 3378, 3381, 3382, 3383, 3385, 3393, 3386, 3402,
+     3404, 3405, 3394, 3403, 3411, 3407, 3655, 3412, 3655, 3413,
+     3420, 3422, 3414, 3416, 3423, 3424, 3425, 3426, 3430, 3431,
+     3435, 3436, 3433, 3445, 3448, 3449, 3451, 3447, 3460, 3458,
+
+     3461, 3459, 3462, 3469, 3463, 3467, 3655, 3465, 3471, 3472,
+     3473, 3474, 3479, 3476, 3487, 3492, 3489, 3496, 3483, 3498,
+     3499, 3500, 3485, 3505, 3501, 3655, 3508, 3509, 3511, 3512,
+     3515, 3517, 3518, 3521, 3524, 3519, 3528, 3533, 3534, 3655,
+     3535, 3655, 3655, 3538, 3525, 3529, 3546, 3550, 3655, 3655,
+     3655, 3563, 3570, 3577, 3584, 3591,   94, 3598, 3605, 3612,
+     3619, 3626, 3633, 3640, 3647
     } ;
 
-static yyconst flex_int16_t yy_def[1861] =
+static yyconst flex_int16_t yy_def[1866] =
     {   0,
-     1846,    1, 1847, 1847, 1848, 1848, 1849, 1849, 1850, 1850,
-     1851, 1851, 1846, 1852, 1846, 1846, 1846, 1846, 1853, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1854, 1846, 1846, 1846, 1854, 1855, 1846, 1846, 1846, 1855,
-     1856, 1846, 1846, 1846, 1846, 1856, 1857, 1846, 1846, 1846,
-     1857, 1858, 1846, 1859, 1846, 1858, 1858, 1852, 1852, 1846,
-     1860, 1853, 1860, 1853, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1854, 1854, 1855, 1855,
-     1856, 1856, 1846, 1857, 1857, 1858, 1858, 1859, 1859, 1858,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1858, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1846, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1858, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1858, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1852, 1846, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1846,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-
-     1852, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852,
-     1852, 1846, 1846, 1846, 1852, 1846, 1846, 1846, 1852, 1852,
-
-     1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1852, 1852, 1846, 1852, 1852, 1852, 1852, 1846, 1852, 1846,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
-     1852, 1852, 1846, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1846, 1852, 1852, 1846, 1846, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852, 1852,
-
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1846, 1846, 1846, 1852, 1852, 1852, 1846, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1846, 1852, 1852, 1852, 1846, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1846, 1852, 1846, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1846, 1846, 1852, 1852,
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1846, 1846, 1852, 1852, 1852, 1852, 1846, 1846, 1846, 1852,
-     1846, 1852, 1846, 1852, 1852, 1846, 1852, 1852, 1846, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1846, 1852, 1846, 1852, 1846, 1852, 1846, 1852, 1852,
-     1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1846,
-     1846, 1846, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1846, 1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-
-     1852, 1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1846, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
-     1852, 1852, 1852, 1852, 1846, 1852, 1846, 1846, 1852, 1852,
-     1852, 1852, 1852, 1846, 1846,    0, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846
+     1851,    1, 1852, 1852, 1853, 1853, 1854, 1854, 1855, 1855,
+     1856, 1856, 1851, 1857, 1851, 1851, 1851, 1851, 1858, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1859, 1851, 1851, 1851, 1859, 1860, 1851, 1851, 1851, 1860,
+     1861, 1851, 1851, 1851, 1851, 1861, 1862, 1851, 1851, 1851,
+     1862, 1863, 1851, 1864, 1851, 1863, 1863, 1857, 1857, 1851,
+     1865, 1858, 1865, 1858, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1859, 1859, 1860, 1860,
+     1861, 1861, 1851, 1862, 1862, 1863, 1863, 1864, 1864, 1863,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1863, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1863, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1863, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1863, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1851, 1851, 1857, 1851, 1851, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1863, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1851, 1863, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1851, 1857, 1857, 1857, 1851, 1857, 1851, 1857, 1851,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1857, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1851, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1851, 1857, 1851, 1851, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1851, 1857, 1857, 1857, 1851, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1851, 1857, 1851, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1857, 1851, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1851, 1851,
+     1857, 1857, 1851, 1851, 1851, 1857, 1851, 1851, 1851, 1857,
+
+     1857, 1851, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1851, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1851, 1851,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1851, 1851, 1851,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+     1857, 1851, 1857, 1857, 1857, 1851, 1857, 1851, 1857, 1851,
+     1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1851, 1857, 1857, 1857, 1851, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857,
+
+     1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1857, 1851, 1851, 1851, 1857, 1857, 1857,
+     1851, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1851, 1857,
+     1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1851, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1851, 1857, 1851, 1857, 1851, 1857, 1857, 1857, 1857,
+     1857, 1851, 1851, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1851, 1851, 1857, 1857, 1857,
+     1857, 1851, 1851, 1851, 1857, 1851, 1857, 1851, 1857, 1857,
+     1851, 1857, 1857, 1851, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1851, 1857, 1851, 1857,
+     1851, 1857, 1851, 1857, 1857, 1851, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1851, 1851, 1851, 1851, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1851, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+
+     1857, 1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1851, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1851,
+     1857, 1851, 1851, 1857, 1857, 1857, 1857, 1857, 1851, 1851,
+        0, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851
     } ;
 
 static yyconst flex_uint16_t yy_nxt[3695] =
@@ -1333,131 +1336,131 @@ static yyconst flex_uint16_t yy_nxt[3695] =
        69,   69,   69,   69, 1336, 1334, 1335,   69, 1339, 1338,
        69,   69, 1337, 1340, 1344,   69,   69,   69, 1341,   69,
      1343, 1346,   69, 1348,   69, 1345,   69, 1351,   69, 1349,
-       69,   69, 1354,   69,   69, 1342, 1347,   69, 1352, 1350,
-     1356,   69,   69, 1355,   69, 1357,   69, 1360,   69, 1358,
-       69, 1353,   69, 1361, 1362,   69,   69,   69,   69,   69,
-     1359, 1364,   69, 1367, 1370,   69,   69,   69,   69,   69,
-
-     1371, 1363, 1366, 1365, 1373,   69,   69, 1368, 1369,   69,
-       69,   69, 1372,   69,   69, 1382,   69,   69,   69, 1846,
-     1383,   69,   69,   69, 1374, 1375, 1380, 1400, 1376, 1378,
-       69, 1384, 1379, 1377, 1381, 1385, 1386,   69, 1387, 1388,
-       69, 1389,   69,   69,   69, 1390, 1392,   69, 1393,   69,
-     1394,   69, 1396,   69, 1397,   69, 1391, 1398,   69,   69,
-     1401,   69,   69, 1395, 1403,   69,   69,   69,   69,   69,
-     1407, 1406,   69, 1405, 1409,   69,   69,   69, 1399, 1413,
-       69, 1402,   69,   69, 1404, 1408,   69, 1418,   69,   69,
-       69, 1410, 1411, 1417,   69, 1412, 1420,   69,   69, 1422,
-
-       69, 1416, 1414,   69,   69, 1425, 1415,   69,   69, 1419,
-       69,   69, 1423,   69,   69,   69, 1424, 1434, 1429,   69,
-     1421, 1427,   69, 1431, 1432,   69, 1430,   69,   69, 1435,
-       69, 1428, 1426, 1433,   69, 1438, 1439, 1437,   69,   69,
-     1440,   69,   69,   69,   69, 1442, 1445, 1436, 1441, 1446,
-     1444, 1443,   69,   69, 1449,   69, 1450,   69,   69,   69,
-       69, 1452,   69,   69,   69, 1448,   69, 1456, 1457,   69,
-     1453,   69, 1447, 1451, 1458,   69, 1454, 1459,   69,   69,
-     1460,   69, 1455,   69,   69, 1463,   69, 1466,   69, 1461,
-     1467, 1465,   69, 1462,   69, 1470,   69,   69, 1472, 1469,
-
-       69,   69,   69, 1464, 1468, 1471,   69, 1474, 1475,   69,
-       69,   69, 1477,   69, 1479, 1473, 1476, 1478,   69,   69,
-       69, 1480,   69,   69, 1482,   69, 1481, 1483, 1486,   69,
-       69, 1488,   69,   69, 1491,   69,   69, 1485,   69, 1487,
-       69,   69, 1484, 1492,   69,   69, 1493,   69, 1490,   69,
-     1489,   69, 1495, 1499, 1494, 1496,   69, 1497,   69, 1498,
-       69, 1501,   69, 1500,   69,   69, 1506,   69,   69,   69,
-     1504, 1505,   69,   69, 1502,   69, 1503, 1507,   69,   69,
-       69,   69,   69,   69, 1517,   69, 1510, 1515, 1516, 1518,
-       69,   69, 1509, 1512,   69, 1508, 1513,   69, 1519, 1511,
-
-       69, 1520, 1514,   69,   69,   69,   69, 1527,   69, 1521,
-     1528,   69, 1524,   69,   69,   69, 1522, 1529,   69,   69,
-     1523, 1530,   69, 1526, 1525, 1536,   69, 1537, 1531,   69,
-       69,   69,   69, 1532,   69, 1534, 1533,   69,   69, 1541,
-       69, 1535,   69,   69, 1846, 1539, 1545, 1538, 1546,   69,
-     1540,   69, 1549,   69,   69, 1553,   69, 1542, 1544, 1543,
-     1548,   69,   69,   69,   69, 1550, 1547, 1552,   69, 1551,
-     1555,   69, 1557,   69,   69, 1554, 1558,   69,   69, 1559,
-       69,   69,   69, 1556,   69,   69, 1562, 1563,   69, 1561,
-     1560,   69, 1565, 1564,   69,   69, 1567, 1570,   69, 1568,
-
-     1566, 1571,   69, 1569, 1572,   69, 1574,   69, 1576,   69,
-     1573, 1575,   69, 1577,   69,   69,   69,   69,   69, 1578,
-       69, 1579,   69, 1580,   69,   69,   69, 1583, 1582, 1585,
-       69,   69, 1581,   69,   69, 1590, 1584,   69,   69, 1588,
-       69,   69, 1589, 1586, 1587,   69, 1591, 1595,   69,   69,
-     1597, 1598,   69,   69,   69,   69,   69, 1592,   69, 1600,
-     1593, 1599,   69,   69, 1594, 1601, 1603,   69, 1596, 1604,
-       69, 1602,   69, 1606, 1607,   69,   69, 1609, 1605,   69,
-     1611,   69, 1610, 1612,   69, 1613,   69, 1608, 1614,   69,
-     1616, 1617,   69,   69,   69,   69, 1620, 1618,   69,   69,
-
-     1619,   69,   69, 1615, 1621,   69,   69, 1624,   69, 1628,
-       69,   69,   69,   69,   69, 1622, 1623,   69, 1632,   69,
-     1630,   69, 1627, 1625,   69, 1633, 1626,   69,   69,   69,
-     1629,   69, 1631, 1635, 1636, 1634, 1638, 1641,   69,   69,
-       69,   69, 1642, 1644,   69, 1645,   69, 1637,   69, 1639,
-       69, 1640, 1648,   69,   69, 1646,   69,   69, 1643, 1650,
-       69,   69,   69, 1647,   69, 1651, 1654, 1649,   69, 1652,
-       69, 1655,   69, 1656,   69, 1660,   69, 1657,   69, 1664,
-       69, 1662, 1659, 1658,   69, 1653,   69, 1666,   69, 1661,
-       69,   69, 1669,   69,   69,   69, 1663,   69, 1670,   69,
-
-       69,   69,   69,   69, 1671,   69, 1668, 1675, 1674, 1667,
-     1680, 1665,   69, 1672, 1677,   69, 1679,   69, 1673, 1681,
-       69,   69, 1678,   69, 1684,   69,   69, 1676, 1687,   69,
-     1688,   69, 1682,   69,   69,   69, 1692,   69,   69, 1685,
-       69,   69,   69,   69, 1683, 1695, 1690,   69, 1686,   69,
-     1693, 1698, 1689,   69, 1696, 1691,   69, 1846, 1699, 1700,
-     1694, 1705, 1697, 1701,   69, 1702,   69, 1846,   69,   69,
-     1707,   69, 1703, 1704, 1706, 1708,   69, 1709,   69,   69,
-     1711,   69,   69, 1712, 1710, 1713,   69,   69,   69, 1716,
-       69,   69,   69, 1719,   69,   69, 1717, 1715,   69,   69,
-
-     1718, 1714,   69, 1720, 1721,   69,   69, 1722,   69,   69,
-     1723,   69,   69, 1731,   69,   69, 1729, 1732,   69, 1733,
-     1734,   69, 1725, 1724,   69, 1726, 1727,   69, 1735,   69,
-     1728,   69, 1730, 1736,   69, 1738,   69, 1741,   69, 1742,
-       69, 1737,   69,   69, 1739,   69,   69, 1743,   69, 1740,
-       69,   69, 1846, 1747,   69, 1748, 1750,   69, 1751,   69,
-     1745, 1752,   69, 1753,   69,   69, 1754, 1746, 1744, 1757,
-     1749,   69, 1755,   69,   69,   69, 1756,   69,   69, 1758,
-     1759,   69,   69,   69,   69,   69, 1763,   69,   69,   69,
-       69, 1772,   69,   69, 1762, 1765, 1760,   69, 1766, 1761,
-
-       69, 1774,   69, 1764, 1769,   69, 1767, 1768, 1771, 1773,
-     1775,   69,   69, 1779,   69, 1770, 1776,   69,   69,   69,
-     1783, 1784, 1777,   69,   69,   69,   69, 1778, 1780,   69,
-       69,   69, 1781,   69,   69,   69,   69, 1785, 1782,   69,
-       69, 1793, 1786, 1787, 1788, 1794, 1790, 1791,   69, 1796,
-     1789,   69,   69,   69, 1792,   69, 1797, 1798, 1795, 1801,
-     1799, 1802,   69,   69,   69,   69,   69,   69, 1806,   69,
-     1803,   69, 1800,   69,   69,   69, 1809,   69,   69, 1813,
-       69,   69, 1808,   69, 1804, 1805, 1807, 1846, 1814, 1846,
-     1812,   69, 1816, 1810, 1811,   69, 1817,   69,   69, 1815,
-
-     1820,   69, 1818, 1821,   69, 1819,   69,   69, 1822,   69,
-       69,   69,   69, 1823, 1825,   69, 1827, 1828,   69,   69,
-     1831,   69,   69,   69, 1834,   69, 1824, 1835,   69, 1826,
-     1837,   69, 1836,   69, 1829, 1838,   69, 1830,   69,   69,
-     1832, 1833,   69,   69, 1840, 1839, 1846, 1841, 1844,   69,
-     1845,   69, 1842, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1843,   41,   41,   41,   41,   41,   41,   41,
+       69, 1352,   69, 1355,   69, 1342, 1347,   69, 1353, 1350,
+     1357,   69,   69, 1358,   69,   69, 1356, 1361, 1354,   69,
+     1363,   69,   69,   69, 1362,   69, 1359,   69,   69,   69,
+     1365,   69,   69, 1360, 1368,   69, 1371,   69,   69,   69,
+
+       69,   69, 1372, 1367, 1374,   69,   69, 1373, 1364, 1369,
+     1366, 1370,   69,   69,   69,   69, 1383,   69,   69,   69,
+     1376, 1384,   69,   69,   69, 1474, 1375, 1381, 1377,   69,
+     1378, 1379, 1385,   69, 1380, 1382, 1386, 1387,   69, 1388,
+     1389,   69, 1390,   69, 1391,   69, 1392, 1393,   69, 1394,
+       69, 1395,   69, 1397,   69, 1398,   69, 1399,   69,   69,
+       69, 1402,   69,   69, 1396, 1401, 1404,   69,   69,   69,
+       69,   69, 1408, 1407,   69, 1406, 1410,   69, 1400,   69,
+       69,   69, 1403, 1414,   69,   69, 1405, 1409,   69, 1419,
+       69,   69,   69, 1411, 1412, 1418, 1421,   69,   69, 1413,
+
+       69, 1415,   69, 1417,   69, 1423,   69,   69, 1416, 1424,
+       69, 1420, 1426,   69, 1425,   69,   69,   69,   69,   69,
+     1430, 1435,   69, 1428, 1422, 1432,   69, 1433,   69,   69,
+     1439, 1427, 1431, 1434, 1429,   69, 1440, 1438,   69, 1436,
+       69,   69, 1437,   69, 1441,   69,   69,   69,   69, 1447,
+       69,   69, 1442, 1448, 1445, 1444, 1451,   69, 1443, 1446,
+     1452,   69,   69, 1450,   69, 1454,   69,   69,   69,   69,
+     1449,   69, 1458, 1459,   69,   69, 1453, 1460, 1455, 1461,
+       69, 1456,   69,   69,   69,   69,   69, 1457, 1462, 1465,
+       69, 1467, 1468,   69,   69, 1463, 1464,   69,   69, 1469,
+
+     1472,   69, 1473, 1471, 1466,   69, 1470,   69, 1476, 1477,
+       69,   69, 1479,   69, 1481, 1475, 1478, 1480,   69,   69,
+       69, 1482,   69,   69,   69,   69,   69,   69, 1490, 1485,
+     1488,   69,   69,   69,   69, 1489, 1493,   69, 1483, 1487,
+       69,   69, 1495,   69, 1486, 1484, 1494,   69,   69, 1492,
+     1491,   69, 1497, 1498,   69, 1499,   69, 1496, 1500,   69,
+     1501,   69,   69,   69,   69,   69, 1508,   69,   69, 1502,
+     1506,   69,   69, 1503, 1504, 1505,   69, 1509,   69,   69,
+       69, 1515,   69,   69, 1507,   69,   69, 1520,   69, 1512,
+     1518, 1519, 1511, 1514, 1521,   69,   69, 1510,   69, 1522,
+
+     1516,   69, 1513,   69,   69, 1517,   69,   69,   69,   69,
+     1530, 1531,   69,   69,   69, 1527, 1523,   69,   69, 1524,
+       69, 1533, 1532,   69, 1526, 1525, 1529, 1528,   69, 1539,
+       69,   69, 1534,   69,   69, 1540, 1535,   69, 1536, 1537,
+       69,   69, 1544,   69,   69, 1549,   69, 1538, 1542, 1541,
+       69,   69,   69, 1543, 1548, 1552,   69,   69,   69,   69,
+       69, 1545, 1546, 1553, 1547, 1550,   69,   69, 1556,   69,
+     1551, 1555, 1554, 1557, 1558,   69,   69, 1559, 1560,   69,
+     1561,   69,   69, 1562,   69, 1564,   69,   69, 1563, 1565,
+       69, 1566,   69,   69,   69,   69, 1573,   69, 1568, 1570,
+
+     1571, 1574,   69,   69, 1576,   69, 1567, 1569, 1572,   69,
+     1575,   69, 1578,   69, 1579,   69, 1577, 1581, 1580,   69,
+       69,   69,   69, 1582,   69, 1583,   69,   69,   69,   69,
+     1584,   69, 1587,   69, 1586,   69, 1589,   69,   69, 1585,
+     1588,   69,   69, 1594, 1591,   69, 1592, 1590,   69,   69,
+     1593, 1599,   69,   69, 1595, 1597,   69, 1596, 1602,   69,
+       69,   69, 1601,   69, 1603, 1604,   69, 1598, 1600,   69,
+     1605,   69,   69, 1607,   69, 1610, 1606, 1611,   69,   69,
+     1608,   69, 1613,   69,   69,   69, 1609, 1614, 1615,   69,
+     1616,   69, 1612, 1617,   69, 1620, 1654, 1618,   69, 1619,
+
+       69, 1621,   69,   69, 1623,   69,   69, 1622, 1625,   69,
+       69,   69, 1624,   69, 1626, 1627, 1628,   69,   69, 1633,
+       69,   69, 1629,   69,   69,   69,   69, 1637, 1630,   69,
+     1638, 1631, 1632, 1635,   69,   69,   69,   69,   69,   69,
+     1634, 1640, 1636,   69, 1641,   69, 1643, 1646,   69,   69,
+     1639,   69, 1647, 1649,   69, 1650,   69,   69, 1644, 1645,
+       69, 1642,   69, 1648,   69, 1651, 1653,   69, 1658, 1655,
+       69, 1656, 1652,   69, 1660, 1659, 1657,   69,   69,   69,
+       69,   69, 1665, 1662,   69,   69, 1661,   69, 1663, 1667,
+     1669,   69, 1671,   69,   69,   69,   69, 1674,   69,   69,
+
+     1664,   69, 1666, 1668,   69, 1675,   69,   69, 1676,   69,
+       69, 1673,   69, 1672, 1680, 1679, 1670, 1682,   69,   69,
+     1677, 1684,   69,   69, 1685, 1678, 1686,   69,   69,   69,
+     1689, 1683,   69,   69, 1692,   69, 1681, 1693,   69,   69,
+       69,   69,   69, 1687, 1697,   69, 1690,   69,   69,   69,
+       69, 1688, 1695, 1700, 1698, 1691,   69,   69, 1694, 1703,
+       69, 1696, 1701,   69,   69, 1704, 1705, 1699, 1702, 1706,
+       69, 1707,   69,   69, 1710, 1708,   69, 1719, 1709, 1712,
+       69, 1711, 1713,   69, 1714,   69,   69, 1716,   69,   69,
+     1717, 1715, 1718,   69,   69, 1721,   69,   69,   69, 1724,
+
+       69,   69, 1722, 1720,   69,   69, 1723,   69,   69, 1725,
+     1726,   69,   69, 1727,   69, 1728,   69,   69, 1736,   69,
+       69, 1734, 1737,   69, 1738, 1851, 1729, 1730,   69, 1731,
+     1732, 1739,   69,   69,   69, 1733,   69, 1735, 1740, 1741,
+       69,   69, 1742, 1743,   69, 1746,   69,   69, 1744, 1747,
+       69,   69, 1748,   69, 1745,   69,   69,   69, 1755,   69,
+     1752, 1753, 1756,   69, 1757,   69, 1749,   69, 1750, 1758,
+       69,   69, 1751,   69, 1760,   69, 1754, 1762, 1761, 1759,
+       69,   69,   69,   69,   69, 1763, 1764,   69,   69,   69,
+       69, 1768,   69,   69,   69,   69, 1851,   69,   69, 1765,
+
+     1767, 1766, 1771, 1770, 1777,   69,   69, 1778, 1769, 1772,
+     1774, 1773, 1776, 1779,   69,   69,   69,   69, 1784,   69,
+     1775, 1780, 1781,   69,   69,   69,   69, 1788,   69, 1789,
+     1783, 1782,   69, 1785,   69,   69,   69,   69,   69, 1786,
+     1790, 1791,   69,   69, 1787,   69, 1851,   69,   69, 1851,
+     1793, 1795, 1798, 1799, 1792, 1796, 1794,   69, 1801,   69,
+       69,   69, 1797,   69, 1800, 1802, 1803, 1806, 1804, 1807,
+       69,   69,   69,   69,   69,   69, 1811,   69, 1805,   69,
+     1808,   69, 1814,   69,   69,   69,   69, 1818,   69, 1851,
+     1809,   69, 1813, 1810, 1812,   69, 1819,   69, 1817,   69,
+
+     1821,   69, 1815, 1816,   69, 1822, 1823, 1820,   69, 1826,
+       69,   69,   69,   69, 1825, 1824, 1829,   69, 1827, 1828,
+       69,   69, 1830,   69,   69, 1832, 1833,   69, 1836,   69,
+       69,   69, 1831,   69, 1839, 1840,   69,   69, 1841, 1842,
+       69,   69, 1834, 1835, 1843,   69,   69,   69, 1837, 1838,
+       69, 1851, 1845, 1844, 1851, 1846, 1847, 1849,   69, 1851,
+     1848, 1850,   69,   41,   41,   41,   41,   41,   41,   41,
        46,   46,   46,   46,   46,   46,   46,   51,   51,   51,
        51,   51,   51,   51,   57,   57,   57,   57,   57,   57,
        57,   62,   62,   62,   62,   62,   62,   62,   72,   72,
 
-     1846,   72,   72,   72,   72,  127,  127, 1846, 1846, 1846,
-      127,  127,  129,  129, 1846, 1846,  129, 1846,  129,  131,
-     1846, 1846, 1846, 1846, 1846,  131,  134,  134, 1846, 1846,
-     1846,  134,  134,  136, 1846, 1846, 1846, 1846, 1846,  136,
-      138,  138, 1846,  138,  138,  138,  138,   73,   73, 1846,
-       73,   73,   73,   73,   13, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846
+     1851,   72,   72,   72,   72,  127,  127, 1851, 1851, 1851,
+      127,  127,  129,  129, 1851, 1851,  129, 1851,  129,  131,
+     1851, 1851, 1851, 1851, 1851,  131,  134,  134, 1851, 1851,
+     1851,  134,  134,  136, 1851, 1851, 1851, 1851, 1851,  136,
+      138,  138, 1851,  138,  138,  138,  138,   73,   73, 1851,
+       73,   73,   73,   73,   13, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851
 
     } ;
 
@@ -1472,7 +1475,7 @@ static yyconst flex_int16_t yy_chk[3695] =
         9,  158,   33,    6,    7,    7,    7,    7,    9,    7,
        10,   10,   10,   45,   45,    7,    8,    8,    8,    8,
        10,    8,   21,   33,  158,   21,   21,    8,   11,   11,
-       11,   11,   11,   11, 1852,   20,   29,   20,   20,   11,
+       11,   11,   11,   11, 1857,   20,   29,   20,   20,   11,
 
        20,   29,   24,   21,   25,   20,   24,   28,   11,   12,
        12,   12,   12,   12,   12,   75,   22,   22,   75,   25,
@@ -1743,132 +1746,132 @@ static yyconst flex_int16_t yy_chk[3695] =
      1230, 1236, 1237, 1238, 1228, 1223, 1227, 1228, 1231, 1230,
      1233, 1234, 1240, 1243, 1236, 1233, 1234, 1242, 1240, 1238,
      1244, 1245, 1237, 1242, 1246, 1246, 1247, 1249, 1243, 1250,
-     1245, 1248, 1248, 1250, 1251, 1247, 1252, 1253, 1253, 1251,
-     1254, 1255, 1258, 1258, 1259, 1244, 1249, 1262, 1254, 1252,
-     1260, 1260, 1263, 1259, 1261, 1261, 1268, 1264, 1265, 1262,
-     1270, 1255, 1264, 1265, 1266, 1266, 1269, 1271, 1272, 1273,
-     1263, 1269, 1274, 1272, 1275, 1275, 1276, 1277, 1279, 1278,
-
-     1276, 1268, 1271, 1270, 1278, 1282, 1280, 1273, 1274, 1283,
-     1284, 1285, 1277, 1287, 1286, 1289, 1289, 1290, 1291,   13,
-     1290, 1292, 1308, 1293, 1279, 1280, 1286, 1308, 1282, 1284,
-     1297, 1291, 1285, 1283, 1287, 1292, 1293, 1294, 1294, 1295,
-     1295, 1296, 1296, 1298, 1302, 1297, 1299, 1299, 1300, 1300,
-     1301, 1301, 1303, 1303, 1304, 1304, 1298, 1305, 1305, 1306,
-     1309, 1309, 1310, 1302, 1311, 1311, 1312, 1313, 1314, 1315,
-     1315, 1314, 1317, 1313, 1316, 1316, 1319, 1318, 1306, 1320,
-     1320, 1310, 1322, 1323, 1312, 1315, 1324, 1326, 1326, 1325,
-     1327, 1317, 1318, 1325, 1329, 1319, 1328, 1328, 1330, 1330,
-
-     1333, 1324, 1322, 1331, 1332, 1333, 1323, 1334, 1335, 1327,
-     1336, 1338, 1331, 1337, 1339, 1340, 1332, 1342, 1337, 1341,
-     1329, 1335, 1342, 1339, 1340, 1343, 1338, 1345, 1347, 1343,
-     1352, 1336, 1334, 1341, 1348, 1348, 1349, 1347, 1355, 1350,
-     1350, 1349, 1353, 1357, 1358, 1352, 1357, 1345, 1350, 1358,
-     1355, 1353, 1359, 1360, 1361, 1361, 1363, 1363, 1366, 1364,
-     1365, 1365, 1367, 1368, 1371, 1360, 1369, 1369, 1371, 1375,
-     1366, 1372, 1359, 1364, 1372, 1374, 1367, 1373, 1373, 1376,
-     1374, 1377, 1368, 1378, 1381, 1377, 1379, 1380, 1383, 1375,
-     1381, 1379, 1380, 1376, 1384, 1385, 1387, 1386, 1387, 1384,
-
-     1385, 1390, 1407, 1378, 1383, 1386, 1391, 1391, 1395, 1395,
-     1406, 1399, 1400, 1400, 1404, 1390, 1399, 1402, 1402, 1404,
-     1405, 1405, 1408, 1410, 1407, 1411, 1406, 1408, 1412, 1412,
-     1414, 1415, 1416, 1417, 1419, 1419, 1415, 1411, 1421, 1414,
-     1423, 1428, 1410, 1421, 1422, 1429, 1422, 1424, 1417, 1430,
-     1416, 1434, 1424, 1428, 1423, 1425, 1425, 1426, 1426, 1427,
-     1427, 1430, 1431, 1429, 1432, 1433, 1435, 1435, 1436, 1437,
-     1433, 1434, 1438, 1439, 1431, 1440, 1432, 1436, 1442, 1441,
-     1443, 1451, 1444, 1445, 1446, 1446, 1439, 1444, 1445, 1447,
-     1447, 1452, 1438, 1441, 1453, 1437, 1442, 1448, 1448, 1440,
-
-     1454, 1451, 1443, 1455, 1456, 1457, 1458, 1458, 1461, 1452,
-     1460, 1460, 1455, 1463, 1462, 1464, 1453, 1461, 1465, 1466,
-     1454, 1462, 1467, 1457, 1456, 1468, 1468, 1469, 1463, 1470,
-     1471, 1472, 1469, 1464, 1473, 1466, 1465, 1474, 1479, 1473,
-     1476, 1467, 1483, 1480,    0, 1471, 1480, 1470, 1481, 1481,
-     1472, 1482, 1484, 1484, 1487, 1489, 1489, 1474, 1479, 1476,
-     1483, 1485, 1490, 1488, 1493, 1485, 1482, 1488, 1500, 1487,
-     1492, 1492, 1494, 1494, 1504, 1490, 1495, 1495, 1499, 1499,
-     1501, 1502, 1503, 1493, 1505, 1507, 1502, 1503, 1510, 1501,
-     1500, 1508, 1505, 1504, 1509, 1519, 1508, 1511, 1511, 1509,
-
-     1507, 1512, 1512, 1510, 1513, 1514, 1515, 1515, 1519, 1513,
-     1514, 1516, 1516, 1520, 1523, 1521, 1522, 1524, 1520, 1521,
-     1525, 1522, 1526, 1523, 1527, 1530, 1529, 1526, 1525, 1529,
-     1532, 1531, 1524, 1533, 1534, 1534, 1527, 1535, 1537, 1532,
-     1538, 1542, 1533, 1530, 1531, 1539, 1535, 1540, 1540, 1541,
-     1542, 1543, 1543, 1544, 1545, 1551, 1547, 1537, 1548, 1545,
-     1538, 1544, 1550, 1552, 1539, 1547, 1550, 1559, 1541, 1551,
-     1565, 1548, 1554, 1554, 1556, 1556, 1560, 1560, 1552, 1561,
-     1562, 1562, 1561, 1563, 1563, 1564, 1564, 1559, 1565, 1566,
-     1567, 1568, 1568, 1569, 1572, 1567, 1573, 1569, 1577, 1576,
-
-     1572, 1573, 1578, 1566, 1576, 1579, 1580, 1578, 1581, 1582,
-     1582, 1583, 1584, 1585, 1590, 1577, 1577, 1586, 1586, 1588,
-     1584, 1591, 1581, 1579, 1587, 1587, 1580, 1592, 1589, 1593,
-     1583, 1594, 1585, 1589, 1590, 1588, 1592, 1596, 1596, 1597,
-     1599, 1601, 1597, 1600, 1600, 1601, 1602, 1591, 1603, 1593,
-     1606, 1594, 1604, 1604, 1605, 1602, 1608, 1609, 1599, 1606,
-     1610, 1614, 1620, 1603, 1616, 1608, 1614, 1605, 1622, 1609,
-     1615, 1615, 1618, 1616, 1619, 1621, 1623, 1618, 1624, 1625,
-     1621, 1623, 1620, 1619, 1625, 1610, 1626, 1627, 1627, 1622,
-     1629, 1630, 1631, 1631, 1632, 1633, 1624, 1634, 1632, 1635,
-
-     1636, 1638, 1637, 1640, 1633, 1643, 1630, 1637, 1636, 1629,
-     1643, 1626, 1646, 1634, 1639, 1639, 1642, 1642, 1635, 1645,
-     1645, 1647, 1640, 1649, 1649, 1650, 1651, 1638, 1652, 1652,
-     1653, 1653, 1646, 1654, 1655, 1656, 1657, 1657, 1658, 1650,
-     1659, 1664, 1660, 1662, 1647, 1660, 1655, 1671, 1651, 1661,
-     1658, 1663, 1654, 1668, 1661, 1656, 1663,    0, 1664, 1664,
-     1659, 1671, 1662, 1665, 1665, 1667, 1667,    0, 1670, 1672,
-     1673, 1673, 1668, 1670, 1672, 1674, 1674, 1675, 1675, 1676,
-     1678, 1678, 1680, 1680, 1676, 1682, 1682, 1683, 1684, 1685,
-     1685, 1686, 1689, 1690, 1690, 1694, 1686, 1684, 1691, 1693,
-
-     1689, 1683, 1695, 1691, 1693, 1696, 1697, 1694, 1698, 1699,
-     1695, 1700, 1703, 1704, 1704, 1706, 1700, 1705, 1705, 1706,
-     1710, 1710, 1697, 1696, 1712, 1698, 1698, 1715, 1712, 1718,
-     1699, 1720, 1703, 1714, 1714, 1717, 1717, 1721, 1721, 1722,
-     1722, 1715, 1723, 1724, 1718, 1725, 1726, 1723, 1727, 1720,
-     1728, 1729,    0, 1727, 1739, 1728, 1730, 1730, 1733, 1733,
-     1725, 1735, 1735, 1737, 1737, 1745, 1739, 1726, 1724, 1744,
-     1729, 1740, 1740, 1743, 1744, 1746, 1743, 1747, 1749, 1745,
-     1746, 1748, 1754, 1755, 1756, 1757, 1754, 1758, 1760, 1759,
-     1761, 1763, 1763, 1762, 1749, 1756, 1747, 1768, 1757, 1748,
-
-     1764, 1765, 1765, 1755, 1760, 1766, 1758, 1759, 1762, 1764,
-     1766, 1767, 1769, 1770, 1771, 1761, 1767, 1773, 1770, 1775,
-     1776, 1777, 1768, 1778, 1780, 1776, 1777, 1769, 1771, 1779,
-     1781, 1782, 1773, 1783, 1784, 1785, 1786, 1778, 1775, 1788,
-     1787, 1786, 1779, 1780, 1781, 1787, 1783, 1784, 1789, 1789,
-     1782, 1790, 1791, 1793, 1785, 1792, 1790, 1791, 1788, 1794,
-     1792, 1795, 1795, 1796, 1794, 1797, 1798, 1800, 1799, 1801,
-     1796, 1803, 1793, 1799, 1804, 1805, 1803, 1806, 1807, 1807,
-     1809, 1814, 1801, 1808, 1797, 1798, 1800,    0, 1808,    0,
-     1806, 1810, 1810, 1804, 1805, 1811, 1811, 1812, 1813, 1809,
-
-     1814, 1816, 1812, 1815, 1815, 1813, 1817, 1818, 1816, 1819,
-     1820, 1822, 1823, 1817, 1819, 1824, 1822, 1823, 1825, 1826,
-     1826, 1827, 1828, 1829, 1829, 1831, 1818, 1830, 1830, 1820,
-     1832, 1832, 1831, 1840, 1824, 1833, 1833, 1825, 1834, 1836,
-     1827, 1828, 1839, 1841, 1836, 1834,    0, 1839, 1842, 1842,
-     1843, 1843, 1840,    0,    0,    0,    0,    0,    0,    0,
-        0,    0, 1841, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
-     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1849, 1849, 1849,
-     1849, 1849, 1849, 1849, 1850, 1850, 1850, 1850, 1850, 1850,
-     1850, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1853, 1853,
-
-        0, 1853, 1853, 1853, 1853, 1854, 1854,    0,    0,    0,
-     1854, 1854, 1855, 1855,    0,    0, 1855,    0, 1855, 1856,
-        0,    0,    0,    0,    0, 1856, 1857, 1857,    0,    0,
-        0, 1857, 1857, 1858,    0,    0,    0,    0,    0, 1858,
-     1859, 1859,    0, 1859, 1859, 1859, 1859, 1860, 1860,    0,
-     1860, 1860, 1860, 1860, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
-     1846, 1846, 1846, 1846
+     1245, 1248, 1248, 1250, 1251, 1247, 1252, 1253, 1255, 1251,
+     1254, 1253, 1253, 1258, 1258, 1244, 1249, 1259, 1254, 1252,
+     1260, 1260, 1261, 1261, 1262, 1263, 1259, 1264, 1255, 1265,
+     1266, 1266, 1264, 1268, 1265, 1269, 1262, 1270, 1271, 1272,
+     1269, 1273, 1277, 1263, 1272, 1274, 1275, 1275, 1276, 1278,
+
+     1279, 1280, 1276, 1271, 1278, 1282, 1283, 1277, 1268, 1273,
+     1270, 1274, 1284, 1285, 1287, 1286, 1289, 1289, 1290, 1291,
+     1280, 1290, 1292, 1388, 1293, 1388, 1279, 1286, 1282, 1297,
+     1283, 1284, 1291, 1298, 1285, 1287, 1292, 1293, 1294, 1294,
+     1295, 1295, 1296, 1296, 1297, 1302, 1298, 1299, 1299, 1300,
+     1300, 1301, 1301, 1303, 1303, 1304, 1304, 1305, 1305, 1306,
+     1308, 1309, 1309, 1310, 1302, 1308, 1311, 1311, 1312, 1313,
+     1314, 1315, 1315, 1314, 1317, 1313, 1316, 1316, 1306, 1318,
+     1319, 1322, 1310, 1320, 1320, 1323, 1312, 1315, 1324, 1326,
+     1326, 1325, 1327, 1317, 1318, 1325, 1328, 1328, 1329, 1319,
+
+     1331, 1322, 1332, 1324, 1330, 1330, 1334, 1333, 1323, 1331,
+     1335, 1327, 1333, 1336, 1332, 1337, 1339, 1338, 1340, 1341,
+     1337, 1342, 1345, 1335, 1329, 1339, 1342, 1340, 1347, 1348,
+     1348, 1334, 1338, 1341, 1336, 1343, 1349, 1347, 1351, 1343,
+     1353, 1349, 1345, 1350, 1350, 1354, 1358, 1356, 1359, 1358,
+     1360, 1361, 1350, 1359, 1354, 1353, 1362, 1362, 1351, 1356,
+     1364, 1364, 1365, 1361, 1366, 1366, 1367, 1368, 1369, 1372,
+     1360, 1370, 1370, 1372, 1373, 1376, 1365, 1373, 1367, 1374,
+     1374, 1368, 1377, 1375, 1379, 1378, 1380, 1369, 1375, 1378,
+     1384, 1380, 1381, 1382, 1387, 1376, 1377, 1381, 1385, 1382,
+
+     1386, 1391, 1387, 1385, 1379, 1386, 1384, 1392, 1392, 1396,
+     1396, 1400, 1401, 1401, 1405, 1391, 1400, 1403, 1403, 1405,
+     1406, 1406, 1407, 1408, 1409, 1411, 1415, 1412, 1416, 1409,
+     1413, 1413, 1417, 1416, 1418, 1415, 1420, 1420, 1407, 1412,
+     1423, 1422, 1423, 1424, 1411, 1408, 1422, 1425, 1429, 1418,
+     1417, 1430, 1425, 1426, 1426, 1427, 1427, 1424, 1428, 1428,
+     1429, 1431, 1432, 1433, 1435, 1434, 1436, 1436, 1437, 1430,
+     1434, 1438, 1439, 1431, 1432, 1433, 1440, 1437, 1441, 1442,
+     1443, 1443, 1444, 1445, 1435, 1446, 1447, 1448, 1448, 1440,
+     1446, 1447, 1439, 1442, 1449, 1449, 1453, 1438, 1450, 1450,
+
+     1444, 1454, 1441, 1455, 1456, 1445, 1457, 1458, 1459, 1460,
+     1460, 1462, 1462, 1463, 1464, 1457, 1453, 1465, 1466, 1454,
+     1467, 1464, 1463, 1468, 1456, 1455, 1459, 1458, 1469, 1470,
+     1470, 1472, 1465, 1473, 1474, 1471, 1466, 1475, 1467, 1468,
+     1471, 1476, 1475, 1478, 1481, 1483, 1483, 1469, 1473, 1472,
+     1484, 1482, 1485, 1474, 1482, 1486, 1486, 1489, 1495, 1487,
+     1492, 1476, 1478, 1487, 1481, 1484, 1502, 1490, 1491, 1491,
+     1485, 1490, 1489, 1492, 1494, 1494, 1503, 1495, 1496, 1496,
+     1497, 1497, 1501, 1501, 1504, 1503, 1505, 1506, 1502, 1504,
+     1507, 1505, 1509, 1512, 1510, 1511, 1513, 1513, 1507, 1510,
+
+     1511, 1514, 1514, 1515, 1516, 1522, 1506, 1509, 1512, 1516,
+     1515, 1517, 1518, 1518, 1519, 1519, 1517, 1523, 1522, 1524,
+     1525, 1526, 1523, 1524, 1527, 1525, 1528, 1529, 1530, 1533,
+     1526, 1534, 1529, 1532, 1528, 1541, 1532, 1535, 1540, 1527,
+     1530, 1536, 1537, 1537, 1534, 1538, 1535, 1533, 1542, 1544,
+     1536, 1543, 1543, 1545, 1538, 1541, 1547, 1540, 1546, 1546,
+     1548, 1550, 1545, 1551, 1547, 1548, 1554, 1542, 1544, 1553,
+     1550, 1555, 1562, 1553, 1557, 1557, 1551, 1559, 1559, 1568,
+     1554, 1563, 1563, 1609, 1564, 1569, 1555, 1564, 1565, 1565,
+     1566, 1566, 1562, 1567, 1567, 1570, 1609, 1568, 1581, 1569,
+
+     1570, 1571, 1571, 1572, 1575, 1575, 1576, 1572, 1577, 1580,
+     1583, 1584, 1576, 1577, 1580, 1581, 1581, 1582, 1585, 1586,
+     1586, 1587, 1582, 1589, 1594, 1588, 1590, 1590, 1583, 1591,
+     1591, 1584, 1585, 1588, 1592, 1595, 1593, 1596, 1597, 1598,
+     1587, 1593, 1589, 1614, 1594, 1603, 1596, 1600, 1600, 1601,
+     1592, 1605, 1601, 1604, 1604, 1605, 1606, 1607, 1597, 1598,
+     1610, 1595, 1612, 1603, 1613, 1606, 1608, 1608, 1614, 1610,
+     1618, 1612, 1607, 1619, 1619, 1618, 1613, 1620, 1622, 1624,
+     1625, 1627, 1626, 1622, 1628, 1629, 1620, 1626, 1624, 1628,
+     1630, 1631, 1632, 1632, 1634, 1630, 1635, 1636, 1636, 1638,
+
+     1625, 1637, 1627, 1629, 1639, 1637, 1640, 1641, 1638, 1642,
+     1643, 1635, 1645, 1634, 1642, 1641, 1631, 1644, 1644, 1648,
+     1639, 1647, 1647, 1651, 1648, 1640, 1650, 1650, 1652, 1654,
+     1654, 1645, 1655, 1656, 1657, 1657, 1643, 1658, 1658, 1659,
+     1660, 1661, 1663, 1651, 1662, 1662, 1655, 1664, 1669, 1667,
+     1665, 1652, 1660, 1665, 1663, 1656, 1673, 1666, 1659, 1668,
+     1676, 1661, 1666, 1688, 1668, 1669, 1669, 1664, 1667, 1670,
+     1670, 1672, 1672, 1675, 1676, 1673, 1677, 1688, 1675, 1678,
+     1678, 1677, 1679, 1679, 1680, 1680, 1681, 1683, 1683, 1685,
+     1685, 1681, 1687, 1687, 1689, 1690, 1690, 1691, 1694, 1695,
+
+     1695, 1699, 1691, 1689, 1696, 1698, 1694, 1700, 1701, 1696,
+     1698, 1702, 1703, 1699, 1704, 1700, 1705, 1708, 1709, 1709,
+     1711, 1705, 1710, 1710, 1711,   13, 1701, 1702, 1720, 1703,
+     1703, 1715, 1715, 1723, 1717, 1704, 1725, 1708, 1717, 1719,
+     1719, 1729, 1720, 1722, 1722, 1726, 1726, 1728, 1723, 1727,
+     1727, 1731, 1728, 1730, 1725, 1732, 1733, 1734, 1735, 1735,
+     1732, 1733, 1738, 1738, 1740, 1740, 1729, 1744, 1730, 1742,
+     1742, 1750, 1731, 1745, 1745, 1748, 1734, 1749, 1748, 1744,
+     1752, 1751, 1749, 1753, 1754, 1750, 1751, 1759, 1760, 1762,
+     1763, 1759, 1761, 1764, 1765, 1766,    0, 1767, 1769, 1752,
+
+     1754, 1753, 1762, 1761, 1768, 1768, 1773, 1769, 1760, 1763,
+     1765, 1764, 1767, 1770, 1770, 1774, 1771, 1772, 1775, 1776,
+     1766, 1771, 1772, 1775, 1778, 1780, 1783, 1781, 1784, 1782,
+     1774, 1773, 1781, 1776, 1782, 1785, 1786, 1787, 1788, 1778,
+     1783, 1784, 1789, 1790, 1780, 1793,    0, 1791, 1792,    0,
+     1786, 1788, 1791, 1792, 1785, 1789, 1787, 1794, 1794, 1798,
+     1795, 1796, 1790, 1797, 1793, 1795, 1796, 1799, 1797, 1800,
+     1800, 1802, 1799, 1801, 1803, 1805, 1804, 1808, 1798, 1806,
+     1801, 1804, 1808, 1809, 1810, 1811, 1812, 1812, 1814,    0,
+     1802, 1813, 1806, 1803, 1805, 1819, 1813, 1823, 1811, 1815,
+
+     1815, 1817, 1809, 1810, 1816, 1816, 1817, 1814, 1818, 1820,
+     1820, 1821, 1822, 1825, 1819, 1818, 1823, 1824, 1821, 1822,
+     1827, 1828, 1824, 1829, 1830, 1827, 1828, 1831, 1831, 1832,
+     1833, 1836, 1825, 1834, 1834, 1835, 1835, 1845, 1836, 1837,
+     1837, 1846, 1829, 1830, 1838, 1838, 1839, 1841, 1832, 1833,
+     1844,    0, 1841, 1839,    0, 1844, 1845, 1847, 1847,    0,
+     1846, 1848, 1848, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1854, 1854, 1854,
+     1854, 1854, 1854, 1854, 1855, 1855, 1855, 1855, 1855, 1855,
+     1855, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1858, 1858,
+
+        0, 1858, 1858, 1858, 1858, 1859, 1859,    0,    0,    0,
+     1859, 1859, 1860, 1860,    0,    0, 1860,    0, 1860, 1861,
+        0,    0,    0,    0,    0, 1861, 1862, 1862,    0,    0,
+        0, 1862, 1862, 1863,    0,    0,    0,    0,    0, 1863,
+     1864, 1864,    0, 1864, 1864, 1864, 1864, 1865, 1865,    0,
+     1865, 1865, 1865, 1865, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851,
+     1851, 1851, 1851, 1851
 
     } ;
 
@@ -2074,7 +2077,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2076 "<stdout>"
+#line 2079 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2297,7 +2300,7 @@ YY_DECL
        {
 #line 201 "./util/configlexer.lex"
 
-#line 2299 "<stdout>"
+#line 2302 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2330,7 +2333,7 @@ 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 >= 1847 )
+                               if ( yy_current_state >= 1852 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3077,144 +3080,149 @@ YY_RULE_SETUP
 case 143:
 YY_RULE_SETUP
 #line 348 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 352 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 353 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 354 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 355 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
-#line 357 "./util/configlexer.lex"
+#line 356 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
-#line 359 "./util/configlexer.lex"
+#line 358 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 361 "./util/configlexer.lex"
+#line 360 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
-#line 363 "./util/configlexer.lex"
+#line 362 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
-#line 365 "./util/configlexer.lex"
+#line 364 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
-#line 367 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 366 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 368 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
        YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 369 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 370 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 371 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 372 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 373 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
        YY_BREAK
 case 163:
-/* rule 163 can match eol */
 YY_RULE_SETUP
 #line 374 "./util/configlexer.lex"
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+       YY_BREAK
+case 164:
+/* rule 164 can match eol */
+YY_RULE_SETUP
+#line 375 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 164:
+case 165:
 YY_RULE_SETUP
-#line 377 "./util/configlexer.lex"
+#line 378 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 378 "./util/configlexer.lex"
+#line 379 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 165:
+case 166:
 YY_RULE_SETUP
-#line 383 "./util/configlexer.lex"
+#line 384 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 166:
-/* rule 166 can match eol */
+case 167:
+/* rule 167 can match eol */
 YY_RULE_SETUP
-#line 384 "./util/configlexer.lex"
+#line 385 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 167:
+case 168:
 YY_RULE_SETUP
-#line 386 "./util/configlexer.lex"
+#line 387 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3227,34 +3235,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 168:
+case 169:
 YY_RULE_SETUP
-#line 398 "./util/configlexer.lex"
+#line 399 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 399 "./util/configlexer.lex"
+#line 400 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 169:
+case 170:
 YY_RULE_SETUP
-#line 404 "./util/configlexer.lex"
+#line 405 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 170:
-/* rule 170 can match eol */
+case 171:
+/* rule 171 can match eol */
 YY_RULE_SETUP
-#line 405 "./util/configlexer.lex"
+#line 406 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 171:
+case 172:
 YY_RULE_SETUP
-#line 407 "./util/configlexer.lex"
+#line 408 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3267,38 +3275,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 172:
+case 173:
 YY_RULE_SETUP
-#line 419 "./util/configlexer.lex"
+#line 420 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 421 "./util/configlexer.lex"
+#line 422 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 425 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 174:
-/* rule 174 can match eol */
 YY_RULE_SETUP
 #line 426 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 175:
+/* rule 175 can match eol */
 YY_RULE_SETUP
 #line 427 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 176:
 YY_RULE_SETUP
 #line 428 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 429 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3306,27 +3314,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 433 "./util/configlexer.lex"
+#line 434 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 177:
+case 178:
 YY_RULE_SETUP
-#line 437 "./util/configlexer.lex"
+#line 438 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 178:
-/* rule 178 can match eol */
+case 179:
+/* rule 179 can match eol */
 YY_RULE_SETUP
-#line 438 "./util/configlexer.lex"
+#line 439 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 179:
+case 180:
 YY_RULE_SETUP
-#line 440 "./util/configlexer.lex"
+#line 441 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3336,7 +3344,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 446 "./util/configlexer.lex"
+#line 447 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3348,33 +3356,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 180:
+case 181:
 YY_RULE_SETUP
-#line 457 "./util/configlexer.lex"
+#line 458 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 181:
+case 182:
 YY_RULE_SETUP
-#line 461 "./util/configlexer.lex"
+#line 462 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 182:
+case 183:
 YY_RULE_SETUP
-#line 465 "./util/configlexer.lex"
+#line 466 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 183:
+case 184:
 YY_RULE_SETUP
-#line 469 "./util/configlexer.lex"
+#line 470 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3376 "<stdout>"
+#line 3384 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3665,7 +3673,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 >= 1847 )
+                       if ( yy_current_state >= 1852 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3693,11 +3701,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 >= 1847 )
+               if ( yy_current_state >= 1852 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 1846);
+       yy_is_jam = (yy_current_state == 1851);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4336,7 +4344,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 469 "./util/configlexer.lex"
+#line 470 "./util/configlexer.lex"
 
 
 
index 58d642c1da22a5c254f0a744cabf07e258da26df..3fe675d331525054fc117fe53c2f7d5f7e2c133d 100644 (file)
@@ -345,6 +345,7 @@ dns64-prefix{COLON}         { YDVAR(1, VAR_DNS64_PREFIX) }
 dns64-synthall{COLON}          { YDVAR(1, VAR_DNS64_SYNTHALL) }
 define-tag{COLON}              { YDVAR(1, VAR_DEFINE_TAG) }
 local-zone-tag{COLON}          { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+access-control-tag{COLON}      { YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
 dnstap{COLON}                  { YDVAR(0, VAR_DNSTAP) }
 dnstap-enable{COLON}           { YDVAR(1, VAR_DNSTAP_ENABLE) }
 dnstap-socket-path{COLON}      { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
index c2035bad650b16e377c8c0c702b37d1e6f4a9fa1..1d050483a407c589959a62de5119e6f0834a1400 100644 (file)
@@ -290,7 +290,8 @@ extern int yydebug;
     VAR_QNAME_MINIMISATION = 421,
     VAR_IP_FREEBIND = 422,
     VAR_DEFINE_TAG = 423,
-    VAR_LOCAL_ZONE_TAG = 424
+    VAR_LOCAL_ZONE_TAG = 424,
+    VAR_ACCESS_CONTROL_TAG = 425
   };
 #endif
 /* Tokens.  */
@@ -461,6 +462,7 @@ extern int yydebug;
 #define VAR_IP_FREEBIND 422
 #define VAR_DEFINE_TAG 423
 #define VAR_LOCAL_ZONE_TAG 424
+#define VAR_ACCESS_CONTROL_TAG 425
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -471,7 +473,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 475 "util/configparser.c" /* yacc.c:355  */
+#line 477 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -488,7 +490,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 492 "util/configparser.c" /* yacc.c:358  */
+#line 494 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -730,21 +732,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   319
+#define YYLAST   323
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  170
+#define YYNTOKENS  171
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  175
+#define YYNNTS  176
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  335
+#define YYNRULES  337
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  495
+#define YYNSTATES  499
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   424
+#define YYMAXUTOK   425
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -795,47 +797,47 @@ static const yytype_uint8 yytranslate[] =
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169
+     165,   166,   167,   168,   169,   170
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   131,   131,   131,   132,   132,   133,   133,   134,   134,
-     138,   143,   144,   145,   145,   145,   146,   146,   147,   147,
-     147,   148,   148,   149,   149,   149,   150,   150,   150,   151,
-     151,   152,   152,   153,   153,   154,   154,   155,   155,   156,
-     156,   157,   157,   158,   158,   159,   159,   159,   160,   160,
-     160,   161,   161,   161,   162,   162,   163,   163,   164,   164,
-     165,   165,   166,   166,   166,   167,   167,   168,   168,   169,
-     169,   169,   170,   170,   171,   171,   172,   172,   173,   173,
-     173,   174,   174,   175,   175,   176,   176,   177,   177,   178,
-     178,   179,   179,   179,   180,   180,   181,   181,   181,   182,
-     182,   182,   183,   183,   183,   184,   184,   184,   185,   185,
-     185,   186,   186,   186,   187,   187,   188,   188,   189,   189,
-     190,   190,   191,   191,   191,   192,   192,   193,   193,   194,
-     194,   195,   195,   196,   196,   196,   197,   199,   211,   212,
-     213,   213,   213,   213,   213,   215,   227,   228,   229,   229,
-     229,   229,   231,   240,   249,   260,   269,   278,   287,   300,
-     315,   324,   333,   342,   351,   360,   369,   378,   387,   396,
-     405,   414,   423,   432,   441,   448,   455,   464,   473,   487,
-     496,   505,   512,   519,   526,   534,   541,   548,   555,   562,
-     570,   578,   586,   593,   600,   609,   618,   625,   632,   640,
-     648,   658,   668,   678,   691,   702,   710,   723,   732,   741,
-     750,   760,   770,   778,   791,   800,   808,   817,   825,   838,
-     847,   854,   864,   874,   884,   894,   904,   914,   924,   934,
-     941,   948,   955,   964,   973,   982,   989,   999,  1016,  1023,
-    1041,  1054,  1067,  1076,  1085,  1094,  1103,  1113,  1123,  1132,
-    1141,  1148,  1157,  1166,  1175,  1184,  1192,  1205,  1213,  1237,
-    1244,  1259,  1269,  1279,  1286,  1293,  1302,  1316,  1335,  1344,
-    1352,  1365,  1378,  1391,  1400,  1410,  1420,  1427,  1434,  1443,
-    1453,  1463,  1470,  1477,  1486,  1491,  1492,  1493,  1493,  1493,
-    1494,  1494,  1494,  1495,  1495,  1497,  1507,  1516,  1523,  1533,
-    1540,  1547,  1554,  1561,  1566,  1567,  1568,  1568,  1569,  1569,
-    1570,  1570,  1571,  1572,  1573,  1574,  1575,  1576,  1578,  1586,
-    1593,  1601,  1609,  1616,  1623,  1632,  1641,  1650,  1659,  1668,
-    1677,  1682,  1683,  1684,  1686,  1692
+       0,   132,   132,   132,   133,   133,   134,   134,   135,   135,
+     139,   144,   145,   146,   146,   146,   147,   147,   148,   148,
+     148,   149,   149,   150,   150,   150,   151,   151,   151,   152,
+     152,   153,   153,   154,   154,   155,   155,   156,   156,   157,
+     157,   158,   158,   159,   159,   160,   160,   160,   161,   161,
+     161,   162,   162,   162,   163,   163,   164,   164,   165,   165,
+     166,   166,   167,   167,   167,   168,   168,   169,   169,   170,
+     170,   170,   171,   171,   172,   172,   173,   173,   174,   174,
+     174,   175,   175,   176,   176,   177,   177,   178,   178,   179,
+     179,   180,   180,   180,   181,   181,   182,   182,   182,   183,
+     183,   183,   184,   184,   184,   185,   185,   185,   186,   186,
+     186,   187,   187,   187,   188,   188,   189,   189,   190,   190,
+     191,   191,   192,   192,   192,   193,   193,   194,   194,   195,
+     195,   196,   196,   197,   197,   197,   198,   198,   200,   212,
+     213,   214,   214,   214,   214,   214,   216,   228,   229,   230,
+     230,   230,   230,   232,   241,   250,   261,   270,   279,   288,
+     301,   316,   325,   334,   343,   352,   361,   370,   379,   388,
+     397,   406,   415,   424,   433,   442,   449,   456,   465,   474,
+     488,   497,   506,   513,   520,   527,   535,   542,   549,   556,
+     563,   571,   579,   587,   594,   601,   610,   619,   626,   633,
+     641,   649,   659,   669,   679,   692,   703,   711,   724,   733,
+     742,   751,   761,   771,   779,   792,   801,   809,   818,   826,
+     839,   848,   855,   865,   875,   885,   895,   905,   915,   925,
+     935,   942,   949,   956,   965,   974,   983,   990,  1000,  1017,
+    1024,  1042,  1055,  1068,  1077,  1086,  1095,  1104,  1114,  1124,
+    1133,  1142,  1149,  1158,  1167,  1176,  1185,  1193,  1206,  1214,
+    1238,  1245,  1260,  1270,  1280,  1287,  1294,  1303,  1317,  1336,
+    1355,  1364,  1372,  1385,  1398,  1411,  1420,  1430,  1440,  1447,
+    1454,  1463,  1473,  1483,  1490,  1497,  1506,  1511,  1512,  1513,
+    1513,  1513,  1514,  1514,  1514,  1515,  1515,  1517,  1527,  1536,
+    1543,  1553,  1560,  1567,  1574,  1581,  1586,  1587,  1588,  1588,
+    1589,  1589,  1590,  1590,  1591,  1592,  1593,  1594,  1595,  1596,
+    1598,  1606,  1613,  1621,  1629,  1636,  1643,  1652,  1661,  1670,
+    1679,  1688,  1697,  1702,  1703,  1704,  1706,  1712
 };
 #endif
 
@@ -903,11 +905,11 @@ static const char *const yytname[] =
   "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_RATELIMIT_FACTOR",
   "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
   "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_IP_FREEBIND",
-  "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "$accept", "toplevelvars",
-  "toplevelvar", "serverstart", "contents_server", "content_server",
-  "stubstart", "contents_stub", "content_stub", "forwardstart",
-  "contents_forward", "content_forward", "server_num_threads",
-  "server_verbosity", "server_statistics_interval",
+  "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
+  "$accept", "toplevelvars", "toplevelvar", "serverstart",
+  "contents_server", "content_server", "stubstart", "contents_stub",
+  "content_stub", "forwardstart", "contents_forward", "content_forward",
+  "server_num_threads", "server_verbosity", "server_statistics_interval",
   "server_statistics_cumulative", "server_extended_statistics",
   "server_port", "server_interface", "server_outgoing_interface",
   "server_outgoing_range", "server_outgoing_port_permit",
@@ -955,17 +957,18 @@ static const char *const yytname[] =
   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
   "server_rrset_roundrobin", "server_max_udp_size", "server_dns64_prefix",
   "server_dns64_synthall", "server_define_tag", "server_local_zone_tag",
-  "server_ratelimit", "server_ratelimit_size", "server_ratelimit_slabs",
-  "server_ratelimit_for_domain", "server_ratelimit_below_domain",
-  "server_ratelimit_factor", "server_qname_minimisation", "stub_name",
-  "stub_host", "stub_addr", "stub_first", "stub_prime", "forward_name",
-  "forward_host", "forward_addr", "forward_first", "rcstart",
-  "contents_rc", "content_rc", "rc_control_enable", "rc_control_port",
-  "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
-  "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
-  "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
-  "dt_dnstap_socket_path", "dt_dnstap_send_identity",
-  "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
+  "access_control_tag", "server_ratelimit", "server_ratelimit_size",
+  "server_ratelimit_slabs", "server_ratelimit_for_domain",
+  "server_ratelimit_below_domain", "server_ratelimit_factor",
+  "server_qname_minimisation", "stub_name", "stub_host", "stub_addr",
+  "stub_first", "stub_prime", "forward_name", "forward_host",
+  "forward_addr", "forward_first", "rcstart", "contents_rc", "content_rc",
+  "rc_control_enable", "rc_control_port", "rc_control_interface",
+  "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file",
+  "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt",
+  "content_dt", "dt_dnstap_enable", "dt_dnstap_socket_path",
+  "dt_dnstap_send_identity", "dt_dnstap_send_version",
+  "dt_dnstap_identity", "dt_dnstap_version",
   "dt_dnstap_log_resolver_query_messages",
   "dt_dnstap_log_resolver_response_messages",
   "dt_dnstap_log_client_query_messages",
@@ -998,7 +1001,8 @@ static const yytype_uint16 yytoknum[] =
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425
 };
 # endif
 
@@ -1016,23 +1020,21 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     -81,   118,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   119,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -12,    39,    47,    40,
       36,   -80,    18,    19,    20,    24,    25,    26,    69,    72,
-      73,    74,    75,    80,   109,   120,   129,   130,   149,   150,
-     151,   152,   153,   155,   156,   157,   158,   159,   161,   162,
-     163,   164,   165,   166,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+      73,    74,    75,    80,   108,   129,   130,   150,   151,   152,
+     153,   154,   156,   157,   158,   159,   161,   162,   163,   164,
+     165,   166,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
@@ -1043,29 +1045,31 @@ static const yytype_int16 yypact[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   275,   276,   277,   278,   279,   -81,   -81,   -81,   -81,
-     -81,   -81,   280,   281,   282,   283,   -81,   -81,   -81,   -81,
-     -81,   284,   285,   286,   287,   288,   289,   290,   291,   -81,
-     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   304,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   278,   279,   280,   281,   282,   -81,   -81,
+     -81,   -81,   -81,   -81,   283,   284,   285,   286,   -81,   -81,
+     -81,   -81,   -81,   287,   288,   289,   290,   291,   292,   293,
+     294,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   -81,   -81,   307,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   305,   306,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   -81,   308,   309,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     307,   308,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   309,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   -81,   310,   311,   -81,   -81,   -81,   -81,   -81,   -81,
+     -81,   312,   313,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81
+     -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1073,8 +1077,8 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    10,   137,   145,   284,   330,   303,     3,
-      12,   139,   147,   286,   305,   332,     4,     5,     6,     8,
+       2,     0,     1,    10,   138,   146,   286,   332,   305,     3,
+      12,   140,   148,   288,   307,   334,     4,     5,     6,     8,
        9,     7,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1087,42 +1091,42 @@ static const yytype_uint16 yydefact[] =
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,    13,    14,    72,
-      75,    84,    15,    23,    63,    16,    76,    77,    34,    56,
-      71,    17,    18,    19,    20,    21,    22,   106,   107,   108,
-     109,   110,    73,    62,    88,   105,    24,    25,    26,    27,
-      28,    64,    78,    79,    94,    50,    60,    51,    89,    44,
-      45,    46,    47,    98,   102,   114,   122,   133,    99,    57,
-      29,    30,    31,    86,   115,   116,   117,    32,    33,    35,
-      36,    38,    39,    37,   120,    40,    41,    42,    48,    67,
-     103,    81,   121,    74,   129,    82,    83,   100,   101,    87,
-      43,    65,    68,    49,    52,    90,    91,    66,   130,    92,
-      53,    54,    55,   104,    93,    61,    95,    96,    97,   131,
-      58,    59,    80,    69,    70,    85,   111,   112,   113,   118,
-     119,   134,   135,   123,   125,   124,   126,   127,   128,   132,
-     136,     0,     0,     0,     0,     0,   138,   140,   141,   142,
-     144,   143,     0,     0,     0,     0,   146,   148,   149,   150,
-     151,     0,     0,     0,     0,     0,     0,     0,     0,   285,
-     287,   289,   288,   294,   290,   291,   292,   293,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    11,    13,    14,
+      72,    75,    84,    15,    23,    63,    16,    76,    77,    34,
+      56,    71,    17,    18,    19,    20,    21,    22,   106,   107,
+     108,   109,   110,    73,    62,    88,   105,    24,    25,    26,
+      27,    28,    64,    78,    79,    94,    50,    60,    51,    89,
+      44,    45,    46,    47,    98,   102,   114,   122,   133,    99,
+      57,    29,    30,    31,    86,   115,   116,   117,    32,    33,
+      35,    36,    38,    39,    37,   120,    40,    41,    42,    48,
+      67,   103,    81,   121,    74,   129,    82,    83,   100,   101,
+      87,    43,    65,    68,    49,    52,    90,    91,    66,   130,
+      92,    53,    54,    55,   104,    93,    61,    95,    96,    97,
+     131,    58,    59,    80,    69,    70,    85,   111,   112,   113,
+     118,   119,   134,   135,   137,   123,   125,   124,   126,   127,
+     128,   132,   136,     0,     0,     0,     0,     0,   139,   141,
+     142,   143,   145,   144,     0,     0,     0,     0,   147,   149,
+     150,   151,   152,     0,     0,     0,     0,     0,     0,     0,
+       0,   287,   289,   291,   290,   296,   292,   293,   294,   295,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     304,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,     0,   331,   333,   153,   152,   157,   160,
-     158,   166,   167,   168,   169,   170,   171,   181,   182,   183,
-     184,   185,   205,   206,   207,   212,   213,   163,   214,   215,
-     218,   216,   217,   220,   221,   222,   235,   194,   195,   196,
-     197,   223,   238,   190,   192,   239,   245,   246,   247,   164,
-     204,   255,   256,   191,   250,   178,   159,   186,   236,   242,
-     224,     0,     0,   259,   165,   154,   177,   228,   155,   161,
-     162,   187,   188,   257,   226,   230,   231,   156,   260,   208,
-     234,   179,   193,   240,   241,   244,   249,   189,   253,   251,
-     252,   198,   203,   232,   233,   199,   200,   225,   248,   180,
-     172,   173,   174,   175,   176,   261,   262,   263,   209,   210,
-     211,   219,   264,   265,   227,   201,   335,   268,   270,   269,
-       0,     0,   273,   229,   243,   254,   274,   202,   266,     0,
-     275,   276,   277,   279,   278,   280,   281,   282,   283,   295,
-     297,   296,   299,   300,   301,   302,   298,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   329,   334,
-     237,   258,   271,   272,   267
+       0,     0,   306,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,     0,   333,   335,   154,   153,
+     158,   161,   159,   167,   168,   169,   170,   171,   172,   182,
+     183,   184,   185,   186,   206,   207,   208,   213,   214,   164,
+     215,   216,   219,   217,   218,   221,   222,   223,   236,   195,
+     196,   197,   198,   224,   239,   191,   193,   240,   246,   247,
+     248,   165,   205,   256,   257,   192,   251,   179,   160,   187,
+     237,   243,   225,     0,     0,   260,   166,   155,   178,   229,
+     156,   162,   163,   188,   189,   258,   227,   231,   232,   157,
+     261,   209,   235,   180,   194,   241,   242,   245,   250,   190,
+     254,   252,   253,   199,   204,   233,   234,   200,   201,   226,
+     249,   181,   173,   174,   175,   176,   177,   262,   263,   264,
+     210,   211,   212,   220,   265,   266,   228,   202,   337,   270,
+     272,   271,     0,     0,   275,   230,   244,   255,   276,   203,
+     267,     0,     0,   277,   278,   279,   281,   280,   282,   283,
+     284,   285,   297,   299,   298,   301,   302,   303,   304,   300,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,   336,   238,   259,   273,   274,   268,   269
 };
 
   /* YYPGOTO[NTERM-NUM].  */
@@ -1145,30 +1149,30 @@ static const yytype_int8 yypgoto[] =
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
      -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,   -81,
-     -81,   -81,   -81,   -81,   -81
+     -81,   -81,   -81,   -81,   -81,   -81
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,     9,    10,    16,   146,    11,    17,   276,    12,
-      18,   286,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   277,   278,   279,   280,   281,
-     287,   288,   289,   290,    13,    19,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,    14,    20,   320,   321,   322,
-     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
-      15,    21,   334,   335,   270
+      -1,     1,     9,    10,    16,   147,    11,    17,   278,    12,
+      18,   288,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   279,   280,   281,   282,
+     283,   289,   290,   291,   292,    13,    19,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,    14,    20,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,    15,    21,   336,   337,   272
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1178,39 +1182,40 @@ static const yytype_uint16 yytable[] =
 {
       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,   333,   336,   337,
-     338,    49,    50,    51,   339,   340,   341,    52,    53,    54,
+      42,    43,    44,    45,    46,    47,    48,   335,   338,   339,
+     340,    49,    50,    51,   341,   342,   343,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,   271,   342,
-     272,   273,   343,   344,   345,   346,   282,    93,    94,    95,
-     347,    96,    97,    98,   283,   284,    99,   100,   101,   102,
+      85,    86,    87,    88,    89,    90,    91,    92,   273,   344,
+     274,   275,   345,   346,   347,   348,   284,    93,    94,    95,
+     349,    96,    97,    98,   285,   286,    99,   100,   101,   102,
      103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,     2,   348,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,     3,
-     349,   291,   292,   293,   294,   295,   296,   297,   298,   350,
-     351,   274,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,     4,   352,
-     353,   354,   355,   356,     5,   357,   358,   359,   360,   361,
-     275,   362,   363,   364,   365,   366,   367,   285,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     113,   114,   115,   116,   117,   118,   119,   120,   350,     2,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,     0,
+       3,   293,   294,   295,   296,   297,   298,   299,   300,   351,
+     352,   276,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,     4,
+     353,   354,   355,   356,   357,     5,   358,   359,   360,   361,
+     277,   362,   363,   364,   365,   366,   367,   287,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
      368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   382,   383,   384,   385,     6,   386,
+     378,   379,   380,   381,   382,   383,   384,   385,   386,     6,
      387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,     7,   401,   402,   403,   404,   405,
+     397,   398,   399,   400,   401,     7,   402,   403,   404,   405,
      406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
      416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-     426,   427,   428,   429,   430,   431,   432,   433,   434,     8,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+       8,   436,   437,   438,   439,   440,   441,   442,   443,   444,
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
      455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
      465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
      475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
-     485,   486,   487,   488,   489,   490,   491,   492,   493,   494
+     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
+     495,   496,   497,   498
 };
 
-static const yytype_uint8 yycheck[] =
+static const yytype_int16 yycheck[] =
 {
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
@@ -1223,36 +1228,37 @@ static const yytype_uint8 yycheck[] =
       41,    42,    10,    10,    10,    10,    39,    99,   100,   101,
       10,   103,   104,   105,    47,    48,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,     0,    10,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,    11,
-      10,    91,    92,    93,    94,    95,    96,    97,    98,    10,
+     122,   123,   124,   125,   126,   127,   128,   129,    10,     0,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,    -1,
+      11,    91,    92,    93,    94,    95,    96,    97,    98,    10,
       10,   102,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,    40,    10,
-      10,    10,    10,    10,    46,    10,    10,    10,    10,    10,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,    40,
+      10,    10,    10,    10,    10,    46,    10,    10,    10,    10,
      131,    10,    10,    10,    10,    10,    10,   130,   142,   143,
      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    90,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    90,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,   106,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,   106,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,   141,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+     141,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,   171,     0,    11,    40,    46,    90,   106,   141,   172,
-     173,   176,   179,   314,   325,   340,   174,   177,   180,   315,
-     326,   341,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,   172,     0,    11,    40,    46,    90,   106,   141,   173,
+     174,   177,   180,   316,   327,   342,   175,   178,   181,   317,
+     328,   343,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    43,
       44,    45,    49,    50,    51,    52,    53,    54,    55,    56,
@@ -1264,7 +1270,7 @@ static const yytype_uint16 yystos[] =
      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
      129,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   175,   182,   183,   184,
+     164,   165,   166,   167,   168,   169,   170,   176,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
@@ -1277,13 +1283,13 @@ static const yytype_uint16 yystos[] =
      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,   304,
-     344,    39,    41,    42,   102,   131,   178,   305,   306,   307,
-     308,   309,    39,    47,    48,   130,   181,   310,   311,   312,
-     313,    91,    92,    93,    94,    95,    96,    97,    98,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
-     337,   338,   339,   107,   342,   343,    10,    10,    10,    10,
+     305,   306,   346,    39,    41,    42,   102,   131,   179,   307,
+     308,   309,   310,   311,    39,    47,    48,   130,   182,   312,
+     313,   314,   315,    91,    92,    93,    94,    95,    96,    97,
+      98,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   329,   330,   331,   332,   333,   334,   335,   336,
+     337,   338,   339,   340,   341,   107,   344,   345,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
@@ -1299,28 +1305,28 @@ static const yytype_uint16 yystos[] =
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10
+      10,    10,    10,    10,    10,    10,    10,    10,    10
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   170,   171,   171,   172,   172,   172,   172,   172,   172,
-     173,   174,   174,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-     175,   175,   175,   175,   175,   175,   175,   176,   177,   177,
-     178,   178,   178,   178,   178,   179,   180,   180,   181,   181,
-     181,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+       0,   171,   172,   172,   173,   173,   173,   173,   173,   173,
+     174,   175,   175,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   176,   176,
+     176,   176,   176,   176,   176,   176,   176,   176,   177,   178,
+     178,   179,   179,   179,   179,   179,   180,   181,   181,   182,
+     182,   182,   182,   183,   184,   185,   186,   187,   188,   189,
      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
      210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
@@ -1333,12 +1339,12 @@ static const yytype_uint16 yyr1[] =
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   315,   316,   316,   316,
-     316,   316,   316,   316,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   326,   327,   327,   327,   327,
-     327,   327,   327,   327,   327,   327,   327,   327,   328,   329,
+     310,   311,   312,   313,   314,   315,   316,   317,   317,   318,
+     318,   318,   318,   318,   318,   318,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   328,   329,   329,
+     329,   329,   329,   329,   329,   329,   329,   329,   329,   329,
      330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   341,   341,   342,   343,   344
+     340,   341,   342,   343,   343,   344,   345,   346
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1357,27 +1363,27 @@ static const yytype_uint8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
-       1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       0,     1,     1,     1,     1,     1,     1,     2,     0,     1,
+       1,     1,     1,     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,     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,     3,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
-       2,     2,     2,     2,     2,     2,     2,     3,     2,     2,
-       2,     3,     3,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     2,     2,     2,     2,
-       2,     2,     2,     1,     2,     0,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       1,     2,     0,     1,     2,     2
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
+       2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
+       2,     2,     2,     3,     3,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
+       2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     1,     2,     0,     1,     2,     2
 };
 
 
@@ -2054,15 +2060,15 @@ yyreduce:
   switch (yyn)
     {
         case 10:
-#line 139 "./util/configparser.y" /* yacc.c:1646  */
+#line 140 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2062 "util/configparser.c" /* yacc.c:1646  */
+#line 2068 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 137:
-#line 200 "./util/configparser.y" /* yacc.c:1646  */
+  case 138:
+#line 201 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2073,11 +2079,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2077 "util/configparser.c" /* yacc.c:1646  */
+#line 2083 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 145:
-#line 216 "./util/configparser.y" /* yacc.c:1646  */
+  case 146:
+#line 217 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2088,11 +2094,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2092 "util/configparser.c" /* yacc.c:1646  */
+#line 2098 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 232 "./util/configparser.y" /* yacc.c:1646  */
+  case 153:
+#line 233 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2100,11 +2106,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2104 "util/configparser.c" /* yacc.c:1646  */
+#line 2110 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 241 "./util/configparser.y" /* yacc.c:1646  */
+  case 154:
+#line 242 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2112,11 +2118,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2116 "util/configparser.c" /* yacc.c:1646  */
+#line 2122 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 250 "./util/configparser.y" /* yacc.c:1646  */
+  case 155:
+#line 251 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2126,11 +2132,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2130 "util/configparser.c" /* yacc.c:1646  */
+#line 2136 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 261 "./util/configparser.y" /* yacc.c:1646  */
+  case 156:
+#line 262 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2138,11 +2144,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2142 "util/configparser.c" /* yacc.c:1646  */
+#line 2148 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 270 "./util/configparser.y" /* yacc.c:1646  */
+  case 157:
+#line 271 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2150,11 +2156,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2154 "util/configparser.c" /* yacc.c:1646  */
+#line 2160 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 279 "./util/configparser.y" /* yacc.c:1646  */
+  case 158:
+#line 280 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2162,11 +2168,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2166 "util/configparser.c" /* yacc.c:1646  */
+#line 2172 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 288 "./util/configparser.y" /* yacc.c:1646  */
+  case 159:
+#line 289 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2178,11 +2184,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2182 "util/configparser.c" /* yacc.c:1646  */
+#line 2188 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 301 "./util/configparser.y" /* yacc.c:1646  */
+  case 160:
+#line 302 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2196,11 +2202,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2200 "util/configparser.c" /* yacc.c:1646  */
+#line 2206 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 316 "./util/configparser.y" /* yacc.c:1646  */
+  case 161:
+#line 317 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2208,11 +2214,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2212 "util/configparser.c" /* yacc.c:1646  */
+#line 2218 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 325 "./util/configparser.y" /* yacc.c:1646  */
+  case 162:
+#line 326 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 1, 
@@ -2220,11 +2226,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2224 "util/configparser.c" /* yacc.c:1646  */
+#line 2230 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 334 "./util/configparser.y" /* yacc.c:1646  */
+  case 163:
+#line 335 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
                if(!cfg_mark_ports((yyvsp[0].str), 0, 
@@ -2232,11 +2238,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2236 "util/configparser.c" /* yacc.c:1646  */
+#line 2242 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 343 "./util/configparser.y" /* yacc.c:1646  */
+  case 164:
+#line 344 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2244,11 +2250,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2248 "util/configparser.c" /* yacc.c:1646  */
+#line 2254 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 352 "./util/configparser.y" /* yacc.c:1646  */
+  case 165:
+#line 353 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2256,11 +2262,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2260 "util/configparser.c" /* yacc.c:1646  */
+#line 2266 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 361 "./util/configparser.y" /* yacc.c:1646  */
+  case 166:
+#line 362 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2268,11 +2274,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2272 "util/configparser.c" /* yacc.c:1646  */
+#line 2278 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 370 "./util/configparser.y" /* yacc.c:1646  */
+  case 167:
+#line 371 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2280,11 +2286,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2284 "util/configparser.c" /* yacc.c:1646  */
+#line 2290 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 379 "./util/configparser.y" /* yacc.c:1646  */
+  case 168:
+#line 380 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2292,11 +2298,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2296 "util/configparser.c" /* yacc.c:1646  */
+#line 2302 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 388 "./util/configparser.y" /* yacc.c:1646  */
+  case 169:
+#line 389 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2304,11 +2310,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2308 "util/configparser.c" /* yacc.c:1646  */
+#line 2314 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 397 "./util/configparser.y" /* yacc.c:1646  */
+  case 170:
+#line 398 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2316,11 +2322,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2320 "util/configparser.c" /* yacc.c:1646  */
+#line 2326 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 406 "./util/configparser.y" /* yacc.c:1646  */
+  case 171:
+#line 407 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2328,11 +2334,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2332 "util/configparser.c" /* yacc.c:1646  */
+#line 2338 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 415 "./util/configparser.y" /* yacc.c:1646  */
+  case 172:
+#line 416 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2340,11 +2346,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2344 "util/configparser.c" /* yacc.c:1646  */
+#line 2350 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 424 "./util/configparser.y" /* yacc.c:1646  */
+  case 173:
+#line 425 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2352,11 +2358,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2356 "util/configparser.c" /* yacc.c:1646  */
+#line 2362 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 433 "./util/configparser.y" /* yacc.c:1646  */
+  case 174:
+#line 434 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2364,31 +2370,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2368 "util/configparser.c" /* yacc.c:1646  */
+#line 2374 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 442 "./util/configparser.y" /* yacc.c:1646  */
+  case 175:
+#line 443 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_key);
                cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
        }
-#line 2378 "util/configparser.c" /* yacc.c:1646  */
+#line 2384 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 449 "./util/configparser.y" /* yacc.c:1646  */
+  case 176:
+#line 450 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->ssl_service_pem);
                cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
        }
-#line 2388 "util/configparser.c" /* yacc.c:1646  */
+#line 2394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 456 "./util/configparser.y" /* yacc.c:1646  */
+  case 177:
+#line 457 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2396,11 +2402,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2400 "util/configparser.c" /* yacc.c:1646  */
+#line 2406 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 465 "./util/configparser.y" /* yacc.c:1646  */
+  case 178:
+#line 466 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2408,11 +2414,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2412 "util/configparser.c" /* yacc.c:1646  */
+#line 2418 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 474 "./util/configparser.y" /* yacc.c:1646  */
+  case 179:
+#line 475 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2425,11 +2431,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2429 "util/configparser.c" /* yacc.c:1646  */
+#line 2435 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 488 "./util/configparser.y" /* yacc.c:1646  */
+  case 180:
+#line 489 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2437,11 +2443,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2441 "util/configparser.c" /* yacc.c:1646  */
+#line 2447 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 497 "./util/configparser.y" /* yacc.c:1646  */
+  case 181:
+#line 498 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2449,145 +2455,145 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2453 "util/configparser.c" /* yacc.c:1646  */
+#line 2459 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 506 "./util/configparser.y" /* yacc.c:1646  */
+  case 182:
+#line 507 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->chrootdir);
                cfg_parser->cfg->chrootdir = (yyvsp[0].str);
        }
-#line 2463 "util/configparser.c" /* yacc.c:1646  */
+#line 2469 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 513 "./util/configparser.y" /* yacc.c:1646  */
+  case 183:
+#line 514 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->username);
                cfg_parser->cfg->username = (yyvsp[0].str);
        }
-#line 2473 "util/configparser.c" /* yacc.c:1646  */
+#line 2479 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 520 "./util/configparser.y" /* yacc.c:1646  */
+  case 184:
+#line 521 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
                cfg_parser->cfg->directory = (yyvsp[0].str);
        }
-#line 2483 "util/configparser.c" /* yacc.c:1646  */
+#line 2489 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 527 "./util/configparser.y" /* yacc.c:1646  */
+  case 185:
+#line 528 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->logfile);
                cfg_parser->cfg->logfile = (yyvsp[0].str);
                cfg_parser->cfg->use_syslog = 0;
        }
-#line 2494 "util/configparser.c" /* yacc.c:1646  */
+#line 2500 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 535 "./util/configparser.y" /* yacc.c:1646  */
+  case 186:
+#line 536 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->pidfile);
                cfg_parser->cfg->pidfile = (yyvsp[0].str);
        }
-#line 2504 "util/configparser.c" /* yacc.c:1646  */
+#line 2510 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 542 "./util/configparser.y" /* yacc.c:1646  */
+  case 187:
+#line 543 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2514 "util/configparser.c" /* yacc.c:1646  */
+#line 2520 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 549 "./util/configparser.y" /* yacc.c:1646  */
+  case 188:
+#line 550 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dlv_anchor_file);
                cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
        }
-#line 2524 "util/configparser.c" /* yacc.c:1646  */
+#line 2530 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 556 "./util/configparser.y" /* yacc.c:1646  */
+  case 189:
+#line 557 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2534 "util/configparser.c" /* yacc.c:1646  */
+#line 2540 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 563 "./util/configparser.y" /* yacc.c:1646  */
+  case 190:
+#line 564 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        auto_trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2545 "util/configparser.c" /* yacc.c:1646  */
+#line 2551 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 571 "./util/configparser.y" /* yacc.c:1646  */
+  case 191:
+#line 572 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trust_anchor_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2556 "util/configparser.c" /* yacc.c:1646  */
+#line 2562 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 579 "./util/configparser.y" /* yacc.c:1646  */
+  case 192:
+#line 580 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
                        trusted_keys_file_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2567 "util/configparser.c" /* yacc.c:1646  */
+#line 2573 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 587 "./util/configparser.y" /* yacc.c:1646  */
+  case 193:
+#line 588 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2577 "util/configparser.c" /* yacc.c:1646  */
+#line 2583 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 594 "./util/configparser.y" /* yacc.c:1646  */
+  case 194:
+#line 595 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 2587 "util/configparser.c" /* yacc.c:1646  */
+#line 2593 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 601 "./util/configparser.y" /* yacc.c:1646  */
+  case 195:
+#line 602 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2595,11 +2601,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2599 "util/configparser.c" /* yacc.c:1646  */
+#line 2605 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 610 "./util/configparser.y" /* yacc.c:1646  */
+  case 196:
+#line 611 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2607,53 +2613,53 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2611 "util/configparser.c" /* yacc.c:1646  */
+#line 2617 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 619 "./util/configparser.y" /* yacc.c:1646  */
+  case 197:
+#line 620 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->identity);
                cfg_parser->cfg->identity = (yyvsp[0].str);
        }
-#line 2621 "util/configparser.c" /* yacc.c:1646  */
+#line 2627 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 626 "./util/configparser.y" /* yacc.c:1646  */
+  case 198:
+#line 627 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->version);
                cfg_parser->cfg->version = (yyvsp[0].str);
        }
-#line 2631 "util/configparser.c" /* yacc.c:1646  */
+#line 2637 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 633 "./util/configparser.y" /* yacc.c:1646  */
+  case 199:
+#line 634 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 2642 "util/configparser.c" /* yacc.c:1646  */
+#line 2648 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 641 "./util/configparser.y" /* yacc.c:1646  */
+  case 200:
+#line 642 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
                        yyerror("buffer size expected");
                free((yyvsp[0].str));
        }
-#line 2653 "util/configparser.c" /* yacc.c:1646  */
+#line 2659 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 649 "./util/configparser.y" /* yacc.c:1646  */
+  case 201:
+#line 650 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2662,11 +2668,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2666 "util/configparser.c" /* yacc.c:1646  */
+#line 2672 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 659 "./util/configparser.y" /* yacc.c:1646  */
+  case 202:
+#line 660 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2675,11 +2681,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2679 "util/configparser.c" /* yacc.c:1646  */
+#line 2685 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 669 "./util/configparser.y" /* yacc.c:1646  */
+  case 203:
+#line 670 "./util/configparser.y" /* yacc.c:1646  */
     {
         OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
         if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2688,11 +2694,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 2692 "util/configparser.c" /* yacc.c:1646  */
+#line 2698 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 679 "./util/configparser.y" /* yacc.c:1646  */
+  case 204:
+#line 680 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2704,11 +2710,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2708 "util/configparser.c" /* yacc.c:1646  */
+#line 2714 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 692 "./util/configparser.y" /* yacc.c:1646  */
+  case 205:
+#line 693 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2718,22 +2724,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2722 "util/configparser.c" /* yacc.c:1646  */
+#line 2728 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 703 "./util/configparser.y" /* yacc.c:1646  */
+  case 206:
+#line 704 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 2733 "util/configparser.c" /* yacc.c:1646  */
+#line 2739 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 711 "./util/configparser.y" /* yacc.c:1646  */
+  case 207:
+#line 712 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2745,11 +2751,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2749 "util/configparser.c" /* yacc.c:1646  */
+#line 2755 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 724 "./util/configparser.y" /* yacc.c:1646  */
+  case 208:
+#line 725 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2757,11 +2763,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2761 "util/configparser.c" /* yacc.c:1646  */
+#line 2767 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 733 "./util/configparser.y" /* yacc.c:1646  */
+  case 209:
+#line 734 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2769,11 +2775,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2773 "util/configparser.c" /* yacc.c:1646  */
+#line 2779 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 742 "./util/configparser.y" /* yacc.c:1646  */
+  case 210:
+#line 743 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2781,11 +2787,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2785 "util/configparser.c" /* yacc.c:1646  */
+#line 2791 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 751 "./util/configparser.y" /* yacc.c:1646  */
+  case 211:
+#line 752 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2794,11 +2800,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2798 "util/configparser.c" /* yacc.c:1646  */
+#line 2804 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 761 "./util/configparser.y" /* yacc.c:1646  */
+  case 212:
+#line 762 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2807,22 +2813,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2811 "util/configparser.c" /* yacc.c:1646  */
+#line 2817 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 771 "./util/configparser.y" /* yacc.c:1646  */
+  case 213:
+#line 772 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 2822 "util/configparser.c" /* yacc.c:1646  */
+#line 2828 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 779 "./util/configparser.y" /* yacc.c:1646  */
+  case 214:
+#line 780 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2834,11 +2840,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2838 "util/configparser.c" /* yacc.c:1646  */
+#line 2844 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 792 "./util/configparser.y" /* yacc.c:1646  */
+  case 215:
+#line 793 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2846,22 +2852,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2850 "util/configparser.c" /* yacc.c:1646  */
+#line 2856 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 801 "./util/configparser.y" /* yacc.c:1646  */
+  case 216:
+#line 802 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
                        "removed, use infra-host-ttl)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2861 "util/configparser.c" /* yacc.c:1646  */
+#line 2867 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 809 "./util/configparser.y" /* yacc.c:1646  */
+  case 217:
+#line 810 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2869,22 +2875,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2873 "util/configparser.c" /* yacc.c:1646  */
+#line 2879 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 818 "./util/configparser.y" /* yacc.c:1646  */
+  case 218:
+#line 819 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
                verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
                        "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2884 "util/configparser.c" /* yacc.c:1646  */
+#line 2890 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 826 "./util/configparser.y" /* yacc.c:1646  */
+  case 219:
+#line 827 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2896,11 +2902,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 2900 "util/configparser.c" /* yacc.c:1646  */
+#line 2906 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 839 "./util/configparser.y" /* yacc.c:1646  */
+  case 220:
+#line 840 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -2908,21 +2914,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2912 "util/configparser.c" /* yacc.c:1646  */
+#line 2918 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 848 "./util/configparser.y" /* yacc.c:1646  */
+  case 221:
+#line 849 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->target_fetch_policy);
                cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
        }
-#line 2922 "util/configparser.c" /* yacc.c:1646  */
+#line 2928 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 855 "./util/configparser.y" /* yacc.c:1646  */
+  case 222:
+#line 856 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2931,11 +2937,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2935 "util/configparser.c" /* yacc.c:1646  */
+#line 2941 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 865 "./util/configparser.y" /* yacc.c:1646  */
+  case 223:
+#line 866 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2944,11 +2950,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2948 "util/configparser.c" /* yacc.c:1646  */
+#line 2954 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 875 "./util/configparser.y" /* yacc.c:1646  */
+  case 224:
+#line 876 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2957,11 +2963,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2961 "util/configparser.c" /* yacc.c:1646  */
+#line 2967 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 885 "./util/configparser.y" /* yacc.c:1646  */
+  case 225:
+#line 886 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2970,11 +2976,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2974 "util/configparser.c" /* yacc.c:1646  */
+#line 2980 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 895 "./util/configparser.y" /* yacc.c:1646  */
+  case 226:
+#line 896 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2983,11 +2989,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2987 "util/configparser.c" /* yacc.c:1646  */
+#line 2993 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 905 "./util/configparser.y" /* yacc.c:1646  */
+  case 227:
+#line 906 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2996,11 +3002,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3000 "util/configparser.c" /* yacc.c:1646  */
+#line 3006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 915 "./util/configparser.y" /* yacc.c:1646  */
+  case 228:
+#line 916 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3009,11 +3015,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3013 "util/configparser.c" /* yacc.c:1646  */
+#line 3019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 925 "./util/configparser.y" /* yacc.c:1646  */
+  case 229:
+#line 926 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3022,41 +3028,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3026 "util/configparser.c" /* yacc.c:1646  */
+#line 3032 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 935 "./util/configparser.y" /* yacc.c:1646  */
+  case 230:
+#line 936 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3036 "util/configparser.c" /* yacc.c:1646  */
+#line 3042 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 942 "./util/configparser.y" /* yacc.c:1646  */
+  case 231:
+#line 943 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3046 "util/configparser.c" /* yacc.c:1646  */
+#line 3052 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 949 "./util/configparser.y" /* yacc.c:1646  */
+  case 232:
+#line 950 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3056 "util/configparser.c" /* yacc.c:1646  */
+#line 3062 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 956 "./util/configparser.y" /* yacc.c:1646  */
+  case 233:
+#line 957 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3064,11 +3070,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3068 "util/configparser.c" /* yacc.c:1646  */
+#line 3074 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 965 "./util/configparser.y" /* yacc.c:1646  */
+  case 234:
+#line 966 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3076,11 +3082,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3080 "util/configparser.c" /* yacc.c:1646  */
+#line 3086 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 974 "./util/configparser.y" /* yacc.c:1646  */
+  case 235:
+#line 975 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3088,21 +3094,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3092 "util/configparser.c" /* yacc.c:1646  */
+#line 3098 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 983 "./util/configparser.y" /* yacc.c:1646  */
+  case 236:
+#line 984 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3102 "util/configparser.c" /* yacc.c:1646  */
+#line 3108 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 990 "./util/configparser.y" /* yacc.c:1646  */
+  case 237:
+#line 991 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3111,11 +3117,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3115 "util/configparser.c" /* yacc.c:1646  */
+#line 3121 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 1000 "./util/configparser.y" /* yacc.c:1646  */
+  case 238:
+#line 1001 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
@@ -3131,21 +3137,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3135 "util/configparser.c" /* yacc.c:1646  */
+#line 3141 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1017 "./util/configparser.y" /* yacc.c:1646  */
+  case 239:
+#line 1018 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->module_conf);
                cfg_parser->cfg->module_conf = (yyvsp[0].str);
        }
-#line 3145 "util/configparser.c" /* yacc.c:1646  */
+#line 3151 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1024 "./util/configparser.y" /* yacc.c:1646  */
+  case 240:
+#line 1025 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3162,11 +3168,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3166 "util/configparser.c" /* yacc.c:1646  */
+#line 3172 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1042 "./util/configparser.y" /* yacc.c:1646  */
+  case 241:
+#line 1043 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3178,11 +3184,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3182 "util/configparser.c" /* yacc.c:1646  */
+#line 3188 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 1055 "./util/configparser.y" /* yacc.c:1646  */
+  case 242:
+#line 1056 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
                if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
@@ -3194,11 +3200,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3198 "util/configparser.c" /* yacc.c:1646  */
+#line 3204 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 1068 "./util/configparser.y" /* yacc.c:1646  */
+  case 243:
+#line 1069 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3206,11 +3212,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3210 "util/configparser.c" /* yacc.c:1646  */
+#line 3216 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 1077 "./util/configparser.y" /* yacc.c:1646  */
+  case 244:
+#line 1078 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3218,11 +3224,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3222 "util/configparser.c" /* yacc.c:1646  */
+#line 3228 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 1086 "./util/configparser.y" /* yacc.c:1646  */
+  case 245:
+#line 1087 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3230,11 +3236,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3234 "util/configparser.c" /* yacc.c:1646  */
+#line 3240 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 1095 "./util/configparser.y" /* yacc.c:1646  */
+  case 246:
+#line 1096 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3242,11 +3248,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3246 "util/configparser.c" /* yacc.c:1646  */
+#line 3252 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 1104 "./util/configparser.y" /* yacc.c:1646  */
+  case 247:
+#line 1105 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3255,11 +3261,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3259 "util/configparser.c" /* yacc.c:1646  */
+#line 3265 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 1114 "./util/configparser.y" /* yacc.c:1646  */
+  case 248:
+#line 1115 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3268,11 +3274,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3272 "util/configparser.c" /* yacc.c:1646  */
+#line 3278 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 1124 "./util/configparser.y" /* yacc.c:1646  */
+  case 249:
+#line 1125 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3280,11 +3286,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3284 "util/configparser.c" /* yacc.c:1646  */
+#line 3290 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 1133 "./util/configparser.y" /* yacc.c:1646  */
+  case 250:
+#line 1134 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3292,21 +3298,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3296 "util/configparser.c" /* yacc.c:1646  */
+#line 3302 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1142 "./util/configparser.y" /* yacc.c:1646  */
+  case 251:
+#line 1143 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
                cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
        }
-#line 3306 "util/configparser.c" /* yacc.c:1646  */
+#line 3312 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 1149 "./util/configparser.y" /* yacc.c:1646  */
+  case 252:
+#line 1150 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3314,11 +3320,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3318 "util/configparser.c" /* yacc.c:1646  */
+#line 3324 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 1158 "./util/configparser.y" /* yacc.c:1646  */
+  case 253:
+#line 1159 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3326,11 +3332,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3330 "util/configparser.c" /* yacc.c:1646  */
+#line 3336 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 1167 "./util/configparser.y" /* yacc.c:1646  */
+  case 254:
+#line 1168 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3338,11 +3344,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3342 "util/configparser.c" /* yacc.c:1646  */
+#line 3348 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 1176 "./util/configparser.y" /* yacc.c:1646  */
+  case 255:
+#line 1177 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3351,22 +3357,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3355 "util/configparser.c" /* yacc.c:1646  */
+#line 3361 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 1185 "./util/configparser.y" /* yacc.c:1646  */
+  case 256:
+#line 1186 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3366 "util/configparser.c" /* yacc.c:1646  */
+#line 3372 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 1193 "./util/configparser.y" /* yacc.c:1646  */
+  case 257:
+#line 1194 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3378,22 +3384,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3382 "util/configparser.c" /* yacc.c:1646  */
+#line 3388 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 1206 "./util/configparser.y" /* yacc.c:1646  */
+  case 258:
+#line 1207 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3393 "util/configparser.c" /* yacc.c:1646  */
+#line 3399 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 1214 "./util/configparser.y" /* yacc.c:1646  */
+  case 259:
+#line 1215 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -3416,21 +3422,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3420 "util/configparser.c" /* yacc.c:1646  */
+#line 3426 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 1238 "./util/configparser.y" /* yacc.c:1646  */
+  case 260:
+#line 1239 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
                        fatal_exit("out of memory adding local-data");
        }
-#line 3430 "util/configparser.c" /* yacc.c:1646  */
+#line 3436 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1245 "./util/configparser.y" /* yacc.c:1646  */
+  case 261:
+#line 1246 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3444,11 +3450,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3448 "util/configparser.c" /* yacc.c:1646  */
+#line 3454 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1260 "./util/configparser.y" /* yacc.c:1646  */
+  case 262:
+#line 1261 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3457,11 +3463,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3461 "util/configparser.c" /* yacc.c:1646  */
+#line 3467 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1270 "./util/configparser.y" /* yacc.c:1646  */
+  case 263:
+#line 1271 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3470,31 +3476,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3474 "util/configparser.c" /* yacc.c:1646  */
+#line 3480 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1280 "./util/configparser.y" /* yacc.c:1646  */
+  case 264:
+#line 1281 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
                cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3484 "util/configparser.c" /* yacc.c:1646  */
+#line 3490 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1287 "./util/configparser.y" /* yacc.c:1646  */
+  case 265:
+#line 1288 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dns64_prefix);
                cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
        }
-#line 3494 "util/configparser.c" /* yacc.c:1646  */
+#line 3500 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1294 "./util/configparser.y" /* yacc.c:1646  */
+  case 266:
+#line 1295 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3502,11 +3508,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3506 "util/configparser.c" /* yacc.c:1646  */
+#line 3512 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1303 "./util/configparser.y" /* yacc.c:1646  */
+  case 267:
+#line 1304 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3519,11 +3525,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3523 "util/configparser.c" /* yacc.c:1646  */
+#line 3529 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1317 "./util/configparser.y" /* yacc.c:1646  */
+  case 268:
+#line 1318 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3541,11 +3547,33 @@ yyreduce:
                        }
                }
        }
-#line 3545 "util/configparser.c" /* yacc.c:1646  */
+#line 3551 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1336 "./util/configparser.y" /* yacc.c:1646  */
+  case 269:
+#line 1337 "./util/configparser.y" /* yacc.c:1646  */
+    {
+               size_t len = 0;
+               uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
+                       &len);
+               free((yyvsp[0].str));
+               OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
+               if(!bitlist)
+                       yyerror("could not parse tags, (define-tag them first)");
+               if(bitlist) {
+                       if(!cfg_strbytelist_insert(
+                               &cfg_parser->cfg->acl_tags,
+                               (yyvsp[-1].str), bitlist, len)) {
+                               yyerror("out of memory");
+                               free((yyvsp[-1].str));
+                       }
+               }
+       }
+#line 3573 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 270:
+#line 1356 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3553,22 +3581,22 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3557 "util/configparser.c" /* yacc.c:1646  */
+#line 3585 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1345 "./util/configparser.y" /* yacc.c:1646  */
+  case 271:
+#line 1365 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
                if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
                        yyerror("memory size expected");
                free((yyvsp[0].str));
        }
-#line 3568 "util/configparser.c" /* yacc.c:1646  */
+#line 3596 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1353 "./util/configparser.y" /* yacc.c:1646  */
+  case 272:
+#line 1373 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3580,11 +3608,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3584 "util/configparser.c" /* yacc.c:1646  */
+#line 3612 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1366 "./util/configparser.y" /* yacc.c:1646  */
+  case 273:
+#line 1386 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3596,11 +3624,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 3600 "util/configparser.c" /* yacc.c:1646  */
+#line 3628 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1379 "./util/configparser.y" /* yacc.c:1646  */
+  case 274:
+#line 1399 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
@@ -3612,11 +3640,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 3616 "util/configparser.c" /* yacc.c:1646  */
+#line 3644 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1392 "./util/configparser.y" /* yacc.c:1646  */
+  case 275:
+#line 1412 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -3624,11 +3652,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3628 "util/configparser.c" /* yacc.c:1646  */
+#line 3656 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1401 "./util/configparser.y" /* yacc.c:1646  */
+  case 276:
+#line 1421 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3637,11 +3665,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3641 "util/configparser.c" /* yacc.c:1646  */
+#line 3669 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1411 "./util/configparser.y" /* yacc.c:1646  */
+  case 277:
+#line 1431 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -3650,31 +3678,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 3654 "util/configparser.c" /* yacc.c:1646  */
+#line 3682 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1421 "./util/configparser.y" /* yacc.c:1646  */
+  case 278:
+#line 1441 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3664 "util/configparser.c" /* yacc.c:1646  */
+#line 3692 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1428 "./util/configparser.y" /* yacc.c:1646  */
+  case 279:
+#line 1448 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3674 "util/configparser.c" /* yacc.c:1646  */
+#line 3702 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1435 "./util/configparser.y" /* yacc.c:1646  */
+  case 280:
+#line 1455 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3682,11 +3710,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3686 "util/configparser.c" /* yacc.c:1646  */
+#line 3714 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1444 "./util/configparser.y" /* yacc.c:1646  */
+  case 281:
+#line 1464 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3695,11 +3723,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3699 "util/configparser.c" /* yacc.c:1646  */
+#line 3727 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1454 "./util/configparser.y" /* yacc.c:1646  */
+  case 282:
+#line 1474 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -3708,31 +3736,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 3712 "util/configparser.c" /* yacc.c:1646  */
+#line 3740 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1464 "./util/configparser.y" /* yacc.c:1646  */
+  case 283:
+#line 1484 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3722 "util/configparser.c" /* yacc.c:1646  */
+#line 3750 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1471 "./util/configparser.y" /* yacc.c:1646  */
+  case 284:
+#line 1491 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3732 "util/configparser.c" /* yacc.c:1646  */
+#line 3760 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1478 "./util/configparser.y" /* yacc.c:1646  */
+  case 285:
+#line 1498 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3740,19 +3768,19 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3744 "util/configparser.c" /* yacc.c:1646  */
+#line 3772 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1487 "./util/configparser.y" /* yacc.c:1646  */
+  case 286:
+#line 1507 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 3752 "util/configparser.c" /* yacc.c:1646  */
+#line 3780 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 1498 "./util/configparser.y" /* yacc.c:1646  */
+  case 297:
+#line 1518 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3761,11 +3789,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3765 "util/configparser.c" /* yacc.c:1646  */
+#line 3793 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 1508 "./util/configparser.y" /* yacc.c:1646  */
+  case 298:
+#line 1528 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3773,21 +3801,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3777 "util/configparser.c" /* yacc.c:1646  */
+#line 3805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 1517 "./util/configparser.y" /* yacc.c:1646  */
+  case 299:
+#line 1537 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
                        yyerror("out of memory");
        }
-#line 3787 "util/configparser.c" /* yacc.c:1646  */
+#line 3815 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 1524 "./util/configparser.y" /* yacc.c:1646  */
+  case 300:
+#line 1544 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3796,122 +3824,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3800 "util/configparser.c" /* yacc.c:1646  */
+#line 3828 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1534 "./util/configparser.y" /* yacc.c:1646  */
+  case 301:
+#line 1554 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_key_file);
                cfg_parser->cfg->server_key_file = (yyvsp[0].str);
        }
-#line 3810 "util/configparser.c" /* yacc.c:1646  */
+#line 3838 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1541 "./util/configparser.y" /* yacc.c:1646  */
+  case 302:
+#line 1561 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->server_cert_file);
                cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
        }
-#line 3820 "util/configparser.c" /* yacc.c:1646  */
+#line 3848 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1548 "./util/configparser.y" /* yacc.c:1646  */
+  case 303:
+#line 1568 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_key_file);
                cfg_parser->cfg->control_key_file = (yyvsp[0].str);
        }
-#line 3830 "util/configparser.c" /* yacc.c:1646  */
+#line 3858 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1555 "./util/configparser.y" /* yacc.c:1646  */
+  case 304:
+#line 1575 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->control_cert_file);
                cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
        }
-#line 3840 "util/configparser.c" /* yacc.c:1646  */
+#line 3868 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1562 "./util/configparser.y" /* yacc.c:1646  */
+  case 305:
+#line 1582 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 3848 "util/configparser.c" /* yacc.c:1646  */
+#line 3876 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 1579 "./util/configparser.y" /* yacc.c:1646  */
+  case 320:
+#line 1599 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3859 "util/configparser.c" /* yacc.c:1646  */
+#line 3887 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 1587 "./util/configparser.y" /* yacc.c:1646  */
+  case 321:
+#line 1607 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_socket_path);
                cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
        }
-#line 3869 "util/configparser.c" /* yacc.c:1646  */
+#line 3897 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 1594 "./util/configparser.y" /* yacc.c:1646  */
+  case 322:
+#line 1614 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3880 "util/configparser.c" /* yacc.c:1646  */
+#line 3908 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 1602 "./util/configparser.y" /* yacc.c:1646  */
+  case 323:
+#line 1622 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3891 "util/configparser.c" /* yacc.c:1646  */
+#line 3919 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 1610 "./util/configparser.y" /* yacc.c:1646  */
+  case 324:
+#line 1630 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_identity);
                cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
        }
-#line 3901 "util/configparser.c" /* yacc.c:1646  */
+#line 3929 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 1617 "./util/configparser.y" /* yacc.c:1646  */
+  case 325:
+#line 1637 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnstap_version);
                cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
        }
-#line 3911 "util/configparser.c" /* yacc.c:1646  */
+#line 3939 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 1624 "./util/configparser.y" /* yacc.c:1646  */
+  case 326:
+#line 1644 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3919,11 +3947,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3923 "util/configparser.c" /* yacc.c:1646  */
+#line 3951 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 1633 "./util/configparser.y" /* yacc.c:1646  */
+  case 327:
+#line 1653 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3931,11 +3959,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3935 "util/configparser.c" /* yacc.c:1646  */
+#line 3963 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 1642 "./util/configparser.y" /* yacc.c:1646  */
+  case 328:
+#line 1662 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3943,11 +3971,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3947 "util/configparser.c" /* yacc.c:1646  */
+#line 3975 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 1651 "./util/configparser.y" /* yacc.c:1646  */
+  case 329:
+#line 1671 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3955,11 +3983,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3959 "util/configparser.c" /* yacc.c:1646  */
+#line 3987 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 1660 "./util/configparser.y" /* yacc.c:1646  */
+  case 330:
+#line 1680 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3967,11 +3995,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3971 "util/configparser.c" /* yacc.c:1646  */
+#line 3999 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 1669 "./util/configparser.y" /* yacc.c:1646  */
+  case 331:
+#line 1689 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3979,29 +4007,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 3983 "util/configparser.c" /* yacc.c:1646  */
+#line 4011 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 1678 "./util/configparser.y" /* yacc.c:1646  */
+  case 332:
+#line 1698 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 3991 "util/configparser.c" /* yacc.c:1646  */
+#line 4019 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 1687 "./util/configparser.y" /* yacc.c:1646  */
+  case 336:
+#line 1707 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->python_script);
                cfg_parser->cfg->python_script = (yyvsp[0].str);
        }
-#line 4001 "util/configparser.c" /* yacc.c:1646  */
+#line 4029 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 1693 "./util/configparser.y" /* yacc.c:1646  */
+  case 337:
+#line 1713 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
                if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4010,11 +4038,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4014 "util/configparser.c" /* yacc.c:1646  */
+#line 4042 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 4018 "util/configparser.c" /* yacc.c:1646  */
+#line 4046 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4242,7 +4270,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1701 "./util/configparser.y" /* yacc.c:1906  */
+#line 1721 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 40f157e9a44bb588136255e41dea8dc3e322b77f..ef1282859193e966eb1e05e994482a98d965432b 100644 (file)
@@ -211,7 +211,8 @@ extern int yydebug;
     VAR_QNAME_MINIMISATION = 421,
     VAR_IP_FREEBIND = 422,
     VAR_DEFINE_TAG = 423,
-    VAR_LOCAL_ZONE_TAG = 424
+    VAR_LOCAL_ZONE_TAG = 424,
+    VAR_ACCESS_CONTROL_TAG = 425
   };
 #endif
 /* Tokens.  */
@@ -382,6 +383,7 @@ extern int yydebug;
 #define VAR_IP_FREEBIND 422
 #define VAR_DEFINE_TAG 423
 #define VAR_LOCAL_ZONE_TAG 424
+#define VAR_ACCESS_CONTROL_TAG 425
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -392,7 +394,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 396 "util/configparser.h" /* yacc.c:1909  */
+#line 398 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 4ff18f0ce5c7a4281b23576ccff58b98957cf347..adaf01f845dc19b3f8e57103813a0aaba28c3882 100644 (file)
@@ -126,6 +126,7 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR
 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
 %token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG
+%token VAR_ACCESS_CONTROL_TAG
 
 %%
 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@@ -194,7 +195,7 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_caps_whitelist | server_cache_max_negative_ttl |
        server_permit_small_holddown | server_qname_minimisation |
        server_ip_freebind | server_define_tag | server_local_zone_tag |
-       server_disable_dnssec_lame_check
+       server_disable_dnssec_lame_check | access_control_tag
        ;
 stubstart: VAR_STUB_ZONE
        {
@@ -1332,6 +1333,25 @@ server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG
                }
        }
        ;
+access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG
+       {
+               size_t len = 0;
+               uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3,
+                       &len);
+               free($3);
+               OUTYY(("P(server_access_control_tag:%s)\n", $2));
+               if(!bitlist)
+                       yyerror("could not parse tags, (define-tag them first)");
+               if(bitlist) {
+                       if(!cfg_strbytelist_insert(
+                               &cfg_parser->cfg->acl_tags,
+                               $2, bitlist, len)) {
+                               yyerror("out of memory");
+                               free($2);
+                       }
+               }
+       }
+       ;
 server_ratelimit: VAR_RATELIMIT STRING_ARG 
        { 
                OUTYY(("P(server_ratelimit:%s)\n", $2)); 
index 0df490ee5566d252fa66558a90d1df6c04cd4d02..7664c479d47aa5b3edeb5da0d732c02811733bd5 100644 (file)
@@ -231,6 +231,19 @@ struct addr_tree_node* addr_tree_lookup(rbtree_t* tree,
         return result;
 }
 
+struct addr_tree_node* addr_tree_find(rbtree_t* tree,
+        struct sockaddr_storage* addr, socklen_t addrlen, int net)
+{
+        rbnode_t* res = NULL;
+        struct addr_tree_node key;
+        key.node.key = &key;
+        memcpy(&key.addr, addr, addrlen);
+        key.addrlen = addrlen;
+        key.net = net;
+       res = rbtree_search(tree, &key);
+       return (struct addr_tree_node*)res;
+}
+
 int
 name_tree_next_root(rbtree_t* tree, uint16_t* dclass)
 {
index ec8189100f9e64e0a5f09ccee300b6bafce36f93..792f39110e7030303d0024ac635971c0bcb16010 100644 (file)
@@ -183,6 +183,18 @@ void addr_tree_init_parents(rbtree_t* tree);
 struct addr_tree_node* addr_tree_lookup(rbtree_t* tree, 
        struct sockaddr_storage* addr, socklen_t addrlen);
 
+/**
+ * Find element in addr tree.  (search a netblock, not a match for an address)
+ * @param tree: addr tree
+ * @param addr: netblock to lookup.
+ * @param addrlen: length of addr
+ * @param net: size of subnet
+ * @return addr tree element, or NULL if not found.
+ */
+struct addr_tree_node* addr_tree_find(rbtree_t* tree, 
+       struct sockaddr_storage* addr, socklen_t addrlen, int net);
+
+
 /** compare name tree nodes */
 int name_tree_compare(const void* k1, const void* k2);