]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Generalise inplace callback (de)registration
authorRalph Dolmans <ralph@nlnetlabs.nl>
Thu, 6 Apr 2017 13:13:06 +0000 (13:13 +0000)
committerRalph Dolmans <ralph@nlnetlabs.nl>
Thu, 6 Apr 2017 13:13:06 +0000 (13:13 +0000)
- (de)register inplace callbacks for module id
- No unbound-control set_option for ECS options
- Deprecated client-subnet-opcode config option
- Introduced client-subnet-always-forward config option
- Changed max-client-subnet-ipv6 default to 56 (as in RFC)
- Removed extern ECS config options
- module_restart_next now calls clear on all following modules
- Also create ECS module qstate on module_event_pass event

git-svn-id: file:///svn/unbound/trunk@4092 be551aaa-1e26-0410-a405-d3ace91eadb9

27 files changed:
daemon/daemon.c
doc/Changelog
doc/unbound.conf.5.in
edns-subnet/edns-subnet.c
edns-subnet/edns-subnet.h
edns-subnet/subnetmod.c
edns-subnet/subnetmod.h
libunbound/libunbound.c
services/mesh.c
testdata/subnet_cached.crpl
testdata/subnet_derived.crpl
testdata/subnet_format_ip4.crpl
testdata/subnet_nondefault_opc.crpl [deleted file]
testdata/subnet_val_positive.crpl
testdata/subnet_val_positive_client.crpl
testdata/subnet_without_validator.crpl
util/config_file.c
util/config_file.h
util/configlexer.c
util/configlexer.lex
util/configparser.c
util/configparser.h
util/configparser.y
util/data/msgreply.c
util/fptr_wlist.c
util/module.c
util/module.h

index ef808f58efc26e3466865afe9cfef82033f9e247..dad9f86b344e5729c13b05d9c7d8b5aeed8cebe6 100644 (file)
@@ -711,7 +711,6 @@ daemon_delete(struct daemon* daemon)
                rrset_cache_delete(daemon->env->rrset_cache);
                infra_delete(daemon->env->infra_cache);
                edns_known_options_delete(daemon->env);
-               inplace_cb_lists_delete(daemon->env);
        }
        ub_randfree(daemon->rand);
        alloc_clear(&daemon->superalloc);
index 8e33652b1660bab46ad0b55c07ca487b3092a6fb..447584a4a6ec1c982085a148560b437b6a3594df 100644 (file)
@@ -1,3 +1,14 @@
+6 April 2017: Ralph
+       - Generalise inplace callback (de)registration
+       - (de)register inplace callbacks for module id
+       - No unbound-control set_option for ECS options
+       - Deprecated client-subnet-opcode config option
+       - Introduced client-subnet-always-forward config option
+       - Changed max-client-subnet-ipv6 default to 56 (as in RFC)
+       - Removed extern ECS config options
+       - module_restart_next now calls clear on all following modules
+       - Also create ECS module qstate on module_event_pass event
+
 6 April 2017: Wouter
        - Small fixup for documentation.
        - iana portlist update
index e77965bc2bd5c073c8e2f35e610e6d7d6484e5d8..431d59f213b11fa6ae50d9dfae7fe4a942c11c18 100644 (file)
@@ -1504,12 +1504,17 @@ classless delegation netblock, for example like 10.2.3.4/24 or 2001::11/64. Can
 be given multiple times. Authorities not listed will not receive edns-subnet
 information.
 .TP
-.B client\-subnet\-opcode: \fI<number>\fR
-Specify positive integer smaller than 65536. Defaults to 8.
+.B client\-subnet\-always\-forward: \fI<yes or no>\fR
+Specify whether the ECS whitelist check (configured using
+\fBsend\-client\-subnet\fR) is applied for all queries, even if the triggering
+query contains an ECS record, or only for queries for which the ECS record is
+generated using the querier address (and therefore did not contain ECS data in
+the client query). If enabled, the whitelist check is skipped when the client
+query contains an ECS record. Default is no.
 .TP
 .B max\-client\-subnet\-ipv6: \fI<number>\fR
 Specifies the maximum prefix length of the client source address we are willing
-to expose to third parties for IPv6.  Defaults to 64.
+to expose to third parties for IPv6.  Defaults to 56.
 .TP
 .B max\-client\-subnet\-ipv4: \fI<number>\fR
 Specifies the maximum prefix length of the client source address we are willing
index 1f0e334ce767724610cc7b1eaca82ddd7a699b0e..4c93192faf38e5ec43c49291ac05598e663ec1c4 100644 (file)
 #include "edns-subnet/edns-subnet.h"
 #include <string.h>
 
-/** Opcode for edns subnet option, as assigned by IANA. */
-uint16_t EDNSSUBNET_OPCODE = 8;
-uint8_t EDNSSUBNET_MAX_SUBNET_IP4 = 24;
-uint8_t EDNSSUBNET_MAX_SUBNET_IP6 = 64;
-
 int
 copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n)
 {
index 6111f62e74e54b74332d6a0e0c08bf611c1da718..4b306080ad6d57d864813d772506fa42e976bb26 100644 (file)
 #define EDNSSUBNET_ADDRFAM_IP4 1
 #define EDNSSUBNET_ADDRFAM_IP6 2
 
-/** Opcode for edns subnet option */
-extern uint16_t EDNSSUBNET_OPCODE;
-/** Maximum number of bits we are willing to expose */
-extern uint8_t EDNSSUBNET_MAX_SUBNET_IP4;
-extern uint8_t EDNSSUBNET_MAX_SUBNET_IP6;
-
 /**
  * ECS option
  */
index 07328b029095b6b44c58949e7a6d59767231e36c..7d2d127578acf730c4eb87fe526a23d3e1a7e2fb 100644 (file)
@@ -128,7 +128,8 @@ ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
                                ~(0xFF >> (ecs->subnet_source_mask % 8)));
                sldns_buffer_flip(buf);
 
-               edns_opt_list_append(list, EDNSSUBNET_OPCODE,
+               edns_opt_list_append(list,
+                               qstate->env->cfg->client_subnet_opcode,
                                sn_octs + sn_octs_remainder + 4,
                                sldns_buffer_begin(buf), qstate->region);
        }
@@ -138,9 +139,8 @@ int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo),
        uint16_t ATTR_UNUSED(flags), struct module_qstate* qstate,
        struct sockaddr_storage* addr, socklen_t addrlen,
        uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen),
-       struct regional* ATTR_UNUSED(region), void* cbargs)
+       struct regional* ATTR_UNUSED(region), int id, void* cbargs)
 {
-       int id = *((int*)cbargs);
        struct subnet_qstate *sq;
        struct subnet_env *sn_env;
        
@@ -152,7 +152,8 @@ int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo),
         * received from nameserver. */
        qstate->no_cache_store = 0;
 
-       if(sq->ecs_server_out.subnet_validdata && (sq->subnet_downstream ||
+       if(sq->ecs_server_out.subnet_validdata && ((sq->subnet_downstream &&
+               qstate->env->cfg->client_subnet_always_forward) ||
                upstream_is_whitelisted(sn_env->edns_subnet_upstreams, 
                addr, addrlen))) {
                /* Address on whitelist or client query contains ECS option, we
@@ -168,7 +169,7 @@ int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo),
                /* Outgoing ECS option is set, but we don't want to sent it to
                 * this address, remove option. */
                edns_opt_list_remove(&qstate->edns_opts_back_out,
-                       EDNSSUBNET_OPCODE);
+                       qstate->env->cfg->client_subnet_opcode);
                sq->subnet_sent = 0;
        }
        return 1;
@@ -208,11 +209,13 @@ subnetmod_init(struct module_env *env, int id)
                return 0;
        }
 
-       verbose(VERB_QUERY, "subnet: option registered (%d)", EDNSSUBNET_OPCODE);
+       verbose(VERB_QUERY, "subnet: option registered (%d)",
+               env->cfg->client_subnet_opcode);
        /* Create new mesh state for all queries. */
        env->unique_mesh = 1;
-       if(!edns_register_option(EDNSSUBNET_OPCODE,
-               1 /* bypass cache */, 0 /* no aggregation */, env)) {
+       if(!edns_register_option(env->cfg->client_subnet_opcode,
+               env->cfg->client_subnet_always_forward /* bypass cache */,
+               0 /* no aggregation */, env)) {
                log_err("subnet: could not register opcode");
                upstream_delete(sn_env->edns_subnet_upstreams);
                slabhash_delete(sn_env->subnet_msg_cache);
@@ -220,9 +223,10 @@ subnetmod_init(struct module_env *env, int id)
                env->modinfo[id] = NULL;
                return 0;
        }
-       inplace_cb_query_register(ecs_whitelist_check, &id, sizeof(id), env);
-       inplace_cb_edns_back_parsed_register(ecs_edns_back_parsed, &id,
-               sizeof(id), env);
+       inplace_cb_register((void*)ecs_whitelist_check, inplace_cb_query, NULL,
+               0, env, id);
+       inplace_cb_register((void*)ecs_edns_back_parsed,
+               inplace_cb_edns_back_parsed, NULL, 0, env, id);
        lock_rw_init(&sn_env->biglock);
        return 1;
 }
@@ -235,8 +239,8 @@ subnetmod_deinit(struct module_env *env, int id)
                return;
        sn_env = (struct subnet_env*)env->modinfo[id];
        lock_rw_destroy(&sn_env->biglock);
-       inplace_cb_edns_back_parsed_delete(env);
-       inplace_cb_query_delete(env);
+       inplace_cb_delete(env, inplace_cb_edns_back_parsed, id);
+       inplace_cb_delete(env, inplace_cb_query, id);
        upstream_delete(sn_env->edns_subnet_upstreams);
        slabhash_delete(sn_env->subnet_msg_cache);
        alloc_clear(&sn_env->alloc);
@@ -276,18 +280,20 @@ sizefunc(void *elemptr) {
  * NULL on failure to create. */
 static struct addrtree* 
 get_tree(struct subnet_msg_cache_data *data, struct ecs_data *edns, 
-       struct subnet_env *env)
+       struct subnet_env *env, struct config_file* cfg)
 {
        struct addrtree *tree;
        if (edns->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) {
                if (!data->tree4)
-                       data->tree4 = addrtree_create(EDNSSUBNET_MAX_SUBNET_IP4, 
-                               &delfunc, &sizefunc, env, ECS_MAX_TREESIZE);
+                       data->tree4 = addrtree_create(
+                               cfg->max_client_subnet_ipv4, &delfunc,
+                               &sizefunc, env, ECS_MAX_TREESIZE);
                tree = data->tree4;
        } else {
                if (!data->tree6)
-                       data->tree6 = addrtree_create(EDNSSUBNET_MAX_SUBNET_IP6, 
-                               &delfunc, &sizefunc, env, ECS_MAX_TREESIZE);
+                       data->tree6 = addrtree_create(
+                               cfg->max_client_subnet_ipv6, &delfunc,
+                               &sizefunc, env, ECS_MAX_TREESIZE);
                tree = data->tree6;
        }
        return tree;
@@ -337,7 +343,7 @@ update_cache(struct module_qstate *qstate, int id)
                }
        }
        /* Step 2, find the correct tree */
-       if (!(tree = get_tree(lru_entry->data, edns, sne))) {
+       if (!(tree = get_tree(lru_entry->data, edns, sne, qstate->env->cfg))) {
                if (acquired_lock) lock_rw_unlock(&lru_entry->lock);
                log_err("Subnet cache insertion failed");
                return;
@@ -490,9 +496,9 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq)
                verbose(VERB_QUERY, "subnet: forged data");
                s_out->subnet_validdata = 0;
                (void)edns_opt_list_remove(&qstate->edns_opts_back_out,
-                       EDNSSUBNET_OPCODE);
+                       qstate->env->cfg->client_subnet_opcode);
                sq->subnet_sent = 0;
-               return module_wait_module;
+               return module_restart_next;
        }
 
        lock_rw_wrlock(&sne->biglock);
@@ -550,28 +556,30 @@ parse_subnet_option(struct edns_option* ecs_option,
 }
 
 static void
-subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs)
+subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs,
+       struct config_file* cfg)
 {
        void* sinaddr;
+
        /* Construct subnet option from original query */
        if(((struct sockaddr_in*)ss)->sin_family == AF_INET) {
-               ecs->subnet_source_mask = EDNSSUBNET_MAX_SUBNET_IP4;
+               ecs->subnet_source_mask = cfg->max_client_subnet_ipv4;
                ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP4;
                sinaddr = &((struct sockaddr_in*)ss)->sin_addr;
                if (!copy_clear( ecs->subnet_addr, INET6_SIZE,
                        (uint8_t *)sinaddr, INET_SIZE,
-                       EDNSSUBNET_MAX_SUBNET_IP4)) {
+                       ecs->subnet_source_mask)) {
                        ecs->subnet_validdata = 1;
                }
        }
 #ifdef INET6
        else {
-               ecs->subnet_source_mask = EDNSSUBNET_MAX_SUBNET_IP6;
+               ecs->subnet_source_mask = cfg->max_client_subnet_ipv6;
                ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP6;
                sinaddr = &((struct sockaddr_in6*)ss)->sin6_addr;
                if (!copy_clear( ecs->subnet_addr, INET6_SIZE,
                        (uint8_t *)sinaddr, INET6_SIZE,
-                       EDNSSUBNET_MAX_SUBNET_IP6)) {
+                       ecs->subnet_source_mask)) {
                        ecs->subnet_validdata = 1;
                }
        }
@@ -581,16 +589,16 @@ subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs)
 }
 
 int
-ecs_edns_back_parsed(struct module_qstate* qstate, void* cbargs)
+ecs_edns_back_parsed(struct module_qstate* qstate, int id, void* cbargs)
 {
-       int id = *((int*)cbargs);
        struct subnet_qstate *sq;
        struct edns_option* ecs_opt;
        
        if(!(sq=(struct subnet_qstate*)qstate->minfo[id]))
                return 1;
        if((ecs_opt = edns_opt_list_find(
-               qstate->edns_opts_back_in, EDNSSUBNET_OPCODE))) {
+               qstate->edns_opts_back_in,
+               qstate->env->cfg->client_subnet_opcode))) {
                if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) &&
                        sq->subnet_sent && sq->ecs_server_in.subnet_validdata)
                        /* Only skip global cache store if we sent an ECS option
@@ -616,7 +624,8 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
                strmodulevent(event));
        log_query_info(VERB_QUERY, "subnet operate: query", &qstate->qinfo);
 
-       if(event == module_event_new && sq == NULL) {
+       if((event == module_event_new || event == module_event_pass) &&
+               sq == NULL) {
                struct edns_option* ecs_opt;
                if(!subnet_new_qstate(qstate, id)) {
                        qstate->return_msg = NULL;
@@ -627,7 +636,8 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
                sq = (struct subnet_qstate*)qstate->minfo[id];
 
                if((ecs_opt = edns_opt_list_find(
-                       qstate->edns_opts_front_in, EDNSSUBNET_OPCODE))) {
+                       qstate->edns_opts_front_in,
+                       qstate->env->cfg->client_subnet_opcode))) {
                        if(parse_subnet_option(ecs_opt, &sq->ecs_client_in)) {
                                sq->subnet_downstream = 1;
                        }
@@ -635,7 +645,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event,
                else if(qstate->mesh_info->reply_list) {
                        subnet_option_from_ss(
                                &qstate->mesh_info->reply_list->query_reply.addr,
-                               &sq->ecs_client_in);
+                               &sq->ecs_client_in, qstate->env->cfg);
                }
                
                if(sq->ecs_client_in.subnet_validdata == 0) {
index 9e65262949997194812a7e7c685a629732c1f24f..58c83505a7751f8887b68b91c4ec7ef7e5d25847 100644 (file)
@@ -117,10 +117,10 @@ size_t unittest_wrapper_subnetmod_sizefunc(void *elemptr);
 int ecs_whitelist_check(struct query_info* qinfo, uint16_t flags,
        struct module_qstate* qstate, struct sockaddr_storage* addr,
        socklen_t addrlen, uint8_t* zone, size_t zonelen,
-       struct regional* region, void* cbargs);
+       struct regional* region, int id, void* cbargs);
 
 /** Check whether reponse from server contains ECS record, if so, skip cache
  * store. Called just after parsing EDNS data from server. */
-int ecs_edns_back_parsed(struct module_qstate* qstate, void* cbargs);
+int ecs_edns_back_parsed(struct module_qstate* qstate, int id, void* cbargs);
 
 #endif /* SUBNETMOD_H */
index 727b275220195343492e607190472f56c806b639..eaa31c71c5906665c8f14f0d1cb4bffa7d5013df 100644 (file)
@@ -310,7 +310,6 @@ ub_ctx_delete(struct ub_ctx* ctx)
                infra_delete(ctx->env->infra_cache);
                config_delete(ctx->env->cfg);
                edns_known_options_delete(ctx->env);
-               inplace_cb_lists_delete(ctx->env);
                free(ctx->env);
        }
        ub_randfree(ctx->seed_rnd);
index 80d42adbf3d5f020fd7caae45cb87f5fe3df9c4b..0cb134ade85f92acf3596a0e236374b512ca52a9 100644 (file)
@@ -1315,11 +1315,16 @@ mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate,
                        return mesh_continue(mesh, mstate, module_error, ev);
                }
                if(s == module_restart_next) {
-                       fptr_ok(fptr_whitelist_mod_clear(
-                               mesh->mods.mod[mstate->s.curmod]->clear));
-                       (*mesh->mods.mod[mstate->s.curmod]->clear)
-                               (&mstate->s, mstate->s.curmod);
-                       mstate->s.minfo[mstate->s.curmod] = NULL;
+                       int curmod = mstate->s.curmod;
+                       for(; mstate->s.curmod < mesh->mods.num; 
+                               mstate->s.curmod++) {
+                               fptr_ok(fptr_whitelist_mod_clear(
+                                       mesh->mods.mod[mstate->s.curmod]->clear));
+                               (*mesh->mods.mod[mstate->s.curmod]->clear)
+                                       (&mstate->s, mstate->s.curmod);
+                               mstate->s.minfo[mstate->s.curmod] = NULL;
+                       }
+                       mstate->s.curmod = curmod;
                }
                *ev = module_event_pass;
                return 1;
index 16a3771c685803bf9dbc89c5cd58feaa5c001982..fefbdd1a0d837eb2d764dc12e281c063c1097fe1 100644 (file)
@@ -6,7 +6,6 @@ server:
        val-override-date: "20070916134226"
        target-fetch-policy: "0 0 0 0 0"
        send-client-subnet: 1.2.3.4
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 17
        module-config: "subnetcache validator iterator"
        verbosity: 3
@@ -138,7 +137,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                11 00           ; source mask, scopemask
@@ -159,7 +158,7 @@ ENTRY_BEGIN
                01 00 00 29 10 00 00 00 
                80 00 00 0b
                
-               50 fa 00 07                                     ; OPC, optlen
+               00 08 00 07                                     ; OPC, optlen
                00 01 11 00                                     ; ip4, scope 17, source 0
                7f 00 00                                        ;127.0.0.0/17
        HEX_ANSWER_END
@@ -180,7 +179,7 @@ ENTRY_BEGIN
        SECTION ADDITIONAL
                HEX_EDNSDATA_BEGIN
                                                ; client is 127.0.0.1
-                       50 fa           ; OPC
+                       00 08           ; OPC
                        00 07           ; option length
                        00 01           ; Family
                        11 11           ; source mask, scopemask
@@ -201,7 +200,7 @@ ENTRY_BEGIN
                01 00 00 29 10 00 00 00 
                80 00 00 0b
                
-               50 fa 00 07                                     ; OPC, optlen
+               00 08 00 07                                     ; OPC, optlen
                00 01 12 00                                     ; ip4, scope 18, source 0
                7f 00 00                                        ;127.0.0.0/18
        HEX_ANSWER_END
@@ -222,7 +221,7 @@ ENTRY_BEGIN
        SECTION ADDITIONAL
                HEX_EDNSDATA_BEGIN
                                                ; client is 127.0.0.1
-                       50 fa           ; OPC
+                       00 08           ; OPC
                        00 07           ; option length
                        00 01           ; Family
                        12 11           ; source mask, scopemask
index 3cca47a14333fa3cffc0a1b882421c219f9e84e6..e2944ff8c07f0d6117bd175d260c4d50e6939ea6 100644 (file)
@@ -1,7 +1,6 @@
 server:
        send-client-subnet: 5.0.15.10
        send-client-subnet: 193.0.14.129 
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 21
        verbosity: 3
        module-config: "subnetcache validator iterator"
@@ -56,7 +55,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                15 00           ; source mask, scopemask
@@ -128,7 +127,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                15 00           ; source mask, scopemask
index 4a95ed7f8fa596d8754488339139c854ed11f066..2ee3c7d4ec1bd20ba526d105a1e1bf00b1e1d44d 100644 (file)
@@ -1,6 +1,5 @@
 server:
        send-client-subnet: 5.0.15.10
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 21
        verbosity: 3
        module-config: "subnetcache validator iterator"
@@ -125,7 +124,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                15 00           ; source mask, scopemask
diff --git a/testdata/subnet_nondefault_opc.crpl b/testdata/subnet_nondefault_opc.crpl
deleted file mode 100644 (file)
index 9363e35..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-server:
-       send-client-subnet: 5.0.15.10
-       client-subnet-opcode: 99
-       max-client-subnet-ipv4: 21
-       verbosity: 3
-       module-config: "subnetcache validator iterator"
-
-stub-zone:
-       name: "."
-       stub-addr: 193.0.14.129         # K.ROOT-SERVERS.NET.
-CONFIG_END
-
-SCENARIO_BEGIN Works for other than default OPC
-
-RANGE_BEGIN 0 100
-
-       ADDRESS 193.0.14.129 
-
-       ENTRY_BEGIN
-               MATCH opcode qtype qname ednsdata
-               ADJUST copy_id
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       . IN NS
-               SECTION ANSWER
-                       . IN NS K.ROOT-SERVERS.NET.
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-                       K.ROOT-SERVERS.NET.     IN      A       193.0.14.129
-       ENTRY_END
-
-       ENTRY_BEGIN
-               MATCH opcode qtype qname ednsdata
-               ADJUST copy_id
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       a.gtld-servers.net. IN AAAA
-               SECTION AUTHORITY
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-       ENTRY_END
-
-       ENTRY_BEGIN
-               MATCH opcode qtype qname ednsdata
-               ADJUST copy_id
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       www.example.com. IN A
-               SECTION AUTHORITY
-                       com.    IN NS   a.gtld-servers.net.
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-                       a.gtld-servers.net.     IN      A       192.5.6.30
-       ENTRY_END
-       
-RANGE_END
-
-RANGE_BEGIN 0 100
-
-       ADDRESS 192.5.6.30
-
-       ENTRY_BEGIN
-               MATCH opcode subdomain ednsdata
-               ADJUST copy_id copy_query
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       example.com. IN A
-               SECTION AUTHORITY
-                       example.com.    IN NS   ns.example.com.
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-                       ns.example.com.         IN      A       5.0.15.10
-       ENTRY_END
-       
-RANGE_END
-
-RANGE_BEGIN 0 100
-
-       ADDRESS 5.0.15.10
-
-       ENTRY_BEGIN
-               MATCH opcode qtype qname ednsdata
-               ADJUST copy_id
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       example.com. IN NS
-               SECTION ANSWER
-                       example.com.    IN NS   ns.example.com.
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-                       ns.example.com.     IN      A       5.0.15.10
-       ENTRY_END
-
-       ENTRY_BEGIN
-               MATCH opcode qtype qname ednsdata
-               ADJUST copy_id
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       ns.example.com. IN AAAA
-               SECTION ANSWER
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                               ;; we expect to receive empty
-                       HEX_EDNSDATA_END
-       ENTRY_END
-
-       ENTRY_BEGIN
-               MATCH opcode subdomain ednsdata
-               ADJUST copy_id copy_query
-               REPLY QR NOERROR
-               SECTION QUESTION
-                       www.example.com. IN A
-               SECTION ANSWER
-                       www.example.com.        IN A    4.3.2.1
-               SECTION ADDITIONAL
-                       HEX_EDNSDATA_BEGIN
-                                                       ; client is 127.0.0.1
-                               00 63           ; OPC
-                               00 07           ; option length
-                               00 01           ; Family
-                               15 00           ; source mask, scopemask
-                               7f 00 00        ; address
-                       HEX_EDNSDATA_END
-       ENTRY_END
-       
-RANGE_END
-
-;; ----------------------------------------
-
-STEP 1 QUERY
-
-       ENTRY_BEGIN
-               REPLY RD
-               SECTION QUESTION
-               www.example.com. IN A
-       ENTRY_END
-
-STEP 10 CHECK_ANSWER
-
-       ENTRY_BEGIN
-               MATCH all
-               REPLY QR RD RA NOERROR
-               SECTION QUESTION
-                       www.example.com. IN A
-               SECTION ANSWER
-                       www.example.com.        IN A    4.3.2.1
-               SECTION AUTHORITY
-               SECTION ADDITIONAL
-       ENTRY_END
-
-SCENARIO_END
index 6ba92effd80e2016888b384f223caba7cd5222b2..732657374a13e7c03d36ef6ffaa9f6d3168c2c49 100644 (file)
@@ -5,7 +5,6 @@ server:
        val-override-date: "20070916134226"
        target-fetch-policy: "0 0 0 0 0"
        send-client-subnet: 1.2.3.4
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 17
        module-config: "subnetcache validator iterator"
        verbosity: 3
@@ -142,7 +141,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                11 00           ; source mask, scopemask
index ea0f6fa9d433341ef6aeddbf44a9874e894676f1..96be71f5082ff0c765f2f90de0e5ae4239f07431 100644 (file)
@@ -6,7 +6,6 @@ server:
        val-override-date: "20070916134226"
        target-fetch-policy: "0 0 0 0 0"
        send-client-subnet: 1.2.3.4
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 17
        module-config: "subnetcache validator iterator"
        verbosity: 3
@@ -137,7 +136,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                11 00           ; source mask, scopemask
@@ -158,7 +157,7 @@ ENTRY_BEGIN
                01 00 00 29 10 00 00 00 
                80 00 00 0b
                
-               50 fa 00 07                                     ; OPC, optlen
+               00 08 00 07                                     ; OPC, optlen
                00 01 11 00                                     ; ip4, scope 17, source 0
                7f 00 00                                        ;127.0.0.0/17
        HEX_ANSWER_END
@@ -182,7 +181,7 @@ ENTRY_BEGIN
        SECTION ADDITIONAL
                HEX_EDNSDATA_BEGIN
                                                ; client is 127.0.0.1
-                       50 fa           ; OPC
+                       00 08           ; OPC
                        00 07           ; option length
                        00 01           ; Family
                        11 00           ; source mask, scopemask
index 0d73ce835c1dd26835de57ab97e6d372b32278e0..ea0daf730384e6dd145afc1400b3943183840a97 100644 (file)
@@ -1,6 +1,5 @@
 server:
        send-client-subnet: 5.0.15.10
-       client-subnet-opcode: 20730
        max-client-subnet-ipv4: 21
        verbosity: 3
        module-config: "subnetcache iterator"
@@ -125,7 +124,7 @@ RANGE_BEGIN 0 100
                SECTION ADDITIONAL
                        HEX_EDNSDATA_BEGIN
                                                        ; client is 127.0.0.1
-                               50 fa           ; OPC
+                               00 08           ; OPC
                                00 07           ; option length
                                00 01           ; Family
                                15 00           ; source mask, scopemask
index 5fea5d2b063551dd62eb82f1099e46b07d74373e..746cb856dac7614bc65ce5be943cc0582ddc973a 100644 (file)
@@ -179,8 +179,9 @@ config_create(void)
 #ifdef CLIENT_SUBNET
        cfg->client_subnet = NULL;
        cfg->client_subnet_opcode = LDNS_EDNS_CLIENT_SUBNET;
+       cfg->client_subnet_always_forward = 0;
        cfg->max_client_subnet_ipv4 = 24;
-       cfg->max_client_subnet_ipv6 = 64;
+       cfg->max_client_subnet_ipv6 = 56;
 #endif
        cfg->views = NULL;
        cfg->acls = NULL;
@@ -517,10 +518,10 @@ int config_set_option(struct config_file* cfg, const char* opt,
        else S_STR("python-script:", python_script)
        else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
 #ifdef CLIENT_SUBNET
-       else S_STRLIST("send-client-subnet", client_subnet)
-       else S_NUMBER_OR_ZERO("max-client-subnet-ipv4:", max_client_subnet_ipv4)
-       else S_NUMBER_OR_ZERO("max-client-subnet-ipv6:", max_client_subnet_ipv6)
-       else S_NUMBER_OR_ZERO("client-subnet-opcode:", client_subnet_opcode)
+       /* Can't set max subnet prefix here, since that value is used when
+        * generating the address tree. */
+       /* No client-subnet-always-forward here, module registration depends on
+        * this option. */
 #endif
        else if(strcmp(opt, "ip-ratelimit:") == 0) {
            IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val);
@@ -565,7 +566,9 @@ int config_set_option(struct config_file* cfg, const char* opt,
                 * stub-ssl-upstream, forward-zone,
                 * name, forward-addr, forward-host,
                 * ratelimit-for-domain, ratelimit-below-domain,
-                * local-zone-tag, access-control-view */
+                * local-zone-tag, access-control-view 
+                * send-client-subnet client-subnet-always-forward
+                * max-client-subnet-ipv4 max-client-subnet-ipv6 */
                return 0;
        }
        return 1;
@@ -841,7 +844,8 @@ config_get_option(struct config_file* cfg, const char* opt,
        else O_LST(opt, "send-client-subnet", client_subnet)
        else O_DEC(opt, "max-client-subnet-ipv4", max_client_subnet_ipv4)
        else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6)
-       else O_DEC(opt, "client-subnet-opcode", client_subnet_opcode)
+       else O_YNO(opt, "client-subnet-always-forward:",
+               client_subnet_always_forward)
 #endif
        else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
        else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
@@ -1624,11 +1628,6 @@ config_apply(struct config_file* config)
        MAX_NEG_TTL = (time_t)config->max_negative_ttl;
        RTT_MIN_TIMEOUT = config->infra_cache_min_rtt;
        EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size;
-#ifdef CLIENT_SUBNET
-       EDNSSUBNET_OPCODE = (uint16_t)config->client_subnet_opcode;
-       EDNSSUBNET_MAX_SUBNET_IP4 = (uint8_t)config->max_client_subnet_ipv4;
-       EDNSSUBNET_MAX_SUBNET_IP6 = (uint8_t)config->max_client_subnet_ipv6;
-#endif
        MINIMAL_RESPONSES = config->minimal_responses;
        RRSET_ROUNDROBIN = config->rrset_roundrobin;
        log_set_time_asc(config->log_time_ascii);
index 6f32dee1d238d0a27c75138c1b8b01af8832d444..79b094894022637348091535b2e285953b3f72ad 100644 (file)
@@ -177,10 +177,12 @@ struct config_file {
         * accept option from, linked list */
        struct config_strlist* client_subnet;
        /** opcode assigned by IANA for edns0-client-subnet option */
-       int client_subnet_opcode;
+       uint16_t client_subnet_opcode;
+       /** Do not check whitelist if incoming query contains an ECS record */
+       int client_subnet_always_forward;
        /** Subnet length we are willing to give up privacy for */
-       int max_client_subnet_ipv4;
-       int max_client_subnet_ipv6;
+       uint8_t max_client_subnet_ipv4;
+       uint8_t max_client_subnet_ipv6;
 #endif
        /** list of access control entries, linked list */
        struct config_str2list* acls;
@@ -440,9 +442,9 @@ struct config_file {
        /** minimise QNAME in strict mode, minimise according to RFC.
         *  Do not apply fallback */
        int qname_minimisation_strict;
-       /* SHM data - true if shm is enabled */
+       /** SHM data - true if shm is enabled */
        int shm_enable;
-       /* SHM data - key for the shm */
+       /** SHM data - key for the shm */
        int shm_key;
 
        /** DNSCrypt */
@@ -481,7 +483,7 @@ struct config_stub {
        int isprime;
        /** if forward-first is set (failover to without if fails) */
        int isfirst;
-       /* use SSL for queries to this stub */
+       /** use SSL for queries to this stub */
        int ssl_upstream;
 };
 
index e31b035c263dd1cf708c4a4b80cf6f055d7bc56f..1e6273fe77d8e30a14a12529351e673dba6486ff 100644 (file)
@@ -10,7 +10,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_SUBMINOR_VERSION 1
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -89,25 +89,13 @@ typedef unsigned int flex_uint32_t;
 
 #endif /* ! FLEXINT_H */
 
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else  /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
+/* TODO: this is always defined, so inline it */
 #define yyconst const
+
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* Returned upon end-of-file. */
@@ -168,7 +156,7 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
 typedef size_t yy_size_t;
 #endif
 
-extern yy_size_t yyleng;
+extern int yyleng;
 
 extern FILE *yyin, *yyout;
 
@@ -184,7 +172,7 @@ extern FILE *yyin, *yyout;
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        yy_size_t yyless_macro_arg = (n); \
+        int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
@@ -207,12 +195,12 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       yy_size_t yy_buf_size;
+       int yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       yy_size_t yy_n_chars;
+       int yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -235,7 +223,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-    
+
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -263,7 +251,7 @@ struct yy_buffer_state
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* We provide macros for accessing buffer states in case in the
  * future we want to put the buffer states in a more general
@@ -282,11 +270,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
@@ -311,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
 
 void *yyalloc (yy_size_t  );
 void *yyrealloc (void *,yy_size_t  );
@@ -345,7 +333,7 @@ void yyfree (void *  );
 
 typedef unsigned char YY_CHAR;
 
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
@@ -362,10 +350,7 @@ extern char *yytext;
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
-static void yy_fatal_error (yyconst char msg[]  );
+static void yynoreturn yy_fatal_error (yyconst char* msg  );
 
 /* Done after the current pattern has been matched and before the
  * corresponding action - sets up yytext.
@@ -373,13 +358,13 @@ static void yy_fatal_error (yyconst char msg[]  );
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
        (yytext_ptr) -= (yy_more_len); \
-       yyleng = (size_t) (yy_cp - (yytext_ptr)); \
+       yyleng = (int) (yy_cp - (yytext_ptr)); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 220
-#define YY_END_OF_BUFFER 221
+#define YY_NUM_RULES 221
+#define YY_END_OF_BUFFER 222
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -387,244 +372,246 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[2150] =
+static yyconst flex_int16_t yy_accept[2165] =
     {   0,
-        1,    1,  202,  202,  206,  206,  210,  210,  214,  214,
-        1,    1,  221,  218,    1,  200,  200,  219,    2,  219,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      202,  203,  203,  204,  219,  206,  207,  207,  208,  219,
-      213,  210,  211,  211,  212,  219,  214,  215,  215,  216,
-      219,  217,  201,    2,  205,  219,  217,  218,    0,    1,
-        2,    2,    2,    2,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      202,    0,  206,    0,  213,    0,  210,  214,    0,  217,
-        0,    2,    2,  217,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  217,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      217,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   77,  218,  218,  218,
-      218,  218,  218,    8,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,   88,  217,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  217,
-      218,  218,  218,  218,  218,   37,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  167,  218,
-       14,   15,  218,   18,   17,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  153,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,    3,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  217,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  209,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,   40,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   41,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  142,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,   20,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  101,  218,  209,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  194,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  117,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      100,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,   75,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,   25,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,   38,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,   39,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  118,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       28,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  182,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,   32,  218,   33,
-      218,  218,  218,   78,  218,   79,  218,  218,   76,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,    7,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  160,  218,  218,  218,  218,  103,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   29,  218,  218,  218,
-
-      218,  218,  218,  218,  134,  218,  133,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   16,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,   42,  218,  218,
-      218,  218,  218,  218,  141,  218,  218,  218,  218,   81,
-       80,  218,  218,  218,  218,  218,  218,  218,  218,  128,
-      218,  218,  218,  218,  218,  218,  218,  218,   89,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,   60,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,   64,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,   36,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  131,
-      132,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,    6,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      192,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       26,  218,  218,  218,  218,  218,  218,  218,  218,  124,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      146,  218,  125,  218,  218,  158,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       27,  218,  218,  218,  218,   84,  218,   85,  218,   83,
-      218,  218,  218,  218,  218,  218,  218,  218,   98,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      181,  218,  218,  126,  218,  218,  218,  218,  218,  129,
-      218,  218,  157,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   74,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,   34,  218,  218,   22,  218,
-      218,  218,  218,   19,  218,  108,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       49,   51,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  196,  218,  218,  168,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       86,  218,  218,  218,  218,  218,  218,  218,   97,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  102,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  152,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      116,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  112,  218,  119,  218,  218,  218,
-      218,  218,   92,  218,  218,   70,  218,  218,  144,  218,
-      218,  218,  218,  218,  159,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  173,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  115,
-      218,  218,  218,  218,  218,   52,   53,  218,  218,  218,
-      218,  218,   35,   59,  120,  218,  135,  218,  161,  130,
-
-      218,  218,  218,   45,  218,  122,  218,  218,  218,  218,
-      218,    9,  218,  218,  218,   73,  218,  218,  218,  218,
-      186,  218,  143,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  104,  195,
-      218,  218,  172,  218,  218,  218,  218,  218,  218,  218,
-      218,  154,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  121,  218,  218,  218,   44,   46,  218,  218,
-
-      218,  218,  218,  218,  218,   72,  218,  218,  218,  218,
-      184,  218,  191,  218,  218,  218,  218,  218,  148,   23,
-       24,  218,  218,  218,  218,  218,  218,  218,  218,   69,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  150,  147,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,   43,  218,  218,  218,
-      218,  218,  218,  218,  218,   99,   13,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,   12,  218,  218,   21,  218,  218,  218,  190,  218,
-      193,   47,  218,  156,  218,  149,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  218,  218,  218,  218,  111,  110,
-      218,  218,  218,  218,  218,  151,  145,  218,  218,  197,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-       54,  218,  218,  218,  185,  218,  218,  218,  155,  218,
-      218,  218,  218,  218,  218,  218,  218,   48,  218,  218,
-      218,   82,  218,  105,  107,  136,  218,  218,  218,  109,
-      218,  218,  162,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  169,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      137,  218,  218,  183,  218,  218,  218,   30,  218,  218,
-      218,  218,    4,  218,  218,   93,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  165,  218,  218,  218,  218,
-      218,  198,  218,  218,  218,  218,  218,  171,  218,  218,
-      140,  218,  218,  218,  218,  218,  218,  218,  218,   57,
-      218,   31,  189,  166,  218,  218,   11,  218,  218,  218,
-      218,  218,  218,  138,   61,  218,  218,  218,  114,  218,
-      218,  218,  218,   94,  218,  218,  218,  218,  218,  218,
-      218,  170,   90,  218,   87,  218,  218,  218,   63,   67,
-       62,  218,   55,  218,  218,   10,  218,  218,  218,  187,
-
-      218,  218,  113,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,   68,   66,  218,
-       56,  218,  218,  218,  127,  218,  218,  139,  218,  218,
-      218,  218,  106,   50,  218,  199,  218,  218,  218,  218,
-      218,  218,   91,   65,   95,   96,   58,  218,  188,  218,
-      218,  218,  164,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,   71,  218,  163,  180,  218,  218,  218,  218,
-      218,  218,    5,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-
-      218,  218,  218,  218,  123,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  176,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218,  174,  218,  177,
-      178,  218,  218,  218,  218,  218,  175,  179,    0
+        1,    1,  203,  203,  207,  207,  211,  211,  215,  215,
+        1,    1,  222,  219,    1,  201,  201,  220,    2,  220,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      203,  204,  204,  205,  220,  207,  208,  208,  209,  220,
+      214,  211,  212,  212,  213,  220,  215,  216,  216,  217,
+      220,  218,  202,    2,  206,  220,  218,  219,    0,    1,
+        2,    2,    2,    2,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      203,    0,  207,    0,  214,    0,  211,  215,    0,  218,
+        0,    2,    2,  218,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  218,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      218,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,   77,  219,  219,  219,
+      219,  219,  219,    8,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,   88,  218,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  218,
+      219,  219,  219,  219,  219,   37,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  168,  219,
+       14,   15,  219,   18,   17,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  154,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,    3,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  218,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  210,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,   40,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,   41,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  143,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,   20,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  102,  219,  210,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  195,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  118,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      101,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,   75,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,   25,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,   38,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,   39,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  119,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+       28,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  183,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,   32,  219,   33,
+      219,  219,  219,   78,  219,   79,  219,  219,   76,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,    7,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  161,  219,  219,  219,  219,  104,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,   29,  219,  219,  219,
+
+      219,  219,  219,  219,  135,  219,  134,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,   16,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,   42,  219,  219,
+      219,  219,  219,  219,  142,  219,  219,  219,  219,   81,
+       80,  219,  219,  219,  219,  219,  219,  219,  219,  129,
+      219,  219,  219,  219,  219,  219,  219,  219,   89,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,   60,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,   64,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,   36,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  132,
+      133,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,    6,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      193,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+       26,  219,  219,  219,  219,  219,  219,  219,  219,  125,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      147,  219,  126,  219,  219,  159,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+       27,  219,  219,  219,  219,   84,  219,   85,  219,   83,
+      219,  219,  219,  219,  219,  219,  219,  219,   99,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      182,  219,  219,  127,  219,  219,  219,  219,  219,  130,
+      219,  219,  158,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,   74,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,   34,  219,  219,   22,  219,
+      219,  219,  219,   19,  219,  109,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+       49,   51,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  197,  219,  219,  169,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+       86,  219,  219,  219,  219,  219,  219,  219,   98,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  103,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  153,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      117,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  113,  219,  120,  219,  219,  219,
+      219,  219,   92,  219,  219,   70,  219,  219,  219,  145,
+      219,  219,  219,  219,  219,  160,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  174,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      116,  219,  219,  219,  219,  219,   52,   53,  219,  219,
+      219,  219,  219,   35,   59,  121,  219,  136,  219,  162,
+
+      131,  219,  219,  219,   45,  219,  123,  219,  219,  219,
+      219,  219,    9,  219,  219,  219,   73,  219,  219,  219,
+      219,  187,  219,  144,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      105,  196,  219,  219,  173,  219,  219,  219,  219,  219,
+      219,  219,  219,  155,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  122,  219,  219,  219,   44,   46,
+
+      219,  219,  219,  219,  219,  219,  219,   72,  219,  219,
+      219,  219,  185,  219,  192,  219,  219,  219,  219,  219,
+      149,   23,   24,  219,  219,  219,  219,  219,  219,  219,
+      219,   69,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  151,  148,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,   43,
+      219,  219,  219,  219,  219,  219,  219,  219,  100,   13,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,   12,  219,  219,   21,  219,  219,
+      219,  191,  219,  194,   47,  219,  157,  219,  150,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  112,  111,  219,  219,  219,  219,  219,  219,  152,
+      146,  219,  219,  198,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,   54,  219,  219,  219,  186,  219,
+      219,  219,  156,  219,  219,  219,  219,  219,  219,  219,
+      219,   48,  219,  219,  219,   82,  219,  106,  108,  137,
+      219,  219,  219,  110,  219,  219,  163,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  170,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  138,  219,  219,  184,  219,
+      219,  219,   30,  219,  219,  219,  219,    4,  219,  219,
+       93,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      166,  219,  219,  219,  219,  219,  219,  199,  219,  219,
+      219,  219,  219,  172,  219,  219,  141,  219,  219,  219,
+      219,  219,  219,  219,  219,   57,  219,   31,  190,  167,
+      219,  219,   11,  219,  219,  219,  219,  219,  219,  139,
+       61,  219,  219,  219,  115,  219,  219,  219,  219,  219,
+       95,  219,  219,  219,  219,  219,  219,  219,  171,   90,
+      219,   87,  219,  219,  219,   63,   67,   62,  219,   55,
+
+      219,  219,   10,  219,  219,  219,  188,  219,  219,  114,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,   68,   66,  219,   56,  219,
+      219,  219,  128,  219,  219,  140,  219,  219,  219,  219,
+      107,   50,  219,  219,  200,  219,  219,  219,  219,  219,
+      219,   91,   65,   96,   97,   58,  219,  189,  219,  219,
+      219,  165,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,   71,  219,  164,  219,  181,  219,  219,
+      219,  219,  219,  219,    5,  219,  219,  219,  219,  219,
+
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,   94,  219,  219,  219,  219,  219,  219,  124,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  177,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  175,  219,  178,  179,  219,  219,  219,  219,
+      219,  176,  180,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -667,15 +654,15 @@ static yyconst YY_CHAR yy_meta[41] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[2164] =
+static yyconst flex_uint16_t yy_base[2179] =
     {   0,
         0,    0,   38,   41,   44,   46,   59,   65,   71,   77,
-       90,  112, 2240, 2121,   81, 4228, 4228, 4228,   96,   52,
+       90,  112, 2240, 2121,   81, 4265, 4265, 4265,   96,   52,
        72,  107,  111,   70,   91,  109,  124,   98,  127,  114,
       133,  136,   64,  144,  146,  150,  156,  177,  167,  182,
-     2077, 4228, 4228, 4228,  182, 2049, 4228, 4228, 4228,  173,
-     1931, 1589, 4228, 4228, 4228,  206, 1411, 4228, 4228, 4228,
-      194, 1269, 4228,  210, 4228,  214,  174,  948,  218,  147,
+     2077, 4265, 4265, 4265,  182, 2049, 4265, 4265, 4265,  173,
+     1931, 1589, 4265, 4265, 4265,  206, 1411, 4265, 4265, 4265,
+      194, 1269, 4265,  210, 4265,  214,  174,  948,  218,  147,
         0,  225,    0,    0,  189,  143,   97,  219,  212,  145,
       179,  214,  221,  223,  227,  234,  229,  170,  231,  232,
       233,  237,  244,  238,  253,   63,  236,  257,  258,  254,
@@ -707,13 +694,13 @@ static yyconst flex_uint16_t yy_base[2164] =
       737,  739,  743,  747,  645,  748,  749,  751,  750,  754,
       756,  762,  766,  771,  778,  758,  775,  773,  782,  783,
       784,  786,  788,  789,  798,  793,  794,  795,  796,  799,
-      802,  804,  806,  812,  809,  818, 4228,  820,  810,  816,
-      813,  823,  825, 4228,  826,  827,  828,  835,  832,  833,
+      802,  804,  806,  812,  809,  818, 4265,  820,  810,  816,
+      813,  823,  825, 4265,  826,  827,  828,  835,  832,  833,
       834,  845,  855,  836,  856,  840,  852,  851,  858,  859,
       860,  861,  862,  864,  884,  867,  869,  865,  877,  886,
       876,  893,  870,  897,  891,  868,  899,  901,  902,  904,
 
-      907,  908,  911,  912, 4228,  913,  921,  919,  905,  922,
+      907,  908,  911,  912, 4265,  913,  921,  919,  905,  922,
       925,  929,  936,  932,  940,  937,  938,  939,  942,  943,
       945,  950,  957,  952,  959,  963,  973,  969,  971,  978,
       953,  955,  975,  976,  977,  985,  982,  980,  983,  987,
@@ -726,16 +713,16 @@ static yyconst flex_uint16_t yy_base[2164] =
 
      1108, 1110, 1124, 1111, 1120, 1128, 1122, 1126, 1130, 1132,
      1135, 1134, 1137, 1144, 1136, 1146, 1147, 1148, 1150, 1152,
-     1155, 1160, 1151, 1165, 1161, 4228, 1163, 1173, 1168, 1171,
-     1169, 1176, 1183, 1178, 1179, 1180, 1184, 1187, 4228, 1185,
-     4228, 4228, 1190, 4228, 4228, 1189, 1195, 1208, 1202, 1210,
+     1155, 1160, 1151, 1165, 1161, 4265, 1163, 1173, 1168, 1171,
+     1169, 1176, 1183, 1178, 1179, 1180, 1184, 1187, 4265, 1185,
+     4265, 4265, 1190, 4265, 4265, 1189, 1195, 1208, 1202, 1210,
      1219, 1220, 1218, 1193, 1215, 1191, 1225, 1230, 1234, 1235,
      1231, 1242, 1240, 1244, 1248, 1249, 1250, 1237, 1252, 1254,
      1255, 1257, 1259, 1261, 1260, 1264, 1265, 1267, 1277, 1285,
      1286, 1268, 1281, 1283, 1284, 1288, 1289, 1290, 1293, 1296,
-     1217, 1299, 1304, 1300, 4228, 1301, 1302, 1305, 1309, 1303,
+     1217, 1299, 1304, 1300, 4265, 1301, 1302, 1305, 1309, 1303,
 
-     1315, 1313, 1318, 1320, 1321, 4228, 1323, 1330, 1322, 1326,
+     1315, 1313, 1318, 1320, 1321, 4265, 1323, 1330, 1322, 1326,
      1333, 1335, 1334, 1337, 1336, 1338, 1340, 1341, 1339, 1347,
      1349, 1346, 1351, 1353, 1361, 1368, 1370, 1365, 1366, 1367,
      1371, 1372, 1377, 1380, 1381, 1382, 1383, 1392, 1388, 1390,
@@ -743,415 +730,417 @@ static yyconst flex_uint16_t yy_base[2164] =
      1406, 1410, 1413, 1415, 1416, 1419, 1437, 1421, 1445, 1433,
      1446, 1441, 1449, 1452, 1451, 1453, 1455, 1423, 1466, 1459,
      1467, 1470, 1461, 1463, 1472, 1475, 1479, 1477, 1483, 1481,
-     1484, 1485, 1493, 1490, 4228, 1505, 1497, 1488, 1498, 1508,
+     1484, 1485, 1493, 1490, 4265, 1505, 1497, 1488, 1498, 1508,
      1501, 1509, 1422, 1510, 1513, 1512, 1514, 1515, 1516, 1517,
 
-     1518, 1523, 1525, 1530, 4228, 1526, 1522, 1527, 1535, 1537,
-     1539, 1543, 1546, 1551, 1553, 1549, 4228, 1554, 1564, 1556,
+     1518, 1523, 1525, 1530, 4265, 1526, 1522, 1527, 1535, 1537,
+     1539, 1543, 1546, 1551, 1553, 1549, 4265, 1554, 1564, 1556,
      1565, 1559, 1561, 1567, 1572, 1569, 1571, 1575, 1578, 1576,
-     1579, 1580, 1586, 4228, 1587, 1588, 1591, 1595, 1590, 1600,
-     1602, 1601, 1603, 1606, 1607, 1614, 1610, 1611, 4228, 1609,
+     1579, 1580, 1586, 4265, 1587, 1588, 1591, 1595, 1590, 1600,
+     1602, 1601, 1603, 1606, 1607, 1614, 1610, 1611, 4265, 1609,
      1621, 1612, 1613, 1634, 1635, 1617, 1631, 1638, 1630, 1633,
-     1639, 1644, 1641, 1643, 1642, 1645, 4228, 1646,  130, 1648,
+     1639, 1644, 1641, 1643, 1642, 1645, 4265, 1646,  130, 1648,
      1653, 1654, 1656, 1663, 1655, 1664, 1667, 1669, 1671, 1673,
      1675, 1658, 1679, 1676, 1680, 1682, 1684, 1687, 1688, 1689,
-     1692, 4228, 1695, 1701, 1693, 1702, 1704, 1703, 1710, 1712,
+     1692, 4265, 1695, 1701, 1693, 1702, 1704, 1703, 1710, 1712,
 
-     1713, 1715, 1714, 4228, 1723, 1724, 1718, 1725, 1726, 1729,
+     1713, 1715, 1714, 4265, 1723, 1724, 1718, 1725, 1726, 1729,
      1730, 1731, 1734, 1735, 1736, 1741, 1742, 1738, 1739, 1746,
-     4228, 1766, 1748, 1761, 1750, 1763, 1752, 1773, 1765, 1771,
+     4265, 1766, 1748, 1761, 1750, 1763, 1752, 1773, 1765, 1771,
      1774, 1775, 1777, 1779, 1786, 1781, 1778, 1789, 1791, 1792,
      1793, 1795, 1799, 1800, 1802, 1801, 1809, 1810, 1806, 1813,
-     1812, 1822, 1751, 1807, 4228, 1820, 1814, 1825, 1827, 1839,
+     1812, 1822, 1751, 1807, 4265, 1820, 1814, 1825, 1827, 1839,
      1831, 1835, 1834, 1840, 1837, 1841, 1847, 1842, 1846, 1849,
-     1858, 1850, 1862, 4228, 1863, 1859, 1867, 1869, 1852, 1874,
+     1858, 1850, 1862, 4265, 1863, 1859, 1867, 1869, 1852, 1874,
      1870, 1876, 1878, 1879, 1880, 1881, 1882, 1883, 1888, 1890,
-     1891, 1892, 4228, 1900, 1901, 1902, 1909, 1904, 1893, 1908,
+     1891, 1892, 4265, 1900, 1901, 1902, 1909, 1904, 1893, 1908,
 
      1911, 1914, 1915, 1916, 1923, 1918, 1920, 1921, 1922, 1924,
-     1925, 1927, 1928, 1930, 1941, 1944, 1929, 1945, 4228, 1937,
+     1925, 1927, 1928, 1930, 1941, 1944, 1929, 1945, 4265, 1937,
      1955, 1951, 1957, 1958, 1959, 1961, 1962, 1967, 1969, 1971,
-     1968, 1970, 1973, 1976, 1978, 1980, 1982, 4228, 1984, 1985,
+     1968, 1970, 1973, 1976, 1978, 1980, 1982, 4265, 1984, 1985,
      1986, 1992, 1987, 1991, 1993, 1990, 1995, 2007, 2010, 2011,
      2012, 1996, 2013, 2016, 2017, 2018, 2025, 2026, 2030, 2032,
-     4228, 2035, 2036, 2037, 2024, 2039, 2027, 2043, 2051, 2053,
+     4265, 2035, 2036, 2037, 2024, 2039, 2027, 2043, 2051, 2053,
      2048, 2054, 2055, 2056, 2063, 2058, 2059, 2060, 2067, 2064,
      2069, 2070, 2071, 2065, 2072, 2076, 2080, 2082, 2086, 2095,
-     2087, 2096, 2097, 2099, 2101, 2103, 4228, 2104, 2102, 2107,
+     2087, 2096, 2097, 2099, 2101, 2103, 4265, 2104, 2102, 2107,
 
-     2111, 2113, 2112, 2115, 2119, 2126, 2128, 4228, 2123, 4228,
-     2125, 2134, 2137, 4228, 2143, 4228, 2145, 2136, 4228, 2146,
+     2111, 2113, 2112, 2115, 2119, 2126, 2128, 4265, 2123, 4265,
+     2125, 2134, 2137, 4265, 2143, 4265, 2145, 2136, 4265, 2146,
      2147, 2138, 2129, 2150, 2151, 2140, 2158, 2159, 2160, 2161,
-     2165, 2166, 2167, 2169, 2168, 4228, 2175, 2172, 2170, 2178,
+     2165, 2166, 2167, 2169, 2168, 4265, 2175, 2172, 2170, 2178,
      2176, 2182, 2183, 2185, 2186, 2189, 2193, 2192, 2204, 2196,
-     2205, 4228, 2200, 2207, 2201, 2211, 4228, 2208, 2212, 2218,
+     2205, 4265, 2200, 2207, 2201, 2211, 4265, 2208, 2212, 2218,
      2210, 2215, 2221, 2222, 2223, 2233, 2231, 2235, 2229, 2237,
      2227, 2241, 2253, 2245, 2248, 2249, 2250, 2260, 2256, 2263,
      2255, 2259, 2272, 2262, 2258, 2265, 2269, 2273, 2274, 2279,
-     2277, 2281, 2280, 2282, 2283, 2284, 4228, 2293, 2286, 2294,
+     2277, 2281, 2280, 2282, 2283, 2284, 4265, 2293, 2286, 2294,
 
-     2295, 2296, 2304, 2298, 4228, 2307, 4228, 2301, 2309, 2312,
+     2295, 2296, 2304, 2298, 4265, 2307, 4265, 2301, 2309, 2312,
      2315, 2317, 2319, 2321, 2320, 2323, 2331, 2325, 2338, 2345,
-     2328, 2333, 2335, 2341, 2347, 2339, 4228, 2349, 2350, 2356,
-     2354, 2352, 2359, 2365, 2360, 2358, 2379, 4228, 2377, 2367,
-     2381, 2382, 2389, 2384, 4228, 2386, 2394, 2391, 2392, 4228,
-     4228, 2393, 2397, 2396, 2398, 2399, 2408, 2403, 2407, 4228,
-     2411, 2400, 2413, 2421, 2422, 2423, 2415, 2414, 4228, 2429,
+     2328, 2333, 2335, 2341, 2347, 2339, 4265, 2349, 2350, 2356,
+     2354, 2352, 2359, 2365, 2360, 2358, 2379, 4265, 2377, 2367,
+     2381, 2382, 2389, 2384, 4265, 2386, 2394, 2391, 2392, 4265,
+     4265, 2393, 2397, 2396, 2398, 2399, 2408, 2403, 2407, 4265,
+     2411, 2400, 2413, 2421, 2422, 2423, 2415, 2414, 4265, 2429,
      2431, 2432, 2433, 2435, 2436, 2434, 2438, 2445, 2442, 2441,
-     2443, 2451, 2452, 2457, 4228, 2460, 2461, 2463, 2464, 2466,
+     2443, 2451, 2452, 2457, 4265, 2460, 2461, 2463, 2464, 2466,
      2467, 2469, 2471, 2472, 2473, 2474, 2475, 2478, 2479, 2480,
 
      2481, 2485, 2498, 2493, 2494, 2495, 2503, 2497, 2505, 2499,
-     2507, 2508, 2516, 2518, 4228, 2525, 2509, 2528, 2511, 2523,
-     2530, 2531, 2539, 2534, 2524, 2535, 2543, 2538, 4228, 2551,
-     2540, 2541, 2557, 2542, 2559, 2549, 2552, 2563, 2566, 4228,
-     4228, 2561, 2567, 2572, 2575, 2573, 2576, 2577, 2578, 2581,
-     2582, 4228, 2584, 2592, 2591, 2587, 2599, 2601, 2597, 2600,
+     2507, 2508, 2516, 2518, 4265, 2525, 2509, 2528, 2511, 2523,
+     2530, 2531, 2539, 2534, 2524, 2535, 2543, 2538, 4265, 2551,
+     2540, 2541, 2557, 2542, 2559, 2549, 2552, 2563, 2566, 4265,
+     4265, 2561, 2567, 2572, 2575, 2573, 2576, 2577, 2578, 2581,
+     2582, 4265, 2584, 2592, 2591, 2587, 2599, 2601, 2597, 2600,
      2604, 2602, 2606, 2608, 2609, 2610, 2614, 2615, 2617, 2619,
-     4228, 2618, 2621, 2624, 2626, 2627, 2629, 2635, 2631, 2645,
+     4265, 2618, 2621, 2624, 2626, 2627, 2629, 2635, 2631, 2645,
      2641, 2646, 2648, 2655, 2651, 2658, 2659, 2654, 2661, 2669,
-     4228, 2664, 2666, 2665, 2656, 2678, 2667, 2685, 2671, 4228,
+     4265, 2664, 2666, 2665, 2656, 2678, 2667, 2685, 2671, 4265,
 
      2684, 2674, 2691, 2693, 2682, 2694, 2695, 2698, 2699, 2697,
-     4228, 2704, 4228, 2707, 2696, 4228, 2700, 2711, 2714, 2715,
+     4265, 2704, 4265, 2707, 2696, 4265, 2700, 2711, 2714, 2715,
      2716, 2718, 2719, 2720, 2722, 2725, 2726, 2727, 2734, 2731,
-     4228, 2735, 2733, 2737, 2741, 4228, 2743, 4228, 2738, 4228,
-     2748, 2752, 2755, 2753, 2756, 2758, 2762, 2759, 4228, 2764,
+     4265, 2735, 2733, 2737, 2741, 4265, 2743, 4265, 2738, 4265,
+     2748, 2752, 2755, 2753, 2756, 2758, 2762, 2759, 4265, 2764,
      2765, 2768, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2783,
-     4228, 2779, 2780, 4228, 2790, 2782, 2791, 2792, 2798, 4228,
-     2801, 2804, 4228, 2807, 2812, 2796, 2808, 2814, 2815, 2818,
-     2817, 2819, 2830, 2826, 2825, 2828, 4228, 2827, 2829, 2833,
+     4265, 2779, 2780, 4265, 2790, 2782, 2791, 2792, 2798, 4265,
+     2801, 2804, 4265, 2807, 2812, 2796, 2808, 2814, 2815, 2818,
+     2817, 2819, 2830, 2826, 2825, 2828, 4265, 2827, 2829, 2833,
      2840, 2834, 2837, 2848, 2845, 2851, 2844, 2854, 2858, 2852,
 
-     2860, 2847, 2866, 2863, 2867, 4228, 2869, 2870, 4228, 2871,
-     2873, 2876, 2880, 4228, 2877, 4228, 2881, 2882, 2878, 2886,
+     2860, 2847, 2866, 2863, 2867, 4265, 2869, 2870, 4265, 2871,
+     2873, 2876, 2880, 4265, 2877, 4265, 2881, 2882, 2878, 2886,
      2889, 2890, 2892, 2885, 2898, 2900, 2901, 2912, 2907, 2908,
-     4228, 4228, 2910, 2916, 2913, 2918, 2919, 2921, 2923, 2930,
-     2927, 2926, 2929, 4228, 2935, 2936, 4228, 2937, 2938, 2940,
-     2942, 2944, 2946, 2945, 2948, 2950, 2951, 2953, 2952, 2955,
-     4228, 2960, 2959, 2965, 2967, 2969, 2968, 2970, 4228, 2972,
-     2976, 2981, 2983, 2971, 2988, 2992, 2995, 2998, 2999, 3000,
-     3002, 3006, 3005, 3008, 3010, 3011, 3017, 3019, 3021, 3023,
-     3012, 3024, 4228, 3027, 3029, 3025, 3034, 3031, 3035, 3036,
-
-     3045, 3048, 3038, 3040, 3050, 3052, 4228, 3042, 3053, 3056,
-     2973, 3059, 3054, 3064, 3060, 3065, 3066, 3067, 3070, 3075,
-     4228, 3074, 3078, 3081, 3082, 3084, 3085, 3088, 3087, 3089,
-     3091, 3094, 3103, 3107, 4228, 3096, 4228, 3101, 3112, 3115,
-     3117, 3099, 4228, 3114, 3122, 4228, 3104, 3123, 4228, 3124,
-     3125, 3128, 3132, 3134, 4228, 3137, 3138, 3145, 3141, 3142,
-     3146, 3149, 3150, 3151, 3152, 4228, 3154, 3157, 3163, 3166,
-     3155, 3159, 3167, 3165, 3168, 3172, 3180, 3176, 3173, 4228,
-     3178, 3184, 3192, 3185, 3195, 4228, 4228, 3187, 3198, 3200,
-     3183, 3204, 4228, 4228, 4228, 3207, 4228, 3190, 4228, 4228,
-
-     3210, 3211, 3213, 4228, 3218, 4228, 3202, 3219, 3214, 3221,
-     3222, 4228, 3223, 3224, 3226, 4228, 3228, 3235, 3231, 3232,
-     4228, 3234, 4228, 3238, 3241, 3245, 3244, 3248, 3251, 3252,
-     3254, 3256, 3259, 3260, 3261, 3263, 3266, 3268, 3269, 3270,
-     3267, 3274, 3276, 3271, 3282, 3277, 3283, 3284, 3288, 3286,
-     3291, 3292, 3293, 3294, 3300, 3304, 3311, 3312, 4228, 4228,
-     3301, 3306, 4228, 3308, 3315, 3316, 3320, 3318, 3321, 3324,
-     3322, 4228, 3326, 3330, 3329, 3336, 3331, 3332, 3334, 3335,
-     3337, 3345, 3349, 3359, 3354, 3355, 3357, 3358, 3360, 3361,
-     3362, 3364, 4228, 3365, 3368, 3371, 4228, 4228, 3369, 3375,
-
-     3383, 3377, 3373, 3385, 3393, 4228, 3379, 3395, 3387, 3396,
-     4228, 3401, 4228, 3403, 3398, 3405, 3406, 3408, 4228, 4228,
-     4228, 3412, 3410, 3414, 3415, 3416, 3418, 3419, 3420, 4228,
-     3422, 3425, 3426, 3429, 3434, 3436, 3439, 3440, 3447, 3443,
-     3442, 3450, 3452, 4228, 4228, 3453, 3460, 3456, 3464, 3463,
-     3465, 3462, 3468, 3469, 3473, 3472, 4228, 3476, 3475, 3474,
-     3481, 3482, 3486, 3487, 3489, 4228, 4228, 3485, 3490, 3493,
-     3497, 3499, 3500, 3501, 3503, 3505, 3507, 3514, 3520, 3513,
-     3517, 4228, 3506, 3523, 4228, 3525, 3526, 3527, 4228, 3530,
-     4228, 4228, 3533, 4228, 3528, 4228, 3534, 3537, 3544, 3546,
-
-     3551, 3553, 3556, 3539, 3545, 3541, 3561, 3558, 4228, 4228,
-     3569, 3547, 3565, 3572, 3573, 4228, 4228, 3574, 3564, 4228,
-     3575, 3576, 3578, 3580, 3581, 3582, 3585, 3586, 3587, 3588,
-     3589, 3591, 3602, 3597, 3599, 3606, 3608, 3609, 3610, 3611,
-     4228, 3615, 3616, 3617, 4228, 3621, 3622, 3623, 4228, 3624,
-     3629, 3633, 3636, 3625, 3644, 3639, 3641, 4228, 3647, 3648,
-     3649, 4228, 3651, 4228, 4228, 4228, 3653, 3654, 3656, 4228,
-     3659, 3662, 4228, 3668, 3660, 3670, 3672, 3679, 3675, 3682,
-     3671, 3678, 3684, 3691, 3674, 3687, 4228, 3688, 3689, 3694,
-     3695, 3696, 3697, 3698, 3701, 3703, 3705, 3709, 3713, 3715,
-
-     4228, 3717, 3719, 4228, 3722, 3723, 3724, 4228, 3726, 3727,
-     3728, 3730, 4228, 3731, 3736, 4228, 3733, 3738, 3741, 3742,
-     3744, 3743, 3746, 3754, 3752, 4228, 3748, 3758, 3765, 3759,
-     3766, 4228, 3767, 3768, 3775, 3771, 3774, 4228, 3777, 3779,
-     4228, 3781, 3785, 3782, 3786, 3793, 3795, 3800, 3797, 4228,
-     3804, 4228, 4228, 4228, 3783, 3806, 4228, 3809, 3801, 3810,
-     3811, 3813, 3814, 4228, 4228, 3816, 3818, 3821, 4228, 3822,
-     3823, 3827, 3825, 4228, 3828, 3829, 3833, 3831, 3835, 3834,
-     3839, 4228, 4228, 3838, 4228, 3841, 3846, 3850, 4228, 4228,
-     4228, 3857, 4228, 3862, 3861, 4228, 3864, 3848, 3867, 4228,
-
-     3869, 3870, 4228, 3871, 3873, 3874, 3877, 3879, 3883, 3887,
-     3872, 3880, 3884, 3891, 3893, 3890, 3900, 4228, 4228, 3902,
-     4228, 3904, 3907, 3911, 4228, 3908, 3913, 4228, 3914, 3915,
-     3918, 3920, 4228, 4228, 3921, 4228, 3928, 3923, 3925, 3927,
-     3929, 3932, 4228, 4228, 4228, 4228, 4228, 3931, 4228, 3935,
-     3936, 3938, 4228, 3940, 3941, 3942, 3944, 3943, 3945, 3949,
-     3953, 3958, 3960, 3966, 3968, 3950, 3971, 3963, 3972, 3980,
-     3975, 3978, 4228, 3979, 4228, 4228, 3981, 3990, 3991, 3982,
-     3986, 3983, 4228, 3992, 3993, 3995, 3997, 3998, 4004, 4011,
-     4001, 4013, 4018, 4019, 4021, 4003, 4031, 4028, 4029, 4015,
-
-     4030, 4038, 4033, 4035, 4228, 4037, 4039, 4040, 4041, 4043,
-     4045, 4046, 4055, 4060, 4057, 4063, 4047, 4068, 4064, 4069,
-     4053, 4073, 4074, 4228, 4075, 4077, 4079, 4081, 4083, 4085,
-     4086, 4087, 4090, 4092, 4095, 4097, 4101, 4228, 4102, 4228,
-     4228, 4106, 4091, 4103, 4113, 4115, 4228, 4228, 4228, 4136,
-     4143, 4150, 4157, 4164,  101, 4171, 4178, 4185, 4192, 4199,
-     4206, 4213, 4220
+     4265, 4265, 2910, 2916, 2913, 2919, 2920, 2923, 2924, 2932,
+     2925, 2934, 2936, 4265, 2939, 2927, 4265, 2929, 2940, 2937,
+     2938, 2944, 2946, 2950, 2952, 2955, 2948, 2956, 2957, 2958,
+     4265, 2962, 2965, 2967, 2968, 2969, 2970, 2971, 4265, 2974,
+     2973, 2975, 2980, 2984, 2986, 2994, 2997, 3001, 3002, 3003,
+     3004, 3006, 3008, 3010, 3012, 3013, 3020, 3021, 3023, 3025,
+     3014, 3026, 4265, 3029, 3031, 3027, 3036, 3033, 2979, 3037,
+
+     3041, 3044, 3047, 3038, 3048, 3050, 4265, 3052, 3054, 3055,
+     3056, 3059, 3061, 3063, 3064, 3068, 3065, 3073, 3069, 3079,
+     4265, 3071, 3082, 3076, 3085, 3086, 3088, 3089, 3090, 3095,
+     3097, 3096, 3108, 3099, 4265, 3092, 4265, 3100, 3113, 3117,
+     3115, 3118, 4265, 3119, 3120, 4265, 3121, 3123, 3125, 4265,
+     3127, 3126, 3122, 3132, 3136, 4265, 3146, 3143, 3147, 3150,
+     3151, 3152, 3154, 3155, 3156, 3157, 4265, 3159, 3161, 3168,
+     3171, 3160, 3162, 3170, 3173, 3172, 3174, 3187, 3183, 3178,
+     4265, 3185, 3186, 3194, 3190, 3193, 4265, 4265, 3197, 3199,
+     3202, 3203, 3206, 4265, 4265, 4265, 3209, 4265, 3204, 4265,
+
+     4265, 3210, 3212, 3214, 4265, 3219, 4265, 3226, 3223, 3216,
+     3221, 3225, 4265, 3227, 3228, 3234, 4265, 3235, 3237, 3236,
+     3238, 4265, 3242, 4265, 3247, 3250, 3251, 3255, 3245, 3252,
+     3258, 3261, 3265, 3268, 3262, 3269, 3270, 3272, 3273, 3276,
+     3275, 3277, 3279, 3281, 3282, 3283, 3286, 3289, 3291, 3292,
+     3295, 3294, 3296, 3298, 3306, 3302, 3310, 3301, 3317, 3319,
+     4265, 4265, 3311, 3314, 4265, 3322, 3323, 3324, 3327, 3326,
+     3328, 3331, 3332, 4265, 3337, 3330, 3334, 3338, 3340, 3343,
+     3344, 3350, 3351, 3354, 3357, 3364, 3359, 3360, 3363, 3367,
+     3365, 3368, 3369, 3371, 4265, 3378, 3376, 3379, 4265, 4265,
+
+     3380, 3381, 3390, 3386, 3391, 3393, 3395, 4265, 3397, 3402,
+     3404, 3394, 4265, 3411, 4265, 3414, 3405, 3416, 3417, 3419,
+     4265, 4265, 4265, 3420, 3408, 3423, 3425, 3426, 3427, 3428,
+     3429, 4265, 3433, 3435, 3438, 3439, 3442, 3445, 3446, 3450,
+     3457, 3456, 3458, 3449, 3463, 3466, 4265, 4265, 3460, 3475,
+     3467, 3476, 3477, 3478, 3471, 3479, 3482, 3484, 3485, 4265,
+     3488, 3487, 3468, 3493, 3495, 3496, 3498, 3500, 4265, 4265,
+     3501, 3502, 3507, 3511, 3508, 3503, 3513, 3515, 3516, 3517,
+     3524, 3530, 3523, 3532, 4265, 3525, 3533, 4265, 3536, 3538,
+     3539, 4265, 3541, 4265, 4265, 3544, 4265, 3545, 4265, 3547,
+
+     3548, 3551, 3553, 3558, 3560, 3562, 3555, 3563, 3570, 3569,
+     3571, 4265, 4265, 3580, 3566, 3572, 3582, 3581, 3583, 4265,
+     4265, 3585, 3588, 4265, 3584, 3586, 3592, 3593, 3594, 3596,
+     3599, 3600, 3605, 3601, 3607, 3615, 3617, 3612, 3621, 3602,
+     3623, 3624, 3625, 3627, 4265, 3630, 3631, 3632, 4265, 3636,
+     3637, 3639, 4265, 3638, 3641, 3651, 3643, 3644, 3663, 3653,
+     3658, 4265, 3661, 3664, 3665, 4265, 3646, 4265, 4265, 4265,
+     3669, 3675, 3670, 4265, 3678, 3680, 4265, 3686, 3682, 3668,
+     3687, 3689, 3696, 3692, 3699, 3672, 3695, 3701, 3708, 3703,
+     3705, 4265, 3707, 3709, 3711, 3712, 3713, 3714, 3715, 3716,
+
+     3721, 3722, 3718, 3733, 3720, 4265, 3737, 3741, 4265, 3743,
+     3730, 3745, 4265, 3748, 3734, 3738, 3749, 4265, 3751, 3753,
+     4265, 3755, 3757, 3759, 3760, 3762, 3763, 3765, 3766, 3770,
+     4265, 3772, 3773, 3781, 3786, 3787, 3776, 4265, 3791, 3778,
+     3788, 3789, 3799, 4265, 3801, 3792, 4265, 3803, 3804, 3805,
+     3808, 3815, 3817, 3821, 3818, 4265, 3825, 4265, 4265, 4265,
+     3810, 3826, 4265, 3829, 3822, 3830, 3831, 3834, 3837, 4265,
+     4265, 3835, 3839, 3841, 4265, 3844, 3845, 3847, 3848, 3849,
+     4265, 3851, 3853, 3854, 3858, 3861, 3856, 3857, 4265, 4265,
+     3863, 4265, 3867, 3869, 3871, 4265, 4265, 4265, 3881, 4265,
+
+     3887, 3882, 4265, 3889, 3876, 3890, 4265, 3892, 3780, 4265,
+     3893, 3896, 3897, 3900, 3902, 3895, 3903, 3907, 3909, 3912,
+     3914, 3913, 3915, 3917, 3922, 4265, 4265, 3924, 4265, 3926,
+     3929, 3931, 4265, 3932, 3938, 4265, 3933, 3939, 3942, 3944,
+     4265, 4265, 3946, 3916, 4265, 3953, 3948, 3949, 3950, 3952,
+     3951, 4265, 4265, 4265, 4265, 4265, 3955, 4265, 3956, 3959,
+     3961, 4265, 3963, 3965, 3968, 3966, 3971, 3972, 3973, 3977,
+     3974, 3983, 3978, 3991, 3995, 4000, 3997, 4001, 3980, 3993,
+     4009, 4004, 4011, 4265, 4007, 4265, 4012, 4265, 4013, 4020,
+     4021, 4017, 4016, 4019, 4265, 4023, 4024, 4025, 4026, 4027,
+
+     4033, 4036, 4042, 4034, 4046, 4048, 4050, 4051, 4054, 4043,
+     4063, 4061, 4265, 4058, 4064, 4066, 4073, 4068, 4069, 4265,
+     4070, 4071, 4072, 4076, 4077, 4074, 4080, 4092, 4094, 4081,
+     4096, 4088, 4098, 4101, 4102, 4100, 4105, 4104, 4265, 4106,
+     4112, 4113, 4114, 4115, 4118, 4120, 4121, 4125, 4127, 4129,
+     4131, 4135, 4265, 4136, 4265, 4265, 4138, 4126, 4140, 4147,
+     4149, 4265, 4265, 4265, 4173, 4180, 4187, 4194, 4201,  101,
+     4208, 4215, 4222, 4229, 4236, 4243, 4250, 4257
     } ;
 
-static yyconst flex_int16_t yy_def[2164] =
+static yyconst flex_int16_t yy_def[2179] =
     {   0,
-     2149,    1, 2150, 2150, 2151, 2151, 2152, 2152, 2153, 2153,
-     2154, 2154, 2149, 2155, 2149, 2149, 2149, 2149, 2156, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2157, 2149, 2149, 2149, 2157, 2158, 2149, 2149, 2149, 2158,
-     2159, 2149, 2149, 2149, 2149, 2159, 2160, 2149, 2149, 2149,
-     2160, 2161, 2149, 2162, 2149, 2161, 2161, 2155, 2155, 2149,
-     2163, 2156, 2163, 2156, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2157, 2157, 2158, 2158, 2159, 2159, 2149, 2160, 2160, 2161,
-     2161, 2162, 2162, 2161, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2161, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2161, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2149, 2161, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2161,
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2149, 2149, 2155, 2149, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2161, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2161, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2149,
-     2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2149,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2149,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-     2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155,
-     2155, 2155, 2149, 2149, 2149, 2155, 2149, 2155, 2149, 2149,
-
-     2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2149, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2155, 2149, 2149, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2149, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149, 2149,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155,
-     2149, 2149, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149,
-     2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2149,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2149, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155,
-     2155, 2149, 2155, 2149, 2149, 2149, 2155, 2155, 2155, 2149,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155,
-     2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149,
-     2155, 2149, 2149, 2149, 2155, 2155, 2149, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, 2149, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2149, 2149, 2155, 2149, 2155, 2155, 2155, 2149, 2149,
-     2149, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149,
-
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155,
-     2149, 2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155,
-     2155, 2155, 2149, 2149, 2155, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2149, 2149, 2149, 2149, 2155, 2149, 2155,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2149, 2149, 2155, 2155, 2155, 2155,
-     2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-
-     2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155,
-     2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2149,
-     2149, 2155, 2155, 2155, 2155, 2155, 2149, 2149,    0, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149
+     2164,    1, 2165, 2165, 2166, 2166, 2167, 2167, 2168, 2168,
+     2169, 2169, 2164, 2170, 2164, 2164, 2164, 2164, 2171, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2172, 2164, 2164, 2164, 2172, 2173, 2164, 2164, 2164, 2173,
+     2174, 2164, 2164, 2164, 2164, 2174, 2175, 2164, 2164, 2164,
+     2175, 2176, 2164, 2177, 2164, 2176, 2176, 2170, 2170, 2164,
+     2178, 2171, 2178, 2171, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2172, 2172, 2173, 2173, 2174, 2174, 2164, 2175, 2175, 2176,
+     2176, 2177, 2177, 2176, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2176, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2176, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2164, 2176, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2176,
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2164, 2164, 2170, 2164, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2176, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2176, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2164,
+     2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2164,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2164,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2170,
+     2170, 2170, 2170, 2164, 2164, 2164, 2170, 2164, 2170, 2164,
+
+     2164, 2170, 2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2164,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170,
+     2170, 2170, 2164, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2164, 2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170,
+     2170, 2164, 2170, 2164, 2164, 2170, 2164, 2170, 2164, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2164, 2170, 2164, 2164, 2164,
+     2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2164, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2164, 2170, 2164, 2164, 2164,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2164, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2164,
+     2170, 2164, 2170, 2170, 2170, 2164, 2164, 2164, 2170, 2164,
+
+     2170, 2170, 2164, 2170, 2170, 2170, 2164, 2170, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2164, 2164, 2170, 2164, 2170,
+     2170, 2170, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170,
+     2164, 2164, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+     2170, 2164, 2164, 2164, 2164, 2164, 2170, 2164, 2170, 2170,
+     2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2164, 2170, 2164, 2170, 2164, 2170, 2170,
+     2170, 2170, 2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2170, 2170, 2170, 2170, 2170, 2164,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2164, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2164, 2170, 2164, 2164, 2170, 2170, 2170, 2170,
+     2170, 2164, 2164,    0, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164
     } ;
 
-static yyconst flex_uint16_t yy_nxt[4269] =
+static yyconst flex_uint16_t yy_nxt[4306] =
     {   0,
        14,   15,   16,   17,   18,   19,   18,   14,   14,   14,
        14,   14,   18,   20,   21,   14,   22,   23,   24,   25,
@@ -1398,7 +1387,7 @@ static yyconst flex_uint16_t yy_nxt[4269] =
      1164, 1167,   69, 1170, 1177,   69,   69, 1176, 1179,   69,
      1180, 1181, 1183,   69,   69, 1174, 1175,   69,   69, 1185,
        69,   69, 1178,   69,   69,   69, 1189, 1184,   69, 1182,
-     1187,   69, 1190, 1186,   69,   69,   69, 1193, 1199, 2149,
+     1187,   69, 1190, 1186,   69,   69,   69, 1193, 1199, 2164,
        69, 1191,   69, 1192,   69, 1188,   69, 1194,   69, 1196,
        69, 1201, 1197, 1200,   69, 1202, 1195, 1204,   69, 1206,
      1205,   69,   69,   69, 1198, 1203,   69, 1210,   69,   69,
@@ -1410,10 +1399,10 @@ static yyconst flex_uint16_t yy_nxt[4269] =
      1227,   69, 1231, 1225,   69, 1226, 1233,   69, 1228, 1230,
        69, 1240,   69, 1232, 1241,   69, 1234, 1236,   69, 1235,
        69, 1242,   69,   69,   69, 1237,   69, 1244,   69, 1239,
-     1238,   69, 1246, 2149,   69, 1251,   69, 1250,   69, 1243,
+     1238,   69, 1246, 2164,   69, 1251,   69, 1250,   69, 1243,
      1245,   69,   69, 1248,   69, 1247, 1249, 1252,   69, 1254,
        69, 1253,   69,   69, 1258,   69, 1255,   69, 1256,   69,
-     1261,   69,   69,   69, 1263, 2149, 1257, 1264,   69, 1265,
+     1261,   69,   69,   69, 1263, 2164, 1257, 1264,   69, 1265,
        69, 1260, 1267, 1262, 1272, 1268, 1270, 1259, 1274, 1269,
        69, 1271,   69, 1266,   69,   69, 1276,   69, 1273,   69,
 
@@ -1437,7 +1426,7 @@ static yyconst flex_uint16_t yy_nxt[4269] =
      1353, 1354,   69, 1361,   69,   69, 1355, 1362, 1357, 1364,
        69, 1359,   69, 1366,   69, 1363,   69, 1369, 1370,   69,
        69, 1365, 1367, 1371, 1373,   69,   69, 1368,   69,   69,
-       69,   69, 1378, 1375,   69,   69, 2149,   69, 1376, 1382,
+       69,   69, 1378, 1375,   69,   69, 2164,   69, 1376, 1382,
 
        69, 1372, 1381, 1374,   69,   69, 1385, 1384, 1386, 1387,
        69, 1380,   69,   69,   69,   69, 1377,   69, 1388,   69,
@@ -1448,7 +1437,7 @@ static yyconst flex_uint16_t yy_nxt[4269] =
      1408,   69, 1413, 1414,   69, 1415, 1417,   69,   69,   69,
      1416,   69,   69, 1411,   69, 1410, 1420,   69,   69,   69,
        69, 1412,   69, 1422,   69, 1425, 1419,   69, 1430, 1421,
-     1423,   69, 1427, 1418, 1424,   69, 1428,   69,   69, 2149,
+     1423,   69, 1427, 1418, 1424,   69, 1428,   69,   69, 2164,
 
      1429, 1434, 1426, 1431,   69, 1432,   69,   69,   69,   69,
        69,   69,   69,   69, 1435, 1433, 1436,   69, 1437, 1438,
@@ -1475,156 +1464,161 @@ static yyconst flex_uint16_t yy_nxt[4269] =
      1531, 1535,   69,   69, 1537,   69, 1527, 1528, 1534, 1529,
      1532,   69, 1536,   69,   69, 1539, 1533, 1538, 1540, 1542,
        69,   69, 1546,   69, 1543,   69,   69, 1541, 1544,   69,
-     1549,   69,   69, 1550,   69, 1548,   69, 1553, 1555,   69,
-       69, 1545,   69,   69, 1547, 1554, 1551, 1556,   69,   69,
-       69,   69, 1557,   69, 1552,   69, 1560,   69,   69,   69,
-     1566,   69, 1563,   69,   69,   69,   69, 1567,   69, 1558,
-     1562, 1569,   69,   69, 1565, 1559, 1561, 1564,   69, 1568,
-       69,   69,   69,   69,   69,   69,   69, 1571, 1580,   69,
-     1620, 1570, 1572, 1577,   69, 1573,   69, 1581, 1583, 1575,
-
-     1579,   69, 1574, 1576, 1578,   69, 1585, 1586,   69, 1582,
-     1587,   69,   69,   69, 1584,   69, 1590, 1593,   69,   69,
-     1594,   69, 1595,   69,   69,   69, 1589, 1588, 1591, 1597,
-       69, 1592,   69, 1599,   69, 1600,   69,   69,   69, 1601,
-       69, 1604,   69, 1596,   69, 1603, 1606,   69,   69,   69,
-     1598,   69, 1609,   69, 1608,   69, 1602, 1605,   69, 1610,
-     1612,   69, 1607,   69, 1616,   69,   69,   69, 1614,   69,
-     1613, 1621,   69,   69, 1611, 1617, 1623,   69,   69,   69,
-       69, 1627, 1615,   69, 1619, 1625, 1622,   69,   69, 1618,
-     1629,   69, 1628, 1624,   69,   69, 1631,   69,   69, 1630,
-
-       69,   69,   69, 1635,   69, 1626, 1636,   69, 1633,   69,
-     1641, 1638,   69, 1639,   69, 1637,   69,   69, 1634, 1632,
-       69, 1640, 1646, 1644, 1642,   69, 1645,   69,   69, 1643,
-       69, 1647, 1649, 1653, 1650,   69,   69,   69,   69, 1648,
-     1655,   69, 1651, 1656, 1652,   69, 1659,   69, 1654, 1660,
-       69,   69, 1662, 1663,   69,   69, 1661, 1658,   69,   69,
-     1665, 1657,   69,   69,   69,   69, 1669,   69,   69, 1664,
-       69, 1670,   69, 1671, 1666, 1672,   69, 1667,   69,   69,
-       69,   69, 1677, 1668, 1673,   69,   69, 1680, 1674,   69,
-     1679,   69, 1675,   69, 1676, 1681,   69,   69,   69, 1685,
-
-       69, 1678, 1684,   69, 1682,   69, 1686, 1683,   69, 1699,
-     1687,   69, 1689,   69, 1688,   69, 1690,   69, 1692, 1693,
-       69, 1694, 1691,   69,   69, 1697,   69,   69, 1695, 1696,
-     1698,   69,   69, 1700,   69,   69,   69,   69, 1706,   69,
-     1703,   69, 1708, 1701,   69,   69, 1711,   69,   69, 1705,
-     1707,   69, 1712, 1713,   69, 1704, 1702,   69,   69, 1715,
-     1710,   69, 1709, 1714,   69,   69, 1719,   69, 1720,   69,
-     1718, 1721,   69,   69,   69, 1716,   69, 1724, 1717,   69,
-       69,   69,   69,   69,   69, 1722, 1730,   69, 1728,   69,
-       69, 1725, 1723, 1726, 1727,   69,   69,   69, 1731,   69,
-
-     1729,   69, 1737, 1734,   69,   69,   69,   69, 1738, 1741,
-     1732, 1736, 1742,   69,   69, 1733, 1744,   69, 1743,   69,
-     1735,   69, 1739, 1745,   69,   69, 1746, 1740,   69,   69,
-     1748,   69, 1747,   69,   69,   69, 1756,   69, 1757,   69,
-     1753, 1749,   69,   69,   69,   69, 1750,   69,   69,   69,
-       69, 1751, 1758, 1752, 1754, 1755, 1760, 1766,   69, 1761,
-     1759, 1767,   69, 1762, 1764, 1763, 1768,   69,   69, 1765,
-       69,   69,   69,   69,   69,   69, 1772,   69,   69, 1776,
-     1775,   69,   69, 1770,   69, 1769,   69, 1777,   69, 1771,
-       69, 1781,   69, 1773, 1774, 1782,   69, 1785,   69, 1789,
-
-       69, 1778, 1780, 1779, 1784, 1783,   69, 1787,   69,   69,
-     1786,   69, 1788, 1791,   69, 1792,   69, 1794,   69,   69,
-     1796,   69, 1790,   69, 1795,   69, 1797,   69,   69,   69,
-     1793,   69,   69,   69, 1801,   69, 1802, 1800,   69,   69,
-     1799, 1804,   69, 1806, 1807, 1798, 1809,   69, 1810,   69,
-     1805, 1803,   69,   69, 1813,   69,   69, 1808, 1812, 1811,
-       69, 1814, 1816,   69, 1817,   69,   69, 1819, 2149,   69,
-     1815, 1822, 1820,   69, 1821,   69,   69,   69,   69, 1818,
-     1823,   69,   69, 1824, 1825,   69,   69,   69,   69,   69,
-     1827, 1828, 1830, 1831,   69,   69, 1826, 1829,   69,   69,
-
-       69, 1836,   69,   69, 1834, 1832,   69, 1833, 1835, 1841,
-       69, 1837,   69,   69,   69, 1845,   69, 1838,   69,   69,
-       69, 1848, 1843, 1839, 1847, 1840,   69,   69, 1852, 1844,
-       69, 1842, 1849,   69, 1850, 1851,   69, 1846,   69,   69,
-       69,   69, 1854,   69, 1857, 1858,   69,   69, 1869, 1853,
-       69, 1861,   69, 1855,   69, 1856, 1862,   69,   69,   69,
-       69, 1859, 1863, 1864,   69, 1865,   69, 1860, 1866,   69,
-     1867,   69, 1868, 1870,   69, 1871, 1872,   69,   69, 1876,
-     1879, 1873,   69, 1874, 1875,   69,   69,   69,   69,   69,
-     1877,   69, 1878,   69,   69,   69, 1883, 1887,   69,   69,
-
-       69,   69,   69, 1891,   69, 1892, 1881, 1882, 1889, 1886,
-       69, 1884,   69, 1880, 1885,   69, 1893, 1895, 1888,   69,
-     1890,   69,   69,   69,   69, 2149, 1894, 1901,   69,   69,
-       69, 1898, 1902, 1904,   69,   69,   69,   69,   69, 1896,
-     1905, 1908,   69, 1899, 1900, 1906,   69, 1897, 1903,   69,
-     1909, 1912,   69, 1911,   69, 1907, 1913,   69, 1910, 1916,
-       69,   69,   69, 1915,   69, 1914,   69,   69, 1921,   69,
-     1917, 1920,   69,   69, 1918,   69, 1924, 1923, 1922, 1925,
-     1926,   69, 1927,   69,   69,   69, 1930,   69,   69, 1919,
-     1929,   69,   69, 1931, 1932,   69, 1934,   69, 1936, 1938,
-
-       69,   69,   69, 1928,   69, 1933, 1941,   69,   69,   69,
-       69,   69, 1937, 1943,   69, 1935,   69, 1940,   69, 1944,
-     1939, 1942,   69, 1948, 1947, 1950,   69, 1945,   69, 1952,
-       69, 1953,   69, 1946, 1954,   69,   69,   69, 1957,   69,
-       69,   69, 1956,   69,   69, 1961,   69, 1951, 1949,   69,
-     1964,   69, 1955, 1965,   69,   69,   69,   69, 1969,   69,
-     1958,   69, 1960, 1962, 1959,   69, 1971,   69, 1963, 1967,
-     1970,   69,   69, 1972, 1966, 1975, 1968, 1974,   69,   69,
-       69,   69, 1979, 2149,   69, 1977, 1982,   69,   69, 1983,
-       69, 1973,   69, 1985,   69,   69,   69, 1976,   69,   69,
-
-     1978, 1980, 1981, 1986, 1988, 1989,   69, 1990,   69, 1987,
-       69, 1984, 1991,   69,   69, 1992, 1993,   69, 1994,   69,
-     1995, 1996,   69,   69,   69, 2000,   69,   69, 1997,   69,
-     2003,   69, 2001, 1999,   69,   69,   69, 2002,   69, 2004,
-       69,   69,   69, 1998,   69, 2007,   69,   69,   69, 2009,
-     2008,   69,   69, 2018,   69, 2005, 2006, 2016, 2019,   69,
-     2012,   69, 2010,   69, 2011, 2013, 2014, 2020, 2015, 2021,
-       69, 2017, 2022, 2023,   69,   69, 2025,   69, 2024, 2026,
-       69, 2028,   69,   69,   69,   69,   69,   69, 2032, 2033,
-       69, 2034,   69,   69, 2027, 2031,   69,   69, 2029, 2036,
-
-       69, 2035, 2030,   69,   69, 2149,   69, 2149, 2038, 2040,
-     2037, 2041, 2043,   69, 2044,   69, 2045,   69, 2039, 2046,
-       69,   69, 2042, 2047,   69, 2049,   69,   69,   69, 2051,
-     2048,   69, 2053,   69,   69, 2055,   69, 2054,   69, 2050,
-       69,   69,   69, 2057,   69,   69, 2052, 2061,   69,   69,
-     2056,   69, 2062,   69,   69,   69,   69,   69,   69, 2058,
-     2059, 2060,   69,   69, 2065, 2064,   69, 2066, 2077, 2063,
-     2073,   69, 2069,   69, 2067, 2068,   69, 2071, 2075,   69,
-     2076,   69, 2074, 2070,   69,   69, 2072, 2081,   69, 2078,
-     2083,   69,   69,   69,   69,   69,   69, 2086, 2087,   69,
-
-     2080, 2079, 2082,   69,   69,   69,   69, 2084,   69, 2088,
-       69,   69, 2089, 2085,   69, 2090,   69,   69, 2149, 2091,
-     2149, 2093, 2096, 2094,   69, 2092,   69, 2099,   69, 2097,
-     2095,   69,   69, 2098,   69, 2103, 2100, 2101, 2104, 2102,
-     2105,   69,   69,   69,   69, 2109,   69, 2107,   69, 2106,
-       69,   69,   69,   69,   69, 2112,   69, 2116,   69,   69,
-       69, 2111, 2108, 2117, 2149, 2110,   69, 2115,   69, 2119,
-       69, 2113, 2114,   69, 2120, 2121,   69,   69, 2118, 2123,
-     2124,   69,   69, 2122, 2125, 2127,   69,   69,   69, 2126,
-       69, 2128,   69, 2130,   69, 2131,   69, 2134,   69,   69,
-
-       69, 2137, 2138,   69,   69,   69, 2129, 2140,   69, 2141,
-       69, 2132, 2139, 2133,   69,   69,   69, 2135, 2136,   69,
-     2143, 2142, 2149, 2145, 2144, 2147,   69, 2148,   69, 2149,
-     2149, 2149, 2149, 2149, 2149, 2146,   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, 2149,   72,   72,   72,   72,  131,  131,
-     2149, 2149, 2149,  131,  131,  133,  133, 2149, 2149,  133,
-     2149,  133,  135, 2149, 2149, 2149, 2149, 2149,  135,  138,
-
-      138, 2149, 2149, 2149,  138,  138,  140, 2149, 2149, 2149,
-     2149, 2149,  140,  142,  142, 2149,  142,  142,  142,  142,
-       73,   73, 2149,   73,   73,   73,   73,   13, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149
+     1547, 1550,   69,   69, 1551, 1549,   69,   69,   69, 1554,
+       69, 1545,   69, 1555, 1548,   69, 1556,   69, 1552,   69,
+       69,   69,   69,   69, 1557, 1553, 1558,   69, 1561,   69,
+     1559,   69, 1564,   69, 1567,   69, 1563, 1560,   69,   69,
+       69,   69, 1568, 1562, 1570,   69, 1569, 1565,   69, 1566,
+       69,   69,   69,   69,   69, 1581,   69,   69,   69, 2164,
+     1572, 1582,   69,   69, 1573, 1578, 1571,   69, 1609,   69,
+
+     1576, 1574, 1580, 1577, 1575, 1579, 1583,   69, 1586, 1587,
+       69, 1584, 1585, 1588,   69,   69,   69,   69, 1591,   69,
+     1594,   69, 1595,   69, 1596,   69,   69,   69, 1592, 1590,
+     1589, 1593, 1598,   69,   69, 1600,   69, 1601,   69,   69,
+       69, 1602,   69, 1605,   69, 1597,   69, 1604, 1607,   69,
+       69,   69, 1599, 1610,   69, 1611, 1613,   69, 1603, 1606,
+       69,   69, 1617,   69, 1608,   69, 1615,   69,   69,   69,
+     1612, 1622,   69, 1621,   69, 1624,   69,   69,   69, 1614,
+     1616,   69,   69, 1620,   69, 1618,   69, 1628, 1626,   69,
+     1619, 1629,   69, 1623, 1630,   69, 1631, 1625,   69,   69,
+
+     1632,   69,   69,   69, 1627,   69, 1636, 1637,   69,   69,
+       69, 1634,   69,   69, 1633, 1642, 1643, 1639, 1638, 1640,
+     1635,   69, 1645, 1641, 1647, 1644,   69, 1646,   69, 1648,
+       69,   69,   69,   69,   69,   69,   69, 1649,   69,   69,
+       69, 2164, 1653, 1657, 1658,   69, 1654, 1652, 1661,   69,
+     1656, 1650, 1655, 1651, 1664, 1659,   69, 1660, 1662,   69,
+       69, 1663, 1665,   69,   69,   69, 1667,   69,   69,   69,
+       69, 1671,   69,   69,   69,   69, 1672, 1673, 1666, 1668,
+     1674,   69, 1669,   69,   69,   69,   69,   69, 1670, 1675,
+     1679,   69, 1681, 1676, 1682, 1677,   69, 1678,   69,   69,
+
+       69, 1687, 1683,   69, 1686, 1680,   69,   69, 1689, 1684,
+       69, 1688,   69, 1691, 1685,   69,   69,   69, 1692,   69,
+     1694, 1695,   69,   69, 1690,   69, 1699,   69, 1697,   69,
+     1698, 1700,   69, 1701,   69, 1696,   69, 1702,   69,   69,
+       69,   69, 1693, 1705, 1710, 1703, 1708,   69,   69,   69,
+       69,   69, 2164, 1707, 1713,   69, 1704, 1709,   69, 1706,
+       69, 1714, 1715,   69,   69,   69, 1712, 1711,   69, 1716,
+     1717,   69, 1718, 1721,   69,   69, 1720, 1722,   69, 1719,
+     1723,   69,   69,   69, 1726,   69,   69, 1724,   69,   69,
+       69, 1732,   69, 1730,   69,   69,   69, 1727, 1728,   69,
+
+     1725, 1729,   69, 1733,   69,   69, 1739,   69,   69,   69,
+     1731,   69, 1736, 1747,   69,   69, 1735, 1740, 1738,   69,
+     1745, 1734, 1744,   69,   69, 1741, 1737,   69, 1746, 1748,
+       69, 1742,   69, 1749, 1743,   69,   69,   69, 1751,   69,
+       69,   69, 1750,   69,   69,   69, 1759,   69, 1756, 1760,
+       69,   69, 1761,   69, 1753, 1752,   69,   69, 1763, 1754,
+     1755, 1757, 1758,   69,   69, 1762, 1769,   69, 1764, 1770,
+       69, 1771,   69,   69, 1765, 1766,   69,   69,   69, 1767,
+       69,   69,   69, 1768,   69, 1775, 1779, 1778, 1773,   69,
+     1772,   69,   69,   69,   69, 1774, 2164, 1784, 1776,   69,
+
+     1780, 1777, 1785,   69,   69, 1788,   69,   69,   69, 1781,
+       69, 1782, 1789, 1783, 1786,   69, 1792,   69,   69, 1791,
+     1793,   69, 1787, 1794,   69, 1790, 1795,   69, 1797,   69,
+       69, 1799,   69,   69, 1800, 1798,   69, 1796,   69,   69,
+       69,   69,   69, 1801, 1804, 1805,   69, 1803,   69, 1802,
+     1807,   69,   69, 1809, 1812,   69, 1810, 1813,   69,   69,
+     1806, 1808,   69,   69, 1816, 2164, 1814, 1811, 1815,   69,
+       69,   69, 1818,   69, 1817, 1820,   69, 1819, 1821,   69,
+       69,   69, 1823, 1826,   69, 1825, 1822, 1824,   69,   69,
+       69,   69,   69, 1829, 1827,   69, 1828,   69,   69, 1836,
+
+       69,   69, 1832, 1831, 1834, 1835,   69, 1830,   69,   69,
+     1833,   69, 1840,   69,   69,   69,   69, 1838, 1839, 1837,
+       69,   69, 1841, 1845,   69, 1847,   69, 1849,   69,   69,
+       69, 1852, 2164, 1842, 1851, 1843,   69,   69,   69, 1844,
+     1846, 1848, 1853,   69, 1854,   69,   69, 1856, 1850,   69,
+     1855,   69,   69, 1858,   69, 1861, 1862,   69,   69, 1857,
+       69,   69, 1865, 1866,   69, 1859,   69, 1860,   69, 1867,
+     1868,   69, 1869,   69, 1870,   69,   69, 1873, 1863,   69,
+     1864, 1874,   69,   69,   69,   69, 1871, 1876, 1875, 1880,
+     1872, 1879, 1877,   69,   69,   69,   69,   69,   69,   69,
+
+     1882,   69, 1878, 1883, 1884,   69,   69,   69, 2164,   69,
+     1888, 1892,   69,   69,   69,   69, 1886, 1887,   69, 1881,
+       69, 1896, 1885, 1891, 1889,   69, 1894, 1890,   69, 1897,
+       69, 1898, 1893, 1895,   69, 1901,   69,   69,   69, 1900,
+       69, 1899, 1906,   69,   69,   69, 1903, 1907, 1909,   69,
+       69,   69,   69, 1913,   69, 1910,   69,   69, 1904,   69,
+     1905, 1911, 1902, 1908,   69, 1915,   69, 2164, 1914, 1912,
+     1917,   69, 1916, 1921,   69, 1918,   69,   69,   69, 1919,
+     1920,   69,   69,   69, 1924,   69, 1922, 1925,   69, 1926,
+     1923,   69, 1927,   69, 1929,   69, 1928, 1930, 1931,   69,
+
+       69, 1933,   69, 1936, 1932,   69, 1939, 1935,   69,   69,
+     1937, 1938,   69, 1940,   69, 1942,   69, 1944,   69, 1934,
+       69,   69,   69, 1947,   69,   69,   69,   69,   69,   69,
+     1949,   69, 1941,   69,   69,   69, 1950, 1946, 1948, 1945,
+     1954, 1943, 1953,   69, 1951, 1956,   69,   69, 1952, 1958,
+       69,   69, 1957, 1959,   69, 1960,   69, 1955,   69, 1961,
+     1963,   69,   69, 1962,   69, 1967,   69, 1964,   69, 1970,
+       69, 1971,   69,   69, 1965,   69,   69, 1975,   69,   69,
+     1968, 1966, 1976,   69, 1977,   69,   69, 1973, 1980,   69,
+     1969,   69, 1972,   69,   69, 1986, 1974, 1978, 1981,   69,
+
+       69,   69,   69, 1982,   69,   69, 1979, 1983, 2037, 1984,
+     1985, 1989,   69, 1990,   69, 1992,   69,   69,   69, 1987,
+     1988,   69, 1993,   69, 1991, 2164, 1995, 1996,   69, 1997,
+       69,   69, 1994, 1998,   69,   69, 1999, 2000,   69,   69,
+     2002, 2003,   69,   69,   69, 2001, 2007,   69,   69, 2004,
+       69, 2010,   69, 2006,   69, 2008, 2009,   69,   69, 2011,
+       69,   69,   69, 2005,   69, 2014,   69,   69, 2016,   69,
+       69,   69, 2017, 2015,   69, 2024,   69, 2012, 2013, 2026,
+       69, 2027,   69, 2164,   69, 2019, 2018, 2020, 2028,   69,
+     2023, 2021, 2022, 2029,   69,   69, 2025, 2030, 2031, 2032,
+
+       69, 2033,   69,   69, 2036,   69,   69, 2034,   69,   69,
+       69, 2040, 2041,   69, 2042,   69,   69, 2035, 2039, 2045,
+       69, 2044,   69, 2043, 2038,   69,   69,   69,   69,   69,
+       69, 2049, 2064, 2050, 2052,   69, 2053,   69, 2054,   69,
+     2047, 2055,   69, 2056,   69,   69,   69, 2046, 2048, 2051,
+     2058,   69,   69, 2060, 2057,   69, 2062,   69, 2059,   69,
+     2065,   69,   69,   69,   69,   69,   69, 2067,   69,   69,
+     2061, 2071,   69, 2072,   69, 2066,   69, 2063,   69,   69,
+     2070,   69, 2068, 2069,   69,   69,   69,   69, 2074, 2076,
+       69,   69, 2073,   69, 2077, 2084,   69, 2164, 2078, 2075,
+
+     2085, 2080, 2079, 2086,   69, 2082,   69, 2083,   69, 2087,
+       69, 2081, 2088,   69,   69, 2089, 2093,   69, 2091, 2090,
+       69, 2092,   69, 2095,   69,   69,   69, 2099, 2100,   69,
+       69, 2094,   69,   69,   69, 2096,   69,   69,   69,   69,
+       69, 2105, 2102, 2097, 2101, 2098,   69,   69, 2164,   69,
+     2104, 2103, 2107, 2108, 2110,   69,   69, 2106, 2113,   69,
+     2111,   69, 2114,   69,   69, 2109, 2112,   69, 2115, 2116,
+     2119,   69, 2117, 2120,   69, 2118,   69,   69, 2121,   69,
+     2124,   69,   69,   69,   69,   69,   69,   69, 2127,   69,
+       69, 2131, 2132,   69,   69, 2126, 2122, 2164, 2123, 2136,
+
+     2125,   69, 2130, 2128, 2129,   69, 2134,   69, 2135,   69,
+     2139,   69, 2133,   69,   69,   69, 2137,   69,   69,   69,
+     2138, 2140, 2141, 2143, 2145,   69,   69,   69,   69, 2149,
+     2146,   69, 2142,   69,   69, 2152, 2144, 2153,   69,   69,
+       69, 2155,   69, 2156,   69, 2147, 2148, 2154,   69,   69,
+     2150,   69, 2151,   69, 2158, 2157, 2159, 2164, 2160, 2162,
+       69, 2163,   69, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2161,   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,
+     2164,   72,   72,   72,   72,  131,  131, 2164, 2164, 2164,
+      131,  131,  133,  133, 2164, 2164,  133, 2164,  133,  135,
+     2164, 2164, 2164, 2164, 2164,  135,  138,  138, 2164, 2164,
+     2164,  138,  138,  140, 2164, 2164, 2164, 2164, 2164,  140,
+      142,  142, 2164,  142,  142,  142,  142,   73,   73, 2164,
+       73,   73,   73,   73,   13, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+
+     2164, 2164, 2164, 2164, 2164
     } ;
 
-static yyconst flex_int16_t yy_chk[4269] =
+static yyconst flex_int16_t yy_chk[4306] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1637,7 +1631,7 @@ static yyconst flex_int16_t yy_chk[4269] =
        10,   10,   15,   24,    9,   21,   15,   24,   21,   21,
        10,   11,   11,   11,   11,   11,   11,   19,   33,   19,
 
-       19, 2155,   19,   11,   25,   25,   21,   24,   19,   19,
+       19, 2170,   19,   11,   25,   25,   21,   24,   19,   19,
        77,   28,   11,   12,   12,   12,   12,   12,   12,   25,
        22,   22,   26,   26,   23,   12,   28,   30,   22,   23,
        77,   26,   22,   23,   12,   22,   23,   27,   23,   23,
@@ -1948,153 +1942,158 @@ static yyconst flex_int16_t yy_chk[4269] =
      1417, 1421, 1421, 1422, 1423, 1423, 1411, 1412, 1420, 1413,
      1418, 1425, 1422, 1426, 1427, 1425, 1419, 1424, 1426, 1428,
      1429, 1430, 1433, 1433, 1428, 1428, 1435, 1427, 1429, 1434,
-     1436, 1436, 1437, 1437, 1438, 1435, 1439, 1440, 1442, 1442,
-     1441, 1430, 1443, 1440, 1434, 1441, 1438, 1443, 1445, 1446,
-     1448, 1449, 1445, 1450, 1439, 1451, 1449, 1452, 1454, 1453,
-     1455, 1455, 1452, 1456, 1457, 1459, 1458, 1456, 1460, 1446,
-     1451, 1458, 1463, 1462, 1454, 1448, 1450, 1453, 1464, 1457,
-     1465, 1467, 1466, 1468, 1474, 1470, 1511, 1460, 1471, 1471,
-     1511, 1459, 1462, 1467, 1472, 1463, 1473, 1472, 1474, 1465,
-
-     1470, 1475, 1464, 1466, 1468, 1476, 1476, 1477, 1477, 1473,
-     1478, 1478, 1479, 1480, 1475, 1481, 1481, 1483, 1483, 1482,
-     1484, 1484, 1485, 1485, 1486, 1491, 1480, 1479, 1482, 1487,
-     1487, 1482, 1488, 1489, 1489, 1490, 1490, 1492, 1496, 1491,
-     1494, 1495, 1495, 1486, 1498, 1494, 1497, 1497, 1499, 1500,
-     1488, 1503, 1500, 1504, 1499, 1508, 1492, 1496, 1501, 1501,
-     1502, 1502, 1498, 1505, 1506, 1506, 1509, 1513, 1504, 1510,
-     1503, 1512, 1512, 1515, 1501, 1508, 1514, 1514, 1516, 1517,
-     1518, 1518, 1505, 1519, 1510, 1516, 1513, 1522, 1520, 1509,
-     1520, 1523, 1519, 1515, 1524, 1525, 1523, 1526, 1527, 1522,
-
-     1529, 1528, 1530, 1527, 1531, 1517, 1528, 1532, 1525, 1536,
-     1533, 1530, 1542, 1531, 1538, 1529, 1533, 1547, 1526, 1524,
-     1534, 1532, 1540, 1538, 1534, 1539, 1539, 1544, 1540, 1536,
-     1541, 1541, 1542, 1547, 1542, 1545, 1548, 1550, 1551, 1541,
-     1550, 1552, 1544, 1551, 1545, 1553, 1554, 1554, 1548, 1556,
-     1556, 1557, 1558, 1559, 1559, 1560, 1557, 1553, 1558, 1561,
-     1561, 1552, 1562, 1563, 1564, 1565, 1565, 1567, 1571, 1560,
-     1568, 1567, 1572, 1568, 1562, 1569, 1569, 1563, 1574, 1570,
-     1573, 1575, 1574, 1564, 1570, 1576, 1579, 1577, 1571, 1578,
-     1576, 1581, 1572, 1577, 1573, 1578, 1591, 1582, 1584, 1583,
-
-     1588, 1575, 1582, 1598, 1579, 1583, 1584, 1581, 1585, 1607,
-     1585, 1589, 1589, 1590, 1588, 1607, 1590, 1592, 1592, 1596,
-     1596, 1598, 1591, 1601, 1602, 1603, 1603, 1609, 1601, 1602,
-     1605, 1605, 1608, 1608, 1610, 1611, 1613, 1614, 1615, 1615,
-     1611, 1617, 1618, 1609, 1619, 1620, 1622, 1622, 1618, 1614,
-     1617, 1624, 1624, 1625, 1625, 1613, 1610, 1627, 1626, 1627,
-     1620, 1628, 1619, 1626, 1629, 1630, 1631, 1631, 1632, 1632,
-     1630, 1633, 1633, 1634, 1635, 1628, 1636, 1636, 1629, 1637,
-     1641, 1638, 1639, 1640, 1644, 1634, 1642, 1642, 1640, 1643,
-     1646, 1637, 1635, 1638, 1639, 1645, 1647, 1648, 1643, 1650,
-
-     1641, 1649, 1649, 1646, 1651, 1652, 1653, 1654, 1650, 1653,
-     1644, 1648, 1654, 1655, 1661, 1645, 1656, 1656, 1655, 1662,
-     1647, 1664, 1651, 1657, 1657, 1658, 1658, 1652, 1665, 1666,
-     1662, 1668, 1661, 1667, 1669, 1671, 1671, 1670, 1673, 1673,
-     1668, 1664, 1675, 1674, 1677, 1678, 1665, 1679, 1680, 1676,
-     1681, 1666, 1674, 1667, 1669, 1670, 1676, 1682, 1682, 1677,
-     1675, 1683, 1683, 1678, 1680, 1679, 1684, 1685, 1686, 1681,
-     1687, 1688, 1684, 1689, 1690, 1691, 1688, 1692, 1694, 1692,
-     1691, 1695, 1699, 1686, 1696, 1685, 1703, 1694, 1700, 1687,
-     1702, 1700, 1707, 1689, 1690, 1701, 1701, 1704, 1704, 1709,
-
-     1709, 1695, 1699, 1696, 1703, 1702, 1705, 1707, 1708, 1710,
-     1705, 1715, 1708, 1712, 1712, 1714, 1714, 1716, 1716, 1717,
-     1718, 1718, 1710, 1723, 1717, 1722, 1722, 1724, 1725, 1726,
-     1715, 1727, 1728, 1729, 1726, 1731, 1727, 1725, 1732, 1733,
-     1724, 1729, 1734, 1732, 1733, 1723, 1735, 1735, 1736, 1736,
-     1731, 1728, 1737, 1738, 1739, 1741, 1740, 1734, 1738, 1737,
-     1739, 1740, 1742, 1742, 1743, 1743, 1746, 1747,    0, 1748,
-     1741, 1749, 1747, 1747, 1748, 1752, 1750, 1749, 1751, 1746,
-     1750, 1753, 1754, 1751, 1752, 1756, 1755, 1760, 1759, 1758,
-     1754, 1755, 1758, 1759, 1761, 1762, 1753, 1756, 1768, 1763,
-
-     1764, 1764, 1765, 1769, 1762, 1760, 1770, 1761, 1763, 1771,
-     1771, 1765, 1772, 1773, 1774, 1775, 1775, 1768, 1776, 1783,
-     1777, 1778, 1773, 1769, 1777, 1770, 1780, 1778, 1783, 1774,
-     1781, 1772, 1779, 1779, 1780, 1781, 1784, 1776, 1786, 1787,
-     1788, 1795, 1786, 1790, 1790, 1793, 1793, 1797, 1806, 1784,
-     1798, 1798, 1804, 1787, 1806, 1788, 1799, 1799, 1805, 1800,
-     1812, 1795, 1800, 1801, 1801, 1802, 1802, 1797, 1803, 1803,
-     1804, 1808, 1805, 1807, 1807, 1808, 1811, 1819, 1813, 1814,
-     1819, 1811, 1811, 1812, 1813, 1814, 1815, 1818, 1821, 1822,
-     1815, 1823, 1818, 1824, 1825, 1826, 1823, 1827, 1827, 1828,
-
-     1829, 1830, 1831, 1831, 1832, 1832, 1822, 1822, 1829, 1826,
-     1834, 1824, 1835, 1821, 1825, 1833, 1833, 1835, 1828, 1836,
-     1830, 1837, 1838, 1839, 1840,    0, 1834, 1842, 1842, 1843,
-     1844, 1838, 1843, 1846, 1846, 1847, 1848, 1850, 1854, 1836,
-     1847, 1851, 1851, 1839, 1840, 1848, 1852, 1837, 1844, 1853,
-     1852, 1855, 1856, 1854, 1857, 1850, 1855, 1855, 1853, 1859,
-     1859, 1860, 1861, 1857, 1863, 1856, 1867, 1868, 1868, 1869,
-     1860, 1867, 1871, 1875, 1861, 1872, 1872, 1871, 1869, 1872,
-     1874, 1874, 1875, 1876, 1881, 1877, 1878, 1885, 1879, 1863,
-     1877, 1882, 1878, 1879, 1880, 1880, 1882, 1883, 1884, 1886,
-
-     1886, 1888, 1889, 1876, 1884, 1881, 1890, 1890, 1891, 1892,
-     1893, 1894, 1885, 1892, 1895, 1883, 1896, 1889, 1897, 1893,
-     1888, 1891, 1898, 1897, 1896, 1899, 1899, 1894, 1900, 1902,
-     1902, 1903, 1903, 1895, 1905, 1905, 1906, 1907, 1909, 1909,
-     1910, 1911, 1907, 1912, 1914, 1914, 1917, 1900, 1898, 1915,
-     1918, 1918, 1906, 1919, 1919, 1920, 1922, 1921, 1923, 1923,
-     1910, 1927, 1912, 1915, 1911, 1925, 1925, 1924, 1917, 1921,
-     1924, 1928, 1930, 1927, 1920, 1930, 1922, 1929, 1929, 1931,
-     1933, 1934, 1935,    0, 1936, 1933, 1937, 1937, 1935, 1939,
-     1939, 1928, 1940, 1942, 1942, 1944, 1955, 1931, 1943, 1945,
-
-     1934, 1936, 1936, 1943, 1945, 1946, 1946, 1947, 1947, 1944,
-     1949, 1940, 1948, 1948, 1959, 1949, 1951, 1951, 1955, 1956,
-     1956, 1958, 1958, 1960, 1961, 1962, 1962, 1963, 1959, 1966,
-     1967, 1967, 1963, 1961, 1968, 1970, 1971, 1966, 1973, 1968,
-     1972, 1975, 1976, 1960, 1978, 1972, 1977, 1980, 1979, 1975,
-     1973, 1984, 1981, 1986, 1986, 1970, 1971, 1981, 1987, 1987,
-     1978, 1998, 1976, 1988, 1977, 1979, 1979, 1988, 1980, 1992,
-     1992, 1984, 1994, 1994, 1995, 1994, 1997, 1997, 1995, 1998,
-     1999, 2001, 2001, 2002, 2004, 2011, 2005, 2006, 2006, 2007,
-     2007, 2008, 2008, 2012, 1999, 2005, 2009, 2013, 2002, 2010,
-
-     2010, 2009, 2004, 2016, 2014,    0, 2015,    0, 2012, 2014,
-     2011, 2015, 2017, 2017, 2020, 2020, 2022, 2022, 2013, 2023,
-     2023, 2026, 2016, 2024, 2024, 2027, 2027, 2029, 2030, 2030,
-     2026, 2031, 2032, 2032, 2035, 2037, 2038, 2035, 2039, 2029,
-     2040, 2037, 2041, 2039, 2048, 2042, 2031, 2048, 2050, 2051,
-     2038, 2052, 2050, 2054, 2055, 2056, 2058, 2057, 2059, 2040,
-     2041, 2042, 2060, 2066, 2054, 2052, 2061, 2055, 2066, 2051,
-     2062, 2062, 2058, 2063, 2056, 2057, 2068, 2060, 2064, 2064,
-     2065, 2065, 2063, 2059, 2067, 2069, 2061, 2070, 2071, 2067,
-     2072, 2072, 2074, 2070, 2077, 2080, 2082, 2078, 2079, 2081,
-
-     2069, 2068, 2071, 2078, 2079, 2084, 2085, 2074, 2086, 2080,
-     2087, 2088, 2081, 2077, 2091, 2082, 2096, 2089,    0, 2084,
-        0, 2086, 2089, 2087, 2090, 2085, 2092, 2092, 2100, 2090,
-     2088, 2093, 2094, 2091, 2095, 2096, 2093, 2094, 2097, 2095,
-     2098, 2098, 2099, 2101, 2097, 2102, 2103, 2100, 2104, 2099,
-     2106, 2102, 2107, 2108, 2109, 2106, 2110, 2110, 2111, 2112,
-     2117, 2104, 2101, 2111,    0, 2103, 2121, 2109, 2113, 2113,
-     2115, 2107, 2108, 2114, 2114, 2115, 2116, 2119, 2112, 2117,
-     2118, 2118, 2120, 2116, 2119, 2121, 2122, 2123, 2125, 2120,
-     2126, 2122, 2127, 2125, 2128, 2126, 2129, 2129, 2130, 2131,
-
-     2132, 2132, 2133, 2133, 2143, 2134, 2123, 2135, 2135, 2136,
-     2136, 2127, 2134, 2128, 2137, 2139, 2144, 2130, 2131, 2142,
-     2139, 2137,    0, 2143, 2142, 2145, 2145, 2146, 2146,    0,
-        0,    0,    0,    0,    0, 2144, 2150, 2150, 2150, 2150,
-     2150, 2150, 2150, 2151, 2151, 2151, 2151, 2151, 2151, 2151,
-     2152, 2152, 2152, 2152, 2152, 2152, 2152, 2153, 2153, 2153,
-     2153, 2153, 2153, 2153, 2154, 2154, 2154, 2154, 2154, 2154,
-     2154, 2156, 2156,    0, 2156, 2156, 2156, 2156, 2157, 2157,
-        0,    0,    0, 2157, 2157, 2158, 2158,    0,    0, 2158,
-        0, 2158, 2159,    0,    0,    0,    0,    0, 2159, 2160,
-
-     2160,    0,    0,    0, 2160, 2160, 2161,    0,    0,    0,
-        0,    0, 2161, 2162, 2162,    0, 2162, 2162, 2162, 2162,
-     2163, 2163,    0, 2163, 2163, 2163, 2163, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
-     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149
+     1434, 1436, 1436, 1437, 1437, 1435, 1438, 1439, 1441, 1440,
+     1446, 1430, 1448, 1441, 1434, 1440, 1442, 1442, 1438, 1443,
+     1450, 1451, 1445, 1449, 1443, 1439, 1445, 1452, 1449, 1453,
+     1446, 1457, 1452, 1454, 1455, 1455, 1451, 1448, 1456, 1458,
+     1459, 1460, 1456, 1450, 1458, 1462, 1457, 1453, 1463, 1454,
+     1464, 1465, 1466, 1467, 1468, 1471, 1471, 1470, 1472,    0,
+     1460, 1472, 1499, 1473, 1462, 1467, 1459, 1474, 1499, 1475,
+
+     1465, 1463, 1470, 1466, 1464, 1468, 1473, 1476, 1476, 1477,
+     1477, 1474, 1475, 1478, 1478, 1479, 1480, 1481, 1481, 1482,
+     1483, 1483, 1484, 1484, 1485, 1485, 1486, 1491, 1482, 1480,
+     1479, 1482, 1487, 1487, 1488, 1489, 1489, 1490, 1490, 1492,
+     1496, 1491, 1494, 1495, 1495, 1486, 1498, 1494, 1497, 1497,
+     1500, 1504, 1488, 1500, 1501, 1501, 1502, 1502, 1492, 1496,
+     1503, 1505, 1506, 1506, 1498, 1508, 1504, 1509, 1510, 1511,
+     1501, 1512, 1512, 1511, 1513, 1514, 1514, 1515, 1517, 1503,
+     1505, 1516, 1519, 1510, 1522, 1508, 1518, 1518, 1516, 1524,
+     1509, 1519, 1520, 1513, 1520, 1523, 1522, 1515, 1525, 1526,
+
+     1523, 1527, 1528, 1529, 1517, 1536, 1527, 1528, 1530, 1532,
+     1531, 1525, 1534, 1538, 1524, 1533, 1534, 1530, 1529, 1531,
+     1526, 1533, 1538, 1532, 1540, 1536, 1539, 1539, 1541, 1541,
+     1540, 1542, 1544, 1545, 1547, 1553, 1548, 1541, 1549, 1552,
+     1551,    0, 1545, 1551, 1552, 1554, 1547, 1544, 1555, 1555,
+     1549, 1542, 1548, 1542, 1559, 1553, 1558, 1554, 1557, 1557,
+     1559, 1558, 1560, 1560, 1561, 1562, 1562, 1563, 1564, 1565,
+     1566, 1566, 1568, 1572, 1569, 1573, 1568, 1569, 1561, 1563,
+     1570, 1570, 1564, 1574, 1571, 1576, 1575, 1577, 1565, 1571,
+     1575, 1580, 1577, 1572, 1578, 1573, 1579, 1574, 1582, 1583,
+
+     1578, 1584, 1579, 1585, 1583, 1576, 1586, 1584, 1586, 1580,
+     1589, 1585, 1590, 1590, 1582, 1591, 1592, 1599, 1591, 1593,
+     1593, 1597, 1597, 1602, 1589, 1603, 1604, 1604, 1602, 1610,
+     1603, 1606, 1606, 1608, 1611, 1599, 1609, 1609, 1612, 1608,
+     1614, 1615, 1592, 1612, 1619, 1610, 1616, 1616, 1618, 1620,
+     1619, 1621,    0, 1615, 1623, 1623, 1611, 1618, 1629, 1614,
+     1625, 1625, 1626, 1626, 1627, 1630, 1621, 1620, 1628, 1627,
+     1628, 1631, 1629, 1632, 1632, 1635, 1631, 1633, 1633, 1630,
+     1634, 1634, 1636, 1637, 1637, 1638, 1639, 1635, 1641, 1640,
+     1642, 1643, 1643, 1641, 1644, 1645, 1646, 1638, 1639, 1647,
+
+     1636, 1640, 1648, 1644, 1649, 1650, 1650, 1652, 1651, 1653,
+     1642, 1654, 1647, 1658, 1658, 1656, 1646, 1651, 1649, 1655,
+     1656, 1645, 1655, 1657, 1663, 1652, 1648, 1664, 1657, 1659,
+     1659, 1653, 1660, 1660, 1654, 1666, 1667, 1668, 1664, 1670,
+     1669, 1671, 1663, 1676, 1672, 1673, 1673, 1677, 1670, 1675,
+     1675, 1678, 1676, 1679, 1667, 1666, 1680, 1681, 1678, 1668,
+     1669, 1671, 1672, 1682, 1683, 1677, 1684, 1684, 1679, 1685,
+     1685, 1686, 1687, 1688, 1680, 1681, 1689, 1686, 1691, 1682,
+     1690, 1692, 1693, 1683, 1694, 1690, 1694, 1693, 1688, 1697,
+     1687, 1696, 1698, 1701, 1702, 1689,    0, 1702, 1691, 1704,
+
+     1696, 1692, 1703, 1703, 1705, 1706, 1706, 1712, 1707, 1697,
+     1709, 1698, 1707, 1701, 1704, 1710, 1711, 1711, 1717, 1710,
+     1712, 1725, 1705, 1714, 1714, 1709, 1716, 1716, 1718, 1718,
+     1719, 1720, 1720, 1724, 1724, 1719, 1726, 1717, 1727, 1728,
+     1729, 1730, 1731, 1725, 1728, 1729, 1733, 1727, 1734, 1726,
+     1731, 1735, 1736, 1734, 1737, 1737, 1735, 1738, 1738, 1739,
+     1730, 1733, 1744, 1740, 1741,    0, 1739, 1736, 1740, 1742,
+     1741, 1743, 1743, 1749, 1742, 1745, 1745, 1744, 1746, 1746,
+     1751, 1763, 1750, 1752, 1755, 1751, 1749, 1750, 1750, 1752,
+     1753, 1754, 1756, 1755, 1753, 1757, 1754, 1758, 1759, 1763,
+
+     1762, 1761, 1758, 1757, 1761, 1762, 1764, 1756, 1765, 1766,
+     1759, 1767, 1767, 1768, 1771, 1772, 1776, 1765, 1766, 1764,
+     1773, 1775, 1768, 1774, 1774, 1776, 1777, 1778, 1778, 1779,
+     1780, 1781,    0, 1771, 1780, 1772, 1783, 1781, 1786, 1773,
+     1775, 1777, 1782, 1782, 1783, 1784, 1787, 1786, 1779, 1789,
+     1784, 1790, 1791, 1789, 1793, 1793, 1796, 1796, 1798, 1787,
+     1800, 1801, 1801, 1802, 1802, 1790, 1803, 1791, 1807, 1803,
+     1804, 1804, 1805, 1805, 1806, 1806, 1808, 1809, 1798, 1815,
+     1800, 1810, 1810, 1809, 1811, 1816, 1807, 1814, 1811, 1817,
+     1808, 1816, 1814, 1814, 1818, 1817, 1819, 1825, 1822, 1826,
+
+     1819, 1823, 1815, 1822, 1823, 1827, 1828, 1829,    0, 1830,
+     1827, 1831, 1831, 1832, 1834, 1840, 1826, 1826, 1833, 1818,
+     1835, 1835, 1825, 1830, 1828, 1838, 1833, 1829, 1836, 1836,
+     1837, 1837, 1832, 1834, 1839, 1840, 1841, 1842, 1843, 1839,
+     1844, 1838, 1846, 1846, 1847, 1848, 1842, 1847, 1850, 1850,
+     1851, 1854, 1852, 1855, 1855, 1851, 1857, 1858, 1843, 1867,
+     1844, 1852, 1841, 1848, 1856, 1857, 1860,    0, 1856, 1854,
+     1859, 1861, 1858, 1863, 1863, 1859, 1859, 1864, 1865, 1860,
+     1861, 1880, 1871, 1873, 1867, 1886, 1864, 1871, 1872, 1872,
+     1865, 1875, 1873, 1876, 1876, 1879, 1875, 1876, 1878, 1878,
+
+     1881, 1880, 1882, 1883, 1879, 1884, 1886, 1882, 1887, 1883,
+     1884, 1885, 1885, 1887, 1888, 1889, 1890, 1891, 1891, 1881,
+     1893, 1889, 1894, 1895, 1895, 1896, 1897, 1898, 1899, 1900,
+     1897, 1903, 1888, 1905, 1901, 1902, 1898, 1894, 1896, 1893,
+     1902, 1890, 1901, 1911, 1899, 1904, 1904, 1915, 1900, 1907,
+     1907, 1916, 1905, 1908, 1908, 1910, 1910, 1903, 1912, 1911,
+     1914, 1914, 1917, 1912, 1919, 1919, 1920, 1915, 1922, 1923,
+     1923, 1924, 1924, 1925, 1916, 1926, 1927, 1928, 1928, 1929,
+     1920, 1917, 1929, 1930, 1930, 1932, 1933, 1926, 1934, 1937,
+     1922, 1940, 1925, 2009, 1934, 1941, 1927, 1932, 1935, 1935,
+
+     1936, 1941, 1942, 1936, 1939, 1946, 1933, 1937, 2009, 1939,
+     1940, 1943, 1943, 1945, 1945, 1948, 1948, 1949, 1950, 1942,
+     1942, 1951, 1949, 1961, 1946,    0, 1951, 1952, 1952, 1953,
+     1953, 1955, 1950, 1954, 1954, 1965, 1955, 1957, 1957, 1962,
+     1962, 1964, 1964, 1966, 1967, 1961, 1968, 1968, 1972, 1965,
+     1969, 1973, 1973, 1967, 1974, 1969, 1972, 1976, 1977, 1974,
+     1978, 1979, 1980, 1966, 1982, 1978, 1983, 1984, 1980, 1987,
+     1988, 1985, 1982, 1979, 1986, 1988, 1991, 1976, 1977, 1993,
+     1993, 1994, 1994,    0, 1995, 1984, 1983, 1985, 1995, 2005,
+     1987, 1986, 1986, 1999, 1999, 2002, 1991, 2001, 2001, 2002,
+
+     2001, 2004, 2004, 2006, 2008, 2008, 2011, 2005, 2016, 2012,
+     2013, 2013, 2014, 2014, 2015, 2015, 2017, 2006, 2012, 2018,
+     2018, 2017, 2019, 2016, 2011, 2020, 2022, 2021, 2023, 2044,
+     2024, 2022, 2044, 2023, 2025, 2025, 2028, 2028, 2030, 2030,
+     2020, 2031, 2031, 2032, 2032, 2034, 2037, 2019, 2021, 2024,
+     2035, 2035, 2038, 2038, 2034, 2039, 2040, 2040, 2037, 2043,
+     2046, 2047, 2048, 2049, 2051, 2050, 2046, 2048, 2057, 2059,
+     2039, 2057, 2060, 2059, 2061, 2047, 2063, 2043, 2064, 2066,
+     2051, 2065, 2049, 2050, 2067, 2068, 2069, 2071, 2061, 2064,
+     2070, 2073, 2060, 2079, 2065, 2072, 2072,    0, 2066, 2063,
+
+     2073, 2068, 2067, 2074, 2074, 2070, 2080, 2071, 2075, 2075,
+     2077, 2069, 2076, 2076, 2078, 2077, 2081, 2082, 2079, 2078,
+     2085, 2080, 2081, 2083, 2083, 2087, 2089, 2090, 2091, 2093,
+     2092, 2082, 2094, 2090, 2091, 2085, 2096, 2097, 2098, 2099,
+     2100, 2097, 2093, 2087, 2092, 2089, 2101, 2104,    0, 2102,
+     2096, 2094, 2099, 2100, 2102, 2103, 2110, 2098, 2105, 2105,
+     2103, 2106, 2106, 2107, 2108, 2101, 2104, 2109, 2107, 2108,
+     2111, 2114, 2109, 2112, 2112, 2110, 2111, 2115, 2114, 2116,
+     2117, 2118, 2119, 2121, 2122, 2123, 2117, 2126, 2121, 2124,
+     2125, 2125, 2126, 2127, 2130, 2119, 2115,    0, 2116, 2130,
+
+     2118, 2132, 2124, 2122, 2123, 2128, 2128, 2129, 2129, 2131,
+     2133, 2133, 2127, 2136, 2134, 2135, 2131, 2138, 2137, 2140,
+     2132, 2134, 2135, 2137, 2140, 2141, 2142, 2143, 2144, 2144,
+     2141, 2145, 2136, 2146, 2147, 2147, 2138, 2148, 2148, 2158,
+     2149, 2150, 2150, 2151, 2151, 2142, 2143, 2149, 2152, 2154,
+     2145, 2157, 2146, 2159, 2154, 2152, 2157,    0, 2158, 2160,
+     2160, 2161, 2161,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 2159, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+     2166, 2166, 2166, 2166, 2166, 2166, 2166, 2167, 2167, 2167,
+     2167, 2167, 2167, 2167, 2168, 2168, 2168, 2168, 2168, 2168,
+
+     2168, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2171, 2171,
+        0, 2171, 2171, 2171, 2171, 2172, 2172,    0,    0,    0,
+     2172, 2172, 2173, 2173,    0,    0, 2173,    0, 2173, 2174,
+        0,    0,    0,    0,    0, 2174, 2175, 2175,    0,    0,
+        0, 2175, 2175, 2176,    0,    0,    0,    0,    0, 2176,
+     2177, 2177,    0, 2177, 2177, 2177, 2177, 2178, 2178,    0,
+     2178, 2178, 2178, 2178, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+     2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+
+     2164, 2164, 2164, 2164, 2164
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2305,7 +2304,7 @@ static void config_end_include(void)
 #define YY_NO_INPUT 1
 #endif
 
-#line 2307 "<stdout>"
+#line 2306 "<stdout>"
 
 #define INITIAL 0
 #define quotedstring 1
@@ -2349,7 +2348,7 @@ FILE *yyget_out (void );
 
 void yyset_out  (FILE * _out_str  );
 
-yy_size_t yyget_leng (void );
+                       int yyget_leng (void );
 
 char *yyget_text (void );
 
@@ -2406,7 +2405,7 @@ static int input (void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2430,7 +2429,7 @@ static int input (void );
        else \
                { \
                errno=0; \
-               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+               while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -2528,7 +2527,7 @@ YY_DECL
        {
 #line 207 "./util/configlexer.lex"
 
-#line 2530 "<stdout>"
+#line 2529 "<stdout>"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2561,13 +2560,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 2150 )
+                               if ( yy_current_state >= 2165 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 4228 );
+               while ( yy_base[yy_current_state] != 4265 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -3062,575 +3061,580 @@ YY_RULE_SETUP
 case 94:
 YY_RULE_SETUP
 #line 304 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
 #line 305 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
+{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
 #line 306 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
 #line 307 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_IDENTITY) }
+{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
 #line 308 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_VERSION) }
+{ YDVAR(1, VAR_HIDE_IDENTITY) }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
 #line 309 "./util/configlexer.lex"
-{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
+{ YDVAR(1, VAR_HIDE_VERSION) }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
 #line 310 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IDENTITY) }
+{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
 #line 311 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VERSION) }
+{ YDVAR(1, VAR_IDENTITY) }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
 #line 312 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MODULE_CONF) }
+{ YDVAR(1, VAR_VERSION) }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
 #line 313 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR) }
+{ YDVAR(1, VAR_MODULE_CONF) }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
 #line 314 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR) }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
 #line 315 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_DLV_ANCHOR_FILE) }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
 #line 316 "./util/configlexer.lex"
-{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
 #line 317 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
+{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
        YY_BREAK
 case 108:
 YY_RULE_SETUP
 #line 318 "./util/configlexer.lex"
-{ YDVAR(1, VAR_TRUST_ANCHOR) }
+{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
        YY_BREAK
 case 109:
 YY_RULE_SETUP
 #line 319 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
+{ YDVAR(1, VAR_TRUST_ANCHOR) }
        YY_BREAK
 case 110:
 YY_RULE_SETUP
 #line 320 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
+{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
        YY_BREAK
 case 111:
 YY_RULE_SETUP
 #line 321 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
        YY_BREAK
 case 112:
 YY_RULE_SETUP
 #line 322 "./util/configlexer.lex"
-{ YDVAR(1, VAR_BOGUS_TTL) }
+{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
        YY_BREAK
 case 113:
 YY_RULE_SETUP
 #line 323 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
+{ YDVAR(1, VAR_BOGUS_TTL) }
        YY_BREAK
 case 114:
 YY_RULE_SETUP
 #line 324 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
+{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
        YY_BREAK
 case 115:
 YY_RULE_SETUP
 #line 325 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
+{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
        YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 326 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVE_EXPIRED) }
+{ YDVAR(1, VAR_IGNORE_CD_FLAG) }
        YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 327 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_DSA) }
+{ YDVAR(1, VAR_SERVE_EXPIRED) }
        YY_BREAK
 case 118:
 YY_RULE_SETUP
 #line 328 "./util/configlexer.lex"
-{ YDVAR(1, VAR_FAKE_SHA1) }
+{ YDVAR(1, VAR_FAKE_DSA) }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 329 "./util/configlexer.lex"
-{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
+{ YDVAR(1, VAR_FAKE_SHA1) }
        YY_BREAK
 case 120:
 YY_RULE_SETUP
 #line 330 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
+{ YDVAR(1, VAR_VAL_LOG_LEVEL) }
        YY_BREAK
 case 121:
 YY_RULE_SETUP
 #line 331 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
+{ YDVAR(1, VAR_KEY_CACHE_SIZE) }
        YY_BREAK
 case 122:
 YY_RULE_SETUP
 #line 332 "./util/configlexer.lex"
-{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
+{ YDVAR(1, VAR_KEY_CACHE_SLABS) }
        YY_BREAK
 case 123:
 YY_RULE_SETUP
 #line 333 "./util/configlexer.lex"
-{ 
-                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
+{ YDVAR(1, VAR_NEG_CACHE_SIZE) }
        YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 335 "./util/configlexer.lex"
-{ YDVAR(1, VAR_ADD_HOLDDOWN) }
+#line 334 "./util/configlexer.lex"
+{ 
+                                 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
        YY_BREAK
 case 125:
 YY_RULE_SETUP
 #line 336 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEL_HOLDDOWN) }
+{ YDVAR(1, VAR_ADD_HOLDDOWN) }
        YY_BREAK
 case 126:
 YY_RULE_SETUP
 #line 337 "./util/configlexer.lex"
-{ YDVAR(1, VAR_KEEP_MISSING) }
+{ YDVAR(1, VAR_DEL_HOLDDOWN) }
        YY_BREAK
 case 127:
 YY_RULE_SETUP
 #line 338 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
+{ YDVAR(1, VAR_KEEP_MISSING) }
        YY_BREAK
 case 128:
 YY_RULE_SETUP
 #line 339 "./util/configlexer.lex"
-{ YDVAR(1, VAR_USE_SYSLOG) }
+{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
        YY_BREAK
 case 129:
 YY_RULE_SETUP
 #line 340 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_IDENTITY) }
+{ YDVAR(1, VAR_USE_SYSLOG) }
        YY_BREAK
 case 130:
 YY_RULE_SETUP
 #line 341 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_TIME_ASCII) }
+{ YDVAR(1, VAR_LOG_IDENTITY) }
        YY_BREAK
 case 131:
 YY_RULE_SETUP
 #line 342 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_QUERIES) }
+{ YDVAR(1, VAR_LOG_TIME_ASCII) }
        YY_BREAK
 case 132:
 YY_RULE_SETUP
 #line 343 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOG_REPLIES) }
+{ YDVAR(1, VAR_LOG_QUERIES) }
        YY_BREAK
 case 133:
 YY_RULE_SETUP
 #line 344 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE) }
+{ YDVAR(1, VAR_LOG_REPLIES) }
        YY_BREAK
 case 134:
 YY_RULE_SETUP
 #line 345 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA) }
+{ YDVAR(2, VAR_LOCAL_ZONE) }
        YY_BREAK
 case 135:
 YY_RULE_SETUP
 #line 346 "./util/configlexer.lex"
-{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
+{ YDVAR(1, VAR_LOCAL_DATA) }
        YY_BREAK
 case 136:
 YY_RULE_SETUP
 #line 347 "./util/configlexer.lex"
-{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
+{ YDVAR(1, VAR_LOCAL_DATA_PTR) }
        YY_BREAK
 case 137:
 YY_RULE_SETUP
 #line 348 "./util/configlexer.lex"
-{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
+{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
        YY_BREAK
 case 138:
 YY_RULE_SETUP
 #line 349 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
+{ YDVAR(1, VAR_INSECURE_LAN_ZONES) }
        YY_BREAK
 case 139:
 YY_RULE_SETUP
 #line 350 "./util/configlexer.lex"
-{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
+{ YDVAR(1, VAR_STATISTICS_INTERVAL) }
        YY_BREAK
 case 140:
 YY_RULE_SETUP
 #line 351 "./util/configlexer.lex"
-{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
+{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
        YY_BREAK
 case 141:
 YY_RULE_SETUP
 #line 352 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_ENABLE) }
+{ YDVAR(1, VAR_EXTENDED_STATISTICS) }
        YY_BREAK
 case 142:
 YY_RULE_SETUP
 #line 353 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SHM_KEY) }
+{ YDVAR(1, VAR_SHM_ENABLE) }
        YY_BREAK
 case 143:
 YY_RULE_SETUP
 #line 354 "./util/configlexer.lex"
-{ YDVAR(0, VAR_REMOTE_CONTROL) }
+{ YDVAR(1, VAR_SHM_KEY) }
        YY_BREAK
 case 144:
 YY_RULE_SETUP
 #line 355 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_ENABLE) }
+{ YDVAR(0, VAR_REMOTE_CONTROL) }
        YY_BREAK
 case 145:
 YY_RULE_SETUP
 #line 356 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_INTERFACE) }
+{ YDVAR(1, VAR_CONTROL_ENABLE) }
        YY_BREAK
 case 146:
 YY_RULE_SETUP
 #line 357 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_PORT) }
+{ YDVAR(1, VAR_CONTROL_INTERFACE) }
        YY_BREAK
 case 147:
 YY_RULE_SETUP
 #line 358 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_USE_CERT) }
+{ YDVAR(1, VAR_CONTROL_PORT) }
        YY_BREAK
 case 148:
 YY_RULE_SETUP
 #line 359 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_KEY_FILE) }
+{ YDVAR(1, VAR_CONTROL_USE_CERT) }
        YY_BREAK
 case 149:
 YY_RULE_SETUP
 #line 360 "./util/configlexer.lex"
-{ YDVAR(1, VAR_SERVER_CERT_FILE) }
+{ YDVAR(1, VAR_SERVER_KEY_FILE) }
        YY_BREAK
 case 150:
 YY_RULE_SETUP
 #line 361 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
+{ YDVAR(1, VAR_SERVER_CERT_FILE) }
        YY_BREAK
 case 151:
 YY_RULE_SETUP
 #line 362 "./util/configlexer.lex"
-{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
+{ YDVAR(1, VAR_CONTROL_KEY_FILE) }
        YY_BREAK
 case 152:
 YY_RULE_SETUP
 #line 363 "./util/configlexer.lex"
-{ YDVAR(1, VAR_PYTHON_SCRIPT) }
+{ YDVAR(1, VAR_CONTROL_CERT_FILE) }
        YY_BREAK
 case 153:
 YY_RULE_SETUP
 #line 364 "./util/configlexer.lex"
-{ YDVAR(0, VAR_PYTHON) }
+{ YDVAR(1, VAR_PYTHON_SCRIPT) }
        YY_BREAK
 case 154:
 YY_RULE_SETUP
 #line 365 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DOMAIN_INSECURE) }
+{ YDVAR(0, VAR_PYTHON) }
        YY_BREAK
 case 155:
 YY_RULE_SETUP
 #line 366 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
+{ YDVAR(1, VAR_DOMAIN_INSECURE) }
        YY_BREAK
 case 156:
 YY_RULE_SETUP
 #line 367 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
+{ YDVAR(1, VAR_MINIMAL_RESPONSES) }
        YY_BREAK
 case 157:
 YY_RULE_SETUP
 #line 368 "./util/configlexer.lex"
-{ YDVAR(1, VAR_MAX_UDP_SIZE) }
+{ YDVAR(1, VAR_RRSET_ROUNDROBIN) }
        YY_BREAK
 case 158:
 YY_RULE_SETUP
 #line 369 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_PREFIX) }
+{ YDVAR(1, VAR_MAX_UDP_SIZE) }
        YY_BREAK
 case 159:
 YY_RULE_SETUP
 #line 370 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNS64_SYNTHALL) }
+{ YDVAR(1, VAR_DNS64_PREFIX) }
        YY_BREAK
 case 160:
 YY_RULE_SETUP
 #line 371 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DEFINE_TAG) }
+{ YDVAR(1, VAR_DNS64_SYNTHALL) }
        YY_BREAK
 case 161:
 YY_RULE_SETUP
 #line 372 "./util/configlexer.lex"
-{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
+{ YDVAR(1, VAR_DEFINE_TAG) }
        YY_BREAK
 case 162:
 YY_RULE_SETUP
 #line 373 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
+{ YDVAR(2, VAR_LOCAL_ZONE_TAG) }
        YY_BREAK
 case 163:
 YY_RULE_SETUP
 #line 374 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
        YY_BREAK
 case 164:
 YY_RULE_SETUP
 #line 375 "./util/configlexer.lex"
-{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
        YY_BREAK
 case 165:
 YY_RULE_SETUP
 #line 376 "./util/configlexer.lex"
-{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
+{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
        YY_BREAK
 case 166:
 YY_RULE_SETUP
 #line 377 "./util/configlexer.lex"
-{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
+{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
        YY_BREAK
 case 167:
 YY_RULE_SETUP
 #line 378 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSTAP) }
+{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
        YY_BREAK
 case 168:
 YY_RULE_SETUP
 #line 379 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_ENABLE) }
+{ YDVAR(0, VAR_DNSTAP) }
        YY_BREAK
 case 169:
 YY_RULE_SETUP
 #line 380 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
+{ YDVAR(1, VAR_DNSTAP_ENABLE) }
        YY_BREAK
 case 170:
 YY_RULE_SETUP
 #line 381 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
        YY_BREAK
 case 171:
 YY_RULE_SETUP
 #line 382 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
        YY_BREAK
 case 172:
 YY_RULE_SETUP
 #line 383 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
+{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
        YY_BREAK
 case 173:
 YY_RULE_SETUP
 #line 384 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSTAP_VERSION) }
+{ YDVAR(1, VAR_DNSTAP_IDENTITY) }
        YY_BREAK
 case 174:
 YY_RULE_SETUP
 #line 385 "./util/configlexer.lex"
-{
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
+{ YDVAR(1, VAR_DNSTAP_VERSION) }
        YY_BREAK
 case 175:
 YY_RULE_SETUP
-#line 387 "./util/configlexer.lex"
+#line 386 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
        YY_BREAK
 case 176:
 YY_RULE_SETUP
-#line 389 "./util/configlexer.lex"
+#line 388 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 177:
 YY_RULE_SETUP
-#line 391 "./util/configlexer.lex"
+#line 390 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
        YY_BREAK
 case 178:
 YY_RULE_SETUP
-#line 393 "./util/configlexer.lex"
+#line 392 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
        YY_BREAK
 case 179:
 YY_RULE_SETUP
-#line 395 "./util/configlexer.lex"
+#line 394 "./util/configlexer.lex"
 {
-               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
        YY_BREAK
 case 180:
 YY_RULE_SETUP
-#line 397 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
+#line 396 "./util/configlexer.lex"
+{
+               YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
        YY_BREAK
 case 181:
 YY_RULE_SETUP
 #line 398 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT) }
+{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
        YY_BREAK
 case 182:
 YY_RULE_SETUP
 #line 399 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT) }
+{ YDVAR(1, VAR_IP_RATELIMIT) }
        YY_BREAK
 case 183:
 YY_RULE_SETUP
 #line 400 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_RATELIMIT) }
        YY_BREAK
 case 184:
 YY_RULE_SETUP
 #line 401 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SLABS) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
        YY_BREAK
 case 185:
 YY_RULE_SETUP
 #line 402 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_RATELIMIT_SLABS) }
        YY_BREAK
 case 186:
 YY_RULE_SETUP
 #line 403 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_SIZE) }
+{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
        YY_BREAK
 case 187:
 YY_RULE_SETUP
 #line 404 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
+{ YDVAR(1, VAR_RATELIMIT_SIZE) }
        YY_BREAK
 case 188:
 YY_RULE_SETUP
 #line 405 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
+{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
        YY_BREAK
 case 189:
 YY_RULE_SETUP
 #line 406 "./util/configlexer.lex"
-{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
+{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
        YY_BREAK
 case 190:
 YY_RULE_SETUP
 #line 407 "./util/configlexer.lex"
-{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
+{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
        YY_BREAK
 case 191:
 YY_RULE_SETUP
 #line 408 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
+{ YDVAR(1, VAR_RATELIMIT_FACTOR) }
        YY_BREAK
 case 192:
 YY_RULE_SETUP
 #line 409 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP) }
+{ YDVAR(2, VAR_RESPONSE_IP_TAG) }
        YY_BREAK
 case 193:
 YY_RULE_SETUP
 #line 410 "./util/configlexer.lex"
-{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
+{ YDVAR(2, VAR_RESPONSE_IP) }
        YY_BREAK
 case 194:
 YY_RULE_SETUP
 #line 411 "./util/configlexer.lex"
-{ YDVAR(0, VAR_DNSCRYPT) }
+{ YDVAR(2, VAR_RESPONSE_IP_DATA) }
        YY_BREAK
 case 195:
 YY_RULE_SETUP
 #line 412 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
+{ YDVAR(0, VAR_DNSCRYPT) }
        YY_BREAK
 case 196:
 YY_RULE_SETUP
 #line 413 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PORT) }
+{ YDVAR(1, VAR_DNSCRYPT_ENABLE) }
        YY_BREAK
 case 197:
 YY_RULE_SETUP
 #line 414 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
+{ YDVAR(1, VAR_DNSCRYPT_PORT) }
        YY_BREAK
 case 198:
 YY_RULE_SETUP
 #line 415 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
        YY_BREAK
 case 199:
 YY_RULE_SETUP
 #line 416 "./util/configlexer.lex"
-{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
        YY_BREAK
 case 200:
-/* rule 200 can match eol */
 YY_RULE_SETUP
 #line 417 "./util/configlexer.lex"
+{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
+       YY_BREAK
+case 201:
+/* rule 201 can match eol */
+YY_RULE_SETUP
+#line 418 "./util/configlexer.lex"
 { LEXOUT(("NL\n")); cfg_parser->line++; }
        YY_BREAK
 /* Quoted strings. Strip leading and ending quotes */
-case 201:
+case 202:
 YY_RULE_SETUP
-#line 420 "./util/configlexer.lex"
+#line 421 "./util/configlexer.lex"
 { BEGIN(quotedstring); LEXOUT(("QS ")); }
        YY_BREAK
 case YY_STATE_EOF(quotedstring):
-#line 421 "./util/configlexer.lex"
+#line 422 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 202:
+case 203:
 YY_RULE_SETUP
-#line 426 "./util/configlexer.lex"
+#line 427 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 203:
-/* rule 203 can match eol */
+case 204:
+/* rule 204 can match eol */
 YY_RULE_SETUP
-#line 427 "./util/configlexer.lex"
+#line 428 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end \""); 
                          cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 204:
+case 205:
 YY_RULE_SETUP
-#line 429 "./util/configlexer.lex"
+#line 430 "./util/configlexer.lex"
 {
         LEXOUT(("QE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3643,34 +3647,34 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* Single Quoted strings. Strip leading and ending quotes */
-case 205:
+case 206:
 YY_RULE_SETUP
-#line 441 "./util/configlexer.lex"
+#line 442 "./util/configlexer.lex"
 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
        YY_BREAK
 case YY_STATE_EOF(singlequotedstr):
-#line 442 "./util/configlexer.lex"
+#line 443 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
        if(--num_args == 0) { BEGIN(INITIAL); }
        else                { BEGIN(val); }
 }
        YY_BREAK
-case 206:
+case 207:
 YY_RULE_SETUP
-#line 447 "./util/configlexer.lex"
+#line 448 "./util/configlexer.lex"
 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 207:
-/* rule 207 can match eol */
+case 208:
+/* rule 208 can match eol */
 YY_RULE_SETUP
-#line 448 "./util/configlexer.lex"
+#line 449 "./util/configlexer.lex"
 { yyerror("newline inside quoted string, no end '"); 
                             cfg_parser->line++; BEGIN(INITIAL); }
        YY_BREAK
-case 208:
+case 209:
 YY_RULE_SETUP
-#line 450 "./util/configlexer.lex"
+#line 451 "./util/configlexer.lex"
 {
         LEXOUT(("SQE "));
        if(--num_args == 0) { BEGIN(INITIAL); }
@@ -3683,38 +3687,38 @@ YY_RULE_SETUP
 }
        YY_BREAK
 /* include: directive */
-case 209:
+case 210:
 YY_RULE_SETUP
-#line 462 "./util/configlexer.lex"
+#line 463 "./util/configlexer.lex"
 { 
        LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
        YY_BREAK
 case YY_STATE_EOF(include):
-#line 464 "./util/configlexer.lex"
+#line 465 "./util/configlexer.lex"
 {
         yyerror("EOF inside include directive");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 210:
-YY_RULE_SETUP
-#line 468 "./util/configlexer.lex"
-{ LEXOUT(("ISP ")); /* ignore */ }
-       YY_BREAK
 case 211:
-/* rule 211 can match eol */
 YY_RULE_SETUP
 #line 469 "./util/configlexer.lex"
-{ LEXOUT(("NL\n")); cfg_parser->line++;}
+{ LEXOUT(("ISP ")); /* ignore */ }
        YY_BREAK
 case 212:
+/* rule 212 can match eol */
 YY_RULE_SETUP
 #line 470 "./util/configlexer.lex"
-{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+{ LEXOUT(("NL\n")); cfg_parser->line++;}
        YY_BREAK
 case 213:
 YY_RULE_SETUP
 #line 471 "./util/configlexer.lex"
+{ LEXOUT(("IQS ")); BEGIN(include_quoted); }
+       YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 472 "./util/configlexer.lex"
 {
        LEXOUT(("Iunquotedstr(%s) ", yytext));
        config_start_include_glob(yytext);
@@ -3722,27 +3726,27 @@ YY_RULE_SETUP
 }
        YY_BREAK
 case YY_STATE_EOF(include_quoted):
-#line 476 "./util/configlexer.lex"
+#line 477 "./util/configlexer.lex"
 {
         yyerror("EOF inside quoted string");
         BEGIN(inc_prev);
 }
        YY_BREAK
-case 214:
+case 215:
 YY_RULE_SETUP
-#line 480 "./util/configlexer.lex"
+#line 481 "./util/configlexer.lex"
 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
        YY_BREAK
-case 215:
-/* rule 215 can match eol */
+case 216:
+/* rule 216 can match eol */
 YY_RULE_SETUP
-#line 481 "./util/configlexer.lex"
+#line 482 "./util/configlexer.lex"
 { yyerror("newline before \" in include name"); 
                                  cfg_parser->line++; BEGIN(inc_prev); }
        YY_BREAK
-case 216:
+case 217:
 YY_RULE_SETUP
-#line 483 "./util/configlexer.lex"
+#line 484 "./util/configlexer.lex"
 {
        LEXOUT(("IQE "));
        yytext[yyleng - 1] = '\0';
@@ -3752,7 +3756,7 @@ YY_RULE_SETUP
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(val):
-#line 489 "./util/configlexer.lex"
+#line 490 "./util/configlexer.lex"
 {
        LEXOUT(("LEXEOF "));
        yy_set_bol(1); /* Set beginning of line, so "^" rules match.  */
@@ -3764,33 +3768,33 @@ case YY_STATE_EOF(val):
        }
 }
        YY_BREAK
-case 217:
+case 218:
 YY_RULE_SETUP
-#line 500 "./util/configlexer.lex"
+#line 501 "./util/configlexer.lex"
 { LEXOUT(("unquotedstr(%s) ", yytext)); 
                        if(--num_args == 0) { BEGIN(INITIAL); }
                        yylval.str = strdup(yytext); return STRING_ARG; }
        YY_BREAK
-case 218:
+case 219:
 YY_RULE_SETUP
-#line 504 "./util/configlexer.lex"
+#line 505 "./util/configlexer.lex"
 {
        ub_c_error_msg("unknown keyword '%s'", yytext);
        }
        YY_BREAK
-case 219:
+case 220:
 YY_RULE_SETUP
-#line 508 "./util/configlexer.lex"
+#line 509 "./util/configlexer.lex"
 {
        ub_c_error_msg("stray '%s'", yytext);
        }
        YY_BREAK
-case 220:
+case 221:
 YY_RULE_SETUP
-#line 512 "./util/configlexer.lex"
+#line 513 "./util/configlexer.lex"
 ECHO;
        YY_BREAK
-#line 3792 "<stdout>"
+#line 3796 "<stdout>"
 
        case YY_END_OF_BUFFER:
                {
@@ -3989,7 +3993,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               yy_size_t new_size = b->yy_buf_size * 2;
+                               int new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -4002,7 +4006,7 @@ static int yy_get_next_buffer (void)
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = 0;
+                               b->yy_ch_buf = NULL;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -4044,9 +4048,9 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
-               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
                YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
@@ -4081,10 +4085,10 @@ 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 >= 2150 )
+                       if ( yy_current_state >= 2165 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                }
 
        return yy_current_state;
@@ -4109,11 +4113,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 >= 2150 )
+               if ( yy_current_state >= 2165 )
                        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 == 2149);
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+       yy_is_jam = (yy_current_state == 2164);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4146,7 +4150,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+                       int offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -4170,7 +4174,7 @@ static int yy_get_next_buffer (void)
                                case EOB_ACT_END_OF_FILE:
                                        {
                                        if ( yywrap( ) )
-                                               return EOF;
+                                               return 0;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -4418,7 +4422,7 @@ void yypop_buffer_state (void)
  */
 static void yyensure_buffer_stack (void)
 {
-       yy_size_t num_to_alloc;
+       int num_to_alloc;
     
        if (!(yy_buffer_stack)) {
 
@@ -4432,9 +4436,9 @@ static void yyensure_buffer_stack (void)
                                                                );
                if ( ! (yy_buffer_stack) )
                        YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-                                                                 
+
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-                               
+
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -4463,7 +4467,7 @@ static void yyensure_buffer_stack (void)
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object. 
+ * @return the newly allocated buffer state object.
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
@@ -4473,7 +4477,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return 0;
+               return NULL;
 
        b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
@@ -4482,7 +4486,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
        b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = 0;
+       b->yy_input_file = NULL;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
@@ -4505,7 +4509,7 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes(yystr,strlen(yystr) );
+       return yy_scan_bytes(yystr,(int) strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
@@ -4515,7 +4519,7 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
@@ -4523,7 +4527,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len
        yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = _yybytes_len + 2;
+       n = (yy_size_t) _yybytes_len + 2;
        buf = (char *) yyalloc(n  );
        if ( ! buf )
                YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@@ -4549,7 +4553,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len
 #define YY_EXIT_FAILURE 2
 #endif
 
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (yyconst char* msg )
 {
                        (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
@@ -4562,7 +4566,7 @@ static void yy_fatal_error (yyconst char* msg )
        do \
                { \
                /* Undo effects of setting up yytext. */ \
-        yy_size_t yyless_macro_arg = (n); \
+        int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                yytext[yyleng] = (yy_hold_char); \
                (yy_c_buf_p) = yytext + yyless_macro_arg; \
@@ -4579,7 +4583,7 @@ static void yy_fatal_error (yyconst char* msg )
  */
 int yyget_lineno  (void)
 {
-        
+    
     return yylineno;
 }
 
@@ -4602,7 +4606,7 @@ FILE *yyget_out  (void)
 /** Get the length of the current token.
  * 
  */
-yy_size_t yyget_leng  (void)
+int yyget_leng  (void)
 {
         return yyleng;
 }
@@ -4658,10 +4662,10 @@ static int yy_init_globals (void)
      * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -4670,8 +4674,8 @@ static int yy_init_globals (void)
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -4729,7 +4733,7 @@ static int yy_flex_strlen (yyconst char * s )
 
 void *yyalloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+                       return malloc(size);
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
@@ -4742,7 +4746,7 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return (void *) realloc( (char *) ptr, size );
+       return realloc(ptr, size);
 }
 
 void yyfree (void * ptr )
@@ -4752,7 +4756,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 512 "./util/configlexer.lex"
+#line 513 "./util/configlexer.lex"
 
 
 
index 940032049280b6e992b387f91abf34e1ec79c6a2..a6323f2c1436d30901a0cd8fe1776fd86df91fca 100644 (file)
@@ -301,6 +301,7 @@ do-not-query-address{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
 do-not-query-localhost{COLON}  { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
 access-control{COLON}          { YDVAR(2, VAR_ACCESS_CONTROL) }
 send-client-subnet{COLON}      { YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
+client-subnet-always-forward{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
 client-subnet-opcode{COLON}    { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
 max-client-subnet-ipv4{COLON}  { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
 max-client-subnet-ipv6{COLON}  { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
index 5db697200b1e49b6eaa354006d2b69b23279886d..05872545151ad80474e7d86ccd78ff92dc1560df 100644 (file)
@@ -298,38 +298,39 @@ extern int yydebug;
     VAR_IP_RATELIMIT_FACTOR = 427,
     VAR_RATELIMIT_FACTOR = 428,
     VAR_SEND_CLIENT_SUBNET = 429,
-    VAR_CLIENT_SUBNET_OPCODE = 430,
-    VAR_MAX_CLIENT_SUBNET_IPV4 = 431,
-    VAR_MAX_CLIENT_SUBNET_IPV6 = 432,
-    VAR_CAPS_WHITELIST = 433,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 434,
-    VAR_PERMIT_SMALL_HOLDDOWN = 435,
-    VAR_QNAME_MINIMISATION = 436,
-    VAR_QNAME_MINIMISATION_STRICT = 437,
-    VAR_IP_FREEBIND = 438,
-    VAR_DEFINE_TAG = 439,
-    VAR_LOCAL_ZONE_TAG = 440,
-    VAR_ACCESS_CONTROL_TAG = 441,
-    VAR_LOCAL_ZONE_OVERRIDE = 442,
-    VAR_ACCESS_CONTROL_TAG_ACTION = 443,
-    VAR_ACCESS_CONTROL_TAG_DATA = 444,
-    VAR_VIEW = 445,
-    VAR_ACCESS_CONTROL_VIEW = 446,
-    VAR_VIEW_FIRST = 447,
-    VAR_SERVE_EXPIRED = 448,
-    VAR_FAKE_DSA = 449,
-    VAR_FAKE_SHA1 = 450,
-    VAR_LOG_IDENTITY = 451,
-    VAR_HIDE_TRUSTANCHOR = 452,
-    VAR_USE_SYSTEMD = 453,
-    VAR_SHM_ENABLE = 454,
-    VAR_SHM_KEY = 455,
-    VAR_DNSCRYPT = 456,
-    VAR_DNSCRYPT_ENABLE = 457,
-    VAR_DNSCRYPT_PORT = 458,
-    VAR_DNSCRYPT_PROVIDER = 459,
-    VAR_DNSCRYPT_SECRET_KEY = 460,
-    VAR_DNSCRYPT_PROVIDER_CERT = 461
+    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 430,
+    VAR_CLIENT_SUBNET_OPCODE = 431,
+    VAR_MAX_CLIENT_SUBNET_IPV4 = 432,
+    VAR_MAX_CLIENT_SUBNET_IPV6 = 433,
+    VAR_CAPS_WHITELIST = 434,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 435,
+    VAR_PERMIT_SMALL_HOLDDOWN = 436,
+    VAR_QNAME_MINIMISATION = 437,
+    VAR_QNAME_MINIMISATION_STRICT = 438,
+    VAR_IP_FREEBIND = 439,
+    VAR_DEFINE_TAG = 440,
+    VAR_LOCAL_ZONE_TAG = 441,
+    VAR_ACCESS_CONTROL_TAG = 442,
+    VAR_LOCAL_ZONE_OVERRIDE = 443,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 444,
+    VAR_ACCESS_CONTROL_TAG_DATA = 445,
+    VAR_VIEW = 446,
+    VAR_ACCESS_CONTROL_VIEW = 447,
+    VAR_VIEW_FIRST = 448,
+    VAR_SERVE_EXPIRED = 449,
+    VAR_FAKE_DSA = 450,
+    VAR_FAKE_SHA1 = 451,
+    VAR_LOG_IDENTITY = 452,
+    VAR_HIDE_TRUSTANCHOR = 453,
+    VAR_USE_SYSTEMD = 454,
+    VAR_SHM_ENABLE = 455,
+    VAR_SHM_KEY = 456,
+    VAR_DNSCRYPT = 457,
+    VAR_DNSCRYPT_ENABLE = 458,
+    VAR_DNSCRYPT_PORT = 459,
+    VAR_DNSCRYPT_PROVIDER = 460,
+    VAR_DNSCRYPT_SECRET_KEY = 461,
+    VAR_DNSCRYPT_PROVIDER_CERT = 462
   };
 #endif
 /* Tokens.  */
@@ -505,38 +506,39 @@ extern int yydebug;
 #define VAR_IP_RATELIMIT_FACTOR 427
 #define VAR_RATELIMIT_FACTOR 428
 #define VAR_SEND_CLIENT_SUBNET 429
-#define VAR_CLIENT_SUBNET_OPCODE 430
-#define VAR_MAX_CLIENT_SUBNET_IPV4 431
-#define VAR_MAX_CLIENT_SUBNET_IPV6 432
-#define VAR_CAPS_WHITELIST 433
-#define VAR_CACHE_MAX_NEGATIVE_TTL 434
-#define VAR_PERMIT_SMALL_HOLDDOWN 435
-#define VAR_QNAME_MINIMISATION 436
-#define VAR_QNAME_MINIMISATION_STRICT 437
-#define VAR_IP_FREEBIND 438
-#define VAR_DEFINE_TAG 439
-#define VAR_LOCAL_ZONE_TAG 440
-#define VAR_ACCESS_CONTROL_TAG 441
-#define VAR_LOCAL_ZONE_OVERRIDE 442
-#define VAR_ACCESS_CONTROL_TAG_ACTION 443
-#define VAR_ACCESS_CONTROL_TAG_DATA 444
-#define VAR_VIEW 445
-#define VAR_ACCESS_CONTROL_VIEW 446
-#define VAR_VIEW_FIRST 447
-#define VAR_SERVE_EXPIRED 448
-#define VAR_FAKE_DSA 449
-#define VAR_FAKE_SHA1 450
-#define VAR_LOG_IDENTITY 451
-#define VAR_HIDE_TRUSTANCHOR 452
-#define VAR_USE_SYSTEMD 453
-#define VAR_SHM_ENABLE 454
-#define VAR_SHM_KEY 455
-#define VAR_DNSCRYPT 456
-#define VAR_DNSCRYPT_ENABLE 457
-#define VAR_DNSCRYPT_PORT 458
-#define VAR_DNSCRYPT_PROVIDER 459
-#define VAR_DNSCRYPT_SECRET_KEY 460
-#define VAR_DNSCRYPT_PROVIDER_CERT 461
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 430
+#define VAR_CLIENT_SUBNET_OPCODE 431
+#define VAR_MAX_CLIENT_SUBNET_IPV4 432
+#define VAR_MAX_CLIENT_SUBNET_IPV6 433
+#define VAR_CAPS_WHITELIST 434
+#define VAR_CACHE_MAX_NEGATIVE_TTL 435
+#define VAR_PERMIT_SMALL_HOLDDOWN 436
+#define VAR_QNAME_MINIMISATION 437
+#define VAR_QNAME_MINIMISATION_STRICT 438
+#define VAR_IP_FREEBIND 439
+#define VAR_DEFINE_TAG 440
+#define VAR_LOCAL_ZONE_TAG 441
+#define VAR_ACCESS_CONTROL_TAG 442
+#define VAR_LOCAL_ZONE_OVERRIDE 443
+#define VAR_ACCESS_CONTROL_TAG_ACTION 444
+#define VAR_ACCESS_CONTROL_TAG_DATA 445
+#define VAR_VIEW 446
+#define VAR_ACCESS_CONTROL_VIEW 447
+#define VAR_VIEW_FIRST 448
+#define VAR_SERVE_EXPIRED 449
+#define VAR_FAKE_DSA 450
+#define VAR_FAKE_SHA1 451
+#define VAR_LOG_IDENTITY 452
+#define VAR_HIDE_TRUSTANCHOR 453
+#define VAR_USE_SYSTEMD 454
+#define VAR_SHM_ENABLE 455
+#define VAR_SHM_KEY 456
+#define VAR_DNSCRYPT 457
+#define VAR_DNSCRYPT_ENABLE 458
+#define VAR_DNSCRYPT_PORT 459
+#define VAR_DNSCRYPT_PROVIDER 460
+#define VAR_DNSCRYPT_SECRET_KEY 461
+#define VAR_DNSCRYPT_PROVIDER_CERT 462
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -547,7 +549,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 551 "util/configparser.c" /* yacc.c:355  */
+#line 553 "util/configparser.c" /* yacc.c:355  */
 };
 
 typedef union YYSTYPE YYSTYPE;
@@ -564,7 +566,7 @@ int yyparse (void);
 
 /* Copy the second part of user declarations.  */
 
-#line 568 "util/configparser.c" /* yacc.c:358  */
+#line 570 "util/configparser.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -806,21 +808,21 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   418
+#define YYLAST   421
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  207
+#define YYNTOKENS  208
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  222
+#define YYNNTS  223
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  425
+#define YYNRULES  427
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  640
+#define YYNSTATES  643
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   461
+#define YYMAXUTOK   462
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -875,56 +877,56 @@ static const yytype_uint8 yytranslate[] =
      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
+     205,   206,   207
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   148,   148,   148,   149,   149,   150,   150,   151,   151,
-     151,   153,   157,   162,   163,   164,   164,   164,   165,   165,
-     166,   166,   167,   167,   168,   168,   169,   169,   169,   170,
-     170,   170,   171,   171,   172,   172,   173,   173,   174,   174,
-     175,   175,   176,   176,   177,   177,   178,   178,   179,   179,
-     179,   180,   180,   180,   181,   181,   181,   182,   182,   183,
-     183,   184,   184,   185,   185,   186,   186,   186,   187,   187,
-     188,   188,   189,   189,   189,   190,   190,   191,   191,   192,
-     192,   193,   193,   193,   194,   194,   195,   195,   196,   196,
-     197,   197,   198,   198,   199,   199,   199,   200,   200,   201,
-     201,   201,   202,   202,   202,   203,   203,   203,   204,   204,
-     204,   204,   205,   205,   205,   206,   206,   206,   207,   207,
-     208,   208,   209,   209,   210,   210,   211,   211,   211,   212,
-     212,   213,   213,   214,   215,   215,   216,   217,   217,   218,
-     218,   219,   219,   220,   220,   221,   221,   221,   222,   222,
-     223,   223,   224,   224,   225,   225,   226,   226,   226,   227,
-     227,   227,   228,   228,   228,   229,   231,   243,   244,   245,
-     245,   245,   245,   245,   246,   248,   260,   261,   262,   262,
-     262,   262,   263,   265,   279,   280,   281,   281,   281,   281,
-     282,   282,   282,   284,   293,   302,   313,   322,   331,   340,
-     351,   360,   371,   386,   403,   420,   433,   448,   457,   466,
-     475,   484,   493,   502,   511,   520,   529,   538,   547,   556,
-     565,   574,   583,   590,   597,   606,   615,   624,   638,   647,
-     656,   665,   672,   679,   705,   713,   720,   727,   734,   741,
-     749,   757,   765,   772,   779,   788,   797,   806,   813,   820,
-     828,   836,   846,   856,   866,   879,   890,   898,   911,   920,
-     929,   938,   948,   958,   966,   979,   988,   996,  1005,  1013,
-    1026,  1035,  1042,  1052,  1062,  1072,  1082,  1092,  1102,  1112,
-    1122,  1129,  1136,  1143,  1152,  1161,  1170,  1177,  1187,  1204,
-    1211,  1229,  1242,  1255,  1264,  1273,  1282,  1291,  1301,  1311,
-    1320,  1329,  1342,  1355,  1364,  1371,  1380,  1389,  1398,  1407,
-    1415,  1428,  1436,  1464,  1471,  1486,  1496,  1506,  1513,  1520,
-    1529,  1543,  1562,  1581,  1593,  1605,  1617,  1628,  1647,  1657,
-    1666,  1674,  1682,  1695,  1708,  1721,  1734,  1743,  1752,  1762,
-    1772,  1782,  1789,  1796,  1805,  1815,  1825,  1835,  1842,  1849,
-    1858,  1868,  1878,  1907,  1917,  1925,  1934,  1949,  1958,  1963,
-    1964,  1965,  1965,  1965,  1966,  1966,  1966,  1967,  1967,  1969,
-    1979,  1988,  1995,  2005,  2012,  2019,  2026,  2033,  2038,  2039,
-    2040,  2040,  2041,  2041,  2042,  2042,  2043,  2044,  2045,  2046,
-    2047,  2048,  2050,  2058,  2065,  2073,  2081,  2088,  2095,  2104,
-    2113,  2122,  2131,  2140,  2149,  2154,  2155,  2156,  2158,  2164,
-    2174,  2181,  2190,  2198,  2204,  2205,  2207,  2207,  2207,  2208,
-    2208,  2210,  2219,  2229,  2236,  2243
+       0,   149,   149,   149,   150,   150,   151,   151,   152,   152,
+     152,   154,   158,   163,   164,   165,   165,   165,   166,   166,
+     167,   167,   168,   168,   169,   169,   170,   170,   170,   171,
+     171,   171,   172,   172,   173,   173,   174,   174,   175,   175,
+     176,   176,   177,   177,   178,   178,   179,   179,   180,   180,
+     180,   181,   181,   181,   182,   182,   182,   183,   183,   184,
+     184,   185,   185,   186,   186,   187,   187,   187,   188,   188,
+     189,   189,   190,   190,   190,   191,   191,   192,   192,   193,
+     193,   194,   194,   194,   195,   195,   196,   196,   197,   197,
+     198,   198,   199,   199,   200,   200,   200,   201,   201,   202,
+     202,   202,   203,   203,   203,   204,   204,   204,   205,   205,
+     205,   205,   206,   206,   206,   207,   207,   207,   208,   208,
+     209,   209,   210,   210,   211,   211,   212,   212,   212,   213,
+     213,   214,   214,   215,   216,   216,   217,   217,   218,   219,
+     220,   220,   221,   221,   222,   222,   223,   223,   223,   224,
+     224,   225,   225,   226,   226,   227,   227,   228,   228,   228,
+     229,   229,   229,   230,   230,   230,   231,   233,   245,   246,
+     247,   247,   247,   247,   247,   248,   250,   262,   263,   264,
+     264,   264,   264,   265,   267,   281,   282,   283,   283,   283,
+     283,   284,   284,   284,   286,   295,   304,   315,   324,   333,
+     342,   353,   362,   374,   389,   400,   417,   434,   447,   462,
+     471,   480,   489,   498,   507,   516,   525,   534,   543,   552,
+     561,   570,   579,   588,   597,   604,   611,   620,   629,   638,
+     652,   661,   670,   679,   686,   693,   719,   727,   734,   741,
+     748,   755,   763,   771,   779,   786,   793,   802,   811,   820,
+     827,   834,   842,   850,   860,   870,   880,   893,   904,   912,
+     925,   934,   943,   952,   962,   972,   980,   993,  1002,  1010,
+    1019,  1027,  1040,  1049,  1056,  1066,  1076,  1086,  1096,  1106,
+    1116,  1126,  1136,  1143,  1150,  1157,  1166,  1175,  1184,  1191,
+    1201,  1218,  1225,  1243,  1256,  1269,  1278,  1287,  1296,  1305,
+    1315,  1325,  1334,  1343,  1356,  1369,  1378,  1385,  1394,  1403,
+    1412,  1421,  1429,  1442,  1450,  1478,  1485,  1500,  1510,  1520,
+    1527,  1534,  1543,  1557,  1576,  1595,  1607,  1619,  1631,  1642,
+    1661,  1671,  1680,  1688,  1696,  1709,  1722,  1735,  1748,  1757,
+    1766,  1776,  1786,  1796,  1803,  1810,  1819,  1829,  1839,  1849,
+    1856,  1863,  1872,  1882,  1892,  1921,  1931,  1939,  1948,  1963,
+    1972,  1977,  1978,  1979,  1979,  1979,  1980,  1980,  1980,  1981,
+    1981,  1983,  1993,  2002,  2009,  2019,  2026,  2033,  2040,  2047,
+    2052,  2053,  2054,  2054,  2055,  2055,  2056,  2056,  2057,  2058,
+    2059,  2060,  2061,  2062,  2064,  2072,  2079,  2087,  2095,  2102,
+    2109,  2118,  2127,  2136,  2145,  2154,  2163,  2168,  2169,  2170,
+    2172,  2178,  2188,  2195,  2204,  2212,  2218,  2219,  2221,  2221,
+    2221,  2222,  2222,  2224,  2233,  2243,  2250,  2257
 };
 #endif
 
@@ -993,17 +995,18 @@ static const char *const yytname[] =
   "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
   "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
   "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
-  "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_OPCODE",
-  "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
-  "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
-  "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
-  "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
-  "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
-  "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
-  "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
-  "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
-  "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_USE_SYSTEMD",
-  "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE",
+  "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ALWAYS_FORWARD",
+  "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4",
+  "VAR_MAX_CLIENT_SUBNET_IPV6", "VAR_CAPS_WHITELIST",
+  "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN",
+  "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT",
+  "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG",
+  "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE",
+  "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA",
+  "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST",
+  "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY",
+  "VAR_HIDE_TRUSTANCHOR", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
+  "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE",
   "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY",
   "VAR_DNSCRYPT_PROVIDER_CERT", "$accept", "toplevelvars", "toplevelvar",
   "serverstart", "contents_server", "content_server", "stubstart",
@@ -1012,9 +1015,10 @@ static const char *const yytname[] =
   "server_num_threads", "server_verbosity", "server_statistics_interval",
   "server_statistics_cumulative", "server_extended_statistics",
   "server_shm_enable", "server_shm_key", "server_port",
-  "server_send_client_subnet", "server_client_subnet_opcode",
-  "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
-  "server_interface", "server_outgoing_interface", "server_outgoing_range",
+  "server_send_client_subnet", "server_client_subnet_always_forward",
+  "server_client_subnet_opcode", "server_max_client_subnet_ipv4",
+  "server_max_client_subnet_ipv6", "server_interface",
+  "server_outgoing_interface", "server_outgoing_range",
   "server_outgoing_port_permit", "server_outgoing_port_avoid",
   "server_outgoing_num_tcp", "server_incoming_num_tcp",
   "server_interface_automatic", "server_do_ip4", "server_do_ip6",
@@ -1122,14 +1126,14 @@ static const yytype_uint16 yytoknum[] =
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   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
+     455,   456,   457,   458,   459,   460,   461,   462
 };
 # endif
 
-#define YYPACT_NINF -197
+#define YYPACT_NINF -162
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-197)))
+  (!!((Yystate) == (-162)))
 
 #define YYTABLE_NINF -1
 
@@ -1140,70 +1144,71 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    -197,     0,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-      98,   -39,   -35,   154,   -65,  -131,  -106,  -196,     2,    25,
-      26,    27,    28,    29,    30,    32,    33,    34,    35,    36,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    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,    82,    83,    85,    88,    90,    91,    92,    93,
-      94,    95,    96,    99,   128,   129,   130,   131,   136,   137,
-     179,   181,   182,   183,   185,   186,   187,   195,   196,   222,
-     223,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   278,   280,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-     337,   338,   339,   340,   341,   342,   343,   344,   345,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,   346,   347,   348,   349,   350,   351,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,   352,   353,   354,   355,   356,  -197,
-    -197,  -197,  -197,  -197,  -197,   357,   358,   359,   360,   361,
-     362,   363,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-     364,   365,   366,   367,   368,   369,   370,   371,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,   372,   373,   374,
-     375,   376,   377,   378,   379,   380,   381,   382,   383,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,   384,  -197,  -197,   385,   386,   387,   388,   389,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,   390,   391,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,   392,   393,   394,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,   395,   396,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,   397,   398,   399,   400,   401,   402,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,   403,
-    -197,  -197,   404,   405,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-     406,   407,   408,  -197,  -197,  -197,  -197,  -197,  -197,  -197
+    -162,     0,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+     191,   -38,   -34,   -39,   -64,  -130,  -105,  -161,    -3,    -2,
+      -1,     2,     3,    26,    29,    30,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      53,    54,    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,    82,    83,    84,
+      86,    89,    91,    92,    93,    94,    95,    96,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   136,   137,   138,   139,   140,   141,   142,
+     143,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   221,   222,   223,   224,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,   228,   229,   230,   272,   273,   274,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,   275,   276,   277,   278,
+     279,  -162,  -162,  -162,  -162,  -162,  -162,   280,   284,   288,
+     289,   313,   314,   315,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,   316,   326,   327,   328,   329,   330,   331,   332,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,   333,
+     334,   335,   336,   337,   338,   372,   374,   383,   384,   385,
+     386,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,   387,  -162,  -162,   388,   389,   390,
+     391,   392,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,   393,   394,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,   395,   396,
+     397,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+     398,   399,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,   400,   401,   402,   403,
+     404,   405,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,   406,  -162,  -162,   407,   408,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,   409,   410,   411,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1211,8 +1216,8 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       2,     0,     1,    12,   166,   175,   358,   404,   377,   183,
-     413,     3,    14,   168,   177,   185,   360,   379,   406,   415,
+       2,     0,     1,    12,   167,   176,   360,   406,   379,   184,
+     415,     3,    14,   169,   178,   186,   362,   381,   408,   417,
        4,     5,     6,    10,     8,     9,     7,    11,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1228,109 +1233,110 @@ 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,     0,     0,     0,    13,
-      15,    16,    75,    78,    87,   162,   163,    17,   137,   138,
-     139,   140,    26,    66,    18,    79,    80,    37,    59,    74,
-      19,    20,    22,    23,    21,    24,    25,   110,   111,   112,
-     113,   114,   158,    76,    65,    91,   108,   109,    27,    28,
-      29,    30,    31,    67,    81,    82,    97,    53,    63,    54,
-      92,    47,    48,   165,    49,    50,   101,   105,   118,   126,
-     145,   102,    60,    32,    33,    34,    89,   119,   120,   121,
-      35,    36,    38,    39,    41,    42,    40,   124,    43,    44,
-      45,    51,    70,   106,    84,   125,    77,   141,    85,    86,
-     103,   104,    90,    46,    68,    71,    52,    55,    93,    94,
-      69,   142,    95,    56,    57,    58,   107,   155,   156,   164,
-      96,    64,    98,    99,   100,   143,    61,    62,    83,    72,
-      73,    88,   115,   116,   117,   122,   123,   146,   147,   149,
-     151,   152,   150,   153,   159,   127,   128,   131,   132,   129,
-     130,   133,   134,   136,   135,   144,   154,   148,   157,   160,
-     161,     0,     0,     0,     0,     0,     0,   167,   169,   170,
-     171,   173,   174,   172,     0,     0,     0,     0,     0,   176,
-     178,   179,   180,   181,   182,     0,     0,     0,     0,     0,
-       0,     0,   184,   186,   187,   190,   191,   188,   192,   189,
-       0,     0,     0,     0,     0,     0,     0,     0,   359,   361,
-     363,   362,   368,   364,   365,   366,   367,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   378,
-     380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
-     390,   391,     0,   405,   407,     0,     0,     0,     0,     0,
-     414,   416,   417,   418,   420,   419,   194,   193,   200,   207,
-     205,   213,   214,   217,   215,   216,   218,   219,   231,   232,
-     233,   234,   235,   256,   257,   258,   263,   264,   210,   265,
-     266,   269,   267,   268,   271,   272,   273,   286,   244,   245,
-     247,   248,   274,   289,   240,   242,   290,   296,   297,   298,
-     211,   255,   309,   310,   241,   304,   227,   206,   236,   287,
-     293,   275,     0,     0,   313,   212,   195,   226,   279,   196,
-     208,   209,   237,   238,   311,   277,   281,   282,   197,   314,
-     259,   285,   228,   243,   291,   292,   295,   303,   239,   307,
-     305,   306,   249,   254,   283,   284,   250,   251,   276,   299,
-     229,   230,   220,   221,   222,   223,   224,   315,   316,   317,
-     260,   261,   262,   270,   318,   319,     0,     0,     0,   278,
-     252,   409,   328,   332,   330,   329,   333,   331,     0,     0,
-     336,   337,   201,   202,   203,   204,   280,   294,   308,   338,
-     339,   253,   320,     0,     0,     0,     0,     0,     0,   300,
-     301,   302,   410,   246,   225,   198,   199,   340,   341,   342,
-     345,   344,   343,   346,   347,   348,   349,   350,   351,     0,
-     355,   356,     0,     0,   357,   369,   371,   370,   373,   374,
-     375,   376,   372,   392,   393,   394,   395,   396,   397,   398,
-     399,   400,   401,   402,   403,   408,   421,   422,   423,   425,
-     424,   288,   312,   327,   411,   412,   334,   335,   321,   322,
-       0,     0,     0,   326,   352,   353,   354,   325,   323,   324
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      13,    15,    16,    75,    78,    87,   163,   164,    17,   137,
+     138,   139,   140,   141,    26,    66,    18,    79,    80,    37,
+      59,    74,    19,    20,    22,    23,    21,    24,    25,   110,
+     111,   112,   113,   114,   159,    76,    65,    91,   108,   109,
+      27,    28,    29,    30,    31,    67,    81,    82,    97,    53,
+      63,    54,    92,    47,    48,   166,    49,    50,   101,   105,
+     118,   126,   146,   102,    60,    32,    33,    34,    89,   119,
+     120,   121,    35,    36,    38,    39,    41,    42,    40,   124,
+      43,    44,    45,    51,    70,   106,    84,   125,    77,   142,
+      85,    86,   103,   104,    90,    46,    68,    71,    52,    55,
+      93,    94,    69,   143,    95,    56,    57,    58,   107,   156,
+     157,   165,    96,    64,    98,    99,   100,   144,    61,    62,
+      83,    72,    73,    88,   115,   116,   117,   122,   123,   147,
+     148,   150,   152,   153,   151,   154,   160,   127,   128,   131,
+     132,   129,   130,   133,   134,   136,   135,   145,   155,   149,
+     158,   161,   162,     0,     0,     0,     0,     0,     0,   168,
+     170,   171,   172,   174,   175,   173,     0,     0,     0,     0,
+       0,   177,   179,   180,   181,   182,   183,     0,     0,     0,
+       0,     0,     0,     0,   185,   187,   188,   191,   192,   189,
+     193,   190,     0,     0,     0,     0,     0,     0,     0,     0,
+     361,   363,   365,   364,   370,   366,   367,   368,   369,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   380,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,     0,   407,   409,     0,     0,     0,
+       0,     0,   416,   418,   419,   420,   422,   421,   195,   194,
+     201,   209,   207,   215,   216,   219,   217,   218,   220,   221,
+     233,   234,   235,   236,   237,   258,   259,   260,   265,   266,
+     212,   267,   268,   271,   269,   270,   273,   274,   275,   288,
+     246,   247,   249,   250,   276,   291,   242,   244,   292,   298,
+     299,   300,   213,   257,   311,   312,   243,   306,   229,   208,
+     238,   289,   295,   277,     0,     0,   315,   214,   196,   228,
+     281,   197,   210,   211,   239,   240,   313,   279,   283,   284,
+     198,   316,   261,   287,   230,   245,   293,   294,   297,   305,
+     241,   309,   307,   308,   251,   256,   285,   286,   252,   253,
+     278,   301,   231,   232,   222,   223,   224,   225,   226,   317,
+     318,   319,   262,   263,   264,   272,   320,   321,     0,     0,
+       0,   280,   254,   411,   330,   334,   332,   331,   335,   333,
+       0,     0,   338,   339,   202,   203,   204,   205,   206,   282,
+     296,   310,   340,   341,   255,   322,     0,     0,     0,     0,
+       0,     0,   302,   303,   304,   412,   248,   227,   199,   200,
+     342,   343,   344,   347,   346,   345,   348,   349,   350,   351,
+     352,   353,     0,   357,   358,     0,     0,   359,   371,   373,
+     372,   375,   376,   377,   378,   374,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,   410,   423,
+     424,   425,   427,   426,   290,   314,   329,   413,   414,   336,
+     337,   323,   324,     0,     0,     0,   328,   354,   355,   356,
+     327,   325,   326
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,  -197,
-    -197,  -197
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
+    -162,  -162,  -162
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     1,    11,    12,    20,   179,    13,    21,   337,    14,
-      22,   349,    15,    23,   362,   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,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   338,   339,   340,   341,   342,   343,   350,   351,
-     352,   353,   354,   363,   364,   365,   366,   367,   368,   369,
-      16,    24,   378,   379,   380,   381,   382,   383,   384,   385,
-     386,    17,    25,   399,   400,   401,   402,   403,   404,   405,
-     406,   407,   408,   409,   410,   411,    18,    26,   413,   414,
-     327,   328,   329,   330,    19,    27,   420,   421,   422,   423,
-     424,   425
+      -1,     1,    11,    12,    20,   180,    13,    21,   339,    14,
+      22,   351,    15,    23,   364,   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,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   340,   341,   342,   343,   344,   345,   352,
+     353,   354,   355,   356,   365,   366,   367,   368,   369,   370,
+     371,    16,    24,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,    17,    25,   401,   402,   403,   404,   405,   406,
+     407,   408,   409,   410,   411,   412,   413,    18,    26,   415,
+     416,   329,   330,   331,   332,    19,    27,   422,   423,   424,
+     425,   426,   427
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1338,103 +1344,105 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_uint16 yytable[] =
 {
-       2,   331,   412,   332,   333,   344,   415,   416,   417,   418,
-     419,     3,   426,   345,   346,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   370,   371,   372,
-     373,   374,   375,   376,   377,   427,   428,   429,   430,   431,
-     432,     4,   433,   434,   435,   436,   437,     5,   438,   439,
-     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
-     450,   451,   452,   453,   334,   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,     6,   480,   481,   335,   482,   336,   347,   483,   348,
-     484,   485,   486,   487,   488,   489,   490,     7,     0,   491,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,   492,   493,
-     494,   495,    56,    57,    58,     8,   496,   497,    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,    93,    94,    95,    96,    97,    98,    99,   498,
-       9,   499,   500,   501,   355,   502,   503,   504,   100,   101,
-     102,    10,   103,   104,   105,   505,   506,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     356,   357,   507,   508,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   509,   510,   511,   512,   513,   514,   515,
-     516,   517,   518,   519,   520,   358,   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,   521,   170,
-     522,   171,   172,   173,   174,   175,   176,   177,   178,   523,
-     524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
-     534,   535,   536,   359,   360,   537,   538,   539,   540,   541,
-     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
-     552,   553,   554,   555,   556,   557,   558,   559,   560,   561,
-     562,   563,   564,   565,   566,   567,   361,   568,   569,   570,
-     571,   572,   573,   574,   575,   576,   577,   578,   579,   580,
-     581,   582,   583,   584,   585,   586,   587,   588,   589,   590,
-     591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
-     601,   602,   603,   604,   605,   606,   607,   608,   609,   610,
-     611,   612,   613,   614,   615,   616,   617,   618,   619,   620,
+       2,   357,   333,   414,   334,   335,   346,   428,   429,   430,
+       0,     3,   431,   432,   347,   348,   389,   390,   391,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   372,   373,
+     374,   375,   376,   377,   378,   379,   433,   358,   359,   434,
+     435,     4,   417,   418,   419,   420,   421,     5,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   360,   450,   451,   336,   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,     6,   477,   478,   479,   337,   480,   338,   349,   481,
+     350,   482,   483,   484,   485,   486,   487,     7,   488,   489,
+     490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
+     361,   362,   500,   501,   502,   503,   504,   505,   506,   507,
+     508,   509,   510,   511,   512,   513,   514,   515,   516,   517,
+     518,   519,   520,   521,   522,     8,   523,   524,   525,   526,
+     527,   528,   529,   530,   363,   531,   532,   533,   534,   535,
+     536,   537,   538,   539,   540,   541,   542,   543,   544,   545,
+     546,   547,   548,   549,   550,   551,   552,   553,   554,   555,
+     556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
+     566,     9,   567,   568,   569,   570,   571,   572,   573,   574,
+     575,     0,    10,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,   576,   577,   578,   579,    56,    57,    58,   580,   581,
+     582,    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,    93,    94,    95,    96,    97,
+      98,    99,   583,   584,   585,   586,   587,   588,   589,   590,
+     591,   100,   101,   102,   592,   103,   104,   105,   593,   594,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   595,   596,   597,   598,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   599,   600,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   611,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   612,   171,   613,   172,   173,   174,   175,   176,
+     177,   178,   179,   614,   615,   616,   617,   618,   619,   620,
      621,   622,   623,   624,   625,   626,   627,   628,   629,   630,
-     631,   632,   633,   634,   635,   636,   637,   638,   639
+     631,   632,   633,   634,   635,   636,   637,   638,   639,   640,
+     641,   642
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    40,   108,    42,    43,    40,   202,   203,   204,   205,
-     206,    11,    10,    48,    49,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,    92,    93,    94,
-      95,    96,    97,    98,    99,    10,    10,    10,    10,    10,
-      10,    41,    10,    10,    10,    10,    10,    47,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,   103,    10,    10,    10,    10,    10,
+       0,    40,    40,   108,    42,    43,    40,    10,    10,    10,
+      -1,    11,    10,    10,    48,    49,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,    92,    93,
+      94,    95,    96,    97,    98,    99,    10,    76,    77,    10,
+      10,    41,   203,   204,   205,   206,   207,    47,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,   101,    10,    10,   103,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    91,    10,    10,   133,    10,   135,   132,    10,   134,
-      10,    10,    10,    10,    10,    10,    10,   107,    -1,    10,
-      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,    39,    10,    10,
-      10,    10,    44,    45,    46,   145,    10,    10,    50,    51,
-      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,    10,
-     190,    10,    10,    10,    40,    10,    10,    10,   100,   101,
-     102,   201,   104,   105,   106,    10,    10,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-      76,    77,    10,    10,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,   101,   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,    10,   191,
-      10,   193,   194,   195,   196,   197,   198,   199,   200,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,   159,   160,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    91,    10,    10,    10,   133,    10,   135,   132,    10,
+     134,    10,    10,    10,    10,    10,    10,   107,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,   192,    10,    10,    10,
+     159,   160,    10,    10,    10,    10,    10,    10,    10,    10,
       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,   145,    10,    10,    10,    10,
+      10,    10,    10,    10,   193,    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,   191,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,    -1,   202,    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,
+      39,    10,    10,    10,    10,    44,    45,    46,    10,    10,
+      10,    50,    51,    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,    10,    10,    10,    10,    10,    10,    10,    10,
+      10,   100,   101,   102,    10,   104,   105,   106,    10,    10,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,    10,    10,    10,    10,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,    10,    10,    10,    10,
+      10,    10,    10,    10,    10,    10,    10,    10,    10,   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,    10,   192,    10,   194,   195,   196,   197,   198,
+     199,   200,   201,    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,   208,     0,    11,    41,    47,    91,   107,   145,   190,
-     201,   209,   210,   213,   216,   219,   387,   398,   413,   421,
-     211,   214,   217,   220,   388,   399,   414,   422,    12,    13,
+       0,   209,     0,    11,    41,    47,    91,   107,   145,   191,
+     202,   210,   211,   214,   217,   220,   389,   400,   415,   423,
+     212,   215,   218,   221,   390,   401,   416,   424,    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,    39,    44,    45,    46,    50,
@@ -1449,8 +1457,8 @@ static const yytype_uint16 yystos[] =
      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,
-     191,   193,   194,   195,   196,   197,   198,   199,   200,   212,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     190,   192,   194,   195,   196,   197,   198,   199,   200,   201,
+     213,   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,
@@ -1464,17 +1472,18 @@ static const yytype_uint16 yystos[] =
      332,   333,   334,   335,   336,   337,   338,   339,   340,   341,
      342,   343,   344,   345,   346,   347,   348,   349,   350,   351,
      352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
-     362,   363,   364,   365,   366,   367,   368,   417,   418,   419,
-     420,    40,    42,    43,   103,   133,   135,   215,   369,   370,
-     371,   372,   373,   374,    40,    48,    49,   132,   134,   218,
-     375,   376,   377,   378,   379,    40,    76,    77,   101,   159,
-     160,   192,   221,   380,   381,   382,   383,   384,   385,   386,
-      92,    93,    94,    95,    96,    97,    98,    99,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   108,   415,   416,   202,   203,   204,   205,   206,
-     423,   424,   425,   426,   427,   428,    10,    10,    10,    10,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   419,
+     420,   421,   422,    40,    42,    43,   103,   133,   135,   216,
+     371,   372,   373,   374,   375,   376,    40,    48,    49,   132,
+     134,   219,   377,   378,   379,   380,   381,    40,    76,    77,
+     101,   159,   160,   193,   222,   382,   383,   384,   385,   386,
+     387,   388,    92,    93,    94,    95,    96,    97,    98,    99,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   402,   403,   404,   405,   406,   407,   408,   409,   410,
+     411,   412,   413,   414,   108,   417,   418,   203,   204,   205,
+     206,   207,   425,   426,   427,   428,   429,   430,    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,
@@ -1495,32 +1504,32 @@ 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
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   207,   208,   208,   209,   209,   209,   209,   209,   209,
-     209,   209,   210,   211,   211,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   213,   214,   214,   215,
-     215,   215,   215,   215,   215,   216,   217,   217,   218,   218,
-     218,   218,   218,   219,   220,   220,   221,   221,   221,   221,
-     221,   221,   221,   222,   223,   224,   225,   226,   227,   228,
+       0,   208,   209,   209,   210,   210,   210,   210,   210,   210,
+     210,   210,   211,   212,   212,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   213,   213,   213,
+     213,   213,   213,   213,   213,   213,   213,   214,   215,   215,
+     216,   216,   216,   216,   216,   216,   217,   218,   218,   219,
+     219,   219,   219,   219,   220,   221,   221,   222,   222,   222,
+     222,   222,   222,   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,
@@ -1537,13 +1546,13 @@ static const yytype_uint16 yyr1[] =
      359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
      369,   370,   371,   372,   373,   374,   375,   376,   377,   378,
      379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
-     388,   389,   389,   389,   389,   389,   389,   389,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,   398,   399,   399,
-     400,   400,   400,   400,   400,   400,   400,   400,   400,   400,
-     400,   400,   401,   402,   403,   404,   405,   406,   407,   408,
-     409,   410,   411,   412,   413,   414,   414,   415,   416,   417,
-     418,   419,   420,   421,   422,   422,   423,   423,   423,   423,
-     423,   424,   425,   426,   427,   428
+     389,   390,   390,   391,   391,   391,   391,   391,   391,   391,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,   401,   402,   402,   402,   402,   402,   402,   402,   402,
+     402,   402,   402,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   416,   417,
+     418,   419,   420,   421,   422,   423,   424,   424,   425,   425,
+     425,   425,   425,   426,   427,   428,   429,   430
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1565,10 +1574,10 @@ 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,     1,     2,     0,     1,
-       1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
-       1,     1,     1,     1,     2,     0,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     2,     0,     1,     1,     1,
+       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,
@@ -1577,21 +1586,21 @@ static const yytype_uint8 yyr2[] =
        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,
+       3,     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,     3,     3,     4,     4,     4,     3,     3,     2,     2,
-       2,     2,     2,     2,     3,     3,     2,     2,     2,     2,
+       2,     2,     2,     2,     3,     2,     2,     2,     2,     2,
+       2,     2,     2,     3,     3,     4,     4,     4,     3,     3,
+       2,     2,     2,     2,     2,     2,     3,     3,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     3,     3,     3,     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,     3,     3,     1,     2,     0,     1,     1,     1,     1,
-       1,     2,     2,     2,     2,     2
+       2,     2,     2,     2,     3,     3,     3,     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,     3,     3,     1,     2,     0,     1,     1,
+       1,     1,     1,     2,     2,     2,     2,     2
 };
 
 
@@ -2268,15 +2277,15 @@ yyreduce:
   switch (yyn)
     {
         case 12:
-#line 158 "./util/configparser.y" /* yacc.c:1646  */
+#line 159 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(server:)\n")); 
        }
-#line 2276 "util/configparser.c" /* yacc.c:1646  */
+#line 2285 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 232 "./util/configparser.y" /* yacc.c:1646  */
+  case 167:
+#line 234 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
@@ -2287,11 +2296,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2291 "util/configparser.c" /* yacc.c:1646  */
+#line 2300 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 249 "./util/configparser.y" /* yacc.c:1646  */
+  case 176:
+#line 251 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
@@ -2302,11 +2311,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2306 "util/configparser.c" /* yacc.c:1646  */
+#line 2315 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 266 "./util/configparser.y" /* yacc.c:1646  */
+  case 184:
+#line 268 "./util/configparser.y" /* yacc.c:1646  */
     {
                struct config_view* s;
                OUTYY(("\nP(view:)\n")); 
@@ -2319,11 +2328,11 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-#line 2323 "util/configparser.c" /* yacc.c:1646  */
+#line 2332 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 285 "./util/configparser.y" /* yacc.c:1646  */
+  case 194:
+#line 287 "./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)
@@ -2331,11 +2340,11 @@ yyreduce:
                else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2335 "util/configparser.c" /* yacc.c:1646  */
+#line 2344 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 194:
-#line 294 "./util/configparser.y" /* yacc.c:1646  */
+  case 195:
+#line 296 "./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)
@@ -2343,11 +2352,11 @@ yyreduce:
                else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2347 "util/configparser.c" /* yacc.c:1646  */
+#line 2356 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 195:
-#line 303 "./util/configparser.y" /* yacc.c:1646  */
+  case 196:
+#line 305 "./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)
@@ -2357,11 +2366,11 @@ yyreduce:
                else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2361 "util/configparser.c" /* yacc.c:1646  */
+#line 2370 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 196:
-#line 314 "./util/configparser.y" /* yacc.c:1646  */
+  case 197:
+#line 316 "./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)
@@ -2369,11 +2378,11 @@ yyreduce:
                else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2373 "util/configparser.c" /* yacc.c:1646  */
+#line 2382 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 197:
-#line 323 "./util/configparser.y" /* yacc.c:1646  */
+  case 198:
+#line 325 "./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)
@@ -2381,11 +2390,11 @@ yyreduce:
                else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2385 "util/configparser.c" /* yacc.c:1646  */
+#line 2394 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 198:
-#line 332 "./util/configparser.y" /* yacc.c:1646  */
+  case 199:
+#line 334 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2393,11 +2402,11 @@ yyreduce:
                else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2397 "util/configparser.c" /* yacc.c:1646  */
+#line 2406 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 199:
-#line 341 "./util/configparser.y" /* yacc.c:1646  */
+  case 200:
+#line 343 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); 
                if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
@@ -2407,11 +2416,11 @@ yyreduce:
                else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2411 "util/configparser.c" /* yacc.c:1646  */
+#line 2420 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 352 "./util/configparser.y" /* yacc.c:1646  */
+  case 201:
+#line 354 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2419,11 +2428,11 @@ yyreduce:
                else cfg_parser->cfg->port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2423 "util/configparser.c" /* yacc.c:1646  */
+#line 2432 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 361 "./util/configparser.y" /* yacc.c:1646  */
+  case 202:
+#line 363 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
@@ -2433,29 +2442,43 @@ yyreduce:
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
        }
-#line 2437 "util/configparser.c" /* yacc.c:1646  */
+#line 2446 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 372 "./util/configparser.y" /* yacc.c:1646  */
+  case 203:
+#line 375 "./util/configparser.y" /* yacc.c:1646  */
+    {
+       #ifdef CLIENT_SUBNET
+               OUTYY(("P(server_client_subnet_always_forward:%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->client_subnet_always_forward =
+                               (strcmp((yyvsp[0].str), "yes")==0);
+       #else
+               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+       #endif
+               free((yyvsp[0].str));
+       }
+#line 2464 "util/configparser.c" /* yacc.c:1646  */
+    break;
+
+  case 204:
+#line 390 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
-               if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
-                       yyerror("option code expected");
-               else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
-                       yyerror("option code must be in interval [0, 65535]");
-               else cfg_parser->cfg->client_subnet_opcode = atoi((yyvsp[0].str));
+               OUTYY(("P(Depricated option, ignoring)\n"));
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
                free((yyvsp[0].str));
        }
-#line 2455 "util/configparser.c" /* yacc.c:1646  */
+#line 2478 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 203:
-#line 387 "./util/configparser.y" /* yacc.c:1646  */
+  case 205:
+#line 401 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
@@ -2465,17 +2488,17 @@ yyreduce:
                        cfg_parser->cfg->max_client_subnet_ipv4 = 32;
                else if (atoi((yyvsp[0].str)) < 0)
                        cfg_parser->cfg->max_client_subnet_ipv4 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv4 = atoi((yyvsp[0].str));
+               else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
                free((yyvsp[0].str));
        }
-#line 2475 "util/configparser.c" /* yacc.c:1646  */
+#line 2498 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 204:
-#line 404 "./util/configparser.y" /* yacc.c:1646  */
+  case 206:
+#line 418 "./util/configparser.y" /* yacc.c:1646  */
     {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
@@ -2485,17 +2508,17 @@ yyreduce:
                        cfg_parser->cfg->max_client_subnet_ipv6 = 128;
                else if (atoi((yyvsp[0].str)) < 0)
                        cfg_parser->cfg->max_client_subnet_ipv6 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv6 = atoi((yyvsp[0].str));
+               else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
                free((yyvsp[0].str));
        }
-#line 2495 "util/configparser.c" /* yacc.c:1646  */
+#line 2518 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 205:
-#line 421 "./util/configparser.y" /* yacc.c:1646  */
+  case 207:
+#line 435 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_ifs == 0)
@@ -2507,11 +2530,11 @@ yyreduce:
                else
                        cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
        }
-#line 2511 "util/configparser.c" /* yacc.c:1646  */
+#line 2534 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 206:
-#line 434 "./util/configparser.y" /* yacc.c:1646  */
+  case 208:
+#line 448 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->num_out_ifs == 0)
@@ -2525,11 +2548,11 @@ yyreduce:
                        cfg_parser->cfg->out_ifs[
                                cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
        }
-#line 2529 "util/configparser.c" /* yacc.c:1646  */
+#line 2552 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 449 "./util/configparser.y" /* yacc.c:1646  */
+  case 209:
+#line 463 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2537,11 +2560,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2541 "util/configparser.c" /* yacc.c:1646  */
+#line 2564 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 208:
-#line 458 "./util/configparser.y" /* yacc.c:1646  */
+  case 210:
+#line 472 "./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, 
@@ -2549,11 +2572,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2553 "util/configparser.c" /* yacc.c:1646  */
+#line 2576 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 209:
-#line 467 "./util/configparser.y" /* yacc.c:1646  */
+  case 211:
+#line 481 "./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, 
@@ -2561,11 +2584,11 @@ yyreduce:
                        yyerror("port number or range (\"low-high\") expected");
                free((yyvsp[0].str));
        }
-#line 2565 "util/configparser.c" /* yacc.c:1646  */
+#line 2588 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 210:
-#line 476 "./util/configparser.y" /* yacc.c:1646  */
+  case 212:
+#line 490 "./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)
@@ -2573,11 +2596,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2577 "util/configparser.c" /* yacc.c:1646  */
+#line 2600 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 211:
-#line 485 "./util/configparser.y" /* yacc.c:1646  */
+  case 213:
+#line 499 "./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)
@@ -2585,11 +2608,11 @@ yyreduce:
                else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2589 "util/configparser.c" /* yacc.c:1646  */
+#line 2612 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 494 "./util/configparser.y" /* yacc.c:1646  */
+  case 214:
+#line 508 "./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)
@@ -2597,11 +2620,11 @@ yyreduce:
                else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2601 "util/configparser.c" /* yacc.c:1646  */
+#line 2624 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 213:
-#line 503 "./util/configparser.y" /* yacc.c:1646  */
+  case 215:
+#line 517 "./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)
@@ -2609,11 +2632,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2613 "util/configparser.c" /* yacc.c:1646  */
+#line 2636 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 214:
-#line 512 "./util/configparser.y" /* yacc.c:1646  */
+  case 216:
+#line 526 "./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)
@@ -2621,11 +2644,11 @@ yyreduce:
                else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2625 "util/configparser.c" /* yacc.c:1646  */
+#line 2648 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 215:
-#line 521 "./util/configparser.y" /* yacc.c:1646  */
+  case 217:
+#line 535 "./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)
@@ -2633,11 +2656,11 @@ yyreduce:
                else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2637 "util/configparser.c" /* yacc.c:1646  */
+#line 2660 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 216:
-#line 530 "./util/configparser.y" /* yacc.c:1646  */
+  case 218:
+#line 544 "./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)
@@ -2645,11 +2668,11 @@ yyreduce:
                else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2649 "util/configparser.c" /* yacc.c:1646  */
+#line 2672 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 539 "./util/configparser.y" /* yacc.c:1646  */
+  case 219:
+#line 553 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2657,11 +2680,11 @@ yyreduce:
                else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2661 "util/configparser.c" /* yacc.c:1646  */
+#line 2684 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 548 "./util/configparser.y" /* yacc.c:1646  */
+  case 220:
+#line 562 "./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)
@@ -2669,11 +2692,11 @@ yyreduce:
                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
                 free((yyvsp[0].str));
        }
-#line 2673 "util/configparser.c" /* yacc.c:1646  */
+#line 2696 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 557 "./util/configparser.y" /* yacc.c:1646  */
+  case 221:
+#line 571 "./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)
@@ -2681,11 +2704,11 @@ yyreduce:
                else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2685 "util/configparser.c" /* yacc.c:1646  */
+#line 2708 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 566 "./util/configparser.y" /* yacc.c:1646  */
+  case 222:
+#line 580 "./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)
@@ -2693,11 +2716,11 @@ yyreduce:
                else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2697 "util/configparser.c" /* yacc.c:1646  */
+#line 2720 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 221:
-#line 575 "./util/configparser.y" /* yacc.c:1646  */
+  case 223:
+#line 589 "./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)
@@ -2705,31 +2728,31 @@ yyreduce:
                else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2709 "util/configparser.c" /* yacc.c:1646  */
+#line 2732 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 222:
-#line 584 "./util/configparser.y" /* yacc.c:1646  */
+  case 224:
+#line 598 "./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 2719 "util/configparser.c" /* yacc.c:1646  */
+#line 2742 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 223:
-#line 591 "./util/configparser.y" /* yacc.c:1646  */
+  case 225:
+#line 605 "./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 2729 "util/configparser.c" /* yacc.c:1646  */
+#line 2752 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 224:
-#line 598 "./util/configparser.y" /* yacc.c:1646  */
+  case 226:
+#line 612 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -2737,11 +2760,11 @@ yyreduce:
                else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 2741 "util/configparser.c" /* yacc.c:1646  */
+#line 2764 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 225:
-#line 607 "./util/configparser.y" /* yacc.c:1646  */
+  case 227:
+#line 621 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2749,11 +2772,11 @@ yyreduce:
                else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2753 "util/configparser.c" /* yacc.c:1646  */
+#line 2776 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 616 "./util/configparser.y" /* yacc.c:1646  */
+  case 228:
+#line 630 "./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)
@@ -2761,11 +2784,11 @@ yyreduce:
                else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2765 "util/configparser.c" /* yacc.c:1646  */
+#line 2788 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 625 "./util/configparser.y" /* yacc.c:1646  */
+  case 229:
+#line 639 "./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)
@@ -2778,11 +2801,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 2782 "util/configparser.c" /* yacc.c:1646  */
+#line 2805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 639 "./util/configparser.y" /* yacc.c:1646  */
+  case 230:
+#line 653 "./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)
@@ -2790,11 +2813,11 @@ yyreduce:
                else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2794 "util/configparser.c" /* yacc.c:1646  */
+#line 2817 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 648 "./util/configparser.y" /* yacc.c:1646  */
+  case 231:
+#line 662 "./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)
@@ -2802,11 +2825,11 @@ yyreduce:
                else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2806 "util/configparser.c" /* yacc.c:1646  */
+#line 2829 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 657 "./util/configparser.y" /* yacc.c:1646  */
+  case 232:
+#line 671 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
        if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -2814,31 +2837,31 @@ yyreduce:
        else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
        free((yyvsp[0].str));
   }
-#line 2818 "util/configparser.c" /* yacc.c:1646  */
+#line 2841 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 666 "./util/configparser.y" /* yacc.c:1646  */
+  case 233:
+#line 680 "./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 2828 "util/configparser.c" /* yacc.c:1646  */
+#line 2851 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 673 "./util/configparser.y" /* yacc.c:1646  */
+  case 234:
+#line 687 "./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 2838 "util/configparser.c" /* yacc.c:1646  */
+#line 2861 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 233:
-#line 680 "./util/configparser.y" /* yacc.c:1646  */
+  case 235:
+#line 694 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->directory);
@@ -2863,115 +2886,115 @@ yyreduce:
                        }
                }
        }
-#line 2867 "util/configparser.c" /* yacc.c:1646  */
+#line 2890 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 234:
-#line 706 "./util/configparser.y" /* yacc.c:1646  */
+  case 236:
+#line 720 "./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 2878 "util/configparser.c" /* yacc.c:1646  */
+#line 2901 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 235:
-#line 714 "./util/configparser.y" /* yacc.c:1646  */
+  case 237:
+#line 728 "./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 2888 "util/configparser.c" /* yacc.c:1646  */
+#line 2911 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 236:
-#line 721 "./util/configparser.y" /* yacc.c:1646  */
+  case 238:
+#line 735 "./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 2898 "util/configparser.c" /* yacc.c:1646  */
+#line 2921 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 237:
-#line 728 "./util/configparser.y" /* yacc.c:1646  */
+  case 239:
+#line 742 "./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 2908 "util/configparser.c" /* yacc.c:1646  */
+#line 2931 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 735 "./util/configparser.y" /* yacc.c:1646  */
+  case 240:
+#line 749 "./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 2918 "util/configparser.c" /* yacc.c:1646  */
+#line 2941 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 742 "./util/configparser.y" /* yacc.c:1646  */
+  case 241:
+#line 756 "./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 2929 "util/configparser.c" /* yacc.c:1646  */
+#line 2952 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 750 "./util/configparser.y" /* yacc.c:1646  */
+  case 242:
+#line 764 "./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 2940 "util/configparser.c" /* yacc.c:1646  */
+#line 2963 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 241:
-#line 758 "./util/configparser.y" /* yacc.c:1646  */
+  case 243:
+#line 772 "./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 2951 "util/configparser.c" /* yacc.c:1646  */
+#line 2974 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 242:
-#line 766 "./util/configparser.y" /* yacc.c:1646  */
+  case 244:
+#line 780 "./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 2961 "util/configparser.c" /* yacc.c:1646  */
+#line 2984 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 243:
-#line 773 "./util/configparser.y" /* yacc.c:1646  */
+  case 245:
+#line 787 "./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 2971 "util/configparser.c" /* yacc.c:1646  */
+#line 2994 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 244:
-#line 780 "./util/configparser.y" /* yacc.c:1646  */
+  case 246:
+#line 794 "./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)
@@ -2979,11 +3002,11 @@ yyreduce:
                else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2983 "util/configparser.c" /* yacc.c:1646  */
+#line 3006 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 245:
-#line 789 "./util/configparser.y" /* yacc.c:1646  */
+  case 247:
+#line 803 "./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)
@@ -2991,11 +3014,11 @@ yyreduce:
                else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 2995 "util/configparser.c" /* yacc.c:1646  */
+#line 3018 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 246:
-#line 798 "./util/configparser.y" /* yacc.c:1646  */
+  case 248:
+#line 812 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3003,53 +3026,53 @@ yyreduce:
                else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3007 "util/configparser.c" /* yacc.c:1646  */
+#line 3030 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 247:
-#line 807 "./util/configparser.y" /* yacc.c:1646  */
+  case 249:
+#line 821 "./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 3017 "util/configparser.c" /* yacc.c:1646  */
+#line 3040 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 248:
-#line 814 "./util/configparser.y" /* yacc.c:1646  */
+  case 250:
+#line 828 "./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 3027 "util/configparser.c" /* yacc.c:1646  */
+#line 3050 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 249:
-#line 821 "./util/configparser.y" /* yacc.c:1646  */
+  case 251:
+#line 835 "./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 3038 "util/configparser.c" /* yacc.c:1646  */
+#line 3061 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 829 "./util/configparser.y" /* yacc.c:1646  */
+  case 252:
+#line 843 "./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 3049 "util/configparser.c" /* yacc.c:1646  */
+#line 3072 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 251:
-#line 837 "./util/configparser.y" /* yacc.c:1646  */
+  case 253:
+#line 851 "./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)
@@ -3058,11 +3081,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3062 "util/configparser.c" /* yacc.c:1646  */
+#line 3085 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 252:
-#line 847 "./util/configparser.y" /* yacc.c:1646  */
+  case 254:
+#line 861 "./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)
@@ -3071,11 +3094,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3075 "util/configparser.c" /* yacc.c:1646  */
+#line 3098 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 253:
-#line 857 "./util/configparser.y" /* yacc.c:1646  */
+  case 255:
+#line 871 "./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)
@@ -3084,11 +3107,11 @@ yyreduce:
             (strcmp((yyvsp[0].str), "yes")==0);
         free((yyvsp[0].str));
     }
-#line 3088 "util/configparser.c" /* yacc.c:1646  */
+#line 3111 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 254:
-#line 867 "./util/configparser.y" /* yacc.c:1646  */
+  case 256:
+#line 881 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3100,11 +3123,11 @@ yyreduce:
                else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3104 "util/configparser.c" /* yacc.c:1646  */
+#line 3127 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 255:
-#line 880 "./util/configparser.y" /* yacc.c:1646  */
+  case 257:
+#line 894 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3114,22 +3137,22 @@ yyreduce:
                else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3118 "util/configparser.c" /* yacc.c:1646  */
+#line 3141 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 256:
-#line 891 "./util/configparser.y" /* yacc.c:1646  */
+  case 258:
+#line 905 "./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 3129 "util/configparser.c" /* yacc.c:1646  */
+#line 3152 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 257:
-#line 899 "./util/configparser.y" /* yacc.c:1646  */
+  case 259:
+#line 913 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3141,11 +3164,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3145 "util/configparser.c" /* yacc.c:1646  */
+#line 3168 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 258:
-#line 912 "./util/configparser.y" /* yacc.c:1646  */
+  case 260:
+#line 926 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3153,11 +3176,11 @@ yyreduce:
                else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3157 "util/configparser.c" /* yacc.c:1646  */
+#line 3180 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 259:
-#line 921 "./util/configparser.y" /* yacc.c:1646  */
+  case 261:
+#line 935 "./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)
@@ -3165,11 +3188,11 @@ yyreduce:
                else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3169 "util/configparser.c" /* yacc.c:1646  */
+#line 3192 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 930 "./util/configparser.y" /* yacc.c:1646  */
+  case 262:
+#line 944 "./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)
@@ -3177,11 +3200,11 @@ yyreduce:
                else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3181 "util/configparser.c" /* yacc.c:1646  */
+#line 3204 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 939 "./util/configparser.y" /* yacc.c:1646  */
+  case 263:
+#line 953 "./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)
@@ -3190,11 +3213,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3194 "util/configparser.c" /* yacc.c:1646  */
+#line 3217 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 949 "./util/configparser.y" /* yacc.c:1646  */
+  case 264:
+#line 963 "./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)
@@ -3203,22 +3226,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3207 "util/configparser.c" /* yacc.c:1646  */
+#line 3230 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 959 "./util/configparser.y" /* yacc.c:1646  */
+  case 265:
+#line 973 "./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 3218 "util/configparser.c" /* yacc.c:1646  */
+#line 3241 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 967 "./util/configparser.y" /* yacc.c:1646  */
+  case 266:
+#line 981 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3230,11 +3253,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3234 "util/configparser.c" /* yacc.c:1646  */
+#line 3257 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 980 "./util/configparser.y" /* yacc.c:1646  */
+  case 267:
+#line 994 "./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)
@@ -3242,22 +3265,22 @@ yyreduce:
                else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3246 "util/configparser.c" /* yacc.c:1646  */
+#line 3269 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 989 "./util/configparser.y" /* yacc.c:1646  */
+  case 268:
+#line 1003 "./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 3257 "util/configparser.c" /* yacc.c:1646  */
+#line 3280 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 997 "./util/configparser.y" /* yacc.c:1646  */
+  case 269:
+#line 1011 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3265,22 +3288,22 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3269 "util/configparser.c" /* yacc.c:1646  */
+#line 3292 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1006 "./util/configparser.y" /* yacc.c:1646  */
+  case 270:
+#line 1020 "./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 3280 "util/configparser.c" /* yacc.c:1646  */
+#line 3303 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1014 "./util/configparser.y" /* yacc.c:1646  */
+  case 271:
+#line 1028 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3292,11 +3315,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3296 "util/configparser.c" /* yacc.c:1646  */
+#line 3319 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1027 "./util/configparser.y" /* yacc.c:1646  */
+  case 272:
+#line 1041 "./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)
@@ -3304,21 +3327,21 @@ yyreduce:
                else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3308 "util/configparser.c" /* yacc.c:1646  */
+#line 3331 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1036 "./util/configparser.y" /* yacc.c:1646  */
+  case 273:
+#line 1050 "./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 3318 "util/configparser.c" /* yacc.c:1646  */
+#line 3341 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1043 "./util/configparser.y" /* yacc.c:1646  */
+  case 274:
+#line 1057 "./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)
@@ -3327,11 +3350,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3331 "util/configparser.c" /* yacc.c:1646  */
+#line 3354 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1053 "./util/configparser.y" /* yacc.c:1646  */
+  case 275:
+#line 1067 "./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)
@@ -3340,11 +3363,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3344 "util/configparser.c" /* yacc.c:1646  */
+#line 3367 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1063 "./util/configparser.y" /* yacc.c:1646  */
+  case 276:
+#line 1077 "./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)
@@ -3353,11 +3376,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3357 "util/configparser.c" /* yacc.c:1646  */
+#line 3380 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1073 "./util/configparser.y" /* yacc.c:1646  */
+  case 277:
+#line 1087 "./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)
@@ -3366,11 +3389,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3370 "util/configparser.c" /* yacc.c:1646  */
+#line 3393 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1083 "./util/configparser.y" /* yacc.c:1646  */
+  case 278:
+#line 1097 "./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)
@@ -3379,11 +3402,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3383 "util/configparser.c" /* yacc.c:1646  */
+#line 3406 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1093 "./util/configparser.y" /* yacc.c:1646  */
+  case 279:
+#line 1107 "./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)
@@ -3392,11 +3415,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3396 "util/configparser.c" /* yacc.c:1646  */
+#line 3419 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 278:
-#line 1103 "./util/configparser.y" /* yacc.c:1646  */
+  case 280:
+#line 1117 "./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)
@@ -3405,11 +3428,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3409 "util/configparser.c" /* yacc.c:1646  */
+#line 3432 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 279:
-#line 1113 "./util/configparser.y" /* yacc.c:1646  */
+  case 281:
+#line 1127 "./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)
@@ -3418,41 +3441,41 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3422 "util/configparser.c" /* yacc.c:1646  */
+#line 3445 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 280:
-#line 1123 "./util/configparser.y" /* yacc.c:1646  */
+  case 282:
+#line 1137 "./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 3432 "util/configparser.c" /* yacc.c:1646  */
+#line 3455 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 281:
-#line 1130 "./util/configparser.y" /* yacc.c:1646  */
+  case 283:
+#line 1144 "./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 3442 "util/configparser.c" /* yacc.c:1646  */
+#line 3465 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 282:
-#line 1137 "./util/configparser.y" /* yacc.c:1646  */
+  case 284:
+#line 1151 "./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 3452 "util/configparser.c" /* yacc.c:1646  */
+#line 3475 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 283:
-#line 1144 "./util/configparser.y" /* yacc.c:1646  */
+  case 285:
+#line 1158 "./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)
@@ -3460,11 +3483,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3464 "util/configparser.c" /* yacc.c:1646  */
+#line 3487 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1153 "./util/configparser.y" /* yacc.c:1646  */
+  case 286:
+#line 1167 "./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)
@@ -3472,11 +3495,11 @@ yyreduce:
                else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3476 "util/configparser.c" /* yacc.c:1646  */
+#line 3499 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1162 "./util/configparser.y" /* yacc.c:1646  */
+  case 287:
+#line 1176 "./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)
@@ -3484,21 +3507,21 @@ yyreduce:
                else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3488 "util/configparser.c" /* yacc.c:1646  */
+#line 3511 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 1171 "./util/configparser.y" /* yacc.c:1646  */
+  case 288:
+#line 1185 "./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 3498 "util/configparser.c" /* yacc.c:1646  */
+#line 3521 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 1178 "./util/configparser.y" /* yacc.c:1646  */
+  case 289:
+#line 1192 "./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)
@@ -3507,11 +3530,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3511 "util/configparser.c" /* yacc.c:1646  */
+#line 3534 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 1188 "./util/configparser.y" /* yacc.c:1646  */
+  case 290:
+#line 1202 "./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 &&
@@ -3527,21 +3550,21 @@ yyreduce:
                                fatal_exit("out of memory adding acl");
                }
        }
-#line 3531 "util/configparser.c" /* yacc.c:1646  */
+#line 3554 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 1205 "./util/configparser.y" /* yacc.c:1646  */
+  case 291:
+#line 1219 "./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 3541 "util/configparser.c" /* yacc.c:1646  */
+#line 3564 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 1212 "./util/configparser.y" /* yacc.c:1646  */
+  case 292:
+#line 1226 "./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) {
@@ -3558,11 +3581,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3562 "util/configparser.c" /* yacc.c:1646  */
+#line 3585 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 1230 "./util/configparser.y" /* yacc.c:1646  */
+  case 293:
+#line 1244 "./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) {
@@ -3574,11 +3597,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3578 "util/configparser.c" /* yacc.c:1646  */
+#line 3601 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 1243 "./util/configparser.y" /* yacc.c:1646  */
+  case 294:
+#line 1257 "./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) {
@@ -3590,11 +3613,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3594 "util/configparser.c" /* yacc.c:1646  */
+#line 3617 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 1256 "./util/configparser.y" /* yacc.c:1646  */
+  case 295:
+#line 1270 "./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)
@@ -3602,11 +3625,11 @@ yyreduce:
                else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3606 "util/configparser.c" /* yacc.c:1646  */
+#line 3629 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 1265 "./util/configparser.y" /* yacc.c:1646  */
+  case 296:
+#line 1279 "./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)
@@ -3614,11 +3637,11 @@ yyreduce:
                else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3618 "util/configparser.c" /* yacc.c:1646  */
+#line 3641 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 1274 "./util/configparser.y" /* yacc.c:1646  */
+  case 297:
+#line 1288 "./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)
@@ -3626,11 +3649,11 @@ yyreduce:
                else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3630 "util/configparser.c" /* yacc.c:1646  */
+#line 3653 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 1283 "./util/configparser.y" /* yacc.c:1646  */
+  case 298:
+#line 1297 "./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)
@@ -3638,11 +3661,11 @@ yyreduce:
                else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3642 "util/configparser.c" /* yacc.c:1646  */
+#line 3665 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 1292 "./util/configparser.y" /* yacc.c:1646  */
+  case 299:
+#line 1306 "./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)
@@ -3651,11 +3674,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3655 "util/configparser.c" /* yacc.c:1646  */
+#line 3678 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 1302 "./util/configparser.y" /* yacc.c:1646  */
+  case 300:
+#line 1316 "./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)
@@ -3664,11 +3687,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3668 "util/configparser.c" /* yacc.c:1646  */
+#line 3691 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 1312 "./util/configparser.y" /* yacc.c:1646  */
+  case 301:
+#line 1326 "./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)
@@ -3676,11 +3699,11 @@ yyreduce:
                else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3680 "util/configparser.c" /* yacc.c:1646  */
+#line 3703 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 1321 "./util/configparser.y" /* yacc.c:1646  */
+  case 302:
+#line 1335 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3688,11 +3711,11 @@ yyreduce:
                else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3692 "util/configparser.c" /* yacc.c:1646  */
+#line 3715 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 301:
-#line 1330 "./util/configparser.y" /* yacc.c:1646  */
+  case 303:
+#line 1344 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3704,11 +3727,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3708 "util/configparser.c" /* yacc.c:1646  */
+#line 3731 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 302:
-#line 1343 "./util/configparser.y" /* yacc.c:1646  */
+  case 304:
+#line 1357 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -3720,11 +3743,11 @@ yyreduce:
 #endif
                free((yyvsp[0].str));
        }
-#line 3724 "util/configparser.c" /* yacc.c:1646  */
+#line 3747 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 303:
-#line 1356 "./util/configparser.y" /* yacc.c:1646  */
+  case 305:
+#line 1370 "./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)
@@ -3732,21 +3755,21 @@ yyreduce:
                else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3736 "util/configparser.c" /* yacc.c:1646  */
+#line 3759 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 304:
-#line 1365 "./util/configparser.y" /* yacc.c:1646  */
+  case 306:
+#line 1379 "./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 3746 "util/configparser.c" /* yacc.c:1646  */
+#line 3769 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 1372 "./util/configparser.y" /* yacc.c:1646  */
+  case 307:
+#line 1386 "./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)
@@ -3754,11 +3777,11 @@ yyreduce:
                else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3758 "util/configparser.c" /* yacc.c:1646  */
+#line 3781 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 1381 "./util/configparser.y" /* yacc.c:1646  */
+  case 308:
+#line 1395 "./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)
@@ -3766,11 +3789,11 @@ yyreduce:
                else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3770 "util/configparser.c" /* yacc.c:1646  */
+#line 3793 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 1390 "./util/configparser.y" /* yacc.c:1646  */
+  case 309:
+#line 1404 "./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)
@@ -3778,11 +3801,11 @@ yyreduce:
                else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 3782 "util/configparser.c" /* yacc.c:1646  */
+#line 3805 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 1399 "./util/configparser.y" /* yacc.c:1646  */
+  case 310:
+#line 1413 "./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)
@@ -3791,22 +3814,22 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3795 "util/configparser.c" /* yacc.c:1646  */
+#line 3818 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 1408 "./util/configparser.y" /* yacc.c:1646  */
+  case 311:
+#line 1422 "./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 3806 "util/configparser.c" /* yacc.c:1646  */
+#line 3829 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 1416 "./util/configparser.y" /* yacc.c:1646  */
+  case 312:
+#line 1430 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -3818,22 +3841,22 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3822 "util/configparser.c" /* yacc.c:1646  */
+#line 3845 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 1429 "./util/configparser.y" /* yacc.c:1646  */
+  case 313:
+#line 1443 "./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 3833 "util/configparser.c" /* yacc.c:1646  */
+#line 3856 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 1437 "./util/configparser.y" /* yacc.c:1646  */
+  case 314:
+#line 1451 "./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 &&
@@ -3860,21 +3883,21 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 3864 "util/configparser.c" /* yacc.c:1646  */
+#line 3887 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 1465 "./util/configparser.y" /* yacc.c:1646  */
+  case 315:
+#line 1479 "./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 3874 "util/configparser.c" /* yacc.c:1646  */
+#line 3897 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 1472 "./util/configparser.y" /* yacc.c:1646  */
+  case 316:
+#line 1486 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -3888,11 +3911,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 3892 "util/configparser.c" /* yacc.c:1646  */
+#line 3915 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 1487 "./util/configparser.y" /* yacc.c:1646  */
+  case 317:
+#line 1501 "./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)
@@ -3901,11 +3924,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3905 "util/configparser.c" /* yacc.c:1646  */
+#line 3928 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 1497 "./util/configparser.y" /* yacc.c:1646  */
+  case 318:
+#line 1511 "./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)
@@ -3914,31 +3937,31 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3918 "util/configparser.c" /* yacc.c:1646  */
+#line 3941 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 1507 "./util/configparser.y" /* yacc.c:1646  */
+  case 319:
+#line 1521 "./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 3928 "util/configparser.c" /* yacc.c:1646  */
+#line 3951 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 1514 "./util/configparser.y" /* yacc.c:1646  */
+  case 320:
+#line 1528 "./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 3938 "util/configparser.c" /* yacc.c:1646  */
+#line 3961 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 1521 "./util/configparser.y" /* yacc.c:1646  */
+  case 321:
+#line 1535 "./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)
@@ -3946,11 +3969,11 @@ yyreduce:
                else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 3950 "util/configparser.c" /* yacc.c:1646  */
+#line 3973 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 1530 "./util/configparser.y" /* yacc.c:1646  */
+  case 322:
+#line 1544 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* p, *s = (yyvsp[0].str);
                OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
@@ -3963,11 +3986,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 3967 "util/configparser.c" /* yacc.c:1646  */
+#line 3990 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 1544 "./util/configparser.y" /* yacc.c:1646  */
+  case 323:
+#line 1558 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -3985,11 +4008,11 @@ yyreduce:
                        }
                }
        }
-#line 3989 "util/configparser.c" /* yacc.c:1646  */
+#line 4012 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 1563 "./util/configparser.y" /* yacc.c:1646  */
+  case 324:
+#line 1577 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4007,11 +4030,11 @@ yyreduce:
                        }
                }
        }
-#line 4011 "util/configparser.c" /* yacc.c:1646  */
+#line 4034 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 1582 "./util/configparser.y" /* yacc.c:1646  */
+  case 325:
+#line 1596 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
@@ -4022,11 +4045,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4026 "util/configparser.c" /* yacc.c:1646  */
+#line 4049 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 1594 "./util/configparser.y" /* yacc.c:1646  */
+  case 326:
+#line 1608 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
@@ -4037,11 +4060,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4041 "util/configparser.c" /* yacc.c:1646  */
+#line 4064 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 1606 "./util/configparser.y" /* yacc.c:1646  */
+  case 327:
+#line 1620 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
@@ -4052,11 +4075,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4056 "util/configparser.c" /* yacc.c:1646  */
+#line 4079 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 1618 "./util/configparser.y" /* yacc.c:1646  */
+  case 328:
+#line 1632 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
@@ -4066,11 +4089,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4070 "util/configparser.c" /* yacc.c:1646  */
+#line 4093 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 1629 "./util/configparser.y" /* yacc.c:1646  */
+  case 329:
+#line 1643 "./util/configparser.y" /* yacc.c:1646  */
     {
                size_t len = 0;
                uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
@@ -4088,11 +4111,11 @@ yyreduce:
                        }
                }
        }
-#line 4092 "util/configparser.c" /* yacc.c:1646  */
+#line 4115 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 1648 "./util/configparser.y" /* yacc.c:1646  */
+  case 330:
+#line 1662 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); 
                if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4100,11 +4123,11 @@ yyreduce:
                else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4104 "util/configparser.c" /* yacc.c:1646  */
+#line 4127 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 1658 "./util/configparser.y" /* yacc.c:1646  */
+  case 331:
+#line 1672 "./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)
@@ -4112,33 +4135,33 @@ yyreduce:
                else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4116 "util/configparser.c" /* yacc.c:1646  */
+#line 4139 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 1667 "./util/configparser.y" /* yacc.c:1646  */
+  case 332:
+#line 1681 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
        if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
                yyerror("memory size expected");
        free((yyvsp[0].str));
   }
-#line 4127 "util/configparser.c" /* yacc.c:1646  */
+#line 4150 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 1675 "./util/configparser.y" /* yacc.c:1646  */
+  case 333:
+#line 1689 "./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 4138 "util/configparser.c" /* yacc.c:1646  */
+#line 4161 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 1683 "./util/configparser.y" /* yacc.c:1646  */
+  case 334:
+#line 1697 "./util/configparser.y" /* yacc.c:1646  */
     {
        OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
        if(atoi((yyvsp[0].str)) == 0)
@@ -4150,11 +4173,11 @@ yyreduce:
        }
        free((yyvsp[0].str));
   }
-#line 4154 "util/configparser.c" /* yacc.c:1646  */
+#line 4177 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 1696 "./util/configparser.y" /* yacc.c:1646  */
+  case 335:
+#line 1710 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4166,11 +4189,11 @@ yyreduce:
                }
                free((yyvsp[0].str));
        }
-#line 4170 "util/configparser.c" /* yacc.c:1646  */
+#line 4193 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 1709 "./util/configparser.y" /* yacc.c:1646  */
+  case 336:
+#line 1723 "./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) {
@@ -4182,11 +4205,11 @@ yyreduce:
                                        "ratelimit-for-domain");
                }
        }
-#line 4186 "util/configparser.c" /* yacc.c:1646  */
+#line 4209 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 1722 "./util/configparser.y" /* yacc.c:1646  */
+  case 337:
+#line 1736 "./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) {
@@ -4198,11 +4221,11 @@ yyreduce:
                                        "ratelimit-below-domain");
                }
        }
-#line 4202 "util/configparser.c" /* yacc.c:1646  */
+#line 4225 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 1735 "./util/configparser.y" /* yacc.c:1646  */
+  case 338:
+#line 1749 "./util/configparser.y" /* yacc.c:1646  */
     { 
        OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); 
        if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
@@ -4210,11 +4233,11 @@ yyreduce:
        else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
        free((yyvsp[0].str));
        }
-#line 4214 "util/configparser.c" /* yacc.c:1646  */
+#line 4237 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 1744 "./util/configparser.y" /* yacc.c:1646  */
+  case 339:
+#line 1758 "./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)
@@ -4222,11 +4245,11 @@ yyreduce:
                else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4226 "util/configparser.c" /* yacc.c:1646  */
+#line 4249 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 1753 "./util/configparser.y" /* yacc.c:1646  */
+  case 340:
+#line 1767 "./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)
@@ -4235,11 +4258,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4239 "util/configparser.c" /* yacc.c:1646  */
+#line 4262 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 1763 "./util/configparser.y" /* yacc.c:1646  */
+  case 341:
+#line 1777 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4248,11 +4271,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4252 "util/configparser.c" /* yacc.c:1646  */
+#line 4275 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 1773 "./util/configparser.y" /* yacc.c:1646  */
+  case 342:
+#line 1787 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->stubs->name)
@@ -4261,31 +4284,31 @@ yyreduce:
                free(cfg_parser->cfg->stubs->name);
                cfg_parser->cfg->stubs->name = (yyvsp[0].str);
        }
-#line 4265 "util/configparser.c" /* yacc.c:1646  */
+#line 4288 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 1783 "./util/configparser.y" /* yacc.c:1646  */
+  case 343:
+#line 1797 "./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 4275 "util/configparser.c" /* yacc.c:1646  */
+#line 4298 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 1790 "./util/configparser.y" /* yacc.c:1646  */
+  case 344:
+#line 1804 "./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 4285 "util/configparser.c" /* yacc.c:1646  */
+#line 4308 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 1797 "./util/configparser.y" /* yacc.c:1646  */
+  case 345:
+#line 1811 "./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)
@@ -4293,11 +4316,11 @@ yyreduce:
                else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4297 "util/configparser.c" /* yacc.c:1646  */
+#line 4320 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 1806 "./util/configparser.y" /* yacc.c:1646  */
+  case 346:
+#line 1820 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4306,11 +4329,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4310 "util/configparser.c" /* yacc.c:1646  */
+#line 4333 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 1816 "./util/configparser.y" /* yacc.c:1646  */
+  case 347:
+#line 1830 "./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)
@@ -4319,11 +4342,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4323 "util/configparser.c" /* yacc.c:1646  */
+#line 4346 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 1826 "./util/configparser.y" /* yacc.c:1646  */
+  case 348:
+#line 1840 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->forwards->name)
@@ -4332,31 +4355,31 @@ yyreduce:
                free(cfg_parser->cfg->forwards->name);
                cfg_parser->cfg->forwards->name = (yyvsp[0].str);
        }
-#line 4336 "util/configparser.c" /* yacc.c:1646  */
+#line 4359 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 347:
-#line 1836 "./util/configparser.y" /* yacc.c:1646  */
+  case 349:
+#line 1850 "./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 4346 "util/configparser.c" /* yacc.c:1646  */
+#line 4369 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 348:
-#line 1843 "./util/configparser.y" /* yacc.c:1646  */
+  case 350:
+#line 1857 "./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 4356 "util/configparser.c" /* yacc.c:1646  */
+#line 4379 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 349:
-#line 1850 "./util/configparser.y" /* yacc.c:1646  */
+  case 351:
+#line 1864 "./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)
@@ -4364,11 +4387,11 @@ yyreduce:
                else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4368 "util/configparser.c" /* yacc.c:1646  */
+#line 4391 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 350:
-#line 1859 "./util/configparser.y" /* yacc.c:1646  */
+  case 352:
+#line 1873 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4377,11 +4400,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4381 "util/configparser.c" /* yacc.c:1646  */
+#line 4404 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 351:
-#line 1869 "./util/configparser.y" /* yacc.c:1646  */
+  case 353:
+#line 1883 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
                if(cfg_parser->cfg->views->name)
@@ -4390,11 +4413,11 @@ yyreduce:
                free(cfg_parser->cfg->views->name);
                cfg_parser->cfg->views->name = (yyvsp[0].str);
        }
-#line 4394 "util/configparser.c" /* yacc.c:1646  */
+#line 4417 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 352:
-#line 1879 "./util/configparser.y" /* yacc.c:1646  */
+  case 354:
+#line 1893 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
@@ -4422,11 +4445,11 @@ yyreduce:
                                fatal_exit("out of memory adding local-zone");
                }
        }
-#line 4426 "util/configparser.c" /* yacc.c:1646  */
+#line 4449 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 353:
-#line 1908 "./util/configparser.y" /* yacc.c:1646  */
+  case 355:
+#line 1922 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -4435,22 +4458,22 @@ yyreduce:
                        fatal_exit("out of memory adding per-view "
                                "response-ip action");
        }
-#line 4439 "util/configparser.c" /* yacc.c:1646  */
+#line 4462 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 354:
-#line 1918 "./util/configparser.y" /* yacc.c:1646  */
+  case 356:
+#line 1932 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
                if(!cfg_str2list_insert(
                        &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip-data");
        }
-#line 4450 "util/configparser.c" /* yacc.c:1646  */
+#line 4473 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 355:
-#line 1926 "./util/configparser.y" /* yacc.c:1646  */
+  case 357:
+#line 1940 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
@@ -4458,11 +4481,11 @@ yyreduce:
                        free((yyvsp[0].str));
                }
        }
-#line 4462 "util/configparser.c" /* yacc.c:1646  */
+#line 4485 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 356:
-#line 1935 "./util/configparser.y" /* yacc.c:1646  */
+  case 358:
+#line 1949 "./util/configparser.y" /* yacc.c:1646  */
     {
                char* ptr;
                OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
@@ -4476,11 +4499,11 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-#line 4480 "util/configparser.c" /* yacc.c:1646  */
+#line 4503 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 357:
-#line 1950 "./util/configparser.y" /* yacc.c:1646  */
+  case 359:
+#line 1964 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
                if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
@@ -4488,19 +4511,19 @@ yyreduce:
                else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4492 "util/configparser.c" /* yacc.c:1646  */
+#line 4515 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 358:
-#line 1959 "./util/configparser.y" /* yacc.c:1646  */
+  case 360:
+#line 1973 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-#line 4500 "util/configparser.c" /* yacc.c:1646  */
+#line 4523 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 369:
-#line 1970 "./util/configparser.y" /* yacc.c:1646  */
+  case 371:
+#line 1984 "./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)
@@ -4509,11 +4532,11 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4513 "util/configparser.c" /* yacc.c:1646  */
+#line 4536 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 370:
-#line 1980 "./util/configparser.y" /* yacc.c:1646  */
+  case 372:
+#line 1994 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
                if(atoi((yyvsp[0].str)) == 0)
@@ -4521,21 +4544,21 @@ yyreduce:
                else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4525 "util/configparser.c" /* yacc.c:1646  */
+#line 4548 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 371:
-#line 1989 "./util/configparser.y" /* yacc.c:1646  */
+  case 373:
+#line 2003 "./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 4535 "util/configparser.c" /* yacc.c:1646  */
+#line 4558 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 372:
-#line 1996 "./util/configparser.y" /* yacc.c:1646  */
+  case 374:
+#line 2010 "./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)
@@ -4544,122 +4567,122 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4548 "util/configparser.c" /* yacc.c:1646  */
+#line 4571 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 373:
-#line 2006 "./util/configparser.y" /* yacc.c:1646  */
+  case 375:
+#line 2020 "./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 4558 "util/configparser.c" /* yacc.c:1646  */
+#line 4581 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 374:
-#line 2013 "./util/configparser.y" /* yacc.c:1646  */
+  case 376:
+#line 2027 "./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 4568 "util/configparser.c" /* yacc.c:1646  */
+#line 4591 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 375:
-#line 2020 "./util/configparser.y" /* yacc.c:1646  */
+  case 377:
+#line 2034 "./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 4578 "util/configparser.c" /* yacc.c:1646  */
+#line 4601 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 376:
-#line 2027 "./util/configparser.y" /* yacc.c:1646  */
+  case 378:
+#line 2041 "./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 4588 "util/configparser.c" /* yacc.c:1646  */
+#line 4611 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 377:
-#line 2034 "./util/configparser.y" /* yacc.c:1646  */
+  case 379:
+#line 2048 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnstap:)\n"));
        }
-#line 4596 "util/configparser.c" /* yacc.c:1646  */
+#line 4619 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 392:
-#line 2051 "./util/configparser.y" /* yacc.c:1646  */
+  case 394:
+#line 2065 "./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 4607 "util/configparser.c" /* yacc.c:1646  */
+#line 4630 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 393:
-#line 2059 "./util/configparser.y" /* yacc.c:1646  */
+  case 395:
+#line 2073 "./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 4617 "util/configparser.c" /* yacc.c:1646  */
+#line 4640 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 394:
-#line 2066 "./util/configparser.y" /* yacc.c:1646  */
+  case 396:
+#line 2080 "./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 4628 "util/configparser.c" /* yacc.c:1646  */
+#line 4651 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 395:
-#line 2074 "./util/configparser.y" /* yacc.c:1646  */
+  case 397:
+#line 2088 "./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 4639 "util/configparser.c" /* yacc.c:1646  */
+#line 4662 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 396:
-#line 2082 "./util/configparser.y" /* yacc.c:1646  */
+  case 398:
+#line 2096 "./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 4649 "util/configparser.c" /* yacc.c:1646  */
+#line 4672 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 397:
-#line 2089 "./util/configparser.y" /* yacc.c:1646  */
+  case 399:
+#line 2103 "./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 4659 "util/configparser.c" /* yacc.c:1646  */
+#line 4682 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 398:
-#line 2096 "./util/configparser.y" /* yacc.c:1646  */
+  case 400:
+#line 2110 "./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)
@@ -4667,11 +4690,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4671 "util/configparser.c" /* yacc.c:1646  */
+#line 4694 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 399:
-#line 2105 "./util/configparser.y" /* yacc.c:1646  */
+  case 401:
+#line 2119 "./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)
@@ -4679,11 +4702,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_resolver_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4683 "util/configparser.c" /* yacc.c:1646  */
+#line 4706 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 400:
-#line 2114 "./util/configparser.y" /* yacc.c:1646  */
+  case 402:
+#line 2128 "./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)
@@ -4691,11 +4714,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4695 "util/configparser.c" /* yacc.c:1646  */
+#line 4718 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 401:
-#line 2123 "./util/configparser.y" /* yacc.c:1646  */
+  case 403:
+#line 2137 "./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)
@@ -4703,11 +4726,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_client_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4707 "util/configparser.c" /* yacc.c:1646  */
+#line 4730 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 402:
-#line 2132 "./util/configparser.y" /* yacc.c:1646  */
+  case 404:
+#line 2146 "./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)
@@ -4715,11 +4738,11 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4719 "util/configparser.c" /* yacc.c:1646  */
+#line 4742 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 403:
-#line 2141 "./util/configparser.y" /* yacc.c:1646  */
+  case 405:
+#line 2155 "./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)
@@ -4727,29 +4750,29 @@ yyreduce:
                else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
                        (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4731 "util/configparser.c" /* yacc.c:1646  */
+#line 4754 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 404:
-#line 2150 "./util/configparser.y" /* yacc.c:1646  */
+  case 406:
+#line 2164 "./util/configparser.y" /* yacc.c:1646  */
     { 
                OUTYY(("\nP(python:)\n")); 
        }
-#line 4739 "util/configparser.c" /* yacc.c:1646  */
+#line 4762 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 408:
-#line 2159 "./util/configparser.y" /* yacc.c:1646  */
+  case 410:
+#line 2173 "./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 4749 "util/configparser.c" /* yacc.c:1646  */
+#line 4772 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 409:
-#line 2165 "./util/configparser.y" /* yacc.c:1646  */
+  case 411:
+#line 2179 "./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)
@@ -4758,21 +4781,21 @@ yyreduce:
                        (strcmp((yyvsp[0].str), "yes")==0);
                free((yyvsp[0].str));
        }
-#line 4762 "util/configparser.c" /* yacc.c:1646  */
+#line 4785 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 410:
-#line 2175 "./util/configparser.y" /* yacc.c:1646  */
+  case 412:
+#line 2189 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->log_identity);
                cfg_parser->cfg->log_identity = (yyvsp[0].str);
        }
-#line 4772 "util/configparser.c" /* yacc.c:1646  */
+#line 4795 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 411:
-#line 2182 "./util/configparser.y" /* yacc.c:1646  */
+  case 413:
+#line 2196 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
                validate_respip_action((yyvsp[0].str));
@@ -4780,42 +4803,42 @@ yyreduce:
                        (yyvsp[-1].str), (yyvsp[0].str)))
                        fatal_exit("out of memory adding response-ip");
        }
-#line 4784 "util/configparser.c" /* yacc.c:1646  */
+#line 4807 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 412:
-#line 2191 "./util/configparser.y" /* yacc.c:1646  */
+  case 414:
+#line 2205 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
                        if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
                                (yyvsp[-1].str), (yyvsp[0].str)))
                                fatal_exit("out of memory adding response-ip-data");
        }
-#line 4795 "util/configparser.c" /* yacc.c:1646  */
+#line 4818 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 413:
-#line 2199 "./util/configparser.y" /* yacc.c:1646  */
+  case 415:
+#line 2213 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("\nP(dnscrypt:)\n"));
                OUTYY(("\nP(dnscrypt:)\n"));
        }
-#line 4804 "util/configparser.c" /* yacc.c:1646  */
+#line 4827 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 421:
-#line 2211 "./util/configparser.y" /* yacc.c:1646  */
+  case 423:
+#line 2225 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_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->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
        }
-#line 4815 "util/configparser.c" /* yacc.c:1646  */
+#line 4838 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 422:
-#line 2220 "./util/configparser.y" /* yacc.c:1646  */
+  case 424:
+#line 2234 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
 
@@ -4824,41 +4847,41 @@ yyreduce:
                else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
                free((yyvsp[0].str));
        }
-#line 4828 "util/configparser.c" /* yacc.c:1646  */
+#line 4851 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 423:
-#line 2230 "./util/configparser.y" /* yacc.c:1646  */
+  case 425:
+#line 2244 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
                free(cfg_parser->cfg->dnscrypt_provider);
                cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
        }
-#line 4838 "util/configparser.c" /* yacc.c:1646  */
+#line 4861 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 424:
-#line 2237 "./util/configparser.y" /* yacc.c:1646  */
+  case 426:
+#line 2251 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-provider-cert");
        }
-#line 4848 "util/configparser.c" /* yacc.c:1646  */
+#line 4871 "util/configparser.c" /* yacc.c:1646  */
     break;
 
-  case 425:
-#line 2244 "./util/configparser.y" /* yacc.c:1646  */
+  case 427:
+#line 2258 "./util/configparser.y" /* yacc.c:1646  */
     {
                OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
                        fatal_exit("out of memory adding dnscrypt-secret-key");
        }
-#line 4858 "util/configparser.c" /* yacc.c:1646  */
+#line 4881 "util/configparser.c" /* yacc.c:1646  */
     break;
 
 
-#line 4862 "util/configparser.c" /* yacc.c:1646  */
+#line 4885 "util/configparser.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -5086,7 +5109,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2250 "./util/configparser.y" /* yacc.c:1906  */
+#line 2264 "./util/configparser.y" /* yacc.c:1906  */
 
 
 /* parse helper routines could be here */
index 881c2e63776dd2831674de310fe7b5ae6456ca7f..4bb4c6e99b821a69ad11d31a0a8d06c94985de5b 100644 (file)
@@ -217,38 +217,39 @@ extern int yydebug;
     VAR_IP_RATELIMIT_FACTOR = 427,
     VAR_RATELIMIT_FACTOR = 428,
     VAR_SEND_CLIENT_SUBNET = 429,
-    VAR_CLIENT_SUBNET_OPCODE = 430,
-    VAR_MAX_CLIENT_SUBNET_IPV4 = 431,
-    VAR_MAX_CLIENT_SUBNET_IPV6 = 432,
-    VAR_CAPS_WHITELIST = 433,
-    VAR_CACHE_MAX_NEGATIVE_TTL = 434,
-    VAR_PERMIT_SMALL_HOLDDOWN = 435,
-    VAR_QNAME_MINIMISATION = 436,
-    VAR_QNAME_MINIMISATION_STRICT = 437,
-    VAR_IP_FREEBIND = 438,
-    VAR_DEFINE_TAG = 439,
-    VAR_LOCAL_ZONE_TAG = 440,
-    VAR_ACCESS_CONTROL_TAG = 441,
-    VAR_LOCAL_ZONE_OVERRIDE = 442,
-    VAR_ACCESS_CONTROL_TAG_ACTION = 443,
-    VAR_ACCESS_CONTROL_TAG_DATA = 444,
-    VAR_VIEW = 445,
-    VAR_ACCESS_CONTROL_VIEW = 446,
-    VAR_VIEW_FIRST = 447,
-    VAR_SERVE_EXPIRED = 448,
-    VAR_FAKE_DSA = 449,
-    VAR_FAKE_SHA1 = 450,
-    VAR_LOG_IDENTITY = 451,
-    VAR_HIDE_TRUSTANCHOR = 452,
-    VAR_USE_SYSTEMD = 453,
-    VAR_SHM_ENABLE = 454,
-    VAR_SHM_KEY = 455,
-    VAR_DNSCRYPT = 456,
-    VAR_DNSCRYPT_ENABLE = 457,
-    VAR_DNSCRYPT_PORT = 458,
-    VAR_DNSCRYPT_PROVIDER = 459,
-    VAR_DNSCRYPT_SECRET_KEY = 460,
-    VAR_DNSCRYPT_PROVIDER_CERT = 461
+    VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 430,
+    VAR_CLIENT_SUBNET_OPCODE = 431,
+    VAR_MAX_CLIENT_SUBNET_IPV4 = 432,
+    VAR_MAX_CLIENT_SUBNET_IPV6 = 433,
+    VAR_CAPS_WHITELIST = 434,
+    VAR_CACHE_MAX_NEGATIVE_TTL = 435,
+    VAR_PERMIT_SMALL_HOLDDOWN = 436,
+    VAR_QNAME_MINIMISATION = 437,
+    VAR_QNAME_MINIMISATION_STRICT = 438,
+    VAR_IP_FREEBIND = 439,
+    VAR_DEFINE_TAG = 440,
+    VAR_LOCAL_ZONE_TAG = 441,
+    VAR_ACCESS_CONTROL_TAG = 442,
+    VAR_LOCAL_ZONE_OVERRIDE = 443,
+    VAR_ACCESS_CONTROL_TAG_ACTION = 444,
+    VAR_ACCESS_CONTROL_TAG_DATA = 445,
+    VAR_VIEW = 446,
+    VAR_ACCESS_CONTROL_VIEW = 447,
+    VAR_VIEW_FIRST = 448,
+    VAR_SERVE_EXPIRED = 449,
+    VAR_FAKE_DSA = 450,
+    VAR_FAKE_SHA1 = 451,
+    VAR_LOG_IDENTITY = 452,
+    VAR_HIDE_TRUSTANCHOR = 453,
+    VAR_USE_SYSTEMD = 454,
+    VAR_SHM_ENABLE = 455,
+    VAR_SHM_KEY = 456,
+    VAR_DNSCRYPT = 457,
+    VAR_DNSCRYPT_ENABLE = 458,
+    VAR_DNSCRYPT_PORT = 459,
+    VAR_DNSCRYPT_PROVIDER = 460,
+    VAR_DNSCRYPT_SECRET_KEY = 461,
+    VAR_DNSCRYPT_PROVIDER_CERT = 462
   };
 #endif
 /* Tokens.  */
@@ -424,38 +425,39 @@ extern int yydebug;
 #define VAR_IP_RATELIMIT_FACTOR 427
 #define VAR_RATELIMIT_FACTOR 428
 #define VAR_SEND_CLIENT_SUBNET 429
-#define VAR_CLIENT_SUBNET_OPCODE 430
-#define VAR_MAX_CLIENT_SUBNET_IPV4 431
-#define VAR_MAX_CLIENT_SUBNET_IPV6 432
-#define VAR_CAPS_WHITELIST 433
-#define VAR_CACHE_MAX_NEGATIVE_TTL 434
-#define VAR_PERMIT_SMALL_HOLDDOWN 435
-#define VAR_QNAME_MINIMISATION 436
-#define VAR_QNAME_MINIMISATION_STRICT 437
-#define VAR_IP_FREEBIND 438
-#define VAR_DEFINE_TAG 439
-#define VAR_LOCAL_ZONE_TAG 440
-#define VAR_ACCESS_CONTROL_TAG 441
-#define VAR_LOCAL_ZONE_OVERRIDE 442
-#define VAR_ACCESS_CONTROL_TAG_ACTION 443
-#define VAR_ACCESS_CONTROL_TAG_DATA 444
-#define VAR_VIEW 445
-#define VAR_ACCESS_CONTROL_VIEW 446
-#define VAR_VIEW_FIRST 447
-#define VAR_SERVE_EXPIRED 448
-#define VAR_FAKE_DSA 449
-#define VAR_FAKE_SHA1 450
-#define VAR_LOG_IDENTITY 451
-#define VAR_HIDE_TRUSTANCHOR 452
-#define VAR_USE_SYSTEMD 453
-#define VAR_SHM_ENABLE 454
-#define VAR_SHM_KEY 455
-#define VAR_DNSCRYPT 456
-#define VAR_DNSCRYPT_ENABLE 457
-#define VAR_DNSCRYPT_PORT 458
-#define VAR_DNSCRYPT_PROVIDER 459
-#define VAR_DNSCRYPT_SECRET_KEY 460
-#define VAR_DNSCRYPT_PROVIDER_CERT 461
+#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 430
+#define VAR_CLIENT_SUBNET_OPCODE 431
+#define VAR_MAX_CLIENT_SUBNET_IPV4 432
+#define VAR_MAX_CLIENT_SUBNET_IPV6 433
+#define VAR_CAPS_WHITELIST 434
+#define VAR_CACHE_MAX_NEGATIVE_TTL 435
+#define VAR_PERMIT_SMALL_HOLDDOWN 436
+#define VAR_QNAME_MINIMISATION 437
+#define VAR_QNAME_MINIMISATION_STRICT 438
+#define VAR_IP_FREEBIND 439
+#define VAR_DEFINE_TAG 440
+#define VAR_LOCAL_ZONE_TAG 441
+#define VAR_ACCESS_CONTROL_TAG 442
+#define VAR_LOCAL_ZONE_OVERRIDE 443
+#define VAR_ACCESS_CONTROL_TAG_ACTION 444
+#define VAR_ACCESS_CONTROL_TAG_DATA 445
+#define VAR_VIEW 446
+#define VAR_ACCESS_CONTROL_VIEW 447
+#define VAR_VIEW_FIRST 448
+#define VAR_SERVE_EXPIRED 449
+#define VAR_FAKE_DSA 450
+#define VAR_FAKE_SHA1 451
+#define VAR_LOG_IDENTITY 452
+#define VAR_HIDE_TRUSTANCHOR 453
+#define VAR_USE_SYSTEMD 454
+#define VAR_SHM_ENABLE 455
+#define VAR_SHM_KEY 456
+#define VAR_DNSCRYPT 457
+#define VAR_DNSCRYPT_ENABLE 458
+#define VAR_DNSCRYPT_PORT 459
+#define VAR_DNSCRYPT_PROVIDER 460
+#define VAR_DNSCRYPT_SECRET_KEY 461
+#define VAR_DNSCRYPT_PROVIDER_CERT 462
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -466,7 +468,7 @@ union YYSTYPE
 
        char*   str;
 
-#line 470 "util/configparser.h" /* yacc.c:1909  */
+#line 472 "util/configparser.h" /* yacc.c:1909  */
 };
 
 typedef union YYSTYPE YYSTYPE;
index 6ecb5301aaef7441282efe79694456a615690ba8..4a04367f4d4126fcea108d96dbcf6abce8e41e8d 100644 (file)
@@ -131,7 +131,8 @@ extern struct config_parser_state* cfg_parser;
 %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
 %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN
 %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR
-%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_OPCODE
+%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ALWAYS_FORWARD
+%token VAR_CLIENT_SUBNET_OPCODE
 %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6
 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
 %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND
@@ -213,8 +214,9 @@ content_server: server_num_threads | server_verbosity | server_port |
        server_ip_ratelimit_size | server_ratelimit_size |
        server_ratelimit_for_domain |
        server_ratelimit_below_domain | server_ratelimit_factor |
-       server_ip_ratelimit_factor |
-       server_send_client_subnet | server_client_subnet_opcode |
+       server_ip_ratelimit_factor | server_send_client_subnet |
+       server_client_subnet_always_forward |
+       server_client_subnet_opcode |
        server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 |
        server_caps_whitelist | server_cache_max_negative_ttl |
        server_permit_small_holddown | server_qname_minimisation |
@@ -368,15 +370,27 @@ server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG
        #endif
        }
        ;
+server_client_subnet_always_forward:
+       VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG
+       {
+       #ifdef CLIENT_SUBNET
+               OUTYY(("P(server_client_subnet_always_forward:%s)\n", $2));
+               if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+                       yyerror("expected yes or no.");
+               else
+                       cfg_parser->cfg->client_subnet_always_forward =
+                               (strcmp($2, "yes")==0);
+       #else
+               OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
+       #endif
+               free($2);
+       }
+       ;
 server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG
        {
        #ifdef CLIENT_SUBNET
                OUTYY(("P(client_subnet_opcode:%s)\n", $2));
-               if(atoi($2) == 0 && strcmp($2, "0") != 0)
-                       yyerror("option code expected");
-               else if(atoi($2) > 65535 || atoi($2) < 0)
-                       yyerror("option code must be in interval [0, 65535]");
-               else cfg_parser->cfg->client_subnet_opcode = atoi($2);
+               OUTYY(("P(Depricated option, ignoring)\n"));
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
@@ -393,7 +407,7 @@ server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG
                        cfg_parser->cfg->max_client_subnet_ipv4 = 32;
                else if (atoi($2) < 0)
                        cfg_parser->cfg->max_client_subnet_ipv4 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv4 = atoi($2);
+               else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi($2);
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
@@ -410,7 +424,7 @@ server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG
                        cfg_parser->cfg->max_client_subnet_ipv6 = 128;
                else if (atoi($2) < 0)
                        cfg_parser->cfg->max_client_subnet_ipv6 = 0;
-               else cfg_parser->cfg->max_client_subnet_ipv6 = atoi($2);
+               else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi($2);
        #else
                OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
        #endif
index be1b191fbc1e2b42e788e2488b6fd7115e0d8525..1ba34b639c425e98594fc95c86e9e8ce4502958c 100644 (file)
@@ -983,19 +983,20 @@ int edns_opt_list_remove(struct edns_option** list, uint16_t code)
 }
 
 static int inplace_cb_reply_call_generic(
-    struct inplace_cb_reply* callback_list, enum inplace_cb_list_type type,
+    struct inplace_cb* callback_list, enum inplace_cb_list_type type,
        struct query_info* qinfo, struct module_qstate* qstate,
        struct reply_info* rep, int rcode, struct edns_data* edns,
        struct regional* region)
 {
-       struct inplace_cb_reply* cb;
+       struct inplace_cb* cb;
        struct edns_option* opt_list_out = NULL;
        if(qstate)
                opt_list_out = qstate->edns_opts_front_out;
        for(cb=callback_list; cb; cb=cb->next) {
-               fptr_ok(fptr_whitelist_inplace_cb_reply_generic(cb->cb, type));
-               (void)(*cb->cb)(qinfo, qstate, rep, rcode, edns, &opt_list_out, region,
-                       cb->cb_arg);
+               fptr_ok(fptr_whitelist_inplace_cb_reply_generic(
+                       (inplace_cb_reply_func_type*)cb->cb, type));
+               (void)(*(inplace_cb_reply_func_type*)cb->cb)(qinfo, qstate, rep,
+                       rcode, edns, &opt_list_out, region, cb->id, cb->cb_arg);
        }
        edns->opt_list = opt_list_out;
        return 1;
@@ -1048,11 +1049,13 @@ int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo,
        uint8_t* zone, size_t zonelen, struct module_qstate* qstate,
        struct regional* region)
 {
-       struct inplace_cb_query* cb = env->inplace_cb_lists[inplace_cb_query];
+       struct inplace_cb* cb = env->inplace_cb_lists[inplace_cb_query];
        for(; cb; cb=cb->next) {
-               fptr_ok(fptr_whitelist_inplace_cb_query(cb->cb));
-               (void)(*cb->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen,
-                       region, cb->cb_arg);
+               fptr_ok(fptr_whitelist_inplace_cb_query(
+                       (inplace_cb_query_func_type*)cb->cb));
+               (void)(*(inplace_cb_query_func_type*)cb->cb)(qinfo, flags,
+                       qstate, addr, addrlen, zone, zonelen, region,
+                       cb->id, cb->cb_arg);
        }
        return 1;
 }
@@ -1060,11 +1063,13 @@ int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo,
 int inplace_cb_edns_back_parsed_call(struct module_env* env, 
        struct module_qstate* qstate)
 {
-       struct inplace_cb_edns_back_parsed* cb =
+       struct inplace_cb* cb =
                env->inplace_cb_lists[inplace_cb_edns_back_parsed];
        for(; cb; cb=cb->next) {
-               fptr_ok(fptr_whitelist_inplace_cb_edns_back_parsed(cb->cb));
-               (void)(*cb->cb)(qstate, cb->cb_arg);
+               fptr_ok(fptr_whitelist_inplace_cb_edns_back_parsed(
+                       (inplace_cb_edns_back_parsed_func_type*)cb->cb));
+               (void)(*(inplace_cb_edns_back_parsed_func_type*)cb->cb)(qstate,
+                       cb->id, cb->cb_arg);
        }
        return 1;
 }
index b28cf7b645522703172dc1ba7761ee34325d656a..4416f10b2775d2a579985187da840636f1b681d1 100644 (file)
@@ -496,7 +496,7 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr,
        return 0;
 }
 
-int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* ATTR_UNUSED(fptr))
+int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr)
 {
 #ifdef CLIENT_SUBNET
        if(fptr == &ecs_whitelist_check)
@@ -506,7 +506,7 @@ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* ATTR_UNUSED(fptr
 }
 
 int fptr_whitelist_inplace_cb_edns_back_parsed(
-       inplace_cb_edns_back_parsed_func_type* ATTR_UNUSED(fptr))
+       inplace_cb_edns_back_parsed_func_type* fptr)
 {
 #ifdef CLIENT_SUBNET
        if(fptr == &ecs_edns_back_parsed)
index 6af46c8e3d51e6fdb1b2edf56641286efa9a32cf..da93ad31c9188489d20f8a396f261ebfaf2e76fa 100644 (file)
@@ -123,115 +123,24 @@ edns_register_option(uint16_t opt_code, int bypass_cache_stage,
        return 1;
 }
 
-static int
-inplace_cb_reply_register_generic(inplace_cb_reply_func_type* cb,
-       enum inplace_cb_list_type type, void* cb_arg, struct module_env* env)
-{
-       struct inplace_cb_reply* callback;
-       struct inplace_cb_reply** prevp;
-       if(env->worker) {
-               log_err("invalid edns callback registration: "
-                       "trying to register callback after module init phase");
-               return 0;
-       }
-
-       callback = (struct inplace_cb_reply*)calloc(1, sizeof(*callback));
-       if(callback == NULL) {
-               log_err("out of memory during edns callback registration.");
-               return 0;
-       }
-       callback->next = NULL;
-       callback->cb = cb;
-    callback->cb_arg = cb_arg;
-       
-       prevp = (struct inplace_cb_reply**) &env->inplace_cb_lists[type];
-       /* append at end of list */
-       while(*prevp != NULL)
-               prevp = &((*prevp)->next);
-       *prevp = callback;
-       return 1;
-}
-
-int
-inplace_cb_reply_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env)
-{
-       return inplace_cb_reply_register_generic(cb, inplace_cb_reply, cb_arg,
-               env);
-}
-
-int
-inplace_cb_reply_cache_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env)
-{
-       return inplace_cb_reply_register_generic(cb, inplace_cb_reply_cache,
-               cb_arg, env);
-}
-
 int
-inplace_cb_reply_local_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env)
-{
-       return inplace_cb_reply_register_generic(cb, inplace_cb_reply_local,
-               cb_arg, env);
-}
-
-int
-inplace_cb_reply_servfail_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env)
-{
-       return inplace_cb_reply_register_generic(cb, inplace_cb_reply_servfail,
-               cb_arg, env);
-}
-
-static void
-inplace_cb_reply_delete_generic(struct module_env* env,
-       enum inplace_cb_list_type type)
-{
-       struct inplace_cb_reply* curr = env->inplace_cb_lists[type];
-       struct inplace_cb_reply* tmp;
-       /* delete list */
-       while(curr) {
-               tmp = curr->next;
-               free(curr);
-               curr = tmp;
-       }
-       /* update head pointer */
-       env->inplace_cb_lists[type] = NULL;
-}
-
-void inplace_cb_reply_delete(struct module_env* env)
-{
-       inplace_cb_reply_delete_generic(env, inplace_cb_reply);
-}
-
-void inplace_cb_reply_cache_delete(struct module_env* env)
-{
-       inplace_cb_reply_delete_generic(env, inplace_cb_reply_cache);
-}
-
-void inplace_cb_reply_servfail_delete(struct module_env* env)
+inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg,
+       size_t cbarg_len, struct module_env* env, int id)
 {
-       inplace_cb_reply_delete_generic(env, inplace_cb_reply_servfail);
-}
-
-int
-inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg,
-       size_t cbarg_len, struct module_env* env)
-{
-       struct inplace_cb_query* callback;
-       struct inplace_cb_query** prevp;
+       struct inplace_cb* callback;
+       struct inplace_cb** prevp;
        if(env->worker) {
                log_err("invalid edns callback registration: "
                        "trying to register callback after module init phase");
                return 0;
        }
 
-       callback = (struct inplace_cb_query*)calloc(1, sizeof(*callback));
+       callback = (struct inplace_cb*)calloc(1, sizeof(*callback));
        if(callback == NULL) {
                log_err("out of memory during edns callback registration.");
                return 0;
        }
+       callback->id = id;
        callback->next = NULL;
        callback->cb = cb;
        if(cbarg) {
@@ -244,8 +153,7 @@ inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg,
                memcpy(callback->cb_arg, cbarg, cbarg_len);
        }
        
-       prevp = (struct inplace_cb_query**)
-               &env->inplace_cb_lists[inplace_cb_query];
+       prevp = (struct inplace_cb**) &env->inplace_cb_lists[type];
        /* append at end of list */
        while(*prevp != NULL)
                prevp = &((*prevp)->next);
@@ -254,83 +162,30 @@ inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg,
 }
 
 void
-inplace_cb_query_delete(struct module_env* env)
-{
-       struct inplace_cb_query* curr = env->inplace_cb_lists[inplace_cb_query];
-       struct inplace_cb_query* tmp;
-       /* delete list */
-       while(curr) {
-               tmp = curr->next;
-               free(curr->cb_arg);
-               free(curr);
-               curr = tmp;
-       }
-       /* update head pointer */
-       env->inplace_cb_lists[inplace_cb_query] = NULL;
-}
-
-int
-inplace_cb_edns_back_parsed_register(inplace_cb_edns_back_parsed_func_type* cb,
-       void* cbarg, size_t cbarg_len, struct module_env* env)
-{
-       struct inplace_cb_edns_back_parsed* callback;
-       struct inplace_cb_edns_back_parsed** prevp;
-       if(env->worker) {
-               log_err("invalid edns callback registration: "
-                       "trying to register callback after module init phase");
-               return 0;
-       }
-
-       callback = (struct inplace_cb_edns_back_parsed*)calloc(1, sizeof(*callback));
-       if(callback == NULL) {
-               log_err("out of memory during edns callback registration.");
-               return 0;
-       }
-       callback->next = NULL;
-       callback->cb = cb;
-       if(cbarg) {
-               if(!(callback->cb_arg = calloc(1, cbarg_len))){
-                       log_err("out of memory during edns callback argument"
-                               "registration.");
-                       free(callback);
-                       return 0;
+inplace_cb_delete(struct module_env* env, enum inplace_cb_list_type type,
+       int id)
+{
+       struct inplace_cb* temp = env->inplace_cb_lists[type];
+       struct inplace_cb* prev = NULL;
+
+       while(temp) {
+               if(temp->id == id) {
+                       if(!prev) {
+                               env->inplace_cb_lists[type] = temp->next;
+                               free(temp);
+                               temp = env->inplace_cb_lists[type];
+                       }
+                       else {
+                               prev->next = temp->next;
+                               free(temp);
+                               temp = prev->next;
+                       }
+               }
+               else {
+                       prev = temp;
+                       temp = temp->next;
                }
-               memcpy(callback->cb_arg, cbarg, cbarg_len);
-       }
-       
-       prevp = (struct inplace_cb_edns_back_parsed**)
-               &env->inplace_cb_lists[inplace_cb_edns_back_parsed];
-       /* append at end of list */
-       while(*prevp != NULL)
-               prevp = &((*prevp)->next);
-       *prevp = callback;
-       return 1;
-}
-
-void
-inplace_cb_edns_back_parsed_delete(struct module_env* env)
-{
-       struct inplace_cb_edns_back_parsed* curr =
-               env->inplace_cb_lists[inplace_cb_edns_back_parsed];
-       struct inplace_cb_edns_back_parsed* tmp;
-       /* delete list */
-       while(curr) {
-               tmp = curr->next;
-               free(curr->cb_arg);
-               free(curr);
-               curr = tmp;
        }
-       /* update head pointer */
-       env->inplace_cb_lists[inplace_cb_edns_back_parsed] = NULL;
-}
-
-void
-inplace_cb_lists_delete(struct module_env* env)
-{
-    inplace_cb_reply_delete(env);
-    inplace_cb_reply_cache_delete(env);
-    inplace_cb_reply_servfail_delete(env);
-    inplace_cb_query_delete(env);
 }
 
 struct edns_known_option*
index dfa84b1cf901b34131f2787915b60d22151c7e53..dc6ba2b8d01598adfc3248776162a8c2f7013abf 100644 (file)
@@ -215,6 +215,19 @@ struct edns_known_option {
        int no_aggregation;
 };
 
+/**
+ * Inplace callback list of registered routines to be called.
+ */
+struct inplace_cb {
+       /** next in list */
+       struct inplace_cb* next;
+       /** Inplace callback routine */
+       void* cb;
+       void* cb_arg;
+       /** module id */
+       int id;
+};
+
 /**
  * Inplace callback function called before replying.
  * Called as func(edns, qstate, opt_list_out, qinfo, reply_info, rcode,
@@ -234,24 +247,7 @@ struct edns_known_option {
 typedef int inplace_cb_reply_func_type(struct query_info* qinfo,
        struct module_qstate* qstate, struct reply_info* rep, int rcode,
        struct edns_data* edns, struct edns_option** opt_list_out, 
-       struct regional* region, void* python_callback);
-
-/**
- * Inplace callback list of registered routines to be called before replying 
- * with a resolved query.
- */
-struct inplace_cb_reply {
-       /** next in list */
-       struct inplace_cb_reply* next;
-       /**
-        * Inplace callback routine for cache stage response.
-        * called as cb(qinfo, qstate, qinfo, reply_info, rcode, edns,
-        *              opt_list_out, region, python_callback);
-        * python_callback is only used for registering a python callback function.
-        */
-       inplace_cb_reply_func_type* cb;
-       void* cb_arg;
-};
+       struct regional* region, int id, void* callback);
 
 /**
  * Inplace callback function called before sending the query to a nameserver.
@@ -273,24 +269,7 @@ struct inplace_cb_reply {
 typedef int inplace_cb_query_func_type(struct query_info* qinfo, uint16_t flags,
        struct module_qstate* qstate, struct sockaddr_storage* addr,
        socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region,
-       void* python_callback);
-
-/**
- * Inplace callback list of registered routines to be called before quering a
- * nameserver.
- */
-struct inplace_cb_query {
-       /** next in list */
-       struct inplace_cb_query* next;
-       /**
-        * Inplace callback routine for cache stage response.
-        * called as cb(qinfo, flags, qstate, addr, addrlen, zone, zonelen,
-        *              region, python_callback);
-        * python_callback is only used for registering a python callback function.
-        */
-       inplace_cb_query_func_type* cb;
-       void* cb_arg;
-};
+       int id, void* callback);
 
 /**
  * Inplace callback function called after receiving reply from back.
@@ -300,22 +279,8 @@ struct inplace_cb_query {
  *     cb_args: argument passed when registering callback.
  */
 typedef int inplace_cb_edns_back_parsed_func_type(struct module_qstate* qstate, 
-       void* cb_args);
+       int id, void* cb_args);
 
-/**
- * Inplace callback list of registered routines to be called after receiving a
- * reply from back.
- */
-struct inplace_cb_edns_back_parsed {
-       /** next in list */
-       struct inplace_cb_edns_back_parsed* next;
-       /**
-        * Inplace callback routine for cache stage response.
-        * called as cb(qstate, cb_args);
-        */
-       inplace_cb_edns_back_parsed_func_type* cb;
-       void* cb_arg;
-};
 /**
  * Module environment.
  * Services and data provided to the module.
@@ -471,7 +436,7 @@ struct module_env {
        void* modinfo[MAX_MODULE];
 
        /* Shared linked list of inplace callback functions */
-       void* inplace_cb_lists[inplace_cb_types_total];
+       struct inplace_cb* inplace_cb_lists[inplace_cb_types_total];
 
        /**
         * Shared array of known edns options (size MAX_KNOWN_EDNS_OPTS).
@@ -727,107 +692,29 @@ int edns_register_option(uint16_t opt_code, int bypass_cache_stage,
        int no_aggregation, struct module_env* env);
 
 /**
- * Register an inplace callback function called before replying with a resolved
- * query.
- * @param cb: pointer to the callback function.
- * @param cb_arg: optional argument for the callback function.
- * @param env: the module environment.
- * @return true on success, false on failure (out of memory or trying to
- *     register after the environment is copied to the threads.)
- */
-int inplace_cb_reply_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env);
-
-/**
- * Register an inplace callback function called before replying from the cache.
- * @param cb: pointer to the callback function.
- * @param cb_arg: optional argument for the callback function.
- * @param env: the module environment.
- * @return true on success, false on failure (out of memory or trying to
- *     register after the environment is copied to the threads.)
- */
-int inplace_cb_reply_cache_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env);
-
-/**
- * Register an inplace callback function called before replying with local
- * data or Chaos reply.
- * @param cb: pointer to the callback function.
- * @param cb_arg: optional argument for the callback function.
- * @param env: the module environment.
- * @return true on success, false on failure (out of memory or trying to
- *     register after the environment is copied to the threads.)
- */
-int inplace_cb_reply_local_register(inplace_cb_reply_func_type* cb, void* cb_arg,
-       struct module_env* env);
-
-/**
- * Register an inplace callback function called before replying with servfail.
- * @param cb: pointer to the callback function.
- * @param cb_arg: optional argument for the callback function.
- * @param env: the module environment.
- * @return true on success, false on failure (out of memory or trying to
- *     register after the environment is copied to the threads.)
- */
-int inplace_cb_reply_servfail_register(inplace_cb_reply_func_type* cb,
-       void* cb_arg, struct module_env* env);
-
-/**
- * Delete the inplace_cb_reply callback linked list.
- * @param env: the module environment.
- */
-void inplace_cb_reply_delete(struct module_env* env);
-
-/**
- * Delete the inplace_cb_reply_cache callback linked list.
- * @param env: the module environment.
- */
-void inplace_cb_reply_cache_delete(struct module_env* env);
-
-/**
- * Delete the inplace_cb_reply_servfail callback linked list.
- * @param env: the module environment.
- */
-void inplace_cb_reply_servfail_delete(struct module_env* env);
-
-/**
- * Register an inplace callback function called before quering a nameserver.
- * @param cb: pointer to the callback function.
- * @param cbarg: optional argument for the callback function.
- * @param cbarg_len: length of the argument for the callback function, 0 if
- * empty.
- * @param env: the module environment.
- * @return true on success, false on failure (out of memory or trying to
- *     register after the environment is copied to the threads.)
- */
-int inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg,
-       size_t cbarg_len, struct module_env* env);
-
-/**
- * Delete the inplace_cb_query callback linked list.
- * @param env: the module environment.
- */
-void inplace_cb_query_delete(struct module_env* env);
-
-/**
- * Register an inplace callback function called after receiving an reply from a
- * namerserver.
+ * Register an inplace callback function.
  * @param cb: pointer to the callback function.
- * @param cbarg: optional argument for the callback function.
- * @param cbarg_len: length of the argument for the callback function, 0 if
- * empty.
+ * @param type: inplace callback type.
+ * @param cbarg: argument for the callback function, or NULL.
+ * @param cbarg_len: size of cbars, or 0.
  * @param env: the module environment.
+ * @param id: module id.
  * @return true on success, false on failure (out of memory or trying to
  *     register after the environment is copied to the threads.)
  */
-int inplace_cb_edns_back_parsed_register(inplace_cb_edns_back_parsed_func_type* cb,
-       void* cbarg, size_t cbarg_len, struct module_env* env);
+int
+inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg,
+       size_t cbarg_len, struct module_env* env, int id);
 
 /**
- * Delete the inplace_cb_edns_back_parsed callback linked list.
+ * Delete callback for specified type and module id.
  * @param env: the module environment.
+ * @param type: inplace callback type.
+ * @param id: module id.
  */
-void inplace_cb_edns_back_parsed_delete(struct module_env* env);
+void
+inplace_cb_delete(struct module_env* env, enum inplace_cb_list_type type,
+       int id);
 
 /**
  * Delete all the inplace callback linked lists.