diff --git a/Makefile.in b/Makefile.in index 6809881b6..b640af006 100644 --- a/Makefile.in +++ b/Makefile.in @@ -173,10 +173,10 @@ UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c \ -testcode/unitecs.c testcode/unitauth.c +testcode/unitecs.c testcode/unitauth.c testcode/unitzonemd.c UNITTEST_OBJ=unitanchor.lo unitdname.lo unitlruhash.lo unitmain.lo \ unitmsgparse.lo unitneg.lo unitregional.lo unitslabhash.lo unitverify.lo \ -readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo +readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo unitzonemd.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ @@ -1264,6 +1264,7 @@ testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcod unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h +unitzonemd.lo unitzonemd.o: $(srcdir)/testcode/unitzonemd.c config.h $(srcdir)/services/authzone.h unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ diff --git a/daemon/daemon.c b/daemon/daemon.c index a11d50a9b..f5f0b88fe 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -632,19 +632,19 @@ daemon_fork(struct daemon* daemon) fatal_exit("Could not set up per-view response IP sets"); daemon->use_response_ip = !respip_set_is_empty(daemon->respip_set) || have_view_respip_cfg; - + + /* setup modules */ + daemon_setup_modules(daemon); + /* read auth zonefiles */ if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1, - &daemon->use_rpz)) + &daemon->use_rpz, daemon->env, &daemon->mods)) fatal_exit("auth_zones could not be setup"); /* Set-up EDNS strings */ if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg)) fatal_exit("Could not set up EDNS strings"); - /* setup modules */ - daemon_setup_modules(daemon); - /* response-ip-xxx options don't work as expected without the respip * module. To avoid run-time operational surprise we reject such * configuration. */ diff --git a/daemon/remote.c b/daemon/remote.c index 64057a57b..18d960c56 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -2510,6 +2510,8 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) uint8_t* nm = NULL; struct auth_zones* az = worker->env.auth_zones; struct auth_zone* z = NULL; + struct auth_xfer* xfr = NULL; + char* reason = NULL; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(az) { @@ -2518,19 +2520,63 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) if(z) { lock_rw_wrlock(&z->lock); } + xfr = auth_xfer_find(az, nm, nmlen, LDNS_RR_CLASS_IN); + if(xfr) { + lock_basic_lock(&xfr->lock); + } lock_rw_unlock(&az->lock); } free(nm); if(!z) { + if(xfr) { + lock_basic_unlock(&xfr->lock); + } (void)ssl_printf(ssl, "error no auth-zone %s\n", arg); return; } if(!auth_zone_read_zonefile(z, worker->env.cfg)) { lock_rw_unlock(&z->lock); + if(xfr) { + lock_basic_unlock(&xfr->lock); + } (void)ssl_printf(ssl, "error failed to read %s\n", arg); return; } + + z->zone_expired = 0; + if(xfr) { + xfr->zone_expired = 0; + if(!xfr_find_soa(z, xfr)) { + if(z->data.count == 0) { + lock_rw_unlock(&z->lock); + lock_basic_unlock(&xfr->lock); + (void)ssl_printf(ssl, "zone %s has no contents\n", arg); + return; + } + lock_rw_unlock(&z->lock); + lock_basic_unlock(&xfr->lock); + (void)ssl_printf(ssl, "error: no SOA in zone after read %s\n", arg); + return; + } + if(xfr->have_zone) + xfr->lease_time = *worker->env.now; + lock_basic_unlock(&xfr->lock); + } + + auth_zone_verify_zonemd(z, &worker->env, &worker->env.mesh->mods, + &reason, 0, 0); + if(reason && z->zone_expired) { + lock_rw_unlock(&z->lock); + (void)ssl_printf(ssl, "error zonemd for %s failed: %s\n", + arg, reason); + free(reason); + return; + } else if(reason && strcmp(reason, "ZONEMD verification successful") + ==0) { + (void)ssl_printf(ssl, "%s: %s\n", arg, reason); + } lock_rw_unlock(&z->lock); + free(reason); send_ok(ssl); } diff --git a/daemon/worker.c b/daemon/worker.c index c56d7b469..181441c36 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1917,6 +1917,8 @@ worker_init(struct worker* worker, struct config_file *cfg, #endif ) { auth_xfer_pickup_initial(worker->env.auth_zones, &worker->env); + auth_zones_pickup_zonemd_verify(worker->env.auth_zones, + &worker->env); } #ifdef USE_DNSTAP if(worker->daemon->cfg->dnstap diff --git a/doc/Changelog b/doc/Changelog index f855e5a9a..8dd41fade 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,11 @@ +18 February 2021: Wouter + - Merge PR #317: ZONEMD Zone Verification, with RFC 8976 support. + ZONEMD records are checked for zones loaded as auth-zone, + with DNSSEC if available. There is an added option + zonemd-permissive-mode that makes it log but not fail wrong zones. + With zonemd-reject-absence for an auth-zone the presence of a + zonemd can be mandated for specific zones. + 15 February 2021: Wouter - Fix #422: IPv6 fallback issues when IPv6 is not properly enabled/configured. diff --git a/doc/example.conf.in b/doc/example.conf.in index 9db622a47..82b652f8a 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -615,6 +615,9 @@ server: # List in ascending order the keysize and count values. # val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500" + # if enabled, ZONEMD verification failures do not block the zone. + # zonemd-permissive-mode: no + # instruct the auto-trust-anchor-file probing to add anchors after ttl. # add-holddown: 2592000 # 30 days @@ -1022,6 +1025,7 @@ remote-control: # name: "example.org" # for-downstream: yes # for-upstream: yes +# zonemd-reject-absence: no # zonefile: "example.org.zone" # Views diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index d2a865d08..649078ea3 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1208,6 +1208,12 @@ be in ascending order and have at least one entry. If you set it to "1024 65535" there is no restriction to NSEC3 iteration values. This table must be kept short; a very long list could cause slower operation. .TP +.B zonemd\-permissive\-mode: \fI +If enabled the ZONEMD verification failures are only logged and do not cause +the zone to be blocked and only return servfail. Useful for testing out +if it works, or if the operator only wants to be notified of a problem without +disrupting service. Default is no. +.TP .B add\-holddown: \fI Instruct the \fBauto\-trust\-anchor\-file\fR probe mechanism for RFC5011 autotrust updates to add new trust anchors only after they have been @@ -1875,6 +1881,19 @@ to the authority servers for this zone, it'll fetch the data directly from the zone data. Turn it on when you want unbound to provide recursion for downstream clients, and use the zone data as a local copy to speed up lookups. .TP +.B zonemd\-reject\-absence: \fI +Enable this option to reject the absence of the ZONEMD record. Without it, +when zonemd is not there it is not checked. It is useful to enable for a +nonDNSSEC signed zone where the operator wants to require the verification +of a ZONEMD, hence a missing ZONEMD is a failure. The action upon +failure is controlled by the \fBzonemd\-permissive\-mode\fR option, for +log only or also block the zone. The default is no. +.IP +Without the option absence of a ZONEMD is only a failure when the zone is +DNSSEC signed, and we have a trust anchor, and the DNSSEC verification of +the absence of the ZONEMD fails. With the option enabled, the absence of +a ZONEMD is always a failure, also for nonDNSSEC signed zones. +.TP .B zonefile: \fI The filename where the zone is stored. If not given then no zonefile is used. If the file does not exist or is empty, unbound will attempt to fetch zone diff --git a/libunbound/context.c b/libunbound/context.c index cff2831a7..267366ae5 100644 --- a/libunbound/context.c +++ b/libunbound/context.c @@ -78,7 +78,8 @@ context_finalize(struct ub_ctx* ctx) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; - if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) + if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz, + ctx->env, &ctx->mods)) return UB_INITFAIL; if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg)) return UB_INITFAIL; diff --git a/services/authzone.c b/services/authzone.c index 2ef782c1f..9818ab344 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -67,7 +67,11 @@ #include "sldns/parseutil.h" #include "sldns/keyraw.h" #include "validator/val_nsec3.h" +#include "validator/val_nsec.h" #include "validator/val_secalgo.h" +#include "validator/val_sigcrypt.h" +#include "validator/val_anchor.h" +#include "validator/val_utils.h" #include /** bytes to use for NSEC3 hash buffer. 20 for sha1 */ @@ -1741,9 +1745,43 @@ int auth_zone_write_file(struct auth_zone* z, const char* fname) return 1; } +/** offline verify for zonemd, while reading a zone file to immediately + * spot bad hashes in zonefile as they are read. + * Creates temp buffers, but uses anchors and validation environment + * from the module_env. */ +static void +zonemd_offline_verify(struct auth_zone* z, struct module_env* env_for_val, + struct module_stack* mods) +{ + struct module_env env; + time_t now = 0; + env = *env_for_val; + env.scratch_buffer = sldns_buffer_new(env.cfg->msg_buffer_size); + if(!env.scratch_buffer) { + log_err("out of memory"); + goto clean_exit; + } + env.scratch = regional_create(); + if(!env.now) { + env.now = &now; + now = time(NULL); + } + if(!env.scratch) { + log_err("out of memory"); + goto clean_exit; + } + auth_zone_verify_zonemd(z, &env, mods, NULL, 1, 0); + +clean_exit: + /* clean up and exit */ + sldns_buffer_free(env.scratch_buffer); + regional_destroy(env.scratch); +} + /** read all auth zones from file (if they have) */ static int -auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) +auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg, + struct module_env* env, struct module_stack* mods) { struct auth_zone* z; lock_rw_wrlock(&az->lock); @@ -1754,12 +1792,162 @@ auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) lock_rw_unlock(&az->lock); return 0; } + if(z->zonefile && z->zonefile[0]!=0 && env) + zonemd_offline_verify(z, env, mods); lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); return 1; } +/** fetch the content of a ZONEMD RR from the rdata */ +static int zonemd_fetch_parameters(struct auth_rrset* zonemd_rrset, size_t i, + uint32_t* serial, int* scheme, int* hashalgo, uint8_t** hash, + size_t* hashlen) +{ + size_t rr_len; + uint8_t* rdata; + if(i >= zonemd_rrset->data->count) + return 0; + rr_len = zonemd_rrset->data->rr_len[i]; + if(rr_len < 2+4+1+1) + return 0; /* too short, for rdlen+serial+scheme+algo */ + rdata = zonemd_rrset->data->rr_data[i]; + *serial = sldns_read_uint32(rdata+2); + *scheme = rdata[6]; + *hashalgo = rdata[7]; + *hashlen = rr_len - 8; + if(*hashlen == 0) + *hash = NULL; + else *hash = rdata+8; + return 1; +} + +/** + * See if the ZONEMD scheme, hash occurs more than once. + * @param zonemd_rrset: the zonemd rrset to check with the RRs in it. + * @param index: index of the original, this is allowed to have that + * scheme and hashalgo, but other RRs should not have it. + * @param scheme: the scheme to check for. + * @param hashalgo: the hash algorithm to check for. + * @return true if it occurs more than once. + */ +static int zonemd_is_duplicate_scheme_hash(struct auth_rrset* zonemd_rrset, + size_t index, int scheme, int hashalgo) +{ + size_t j; + for(j=0; jdata->count; j++) { + uint32_t serial2 = 0; + int scheme2 = 0, hashalgo2 = 0; + uint8_t* hash2 = NULL; + size_t hashlen2 = 0; + if(index == j) { + /* this is the original */ + continue; + } + if(!zonemd_fetch_parameters(zonemd_rrset, j, &serial2, + &scheme2, &hashalgo2, &hash2, &hashlen2)) { + /* malformed, skip it */ + continue; + } + if(scheme == scheme2 && hashalgo == hashalgo2) { + /* duplicate scheme, hash */ + verbose(VERB_ALGO, "zonemd duplicate for scheme %d " + "and hash %d", scheme, hashalgo); + return 1; + } + } + return 0; +} + +/** + * Check ZONEMDs if present for the auth zone. Depending on config + * it can warn or fail on that. Checks the hash of the ZONEMD. + * @param z: auth zone to check for. + * caller must hold lock on zone. + * @param env: module env for temp buffers. + * @param reason: returned on failure. + * @return false on failure, true if hash checks out. + */ +static int auth_zone_zonemd_check_hash(struct auth_zone* z, + struct module_env* env, char** reason) +{ + /* loop over ZONEMDs and see which one is valid. if not print + * failure (depending on config) */ + struct auth_data* apex; + struct auth_rrset* zonemd_rrset; + size_t i; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + uint32_t soa_serial = 0; + region = env->scratch; + regional_free_all(region); + buf = env->scratch_buffer; + if(!auth_zone_get_serial(z, &soa_serial)) { + *reason = "zone has no SOA serial"; + return 0; + } + + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + *reason = "zone has no apex"; + return 0; + } + zonemd_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_ZONEMD); + if(!zonemd_rrset || zonemd_rrset->data->count==0) { + *reason = "zone has no ZONEMD"; + return 0; /* no RRset or no RRs in rrset */ + } + + /* we have a ZONEMD, check if it is correct */ + for(i=0; idata->count; i++) { + uint32_t serial = 0; + int scheme = 0, hashalgo = 0; + uint8_t* hash = NULL; + size_t hashlen = 0; + if(!zonemd_fetch_parameters(zonemd_rrset, i, &serial, &scheme, + &hashalgo, &hash, &hashlen)) { + /* malformed RR */ + *reason = "ZONEMD rdata malformed"; + continue; + } + /* check for duplicates */ + if(zonemd_is_duplicate_scheme_hash(zonemd_rrset, i, scheme, + hashalgo)) { + /* duplicate hash of the same scheme,hash + * is not allowed. */ + *reason = "ZONEMD RRSet contains more than one RR " + "with the same scheme and hash algorithm"; + continue; + } + regional_free_all(region); + if(serial != soa_serial) { + *reason = "ZONEMD serial is wrong"; + continue; + } + if(auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, hashlen, region, buf, reason)) { + /* success */ + if(verbosity >= VERB_ALGO) { + char zstr[255+1]; + dname_str(z->name, zstr); + verbose(VERB_ALGO, "auth-zone %s ZONEMD hash is correct", zstr); + } + return 1; + } + /* try next one */ + } + /* fail, we may have reason */ + if(!*reason) + *reason = "no ZONEMD records found"; + if(verbosity >= VERB_ALGO) { + char zstr[255+1]; + dname_str(z->name, zstr); + verbose(VERB_ALGO, "auth-zone %s ZONEMD failed: %s", zstr, *reason); + } + return 0; +} + /** find serial number of zone or false if none */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial) @@ -1779,7 +1967,7 @@ auth_zone_get_serial(struct auth_zone* z, uint32_t* serial) } /** Find auth_zone SOA and populate the values in xfr(soa values). */ -static int +int xfr_find_soa(struct auth_zone* z, struct auth_xfer* xfr) { struct auth_data* apex; @@ -1908,6 +2096,7 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) z->for_downstream = c->for_downstream; z->for_upstream = c->for_upstream; z->fallback_enabled = c->fallback_enabled; + z->zonemd_reject_absence = c->zonemd_reject_absence; if(c->isrpz && !z->rpz){ if(!(z->rpz = rpz_create(c))){ fatal_exit("Could not setup RPZ zones"); @@ -2000,7 +2189,8 @@ az_delete_deleted_zones(struct auth_zones* az) } int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup, int* is_rpz) + int setup, int* is_rpz, struct module_env* env, + struct module_stack* mods) { struct config_auth* p; az_setall_deleted(az); @@ -2016,7 +2206,7 @@ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, } } az_delete_deleted_zones(az); - if(!auth_zones_read_zones(az, cfg)) + if(!auth_zones_read_zones(az, cfg, env, mods)) return 0; if(setup) { if(!auth_zones_setup_zones(az)) @@ -4969,6 +5159,28 @@ xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env) lock_rw_unlock(&z->lock); } +/** reacquire locks and structures. Starts with no locks, ends + * with xfr and z locks, if fail, no z lock */ +static int xfr_process_reacquire_locks(struct auth_xfer* xfr, + struct module_env* env, struct auth_zone** z) +{ + /* release xfr lock, then, while holding az->lock grab both + * z->lock and xfr->lock */ + lock_rw_rdlock(&env->auth_zones->lock); + *z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, + xfr->dclass); + if(!*z) { + lock_rw_unlock(&env->auth_zones->lock); + lock_basic_lock(&xfr->lock); + *z = NULL; + return 0; + } + lock_rw_wrlock(&(*z)->lock); + lock_basic_lock(&xfr->lock); + lock_rw_unlock(&env->auth_zones->lock); + return 1; +} + /** process chunk list and update zone in memory, * return false if it did not work */ static int @@ -4978,21 +5190,12 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, struct auth_zone* z; /* obtain locks and structures */ - /* release xfr lock, then, while holding az->lock grab both - * z->lock and xfr->lock */ lock_basic_unlock(&xfr->lock); - lock_rw_rdlock(&env->auth_zones->lock); - z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, - xfr->dclass); - if(!z) { - lock_rw_unlock(&env->auth_zones->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) { /* the zone is gone, ignore xfr results */ - lock_basic_lock(&xfr->lock); return 0; } - lock_rw_wrlock(&z->lock); - lock_basic_lock(&xfr->lock); - lock_rw_unlock(&env->auth_zones->lock); + /* holding xfr and z locks */ /* apply data */ if(xfr->task_transfer->master->http) { @@ -5027,6 +5230,35 @@ xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, " (or malformed RR)", xfr->task_transfer->master->host); return 0; } + + /* release xfr lock while verifying zonemd because it may have + * to spawn lookups in the state machines */ + lock_basic_unlock(&xfr->lock); + /* holding z lock */ + auth_zone_verify_zonemd(z, env, &env->mesh->mods, NULL, 0, 0); + if(z->zone_expired) { + char zname[256]; + /* ZONEMD must have failed */ + /* reacquire locks, so we hold xfr lock on exit of routine, + * and both xfr and z again after releasing xfr for potential + * state machine mesh callbacks */ + lock_rw_unlock(&z->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) + return 0; + dname_str(xfr->name, zname); + verbose(VERB_ALGO, "xfr from %s: ZONEMD failed for %s, transfer is failed", xfr->task_transfer->master->host, zname); + xfr->zone_expired = 1; + lock_rw_unlock(&z->lock); + return 0; + } + /* reacquire locks, so we hold xfr lock on exit of routine, + * and both xfr and z again after releasing xfr for potential + * state machine mesh callbacks */ + lock_rw_unlock(&z->lock); + if(!xfr_process_reacquire_locks(xfr, env, &z)) + return 0; + /* holding xfr and z locks */ + if(xfr->have_zone) xfr->lease_time = *env->now; @@ -6972,3 +7204,1092 @@ compare_serial(uint32_t a, uint32_t b) return 1; } } + +int zonemd_hashalgo_supported(int hashalgo) +{ + if(hashalgo == ZONEMD_ALGO_SHA384) return 1; + if(hashalgo == ZONEMD_ALGO_SHA512) return 1; + return 0; +} + +int zonemd_scheme_supported(int scheme) +{ + if(scheme == ZONEMD_SCHEME_SIMPLE) return 1; + return 0; +} + +/** initialize hash for hashing with zonemd hash algo */ +static struct secalgo_hash* zonemd_digest_init(int hashalgo, char** reason) +{ + struct secalgo_hash *h; + if(hashalgo == ZONEMD_ALGO_SHA384) { + /* sha384 */ + h = secalgo_hash_create_sha384(); + if(!h) + *reason = "digest sha384 could not be created"; + return h; + } else if(hashalgo == ZONEMD_ALGO_SHA512) { + /* sha512 */ + h = secalgo_hash_create_sha512(); + if(!h) + *reason = "digest sha512 could not be created"; + return h; + } + /* unknown hash algo */ + *reason = "unsupported algorithm"; + return NULL; +} + +/** update the hash for zonemd */ +static int zonemd_digest_update(int hashalgo, struct secalgo_hash* h, + uint8_t* data, size_t len, char** reason) +{ + if(hashalgo == ZONEMD_ALGO_SHA384) { + if(!secalgo_hash_update(h, data, len)) { + *reason = "digest sha384 failed"; + return 0; + } + return 1; + } else if(hashalgo == ZONEMD_ALGO_SHA512) { + if(!secalgo_hash_update(h, data, len)) { + *reason = "digest sha512 failed"; + return 0; + } + return 1; + } + /* unknown hash algo */ + *reason = "unsupported algorithm"; + return 0; +} + +/** finish the hash for zonemd */ +static int zonemd_digest_finish(int hashalgo, struct secalgo_hash* h, + uint8_t* result, size_t hashlen, size_t* resultlen, char** reason) +{ + if(hashalgo == ZONEMD_ALGO_SHA384) { + if(hashlen < 384/8) { + *reason = "digest buffer too small for sha384"; + return 0; + } + if(!secalgo_hash_final(h, result, hashlen, resultlen)) { + *reason = "digest sha384 finish failed"; + return 0; + } + return 1; + } else if(hashalgo == ZONEMD_ALGO_SHA512) { + if(hashlen < 512/8) { + *reason = "digest buffer too small for sha512"; + return 0; + } + if(!secalgo_hash_final(h, result, hashlen, resultlen)) { + *reason = "digest sha512 finish failed"; + return 0; + } + return 1; + } + /* unknown algo */ + *reason = "unsupported algorithm"; + return 0; +} + +/** add rrsets from node to the list */ +static size_t authdata_rrsets_to_list(struct auth_rrset** array, + size_t arraysize, struct auth_rrset* first) +{ + struct auth_rrset* rrset = first; + size_t num = 0; + while(rrset) { + if(num >= arraysize) + return num; + array[num] = rrset; + num++; + rrset = rrset->next; + } + return num; +} + +/** compare rr list entries */ +static int rrlist_compare(const void* arg1, const void* arg2) +{ + struct auth_rrset* r1 = *(struct auth_rrset**)arg1; + struct auth_rrset* r2 = *(struct auth_rrset**)arg2; + uint16_t t1, t2; + if(r1 == NULL) t1 = LDNS_RR_TYPE_RRSIG; + else t1 = r1->type; + if(r2 == NULL) t2 = LDNS_RR_TYPE_RRSIG; + else t2 = r2->type; + if(t1 < t2) + return -1; + if(t1 > t2) + return 1; + return 0; +} + +/** add type RRSIG to rr list if not one there already, + * this is to perform RRSIG collate processing at that point. */ +static void addrrsigtype_if_needed(struct auth_rrset** array, + size_t arraysize, size_t* rrnum, struct auth_data* node) +{ + if(az_domain_rrset(node, LDNS_RR_TYPE_RRSIG)) + return; /* already one there */ + if((*rrnum) >= arraysize) + return; /* array too small? */ + array[*rrnum] = NULL; /* nothing there, but need entry in list */ + (*rrnum)++; +} + +/** collate the RRs in an RRset using the simple scheme */ +static int zonemd_simple_rrset(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct auth_rrset* rrset, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + /* canonicalize */ + struct ub_packed_rrset_key key; + memset(&key, 0, sizeof(key)); + key.entry.key = &key; + key.entry.data = rrset->data; + key.rk.dname = node->name; + key.rk.dname_len = node->namelen; + key.rk.type = htons(rrset->type); + key.rk.rrset_class = htons(z->dclass); + if(!rrset_canonicalize_to_buffer(region, buf, &key)) { + *reason = "out of memory"; + return 0; + } + regional_free_all(region); + + /* hash */ + if(!zonemd_digest_update(hashalgo, h, sldns_buffer_begin(buf), + sldns_buffer_limit(buf), reason)) { + return 0; + } + return 1; +} + +/** count number of RRSIGs in a domain name rrset list */ +static size_t zonemd_simple_count_rrsig(struct auth_rrset* rrset, + struct auth_rrset** rrlist, size_t rrnum, + struct auth_zone* z, struct auth_data* node) +{ + size_t i, count = 0; + if(rrset) { + size_t j; + for(j = 0; jdata->count; j++) { + if(rrsig_rdata_get_type_covered(rrset->data-> + rr_data[j], rrset->data->rr_len[j]) == + LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + count++; + } + } + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + count += (rrlist[i]?rrlist[i]->data->rrsig_count:0); + } + return count; +} + +/** allocate sparse rrset data for the number of entries in tepm region */ +static int zonemd_simple_rrsig_allocs(struct regional* region, + struct packed_rrset_data* data, size_t count) +{ + data->rr_len = regional_alloc(region, sizeof(*data->rr_len) * count); + if(!data->rr_len) { + return 0; + } + data->rr_ttl = regional_alloc(region, sizeof(*data->rr_ttl) * count); + if(!data->rr_ttl) { + return 0; + } + data->rr_data = regional_alloc(region, sizeof(*data->rr_data) * count); + if(!data->rr_data) { + return 0; + } + return 1; +} + +/** add the RRSIGs from the rrs in the domain into the data */ +static void add_rrlist_rrsigs_into_data(struct packed_rrset_data* data, + size_t* done, struct auth_rrset** rrlist, size_t rrnum, + struct auth_zone* z, struct auth_data* node) +{ + size_t i; + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + for(j = 0; jdata->rrsig_count; j++) { + data->rr_len[*done] = rrlist[i]->data->rr_len[rrlist[i]->data->count + j]; + data->rr_ttl[*done] = rrlist[i]->data->rr_ttl[rrlist[i]->data->count + j]; + /* reference the rdata in the rrset, no need to + * copy it, it is no longer needed at the end of + * the routine */ + data->rr_data[*done] = rrlist[i]->data->rr_data[rrlist[i]->data->count + j]; + (*done)++; + } + } +} + +static void add_rrset_into_data(struct packed_rrset_data* data, + size_t* done, struct auth_rrset* rrset, + struct auth_zone* z, struct auth_data* node) +{ + if(rrset) { + size_t j; + for(j = 0; jdata->count; j++) { + if(rrsig_rdata_get_type_covered(rrset->data-> + rr_data[j], rrset->data->rr_len[j]) == + LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name)==0) { + /* omit RRSIGs over type ZONEMD at apex */ + continue; + } + data->rr_len[*done] = rrset->data->rr_len[j]; + data->rr_ttl[*done] = rrset->data->rr_ttl[j]; + /* reference the rdata in the rrset, no need to + * copy it, it is no longer need at the end of + * the routine */ + data->rr_data[*done] = rrset->data->rr_data[j]; + (*done)++; + } + } +} + +/** collate the RRSIGs using the simple scheme */ +static int zonemd_simple_rrsig(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct auth_rrset* rrset, struct auth_rrset** rrlist, size_t rrnum, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + /* the rrset pointer can be NULL, this means it is type RRSIG and + * there is no ordinary type RRSIG there. The RRSIGs are stored + * with the RRsets in their data. + * + * The RRset pointer can be nonNULL. This happens if there is + * no RR that is covered by the RRSIG for the domain. Then this + * RRSIG RR is stored in an rrset of type RRSIG. The other RRSIGs + * are stored in the rrset entries for the RRs in the rr list for + * the domain node. We need to collate the rrset's data, if any, and + * the rrlist's rrsigs */ + /* if this is the apex, omit RRSIGs that cover type ZONEMD */ + /* build rrsig rrset */ + size_t done = 0; + struct ub_packed_rrset_key key; + struct packed_rrset_data data; + memset(&key, 0, sizeof(key)); + memset(&data, 0, sizeof(data)); + key.entry.key = &key; + key.entry.data = &data; + key.rk.dname = node->name; + key.rk.dname_len = node->namelen; + key.rk.type = htons(LDNS_RR_TYPE_RRSIG); + key.rk.rrset_class = htons(z->dclass); + data.count = zonemd_simple_count_rrsig(rrset, rrlist, rrnum, z, node); + if(!zonemd_simple_rrsig_allocs(region, &data, data.count)) { + *reason = "out of memory"; + regional_free_all(region); + return 0; + } + /* all the RRSIGs stored in the other rrsets for this domain node */ + add_rrlist_rrsigs_into_data(&data, &done, rrlist, rrnum, z, node); + /* plus the RRSIGs stored in an rrset of type RRSIG for this node */ + add_rrset_into_data(&data, &done, rrset, z, node); + + /* canonicalize */ + if(!rrset_canonicalize_to_buffer(region, buf, &key)) { + *reason = "out of memory"; + regional_free_all(region); + return 0; + } + regional_free_all(region); + + /* hash */ + if(!zonemd_digest_update(hashalgo, h, sldns_buffer_begin(buf), + sldns_buffer_limit(buf), reason)) { + return 0; + } + return 1; +} + +/** collate a domain's rrsets using the simple scheme */ +static int zonemd_simple_domain(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct auth_data* node, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + const size_t rrlistsize = 65536; + struct auth_rrset* rrlist[rrlistsize]; + size_t i, rrnum = 0; + /* see if the domain is out of scope, the zone origin, + * that would be omitted */ + if(!dname_subdomain_c(node->name, z->name)) + return 1; /* continue */ + /* loop over the rrsets in ascending order. */ + rrnum = authdata_rrsets_to_list(rrlist, rrlistsize, node->rrsets); + addrrsigtype_if_needed(rrlist, rrlistsize, &rrnum, node); + qsort(rrlist, rrnum, sizeof(*rrlist), rrlist_compare); + for(i=0; itype == LDNS_RR_TYPE_ZONEMD && + query_dname_compare(z->name, node->name) == 0) { + /* omit type ZONEMD at apex */ + continue; + } + if(rrlist[i] == NULL || rrlist[i]->type == + LDNS_RR_TYPE_RRSIG) { + if(!zonemd_simple_rrsig(z, hashalgo, h, node, + rrlist[i], rrlist, rrnum, region, buf, reason)) + return 0; + } else if(!zonemd_simple_rrset(z, hashalgo, h, node, + rrlist[i], region, buf, reason)) { + return 0; + } + } + return 1; +} + +/** collate the zone using the simple scheme */ +static int zonemd_simple_collate(struct auth_zone* z, int hashalgo, + struct secalgo_hash* h, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + /* our tree is sorted in canonical order, so we can just loop over + * the tree */ + struct auth_data* n; + RBTREE_FOR(n, struct auth_data*, &z->data) { + if(!zonemd_simple_domain(z, hashalgo, h, n, region, buf, + reason)) + return 0; + } + return 1; +} + +int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, size_t* resultlen, + struct regional* region, struct sldns_buffer* buf, char** reason) +{ + struct secalgo_hash* h = zonemd_digest_init(hashalgo, reason); + if(!h) { + if(!*reason) + *reason = "digest init fail"; + return 0; + } + if(scheme == ZONEMD_SCHEME_SIMPLE) { + if(!zonemd_simple_collate(z, hashalgo, h, region, buf, reason)) { + if(!*reason) *reason = "scheme simple collate fail"; + secalgo_hash_delete(h); + return 0; + } + } + if(!zonemd_digest_finish(hashalgo, h, hash, hashlen, resultlen, + reason)) { + secalgo_hash_delete(h); + *reason = "digest finish fail"; + return 0; + } + secalgo_hash_delete(h); + return 1; +} + +int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, struct regional* region, + struct sldns_buffer* buf, char** reason) +{ + uint8_t gen[512]; + size_t genlen = 0; + if(!zonemd_hashalgo_supported(hashalgo)) { + *reason = "unsupported algorithm"; + return 0; + } + if(!zonemd_scheme_supported(scheme)) { + *reason = "unsupported scheme"; + return 0; + } + if(hashlen < 12) { + /* the ZONEMD draft requires digests to fail if too small */ + *reason = "digest length too small, less than 12"; + return 0; + } + /* generate digest */ + if(!auth_zone_generate_zonemd_hash(z, scheme, hashalgo, gen, + sizeof(gen), &genlen, region, buf, reason)) { + /* reason filled in by zonemd hash routine */ + return 0; + } + /* check digest length */ + if(hashlen != genlen) { + *reason = "incorrect digest length"; + if(verbosity >= VERB_ALGO) { + verbose(VERB_ALGO, "zonemd scheme=%d hashalgo=%d", + scheme, hashalgo); + log_hex("ZONEMD should be ", gen, genlen); + log_hex("ZONEMD to check is", hash, hashlen); + } + return 0; + } + /* check digest */ + if(memcmp(hash, gen, genlen) != 0) { + *reason = "incorrect digest"; + if(verbosity >= VERB_ALGO) { + verbose(VERB_ALGO, "zonemd scheme=%d hashalgo=%d", + scheme, hashalgo); + log_hex("ZONEMD should be ", gen, genlen); + log_hex("ZONEMD to check is", hash, hashlen); + } + return 0; + } + return 1; +} + +/** log auth zone message with zone name in front. */ +static void auth_zone_log(uint8_t* name, enum verbosity_value level, + const char* format, ...) ATTR_FORMAT(printf, 3, 4); +static void auth_zone_log(uint8_t* name, enum verbosity_value level, + const char* format, ...) +{ + va_list args; + va_start(args, format); + if(verbosity >= level) { + char str[255+1]; + char msg[MAXSYSLOGMSGLEN]; + dname_str(name, str); + vsnprintf(msg, sizeof(msg), format, args); + verbose(level, "auth zone %s %s", str, msg); + } + va_end(args); +} + +/** ZONEMD, dnssec verify the rrset with the dnskey */ +static int zonemd_dnssec_verify_rrset(struct auth_zone* z, + struct module_env* env, struct module_stack* mods, + struct ub_packed_rrset_key* dnskey, struct auth_data* node, + struct auth_rrset* rrset, char** why_bogus) +{ + struct ub_packed_rrset_key pk; + enum sec_status sec; + struct val_env* ve; + int m; + m = modstack_find(mods, "validator"); + if(m == -1) { + auth_zone_log(z->name, VERB_ALGO, "zonemd dnssec verify: have " + "DNSKEY chain of trust, but no validator module"); + return 0; + } + ve = (struct val_env*)env->modinfo[m]; + + memset(&pk, 0, sizeof(pk)); + pk.entry.key = &pk; + pk.entry.data = rrset->data; + pk.rk.dname = node->name; + pk.rk.dname_len = node->namelen; + pk.rk.type = htons(rrset->type); + pk.rk.rrset_class = htons(z->dclass); + if(verbosity >= VERB_ALGO) { + char typestr[32]; + typestr[0]=0; + sldns_wire2str_type_buf(rrset->type, typestr, sizeof(typestr)); + auth_zone_log(z->name, VERB_ALGO, + "zonemd: verify %s RRset with DNSKEY", typestr); + } + sec = dnskeyset_verify_rrset(env, ve, &pk, dnskey, NULL, why_bogus, + LDNS_SECTION_ANSWER, NULL); + if(sec == sec_status_secure) { + return 1; + } + if(why_bogus) + auth_zone_log(z->name, VERB_ALGO, "DNSSEC verify was bogus: %s", *why_bogus); + return 0; +} + +/** check for nsec3, the RR with params equal, if bitmap has the type */ +static int nsec3_of_param_has_type(struct auth_rrset* nsec3, int algo, + size_t iter, uint8_t* salt, size_t saltlen, uint16_t rrtype) +{ + int i, count = (int)nsec3->data->count; + struct ub_packed_rrset_key pk; + memset(&pk, 0, sizeof(pk)); + pk.entry.data = nsec3->data; + for(i=0; idata; + if(nsec_has_type(&pk, LDNS_RR_TYPE_ZONEMD)) { + *reason = "DNSSEC NSEC bitmap says type ZONEMD exists"; + return 0; + } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC NSEC verification of absence of ZONEMD secure"); + } else { + /* NSEC3 perhaps ? */ + int algo; + size_t iter, saltlen; + uint8_t* salt; + struct auth_rrset* nsec3param = az_domain_rrset(apex, + LDNS_RR_TYPE_NSEC3PARAM); + struct auth_data* match; + struct auth_rrset* nsec3; + if(!nsec3param) { + *reason = "zone has no NSEC information but ZONEMD missing"; + return 0; + } + if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen)) { + *reason = "zone has no NSEC information but ZONEMD missing"; + return 0; + } + /* find the NSEC3 record */ + match = az_nsec3_find_exact(z, z->name, z->namelen, algo, + iter, salt, saltlen); + if(!match) { + *reason = "zone has no NSEC3 domain for the apex but ZONEMD missing"; + return 0; + } + nsec3 = az_domain_rrset(match, LDNS_RR_TYPE_NSEC3); + if(!nsec3) { + *reason = "zone has no NSEC3 RRset for the apex but ZONEMD missing"; + return 0; + } + /* dnssec verify the NSEC3 */ + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, match, + nsec3, why_bogus)) { + *reason = "DNSSEC verify failed for NSEC3 RRset"; + return 0; + } + /* check type bitmap */ + if(nsec3_of_param_has_type(nsec3, algo, iter, salt, saltlen, + LDNS_RR_TYPE_ZONEMD)) { + *reason = "DNSSEC NSEC3 bitmap says type ZONEMD exists"; + return 0; + } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC NSEC3 verification of absence of ZONEMD secure"); + } + + return 1; +} + +/** Verify the SOA and ZONEMD DNSSEC signatures. + * return false on failure, reason contains description of failure. */ +static int zonemd_check_dnssec_soazonemd(struct auth_zone* z, + struct module_env* env, struct module_stack* mods, + struct ub_packed_rrset_key* dnskey, struct auth_data* apex, + struct auth_rrset* zonemd_rrset, char** reason, char** why_bogus) +{ + struct auth_rrset* soa; + if(!apex) { + *reason = "zone has no apex domain"; + return 0; + } + soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA); + if(!soa) { + *reason = "zone has no SOA RRset"; + return 0; + } + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, soa, + why_bogus)) { + *reason = "DNSSEC verify failed for SOA RRset"; + return 0; + } + if(!zonemd_dnssec_verify_rrset(z, env, mods, dnskey, apex, + zonemd_rrset, why_bogus)) { + *reason = "DNSSEC verify failed for ZONEMD RRset"; + return 0; + } + auth_zone_log(z->name, VERB_ALGO, "zonemd DNSSEC verification of SOA and ZONEMD RRsets secure"); + return 1; +} + +/** + * Fail the ZONEMD verification. + * @param z: auth zone that fails. + * @param env: environment with config, to ignore failure or not. + * @param reason: failure string description. + * @param why_bogus: failure string for DNSSEC verification failure. + * @param result: strdup result in here if not NULL. + */ +static void auth_zone_zonemd_fail(struct auth_zone* z, struct module_env* env, + char* reason, char* why_bogus, char** result) +{ + char zstr[255+1]; + /* if fail: log reason, and depending on config also take action + * and drop the zone, eg. it is gone from memory, set zone_expired */ + dname_str(z->name, zstr); + if(!reason) reason = "verification failed"; + if(result) { + if(why_bogus) { + char res[1024]; + snprintf(res, sizeof(res), "%s: %s", reason, + why_bogus); + *result = strdup(res); + } else { + *result = strdup(reason); + } + if(!*result) log_err("out of memory"); + } else { + log_warn("auth zone %s: ZONEMD verification failed: %s", zstr, reason); + } + + if(env->cfg->zonemd_permissive_mode) { + verbose(VERB_ALGO, "zonemd-permissive-mode enabled, " + "not blocking zone %s", zstr); + return; + } + + /* expired means the zone gives servfail and is not used by + * lookup if fallback_enabled*/ + z->zone_expired = 1; +} + +/** + * Verify the zonemd with DNSSEC and hash check, with given key. + * @param z: auth zone. + * @param env: environment with config and temp buffers. + * @param mods: module stack with validator env for verification. + * @param dnskey: dnskey that we can use, or NULL. If nonnull, the key + * has been verified and is the start of the chain of trust. + * @param is_insecure: if true, the dnskey is not used, the zone is insecure. + * And dnssec is not used. It is DNSSEC secure insecure or not under + * a trust anchor. + * @param result: if not NULL result reason copied here. + */ +static void +auth_zone_verify_zonemd_with_key(struct auth_zone* z, struct module_env* env, + struct module_stack* mods, struct ub_packed_rrset_key* dnskey, + int is_insecure, char** result) +{ + char* reason = NULL, *why_bogus = NULL; + struct auth_data* apex = NULL; + struct auth_rrset* zonemd_rrset = NULL; + int zonemd_absent = 0, zonemd_absence_dnssecok = 0; + + /* see if ZONEMD is present or absent. */ + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + zonemd_absent = 1; + } else { + zonemd_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_ZONEMD); + if(!zonemd_rrset || zonemd_rrset->data->count==0) { + zonemd_absent = 1; + zonemd_rrset = NULL; + } + } + + /* if no DNSSEC, done. */ + /* if no ZONEMD, and DNSSEC, use DNSKEY to verify NSEC or NSEC3 for + * zone apex. Check ZONEMD bit is turned off or else fail */ + /* if ZONEMD, and DNSSEC, check DNSSEC signature on SOA and ZONEMD, + * or else fail */ + if(!dnskey && !is_insecure) { + auth_zone_zonemd_fail(z, env, "DNSKEY missing", NULL, result); + return; + } else if(!zonemd_rrset && dnskey && !is_insecure) { + /* fetch, DNSSEC verify, and check NSEC/NSEC3 */ + if(!zonemd_check_dnssec_absence(z, env, mods, dnskey, apex, + &reason, &why_bogus)) { + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); + return; + } + zonemd_absence_dnssecok = 1; + } else if(zonemd_rrset && dnskey && !is_insecure) { + /* check DNSSEC verify of SOA and ZONEMD */ + if(!zonemd_check_dnssec_soazonemd(z, env, mods, dnskey, apex, + zonemd_rrset, &reason, &why_bogus)) { + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); + return; + } + } + + if(zonemd_absent && z->zonemd_reject_absence) { + auth_zone_zonemd_fail(z, env, "ZONEMD absent and that is not allowed by config", NULL, result); + return; + } + if(zonemd_absent && zonemd_absence_dnssecok) { + auth_zone_log(z->name, VERB_ALGO, "DNSSEC verified nonexistence of ZONEMD"); + if(result) { + *result = strdup("DNSSEC verified nonexistence of ZONEMD"); + if(!*result) log_err("out of memory"); + } + return; + } + if(zonemd_absent) { + auth_zone_log(z->name, VERB_ALGO, "no ZONEMD present"); + if(result) { + *result = strdup("no ZONEMD present"); + if(!*result) log_err("out of memory"); + } + return; + } + + /* check ZONEMD checksum and report or else fail. */ + if(!auth_zone_zonemd_check_hash(z, env, &reason)) { + auth_zone_zonemd_fail(z, env, reason, NULL, result); + return; + } + + /* success! log the success */ + auth_zone_log(z->name, VERB_ALGO, "ZONEMD verification successful"); + if(result) { + *result = strdup("ZONEMD verification successful"); + if(!*result) log_err("out of memory"); + } +} + +/** + * verify the zone DNSKEY rrset from the trust anchor + * This is possible because the anchor is for the zone itself, and can + * thus apply straight to the zone DNSKEY set. + * @param z: the auth zone. + * @param env: environment with time and temp buffers. + * @param mods: module stack for validator environment for dnssec validation. + * @param anchor: trust anchor to use + * @param is_insecure: returned, true if the zone is securely insecure. + * @param why_bogus: if the routine fails, returns the failure reason. + * @param keystorage: where to store the ub_packed_rrset_key that is created + * on success. A pointer to it is returned on success. + * @return the dnskey RRset, reference to zone data and keystorage, or + * NULL on failure. + */ +static struct ub_packed_rrset_key* +zonemd_get_dnskey_from_anchor(struct auth_zone* z, struct module_env* env, + struct module_stack* mods, struct trust_anchor* anchor, + int* is_insecure, char** why_bogus, + struct ub_packed_rrset_key* keystorage) +{ + struct auth_data* apex; + struct auth_rrset* dnskey_rrset; + enum sec_status sec; + struct val_env* ve; + int m; + + apex = az_find_name(z, z->name, z->namelen); + if(!apex) { + *why_bogus = "have trust anchor, but zone has no apex domain for DNSKEY"; + return 0; + } + dnskey_rrset = az_domain_rrset(apex, LDNS_RR_TYPE_DNSKEY); + if(!dnskey_rrset || dnskey_rrset->data->count==0) { + *why_bogus = "have trust anchor, but zone has no DNSKEY"; + return 0; + } + + m = modstack_find(mods, "validator"); + if(m == -1) { + *why_bogus = "have trust anchor, but no validator module"; + return 0; + } + ve = (struct val_env*)env->modinfo[m]; + + memset(keystorage, 0, sizeof(*keystorage)); + keystorage->entry.key = keystorage; + keystorage->entry.data = dnskey_rrset->data; + keystorage->rk.dname = apex->name; + keystorage->rk.dname_len = apex->namelen; + keystorage->rk.type = htons(LDNS_RR_TYPE_DNSKEY); + keystorage->rk.rrset_class = htons(z->dclass); + auth_zone_log(z->name, VERB_QUERY, + "zonemd: verify DNSKEY RRset with trust anchor"); + sec = val_verify_DNSKEY_with_TA(env, ve, keystorage, anchor->ds_rrset, + anchor->dnskey_rrset, NULL, why_bogus, NULL); + regional_free_all(env->scratch); + if(sec == sec_status_secure) { + /* success */ + *is_insecure = 0; + return keystorage; + } else if(sec == sec_status_insecure) { + /* insecure */ + *is_insecure = 1; + } else { + /* bogus */ + *is_insecure = 0; + auth_zone_log(z->name, VERB_ALGO, + "zonemd: verify DNSKEY RRset with trust anchor failed: %s", *why_bogus); + } + return NULL; +} + +/** callback for ZONEMD lookup of DNSKEY */ +void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, sldns_buffer* buf, + enum sec_status sec, char* why_bogus, int ATTR_UNUSED(was_ratelimited)) +{ + struct auth_zone* z = (struct auth_zone*)arg; + struct module_env* env; + char* reason = NULL; + struct ub_packed_rrset_key* dnskey = NULL; + int is_insecure = 0; + + lock_rw_wrlock(&z->lock); + env = z->zonemd_callback_env; + /* release the env variable so another worker can pick up the + * ZONEMD verification task if it wants to */ + z->zonemd_callback_env = NULL; + if(!env || env->outnet->want_to_quit || z->zone_deleted) { + lock_rw_unlock(&z->lock); + return; /* stop on quit */ + } + + /* process result */ + if(sec == sec_status_bogus) { + reason = why_bogus; + if(!reason) + reason = "lookup of DNSKEY was bogus"; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was bogus: %s", reason); + } else if(rcode == LDNS_RCODE_NOERROR) { + uint16_t wanted_qtype = LDNS_RR_TYPE_DNSKEY; + struct regional* temp = env->scratch; + struct query_info rq; + struct reply_info* rep; + memset(&rq, 0, sizeof(rq)); + rep = parse_reply_in_temp_region(buf, temp, &rq); + if(rep && rq.qtype == wanted_qtype && + query_dname_compare(z->name, rq.qname) == 0 && + FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR) { + /* parsed successfully */ + struct ub_packed_rrset_key* answer = + reply_find_answer_rrset(&rq, rep); + if(answer && sec == sec_status_secure) { + dnskey = answer; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was secure"); + } else if(sec == sec_status_secure && !answer) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has no content, but is secure, treat as insecure"); + } else if(sec == sec_status_insecure) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was insecure"); + } else if(sec == sec_status_indeterminate) { + is_insecure = 1; + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY was indeterminate, treat as insecure"); + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has nodata"); + reason = "lookup of DNSKEY has nodata"; + } + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY has no answer"); + reason = "lookup of DNSKEY has no answer"; + } + } else { + auth_zone_log(z->name, VERB_ALGO, + "zonemd lookup of DNSKEY failed"); + reason = "lookup of DNSKEY failed"; + } + + if(reason) { + auth_zone_zonemd_fail(z, env, reason, NULL, NULL); + lock_rw_unlock(&z->lock); + return; + } + + auth_zone_verify_zonemd_with_key(z, env, &env->mesh->mods, dnskey, + is_insecure, NULL); + regional_free_all(env->scratch); + lock_rw_unlock(&z->lock); +} + +/** lookup DNSKEY for ZONEMD verification */ +static int +zonemd_lookup_dnskey(struct auth_zone* z, struct module_env* env) +{ + struct query_info qinfo; + uint16_t qflags = BIT_RD; + struct edns_data edns; + sldns_buffer* buf = env->scratch_buffer; + + if(z->zonemd_callback_env) { + /* another worker is already working on the callback + * for the DNSKEY lookup for ZONEMD verification. + * We do not also have to do ZONEMD verification, let that + * worker do it */ + auth_zone_log(z->name, VERB_ALGO, + "zonemd needs lookup of DNSKEY and that already worked on by another worker"); + return 1; + } + + /* use mesh_new_callback to lookup the DNSKEY, + * and then wait for them to be looked up (in cache, or query) */ + qinfo.qname_len = z->namelen; + qinfo.qname = z->name; + qinfo.qclass = z->dclass; + qinfo.qtype = LDNS_RR_TYPE_DNSKEY; + qinfo.local_alias = NULL; + if(verbosity >= VERB_ALGO) { + char buf1[512]; + char buf2[LDNS_MAX_DOMAINLEN+1]; + dname_str(z->name, buf2); + snprintf(buf1, sizeof(buf1), "auth zone %s: lookup DNSKEY " + "for zonemd verification", buf2); + log_query_info(VERB_ALGO, buf1, &qinfo); + } + edns.edns_present = 1; + edns.ext_rcode = 0; + edns.edns_version = 0; + edns.bits = EDNS_DO; + edns.opt_list = NULL; + if(sldns_buffer_capacity(buf) < 65535) + edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); + else edns.udp_size = 65535; + + /* store the worker-specific module env for the callback. + * We can then reference this when the callback executes */ + z->zonemd_callback_env = env; + /* the callback can be called straight away */ + lock_rw_unlock(&z->lock); + if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0, + &auth_zonemd_dnskey_lookup_callback, z)) { + lock_rw_wrlock(&z->lock); + log_err("out of memory lookup up dnskey for zonemd"); + return 0; + } + lock_rw_wrlock(&z->lock); + return 1; +} + +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, + struct module_stack* mods, char** result, int offline, int only_online) +{ + char* reason = NULL, *why_bogus = NULL; + struct trust_anchor* anchor = NULL; + struct ub_packed_rrset_key* dnskey = NULL; + struct ub_packed_rrset_key keystorage; + int is_insecure = 0; + /* verify the ZONEMD if present. + * If not present check if absence is allowed by DNSSEC */ + + /* if zone is under a trustanchor */ + /* is it equal to trustanchor - get dnskey's verified */ + /* else, find chain of trust by fetching DNSKEYs lookup for zone */ + /* result if that, if insecure, means no DNSSEC for the ZONEMD, + * otherwise we have the zone DNSKEY for the DNSSEC verification. */ + if(env->anchors) + anchor = anchors_lookup(env->anchors, z->name, z->namelen, + z->dclass); + if(anchor && query_dname_compare(z->name, anchor->name) == 0) { + if(only_online) { + lock_basic_unlock(&anchor->lock); + return; + } + /* equal to trustanchor, no need for online lookups */ + dnskey = zonemd_get_dnskey_from_anchor(z, env, mods, anchor, + &is_insecure, &why_bogus, &keystorage); + lock_basic_unlock(&anchor->lock); + if(!dnskey && !reason) { + reason = "verify DNSKEY RRset with trust anchor failed"; + } + } else if(anchor) { + lock_basic_unlock(&anchor->lock); + /* perform online lookups */ + if(offline) + return; + /* setup online lookups, and wait for them */ + if(zonemd_lookup_dnskey(z, env)) { + /* wait for the lookup */ + return; + } + reason = "could not lookup DNSKEY for chain of trust"; + } else { + /* the zone is not under a trust anchor */ + if(only_online) + return; + dnskey = NULL; + is_insecure = 1; + } + + if(reason) { + auth_zone_zonemd_fail(z, env, reason, why_bogus, result); + return; + } + + auth_zone_verify_zonemd_with_key(z, env, mods, dnskey, is_insecure, + result); + regional_free_all(env->scratch); +} + +void auth_zones_pickup_zonemd_verify(struct auth_zones* az, + struct module_env* env) +{ + struct auth_zone key; + uint8_t savezname[255+1]; + size_t savezname_len; + struct auth_zone* z; + key.node.key = &key; + lock_rw_rdlock(&az->lock); + RBTREE_FOR(z, struct auth_zone*, &az->ztree) { + lock_rw_wrlock(&z->lock); + key.dclass = z->dclass; + key.namelabs = z->namelabs; + if(z->namelen > sizeof(savezname)) { + lock_rw_unlock(&z->lock); + log_err("auth_zones_pickup_zonemd_verify: zone name too long"); + continue; + } + savezname_len = z->namelen; + memmove(savezname, z->name, z->namelen); + lock_rw_unlock(&az->lock); + auth_zone_verify_zonemd(z, env, &env->mesh->mods, NULL, 0, 1); + lock_rw_unlock(&z->lock); + lock_rw_rdlock(&az->lock); + /* find the zone we had before, it is not deleted, + * because we have a flag for that that is processed at + * apply_cfg time */ + key.namelen = savezname_len; + key.name = savezname; + z = (struct auth_zone*)rbtree_search(&az->ztree, &key); + if(!z) + break; + } + lock_rw_unlock(&az->lock); +} diff --git a/services/authzone.h b/services/authzone.h index 3d94f30d6..4810017a3 100644 --- a/services/authzone.h +++ b/services/authzone.h @@ -132,8 +132,15 @@ struct auth_zone { /** for upstream: this zone answers queries that unbound intends to * send upstream. */ int for_upstream; + /** reject absence of ZONEMD records */ + int zonemd_reject_absence; /** RPZ zones */ struct rpz* rpz; + /** store the env (worker thread specific) for the zonemd callbacks + * from the mesh with the results of the lookup, if nonNULL, some + * worker has already picked up the zonemd verification task and + * this worker does not have to do it as well. */ + struct module_env* zonemd_callback_env; /** zone has been deleted */ int zone_deleted; /** deletelist pointer, unused normally except during delete */ @@ -474,10 +481,13 @@ struct auth_zones* auth_zones_create(void); * @param cfg: config to apply. * @param setup: if true, also sets up values in the auth zones structure * @param is_rpz: set to 1 if at least one RPZ zone is configured. + * @param env: environment for offline verification. + * @param mods: modules in environment. * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, - int setup, int* is_rpz); + int setup, int* is_rpz, struct module_env* env, + struct module_stack* mods); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure @@ -625,6 +635,9 @@ int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg); /** find serial number of zone or false if none (no SOA record) */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial); +/** Find auth_zone SOA and populate the values in xfr(soa values). */ +int xfr_find_soa(struct auth_zone* z, struct auth_xfer* xfr); + /** compare auth_zones for sorted rbtree */ int auth_zone_cmp(const void* z1, const void* z2); @@ -685,4 +698,83 @@ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, */ int compare_serial(uint32_t a, uint32_t b); +/** + * Generate ZONEMD digest for the auth zone. + * @param z: the auth zone to digest. + * omits zonemd at apex and its RRSIG from the digest. + * @param scheme: the collation scheme to use. Numbers as defined for ZONEMD. + * @param hashalgo: the hash algo, from the registry defined for ZONEMD type. + * @param hash: the result buffer. + * @param buflen: size of the result buffer, must be large enough. or the + * routine fails. + * @param resultlen: size of the hash in the result buffer of the result. + * @param region: temp region for allocs during canonicalisation. + * @param buf: temp buffer during canonicalisation. + * @param reason: failure reason, returns a string, NULL on success. + * @return false on failure. + */ +int auth_zone_generate_zonemd_hash(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t buflen, size_t* resultlen, + struct regional* region, struct sldns_buffer* buf, char** reason); + +/** ZONEMD scheme definitions */ +#define ZONEMD_SCHEME_SIMPLE 1 + +/** ZONEMD hash algorithm definition for SHA384 */ +#define ZONEMD_ALGO_SHA384 1 +/** ZONEMD hash algorithm definition for SHA512 */ +#define ZONEMD_ALGO_SHA512 2 + +/** returns true if a zonemd hash algo is supported */ +int zonemd_hashalgo_supported(int hashalgo); +/** returns true if a zonemd scheme is supported */ +int zonemd_scheme_supported(int scheme); + +/** + * Check ZONEMD digest for the auth zone. + * @param z: auth zone to digest. + * @param scheme: zonemd scheme. + * @param hashalgo: zonemd hash algorithm. + * @param hash: the hash to check. + * @param hashlen: length of hash buffer. + * @param region: temp region for allocs during canonicalisation. + * @param buf: temp buffer during canonicalisation. + * @param reason: string returned with failure reason. + * @return false on failure. + */ +int auth_zone_generate_zonemd_check(struct auth_zone* z, int scheme, + int hashalgo, uint8_t* hash, size_t hashlen, struct regional* region, + struct sldns_buffer* buf, char** reason); + +/** + * Perform ZONEMD checks and verification for the auth zone. + * This includes DNSSEC verification if applicable. + * @param z: auth zone to check. Caller holds lock. wrlock. + * @param env: with temp region, buffer and config. + * @param mods: module stack for validator env. + * @param result: if not NULL, result string strdupped in here. + * @param offline: if true, there is no spawned lookup when online is needed. + * Those zones are skipped for ZONEMD checking. + * @param only_online: if true, only for ZONEMD that need online lookup + * of DNSKEY chain of trust are processed. + */ +void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env, + struct module_stack* mods, char** result, int offline, + int only_online); + +/** mesh callback for zonemd on lookup of dnskey */ +void auth_zonemd_dnskey_lookup_callback(void* arg, int rcode, + struct sldns_buffer* buf, enum sec_status sec, char* why_bogus, + int was_ratelimited); + +/** + * Check the ZONEMD records that need online DNSSEC chain lookups, + * for them spawn the lookup process to get it checked out. + * Attaches the lookup process to the worker event base and mesh state. + * @param az: auth zones, every zones is checked. + * @param env: env of the worker where the task is attached. + */ +void auth_zones_pickup_zonemd_verify(struct auth_zones* az, + struct module_env* env); + #endif /* SERVICES_AUTHZONE_H */ diff --git a/sldns/rrdef.c b/sldns/rrdef.c index 0af015f4b..54051313a 100644 --- a/sldns/rrdef.c +++ b/sldns/rrdef.c @@ -150,6 +150,9 @@ static const sldns_rdf_type type_openpgpkey_wireformat[] = { static const sldns_rdf_type type_csync_wireformat[] = { LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_NSEC }; +static const sldns_rdf_type type_zonemd_wireformat[] = { + LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX +}; /* nsec3 is some vars, followed by same type of data of nsec */ static const sldns_rdf_type type_nsec3_wireformat[] = { /* LDNS_RDF_TYPE_NSEC3_VARS, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC*/ @@ -372,7 +375,8 @@ static sldns_rr_descriptor rdata_field_descriptors[] = { {LDNS_RR_TYPE_OPENPGPKEY, "OPENPGPKEY", 1, 1, type_openpgpkey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, /* 62 */ {LDNS_RR_TYPE_CSYNC, "CSYNC", 3, 3, type_csync_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, -{(enum sldns_enum_rr_type)0, "TYPE63", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, + /* 63 */ + {LDNS_RR_TYPE_ZONEMD, "ZONEMD", 4, 4, type_zonemd_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE64", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE65", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, {(enum sldns_enum_rr_type)0, "TYPE66", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 }, diff --git a/sldns/rrdef.h b/sldns/rrdef.h index e084f354a..ece632c3c 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -195,6 +195,7 @@ enum sldns_enum_rr_type LDNS_RR_TYPE_CDNSKEY = 60, /** RFC 7344 */ LDNS_RR_TYPE_OPENPGPKEY = 61, /* RFC 7929 */ LDNS_RR_TYPE_CSYNC = 62, /* RFC 7477 */ + LDNS_RR_TYPE_ZONEMD = 63, /* draft-ietf-dnsop-dns-zone-digest-12 */ LDNS_RR_TYPE_SPF = 99, /* RFC 4408 */ diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index b1b7ae7ef..34a1f5bb4 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -851,7 +851,7 @@ check_auth(struct config_file* cfg) { int is_rpz = 0; struct auth_zones* az = auth_zones_create(); - if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) { + if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz, NULL, NULL)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); diff --git a/testcode/unitauth.c b/testcode/unitauth.c index 4b3410c9e..184573ab6 100644 --- a/testcode/unitauth.c +++ b/testcode/unitauth.c @@ -517,8 +517,8 @@ del_tmp_file(char* fname) } /** Add zone from file for testing */ -static struct auth_zone* -addzone(struct auth_zones* az, const char* name, char* fname) +struct auth_zone* +authtest_addzone(struct auth_zones* az, const char* name, char* fname) { struct auth_zone* z; size_t nmlen; @@ -593,7 +593,7 @@ check_read_exact(const char* name, const char* zone) az = auth_zones_create(); unit_assert(az); - z = addzone(az, name, fname); + z = authtest_addzone(az, name, fname); unit_assert(z); outf = create_tmp_file(NULL); if(!auth_zone_write_file(z, outf)) { @@ -844,7 +844,7 @@ check_queries(const char* name, const char* zone, struct q_ans* queries) fname = create_tmp_file(zone); az = auth_zones_create(); if(!az) fatal_exit("out of memory"); - z = addzone(az, name, fname); + z = authtest_addzone(az, name, fname); if(!z) fatal_exit("could not read zone for queries test"); del_tmp_file(fname); diff --git a/testcode/unitldns.c b/testcode/unitldns.c index 22c9ed945..6397f29db 100644 --- a/testcode/unitldns.c +++ b/testcode/unitldns.c @@ -47,7 +47,7 @@ #include "sldns/parseutil.h" /** verbose this unit test */ -static int vbmp = 0; +static int vbmp = 0; /** print buffer to hex into string */ static void diff --git a/testcode/unitmain.c b/testcode/unitmain.c index c61026f26..30562af11 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -952,6 +952,7 @@ main(int argc, char* argv[]) slabhash_test(); infra_test(); ldns_test(); + zonemd_test(); msgparse_test(); tcpid_test(); #ifdef CLIENT_SUBNET diff --git a/testcode/unitmain.h b/testcode/unitmain.h index e5c6109a2..66d1322f2 100644 --- a/testcode/unitmain.h +++ b/testcode/unitmain.h @@ -80,5 +80,7 @@ void ecs_test(void); void ldns_test(void); /** unit test for auth zone functions */ void authzone_test(void); +/** unit test for zonemd functions */ +void zonemd_test(void); #endif /* TESTCODE_UNITMAIN_H */ diff --git a/testcode/unitzonemd.c b/testcode/unitzonemd.c new file mode 100644 index 000000000..a8949a8c4 --- /dev/null +++ b/testcode/unitzonemd.c @@ -0,0 +1,501 @@ +/* + * testcode/unitzonemd.c - unit test for zonemd. + * + * Copyright (c) 2020, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +/** + * \file + * Unit tests for ZONEMD functionality. + */ + +#include "config.h" +#include +#include "util/log.h" +#include "testcode/unitmain.h" +#include "sldns/str2wire.h" +#include "services/authzone.h" +#include "util/data/dname.h" +#include "util/regional.h" +#include "validator/val_anchor.h" + +/** Add zone from file for testing */ +struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name, + char* fname); + +/** zonemd unit test, generate a zonemd digest and check if correct */ +static void zonemd_generate_test(const char* zname, char* zfile, + int scheme, int hashalgo, const char* digest) +{ + uint8_t zonemd_hash[512]; + size_t hashlen = 0; + char output[1024+1]; + size_t i; + struct auth_zones* az; + struct auth_zone* z; + int result; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char* reason = NULL; + char* digestdup; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + + /* read file */ + z = authtest_addzone(az, zname, zfile); + unit_assert(z); + + /* create zonemd digest */ + result = auth_zone_generate_zonemd_hash(z, scheme, hashalgo, + zonemd_hash, sizeof(zonemd_hash), &hashlen, region, buf, + &reason); + if(reason) printf("zonemd failure reason: %s\n", reason); + unit_assert(result); + + /* check digest */ + unit_assert(hashlen*2+1 <= sizeof(output)); + for(i=0; i>4]; + output[i*2+1] = hexl[zonemd_hash[i]&0xf]; + } + output[hashlen*2] = 0; + digestdup = strdup(digest); + unit_assert(digestdup); + for(i=0; i= VERB_ALGO) { + char zname[255+1]; + dname_str(z->name, zname); + printf("zonemd generated for %s in %s with " + "scheme=%d hashalgo=%d\n", zname, z->zonefile, + scheme, hashalgo); + printf("digest %s\n", output); + printf("wanted %s\n", digestdup); + } + unit_assert(strcmp(output, digestdup) == 0); + + /* delete environment */ + free(digestdup); + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** loop over files and test generated zonemd digest */ +static void zonemd_generate_tests(void) +{ + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_hash"); + zonemd_generate_test("example.org", "testdata/zonemd.example1.zone", + 1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.1 */ + zonemd_generate_test("example", "testdata/zonemd.example_a1.zone", + 1, 1, "c68090d90a7aed716bc459f9340e3d7c1370d4d24b7e2fc3a1ddc0b9a87153b9a9713b3c9ae5cc27777f98b8e730044c"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.2 */ + zonemd_generate_test("example", "testdata/zonemd.example_a2.zone", + 1, 1, "31cefb03814f5062ad12fa951ba0ef5f8da6ae354a415767246f7dc932ceb1e742a2108f529db6a33a11c01493de358d"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA384 digest */ + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 1, "62e6cf51b02e54b9b5f967d547ce43136792901f9f88e637493daaf401c92c279dd10f0edb1c56f8080211f8480ee306"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.3 SHA512 digest*/ + zonemd_generate_test("example", "testdata/zonemd.example_a3.zone", + 1, 2, "08cfa1115c7b948c4163a901270395ea226a930cd2cbcf2fa9a5e6eb85f37c8a4e114d884e66f176eab121cb02db7d652e0cc4827e7a3204f166b47e5613fd27"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.4 */ + zonemd_generate_test("uri.arpa", "testdata/zonemd.example_a4.zone", + 1, 1, "1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fadc556439889a10eaf6f11d615900a4f996bd46279514e473"); + + /* https://tools.ietf.org/html/draft-ietf-dnsop-dns-zone-digest-12 + * from section A.5 */ + zonemd_generate_test("root-servers.net", "testdata/zonemd.example_a5.zone", + 1, 1, "f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a978a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79"); +} + +/** test the zonemd check routine */ +static void zonemd_check_test(void) +{ + const char* zname = "example.org"; + char* zfile = "testdata/zonemd.example1.zone"; + int scheme = 1; + int hashalgo = 2; + const char* digest = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7"; + const char* digestwrong = "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D48100"; + uint8_t hash[512], hashwrong[512]; + size_t hashlen = 0, hashwronglen = 0; + struct auth_zones* az; + struct auth_zone* z; + int result; + struct regional* region = NULL; + struct sldns_buffer* buf = NULL; + char* reason = NULL; + + if(!zonemd_hashalgo_supported(hashalgo)) + return; /* cannot test unsupported algo */ + unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_check"); + + /* setup environment */ + az = auth_zones_create(); + unit_assert(az); + region = regional_create(); + unit_assert(region); + buf = sldns_buffer_new(65535); + unit_assert(buf); + + /* read file */ + z = authtest_addzone(az, zname, zfile); + unit_assert(z); + hashlen = sizeof(hash); + if(sldns_str2wire_hex_buf(digest, hash, &hashlen) != 0) { + unit_assert(0); /* parse failure */ + } + hashwronglen = sizeof(hashwrong); + if(sldns_str2wire_hex_buf(digestwrong, hashwrong, &hashwronglen) != 0) { + unit_assert(0); /* parse failure */ + } + + /* check return values of the check routine */ + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(result && reason == NULL); + result = auth_zone_generate_zonemd_check(z, 241, hashalgo, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported scheme")==0); + result = auth_zone_generate_zonemd_check(z, scheme, 242, + hash, hashlen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "unsupported algorithm")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hash, 2, region, buf, &reason); + unit_assert(!result && strcmp(reason, "digest length too small, less than 12")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest")==0); + result = auth_zone_generate_zonemd_check(z, scheme, hashalgo, + hashwrong, hashwronglen-3, region, buf, &reason); + unit_assert(!result && strcmp(reason, "incorrect digest length")==0); + + /* delete environment */ + auth_zones_delete(az); + regional_destroy(region); + sldns_buffer_free(buf); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** zonemd test verify */ +static void zonemd_verify_test(char* zname, char* zfile, char* tastr, + char* date_override, char* result_wanted) +{ + time_t now = 0; + struct module_stack mods; + struct module_env env; + char* result = NULL; + struct auth_zone* z; + + /* setup test harness */ + memset(&mods, 0, sizeof(mods)); + memset(&env, 0, sizeof(env)); + env.scratch = regional_create(); + if(!env.scratch) + fatal_exit("out of memory"); + env.scratch_buffer = sldns_buffer_new(65553); + if(!env.scratch_buffer) + fatal_exit("out of memory"); + env.cfg = config_create(); + if(!env.cfg) + fatal_exit("out of memory"); + env.now = &now; + env.cfg->val_date_override = cfg_convert_timeval(date_override); + if(!env.cfg->val_date_override) + fatal_exit("could not parse datetime %s", date_override); + if(env.cfg->module_conf) + free(env.cfg->module_conf); + env.cfg->module_conf = strdup("validator iterator"); + if(!env.cfg->module_conf) + fatal_exit("out of memory"); + if(tastr) { + if(!cfg_strlist_insert(&env.cfg->trust_anchor_list, + strdup(tastr))) + fatal_exit("out of memory"); + } + env.anchors = anchors_create(); + if(!env.anchors) + fatal_exit("out of memory"); + env.auth_zones = auth_zones_create(); + if(!env.auth_zones) + fatal_exit("out of memory"); + modstack_init(&mods); + if(!modstack_setup(&mods, env.cfg->module_conf, &env)) + fatal_exit("could not modstack_setup"); + env.mesh = mesh_create(&mods, &env); + if(!env.mesh) + fatal_exit("out of memory"); + + /* load data */ + z = authtest_addzone(env.auth_zones, zname, zfile); + if(!z) + fatal_exit("could not addzone %s %s", zname, zfile); + + /* test */ + lock_rw_wrlock(&z->lock); + auth_zone_verify_zonemd(z, &env, &mods, &result, 1, 0); + lock_rw_unlock(&z->lock); + if(verbosity >= VERB_ALGO) { + printf("auth zone %s: ZONEMD verification %s: %s\n", zname, + (strcmp(result, "ZONEMD verification successful")==0?"successful":"failed"), + result); + } + if(!result) + fatal_exit("out of memory"); + unit_assert(strcmp(result, result_wanted) == 0); + if(strcmp(result, "ZONEMD verification successful") == 0 || + strcmp(result, "DNSSEC verified nonexistence of ZONEMD") == 0 || + strcmp(result, "no ZONEMD present") == 0) { + lock_rw_rdlock(&z->lock); + unit_assert(!z->zone_expired); + lock_rw_unlock(&z->lock); + } else { + lock_rw_rdlock(&z->lock); + unit_assert(z->zone_expired); + lock_rw_unlock(&z->lock); + } + free(result); + + /* desetup test harness */ + mesh_delete(env.mesh); + modstack_desetup(&mods, &env); + auth_zones_delete(env.auth_zones); + anchors_delete(env.anchors); + config_delete(env.cfg); + regional_destroy(env.scratch); + sldns_buffer_free(env.scratch_buffer); + + if(verbosity >= VERB_ALGO) { + printf("\n"); + } +} + +/** zonemd test verify suite */ +static void zonemd_verify_tests(void) +{ + unit_show_func("services/authzone.c", "auth_zone_verify_zonemd"); + /* give trustanchor for unsigned zone, should fail */ + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "verify DNSKEY RRset with trust anchor failed: have trust anchor, but zone has no DNSKEY"); + /* unsigned zone without ZONEMD in it */ + zonemd_verify_test("example.org", + "testdata/zonemd.example1.zone", + NULL, + "20180302005009", + "no ZONEMD present"); + /* no trust anchor, so it succeeds for zone with a correct ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* trust anchor for another zone, so it is indeterminate */ + zonemd_verify_test("example.com", + "testdata/zonemd.example2.zone", + "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20180302005009", + "ZONEMD verification successful"); + + /* load a DNSSEC signed zone, but no trust anchor */ + /* this zonefile has an incorrect ZONEMD digest, with correct + * DNSSEC signature. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example3.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* load a DNSSEC zone with NSEC3, but no trust anchor */ + /* this zonefile has an incorrect ZONEMD digest, with correct + * DNSSEC signature. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example4.zone", + NULL, + "20180302005009", + "incorrect digest"); + /* valid zonemd, in dnssec signed zone, no trust anchor*/ + /* this zonefile has a correct ZONEMD digest and + * correct DNSSEC signature */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + /* valid zonemd, in dnssec NSEC3 zone, no trust anchor*/ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); + + /* load a DNSSEC signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); + /* load a DNSSEC NSEC3 signed zone with a trust anchor, valid ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example6.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "ZONEMD verification successful"); + + /* load a DNSSEC NSEC zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example7.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verified nonexistence of ZONEMD"); + /* load a DNSSEC NSEC3 zone without ZONEMD */ + zonemd_verify_test("example.com", + "testdata/zonemd.example8.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verified nonexistence of ZONEMD"); + + /* load DNSSEC zone but RRSIG on ZONEMD is wrong */ + zonemd_verify_test("example.com", + "testdata/zonemd.example9.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for ZONEMD RRset: signature crypto failed"); + /* load DNSSEC zone but RRSIG on SOA is wrong */ + zonemd_verify_test("example.com", + "testdata/zonemd.example10.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for SOA RRset: signature crypto failed"); + + /* load DNSSEC zone without ZONEMD, but NSEC bitmap says it exists */ + zonemd_verify_test("example.com", + "testdata/zonemd.example11.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC NSEC bitmap says type ZONEMD exists"); + /* load DNSSEC zone without ZONEMD, but NSEC3 bitmap says it exists */ + zonemd_verify_test("example.com", + "testdata/zonemd.example12.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC NSEC3 bitmap says type ZONEMD exists"); + + /* load DNSSEC zone without ZONEMD, but RRSIG on NSEC not okay */ + zonemd_verify_test("example.com", + "testdata/zonemd.example13.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for NSEC RRset: signature crypto failed"); + /* load DNSSEC zone without ZONEMD, but RRSIG on NSEC3 not okay */ + zonemd_verify_test("example.com", + "testdata/zonemd.example14.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "DNSSEC verify failed for NSEC3 RRset: signature crypto failed"); + + /* load DNSSEC zone, with ZONEMD, but DNSKEY RRSIG is not okay. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example15.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "verify DNSKEY RRset with trust anchor failed: signature crypto failed"); + /* load DNSSEC zone, but trust anchor mismatches DNSKEY */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + /* okay anchor is + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", */ + "example.com. IN DS 55566 8 2 0000000000111111222223333444444dfcf92595148022f2c2fd98e5deee90af", + "20201020135527", + "verify DNSKEY RRset with trust anchor failed: DS hash mismatches key"); + /* load DNSSEC zone, but trust anchor fails because the zone + * has expired signatures. We set the date for it */ + zonemd_verify_test("example.com", + "testdata/zonemd.example5.zone", + "example.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af", + /* okay date: "20201020135527", */ + "20221020135527", + "verify DNSKEY RRset with trust anchor failed: signature expired"); + + /* duplicate zonemd with same scheme and algorithm */ + zonemd_verify_test("example.com", + "testdata/zonemd.example16.zone", + NULL, + "20180302005009", + "ZONEMD RRSet contains more than one RR with the same scheme and hash algorithm"); + /* different capitalisation of ns name and owner names, should + * be canonicalized. */ + zonemd_verify_test("example.com", + "testdata/zonemd.example17.zone", + NULL, + "20180302005009", + "ZONEMD verification successful"); +} + +/** zonemd unit tests */ +void zonemd_test(void) +{ + unit_show_feature("zonemd"); + zonemd_generate_tests(); + zonemd_check_test(); + zonemd_verify_tests(); +} diff --git a/testdata/auth_zonefile_dnssec.rpl b/testdata/auth_zonefile_dnssec.rpl index eb264ee8b..f58c52300 100644 --- a/testdata/auth_zonefile_dnssec.rpl +++ b/testdata/auth_zonefile_dnssec.rpl @@ -5,6 +5,7 @@ server: target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no + zonemd-permissive-mode: yes auth-zone: name: "example.com." diff --git a/testdata/auth_zonefile_down.rpl b/testdata/auth_zonefile_down.rpl index 9c5ecbb1c..870ba9401 100644 --- a/testdata/auth_zonefile_down.rpl +++ b/testdata/auth_zonefile_down.rpl @@ -7,6 +7,7 @@ server: qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes + zonemd-permissive-mode: yes auth-zone: name: "example.com." diff --git a/testdata/auth_zonemd_anchor.rpl b/testdata/auth_zonemd_anchor.rpl new file mode 100644 index 000000000..7e4257513 --- /dev/null +++ b/testdata/auth_zonemd_anchor.rpl @@ -0,0 +1,233 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_anchor_fail.rpl b/testdata/auth_zonemd_anchor_fail.rpl new file mode 100644 index 000000000..69492d5f8 --- /dev/null +++ b/testdata/auth_zonemd_anchor_fail.rpl @@ -0,0 +1,235 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + ; correct anchor + ; trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + ; wrong anchor + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deeaaaaa" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with failed trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_chain.rpl b/testdata/auth_zonemd_chain.rpl new file mode 100644 index 000000000..b693f6c35 --- /dev/null +++ b/testdata/auth_zonemd_chain.rpl @@ -0,0 +1,233 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_chain_fail.rpl b/testdata/auth_zonemd_chain_fail.rpl new file mode 100644 index 000000000..d38367b9d --- /dev/null +++ b/testdata/auth_zonemd_chain_fail.rpl @@ -0,0 +1,235 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +; dnskey is wrong: +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+AAAAA ;{id = 55566 (zsk), size = 1024b} +; dnskey that was correct: +;example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile with failed chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_file.rpl b/testdata/auth_zonemd_file.rpl new file mode 100644 index 000000000..ffccd6779 --- /dev/null +++ b/testdata/auth_zonemd_file.rpl @@ -0,0 +1,182 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD from zonefile + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_file_fail.rpl b/testdata/auth_zonemd_file_fail.rpl new file mode 100644 index 000000000..4bfa81b80 --- /dev/null +++ b/testdata/auth_zonemd_file_fail.rpl @@ -0,0 +1,184 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; good zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD failure from zonefile + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure.rpl b/testdata/auth_zonemd_insecure.rpl new file mode 100644 index 000000000..b48992b4d --- /dev/null +++ b/testdata/auth_zonemd_insecure.rpl @@ -0,0 +1,214 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_absent.rpl b/testdata/auth_zonemd_insecure_absent.rpl new file mode 100644 index 000000000..4706ccb0a --- /dev/null +++ b/testdata/auth_zonemd_insecure_absent.rpl @@ -0,0 +1,216 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the missing ZONEMD record +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with absent ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is not there. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_absent_reject.rpl b/testdata/auth_zonemd_insecure_absent_reject.rpl new file mode 100644 index 000000000..79225c936 --- /dev/null +++ b/testdata/auth_zonemd_insecure_absent_reject.rpl @@ -0,0 +1,217 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + zonemd-reject-absence: yes + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the missing ZONEMD record +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with reject-absence ZONEMD that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is not there. This is not allowed by the zonemd-reject-absence +; option in config, so it fails the zone. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_insecure_fail.rpl b/testdata/auth_zonemd_insecure_fail.rpl new file mode 100644 index 000000000..03bbdd64c --- /dev/null +++ b/testdata/auth_zonemd_insecure_fail.rpl @@ -0,0 +1,217 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; correct ZONEMD +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong ZONEMD +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD fail that is securely insecure +; the trust anchor finds an online delegation with an insecure DS referral. +; the ZONEMD is wrong, eg. the hash does not match the zone data. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION AUTHORITY +com. SOA a.gtld-servers.net. nstld.verisign-grs.com. 1603979208 1800 900 604800 86400 +com. 3600 IN RRSIG SOA 8 1 3600 20201116135527 20201019135527 1444 com. LTUZ8PlkMLX+dBZLGcJcahrzOgf1PgYbi/s5VKyR9iyYKeP6qdxO5VehUVHdXfmUiXrsszvhAHzo4AZnfRbDkK6uTfMKCSIB1aXOU4A74LpjhJBsXjyo3CN3IK/dMS/FpJfAb6JnuQV1E3ytDd34yNsoBazEjYeoN1kymGAttbM= +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. IN NSEC foo.com. NS RRSIG +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 1444 com. KK6ci3DUnGJ9gaBBqS+71TiFBGcl51YLZAYGADDWuSgFOLLbh1nV//la08zE1i8ITQjjsqyRw7/MA8LWpPR3TnUjJLk6mBd/kB3dJ8BHWRqcyreFo6Pu383oCcXTpwkFcL4ulhp54LUxbA3arWVjWbx8815vvNKsEtWUyrz4LN8= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_nokey.rpl b/testdata/auth_zonemd_nokey.rpl new file mode 100644 index 000000000..57609337e --- /dev/null +++ b/testdata/auth_zonemd_nokey.rpl @@ -0,0 +1,211 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with ZONEMD that lacks a DNSKEY +; the zone has no DNSSEC, but the trust anchor requires it. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END + +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_permissive_mode.rpl b/testdata/auth_zonemd_permissive_mode.rpl new file mode 100644 index 000000000..0df0a2951 --- /dev/null +++ b/testdata/auth_zonemd_permissive_mode.rpl @@ -0,0 +1,186 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + zonemd-permissive-mode: yes + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: no + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; good zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test zonemd permissive mode + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 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 127.0.0.1 +ENTRY_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr.rpl b/testdata/auth_zonemd_xfr.rpl new file mode 100644 index 000000000..0a4d45f92 --- /dev/null +++ b/testdata/auth_zonemd_xfr.rpl @@ -0,0 +1,237 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +bar.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN A 1.2.3.4 +ns.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN A 127.0.0.1 +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_anchor.rpl b/testdata/auth_zonemd_xfr_anchor.rpl new file mode 100644 index 000000000..682d51b47 --- /dev/null +++ b/testdata/auth_zonemd_xfr_anchor.rpl @@ -0,0 +1,284 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_anchor_fail.rpl b/testdata/auth_zonemd_xfr_anchor_fail.rpl new file mode 100644 index 000000000..2b2849546 --- /dev/null +++ b/testdata/auth_zonemd_xfr_anchor_fail.rpl @@ -0,0 +1,265 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "example.com. DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD fail with trust anchor + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +; this is the bad RR that causes the wrong zonemd. RRSIG is wrong too. +bar.example.com. 3600 IN A 1.2.3.55 +; orig RR +;bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_chain.rpl b/testdata/auth_zonemd_xfr_chain.rpl new file mode 100644 index 000000000..9d1fdcf68 --- /dev/null +++ b/testdata/auth_zonemd_xfr_chain.rpl @@ -0,0 +1,309 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 127.0.0.1 +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_chain_fail.rpl b/testdata/auth_zonemd_xfr_chain_fail.rpl new file mode 100644 index 000000000..8b3ad74f0 --- /dev/null +++ b/testdata/auth_zonemd_xfr_chain_fail.rpl @@ -0,0 +1,320 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + trust-anchor: "com. DS 1444 8 2 0d72034e3e18a9ef383c164b68302433bbde957616e10cf44575fea2abae469c" + trust-anchor-signaling: no + val-override-date: 20201020135527 + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with ZONEMD failure with chain of trust + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN DS +SECTION ANSWER +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +example.com. 3600 IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af +example.com. 3600 IN RRSIG DS 8 2 3600 20201116135527 20201019135527 1444 com. BpV1M171SSkbdlGawwweJwQ0W+aNaCrgkt2QTsxCvbo1acR5i3AKm4REOUzo4I36lRx26mYkF9Topkeu0aFmov7P2uUhCxk4faFK7k87k97FAqZaDGp/K9b3YCfiwJBc5pJSUW0ndU/Ve5zAh/wL493RMSC7LwJr5JjV0NxydFk= +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +com. IN DNSKEY +SECTION ANSWER +com. 3600 IN DNSKEY 257 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1444 (ksk), size = 1024b} +com. 3600 IN RRSIG DNSKEY 8 1 3600 20201116135527 20201019135527 1444 com. BEOMfWvi6RgnHaHsst+Ed265hBuCkgMR7gDpu89J7ZrVL6DzMKnNVFdgjl/9xwLj/pkukc7qeLSHjAfLlN0E4THW7PVshscQnjvXCkktG2Ejx9fTyllAqeGDh9z9QDGlQZIGTMgb9413qZhNqe2Tda9PTJRpiZ8b4bdQp6V1kVo= +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +; this is the bad RR that causes the wrong zonemd. RRSIG is wrong too. +bar.example.com. 3600 IN A 1.2.3.55 +; orig RR +;bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY ZONEMD +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN ZONEMD 200154054 1 2 58F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +example.com. 3600 IN RRSIG ZONEMD 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +bar.example.com. 3600 IN A 1.2.3.55 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= +FILE_END + +SCENARIO_END diff --git a/testdata/auth_zonemd_xfr_fail.rpl b/testdata/auth_zonemd_xfr_fail.rpl new file mode 100644 index 000000000..9fdf70889 --- /dev/null +++ b/testdata/auth_zonemd_xfr_fail.rpl @@ -0,0 +1,240 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +auth-zone: + name: "example.com." + ## zonefile (or none). + ## zonefile: "example.com.zone" + ## master by IP address or hostname + ## can list multiple masters, each on one line. + ## master: + master: 1.2.3.44 + ## url for http fetch + ## url: + ## queries from downstream clients get authoritative answers. + ## for-downstream: yes + for-downstream: yes + ## queries are used to fetch authoritative answers from this zone, + ## instead of unbound itself sending queries there. + ## for-upstream: yes + for-upstream: yes + ## on failures with for-upstream, fallback to sending queries to + ## the authority servers + ## fallback-enabled: no + + ## this line generates zonefile: \n"/tmp/xxx.example.com"\n + zonefile: +TEMPFILE_NAME example.com + ## this is the inline file /tmp/xxx.example.com + ## the tempfiles are deleted when the testrun is over. +TEMPFILE_CONTENTS example.com +TEMPFILE_END + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authority zone with AXFR with failed ZONEMD + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.44 +ENTRY_END +RANGE_END + +; ns.example.net. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.44 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.net. IN NS +SECTION ANSWER +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +ns.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN A +SECTION ANSWER +ns.example.net. IN A 1.2.3.44 +SECTION AUTHORITY +example.net. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +ns.example.net. IN AAAA +SECTION AUTHORITY +example.net. IN NS ns.example.net. +SECTION ADDITIONAL +www.example.net. IN A 1.2.3.44 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.net. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +; serial, refresh, retry, expire, minimum +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOTIMPL +SECTION QUESTION +example.com. IN IXFR +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; old zonemd +;example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; wrong zonemd +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D7AAAAA +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 20 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +STEP 30 TIME_PASSES ELAPSE 10 +STEP 40 TRAFFIC + +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR AA RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +ENTRY_END + +; the zonefile was updated with new contents +STEP 70 CHECK_TEMPFILE example.com +FILE_BEGIN +FILE_END + +SCENARIO_END diff --git a/testdata/test_ldnsrr.5 b/testdata/test_ldnsrr.5 index d5f4650a7..9be72b4aa 100644 --- a/testdata/test_ldnsrr.5 +++ b/testdata/test_ldnsrr.5 @@ -151,3 +151,22 @@ blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585012 300 16 k9mSMs2t5vq5FV2D blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4uRCjyQ== 25791 0 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 + +; Test for ZONEMD +example.org. 86400 IN ZONEMD 5 1 2 c1b8eddf4ef128db88125ede9008d6ff0b33a047b8a8a4d77b00271f7d8e7ae5ccd6c86d8398f64f0de0615bf3121ffba6946a3cd5f32acbc4e8d0649b4a78e6 +; from draft-ietf-dnsop-dns-zone-digest-12#section-2.4 +example.com. 86400 IN ZONEMD 2018031500 1 1 ( FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE 7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.1 +example. 86400 IN ZONEMD 2018031900 1 1 ( c68090d90a7aed71 6bc459f9340e3d7c 1370d4d24b7e2fc3 a1ddc0b9a87153b9 a9713b3c9ae5cc27 777f98b8e730044c ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.2 +example. 86400 IN ZONEMD 2018031900 1 1 ( 31cefb03814f5062 ad12fa951ba0ef5f 8da6ae354a415767 246f7dc932ceb1e7 42a2108f529db6a3 3a11c01493de358d ) +non-apex.example. 900 IN ZONEMD 2018031900 1 1 ( 616c6c6f77656420 6275742069676e6f 7265642e20616c6c 6f77656420627574 2069676e6f726564 2e20616c6c6f7765 ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.3 +example. 86400 IN ZONEMD 2018031900 1 1 ( 62e6cf51b02e54b9 b5f967d547ce4313 6792901f9f88e637 493daaf401c92c27 9dd10f0edb1c56f8 080211f8480ee306 ) +example. 86400 IN ZONEMD 2018031900 1 2 ( 08cfa1115c7b948c 4163a901270395ea 226a930cd2cbcf2f a9a5e6eb85f37c8a 4e114d884e66f176 eab121cb02db7d65 2e0cc4827e7a3204 f166b47e5613fd27 ) +example. 86400 IN ZONEMD 2018031900 1 240 ( e2d523f654b9422a 96c5a8f44607bbee ) +example. 86400 IN ZONEMD 2018031900 241 1 ( e1846540e33a9e41 89792d18d5d131f6 05fc283e ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.4 +uri.arpa. 3600 IN ZONEMD 2018100702 1 1 ( 1291b78ddf7669b1a39d014d87626b709b55774c5d7d58fa dc556439889a10eaf6f11d615900a4f996bd46279514e473 ) +; from draft-ietf-dnsop-dns-zone-digest-12#section-A.5 +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) diff --git a/testdata/test_ldnsrr.c5 b/testdata/test_ldnsrr.c5 index 1e292ba64..98c2ed380 100644 --- a/testdata/test_ldnsrr.c5 +++ b/testdata/test_ldnsrr.c5 @@ -188,3 +188,25 @@ blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4u blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 06626C61626C610000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583FF0F6012C0010EB0BE51BCDAC1151F2AAC4ED04BBD14365BC00000000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 +076578616D706C65036F726700003F0001000151800046000000050102C1B8EDDF4EF128DB88125EDE9008D6FF0B33A047B8A8A4D77B00271F7D8E7AE5CCD6C86D8398F64F0DE0615BF3121FFBA6946A3CD5F32ACBC4E8D0649B4A78E6 +example.org. 86400 IN ZONEMD 5 1 2 C1B8EDDF4EF128DB88125EDE9008D6FF0B33A047B8A8A4D77B00271F7D8E7AE5CCD6C86D8398F64F0DE0615BF3121FFBA6946A3CD5F32ACBC4E8D0649B4A78E6 +076578616D706C6503636F6D00003F00010001518000367848B78C0101FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE +example.com. 86400 IN ZONEMD 2018031500 1 1 FEBE3D4CE2EC2FFA4BA99D46CD69D6D29711E55217057BEE7EB1A7B641A47BA7FED2DD5B97AE499FAFA4F22C6BD647DE +076578616D706C6500003F00010001518000367848B91C0101C68090D90A7AED716BC459F9340E3D7C1370D4D24B7E2FC3A1DDC0B9A87153B9A9713B3C9AE5CC27777F98B8E730044C +example. 86400 IN ZONEMD 2018031900 1 1 C68090D90A7AED716BC459F9340E3D7C1370D4D24B7E2FC3A1DDC0B9A87153B9A9713B3C9AE5CC27777F98B8E730044C +076578616D706C6500003F00010001518000367848B91C010131CEFB03814F5062AD12FA951BA0EF5F8DA6AE354A415767246F7DC932CEB1E742A2108F529DB6A33A11C01493DE358D +example. 86400 IN ZONEMD 2018031900 1 1 31CEFB03814F5062AD12FA951BA0EF5F8DA6AE354A415767246F7DC932CEB1E742A2108F529DB6A33A11C01493DE358D +086E6F6E2D61706578076578616D706C6500003F00010000038400367848B91C0101616C6C6F776564206275742069676E6F7265642E20616C6C6F776564206275742069676E6F7265642E20616C6C6F7765 +non-apex.example. 900 IN ZONEMD 2018031900 1 1 616C6C6F776564206275742069676E6F7265642E20616C6C6F776564206275742069676E6F7265642E20616C6C6F7765 +076578616D706C6500003F00010001518000367848B91C010162E6CF51B02E54B9B5F967D547CE43136792901F9F88E637493DAAF401C92C279DD10F0EDB1C56F8080211F8480EE306 +example. 86400 IN ZONEMD 2018031900 1 1 62E6CF51B02E54B9B5F967D547CE43136792901F9F88E637493DAAF401C92C279DD10F0EDB1C56F8080211F8480EE306 +076578616D706C6500003F00010001518000467848B91C010208CFA1115C7B948C4163A901270395EA226A930CD2CBCF2FA9A5E6EB85F37C8A4E114D884E66F176EAB121CB02DB7D652E0CC4827E7A3204F166B47E5613FD27 +example. 86400 IN ZONEMD 2018031900 1 2 08CFA1115C7B948C4163A901270395EA226A930CD2CBCF2FA9A5E6EB85F37C8A4E114D884E66F176EAB121CB02DB7D652E0CC4827E7A3204F166B47E5613FD27 +076578616D706C6500003F00010001518000167848B91C01F0E2D523F654B9422A96C5A8F44607BBEE +example. 86400 IN ZONEMD 2018031900 1 240 E2D523F654B9422A96C5A8F44607BBEE +076578616D706C6500003F000100015180001A7848B91CF101E1846540E33A9E4189792D18D5D131F605FC283E +example. 86400 IN ZONEMD 2018031900 241 1 E1846540E33A9E4189792D18D5D131F605FC283E +03757269046172706100003F000100000E1000367849C5DE01011291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 +uri.arpa. 3600 IN ZONEMD 2018100702 1 1 1291B78DDF7669B1A39D014D87626B709B55774C5D7D58FADC556439889A10EAF6F11D615900A4F996BD46279514E473 +0C726F6F742D73657276657273036E657400003F00010036EE8000367849A05C0101F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 F1CA0CCD91BD5573D9F431C00EE0101B2545C97602BE0A978A3B11DBFC1C776D5B3E86AE3D973D6B5349BA7F04340F79 diff --git a/testdata/zonemd.example1.zone b/testdata/zonemd.example1.zone new file mode 100644 index 000000000..b1a44895f --- /dev/null +++ b/testdata/zonemd.example1.zone @@ -0,0 +1,4 @@ +example.org. IN SOA ns.example.org. hostmaster.example.org. 200154054 28800 7200 604800 3600 +example.org. IN NS ns.example.org. +www.example.org. IN A 127.0.0.1 +ns.example.org. IN A 127.0.0.1 diff --git a/testdata/zonemd.example10.zone b/testdata/zonemd.example10.zone new file mode 100644 index 000000000..33ca2828e --- /dev/null +++ b/testdata/zonemd.example10.zone @@ -0,0 +1,35 @@ +; DNSSEC signed but RRSIG on SOA is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +; old sig +; example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +; wrong sig +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgeAAAAA= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example11.zone b/testdata/zonemd.example11.zone new file mode 100644 index 000000000..7562f7972 --- /dev/null +++ b/testdata/zonemd.example11.zone @@ -0,0 +1,33 @@ +; DNSSEC NSEC zone, but ZONEMD is missing + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +; missing ZONEMD +;example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +;example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example12.zone b/testdata/zonemd.example12.zone new file mode 100644 index 000000000..4fc04bf88 --- /dev/null +++ b/testdata/zonemd.example12.zone @@ -0,0 +1,35 @@ +; DNSSEC NSEC3 zone, but ZONEMD is missing + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +; missing ZONEMD +;example.com. 3600 IN TYPE63 \# 70 0bee1bc6010246e31506f321c58db811c934c6446141d651a8574fb21088a2bb6feec875fc8b60f50beae00e7f6554e2cf3cb048350ef92e2946137443e30079813db4d1bfbd +;example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. M0f4wkOn6dcYtaQtwvp698QL7HuKEgi+PPjYJawV8d1VNOWbbRTF9L9tHFDK42Ylq238uOxi223ZEk/pq4BP64Sm31dV54K2V95QqdzN9NDD34+sqKEgGyRcmBiE50gm3kZZ4ENqBQKc+GdlbZ2fHSI6gf6X694sSmZ7dfjq+2k= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example13.zone b/testdata/zonemd.example13.zone new file mode 100644 index 000000000..9f311c912 --- /dev/null +++ b/testdata/zonemd.example13.zone @@ -0,0 +1,33 @@ +; DNSSEC NSEC zone without ZONEMD, but NSEC RRSIG is wrong + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY +; old sig +;example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVJEHMA= +; wrong sig +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVAAAAA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example14.zone b/testdata/zonemd.example14.zone new file mode 100644 index 000000000..bc4cdacdb --- /dev/null +++ b/testdata/zonemd.example14.zone @@ -0,0 +1,35 @@ +; DNSSEC NSEC3 zone without ZONEMD, but NSEC3 RRSIG is wrong + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM +; old sig +;v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxq2kUQ= +; wrong sig +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxAAAAA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example15.zone b/testdata/zonemd.example15.zone new file mode 100644 index 000000000..8a1068910 --- /dev/null +++ b/testdata/zonemd.example15.zone @@ -0,0 +1,35 @@ +; DNSSEC signed but DNSKEY RRSIG is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +; old sig +;example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +; wrong sig +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2AAAAA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example16.zone b/testdata/zonemd.example16.zone new file mode 100644 index 000000000..7520744d3 --- /dev/null +++ b/testdata/zonemd.example16.zone @@ -0,0 +1,11 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the ZONEMD that should be in this file, without DNSSEC +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; duplicate zonemd with same scheme and algorithm (different at end) +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D720000 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 diff --git a/testdata/zonemd.example17.zone b/testdata/zonemd.example17.zone new file mode 100644 index 000000000..4315f9054 --- /dev/null +++ b/testdata/zonemd.example17.zone @@ -0,0 +1,11 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +; capitalisation is different here. +exaMPLe.cOM. IN NS Ns.exaMPLe.cOm. +; the ZONEMD that should be in this file, without DNSSEC +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; capitalisation is different here. +wWW.exAMPLe.cOM. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 diff --git a/testdata/zonemd.example2.zone b/testdata/zonemd.example2.zone new file mode 100644 index 000000000..14b7ea689 --- /dev/null +++ b/testdata/zonemd.example2.zone @@ -0,0 +1,15 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +; the ZONEMD that should be in this file, without DNSSEC +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; incorrect digest in example3 and example4. +;example.com. IN TYPE63 \# 70 0BEE1BC60102EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +; correct digest for example 5. +;example.com. IN TYPE63 \# 70 0BEE1BC6010258F7620F93204BBB31B44F795B3409CC4ABD9EF5601DECC15675BD7751213152984EDDCE0626E6062E744B03B3E47711202FBB79E4A2EB8BC5CF46741B5CAE6F +; correct digest for example 6. +;example.com. IN TYPE63 \# 70 0BEE1BC6010246E31506F321C58DB811C934C6446141D651A8574FB21088A2BB6FEEC875FC8B60F50BEAE00E7F6554E2CF3CB048350EF92E2946137443E30079813DB4D1BFBD +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 diff --git a/testdata/zonemd.example3.zone b/testdata/zonemd.example3.zone new file mode 100644 index 000000000..12389f3d5 --- /dev/null +++ b/testdata/zonemd.example3.zone @@ -0,0 +1,34 @@ +; signed version of zonemd.example2.zone +; with ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has an incorrect ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc60102efaa5b78b38ab1c45de57b8167bcce906451d0e72118e1f5e80b5f0c3cf04bffc65d53c011185528ead439d6f3a02f511961e090e5e4e0dfa013bd276d728b22 +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. RdHiJlugposfoRbog+Mkg2xeJXSzBi/UXxBnyHVF/Usqhp6Z7Acy4XwtRRb8YAbJevP9nBpCh23Fh4b1Vxl4xI0iB8aXWKtHeb98m81rfsflWvnTYbeau3ltfP/OJWqdmFsBy8DOwNxiN8sAMbGwQK8PFDk3lcRCqv8qq/tmow8= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example4.zone b/testdata/zonemd.example4.zone new file mode 100644 index 000000000..dae0f17c7 --- /dev/null +++ b/testdata/zonemd.example4.zone @@ -0,0 +1,36 @@ +; signed with NSEC3, of zonemd.example.2.zone +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has an incorrect ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +example.com. 3600 IN TYPE63 \# 70 0bee1bc60102efaa5b78b38ab1c45de57b8167bcce906451d0e72118e1f5e80b5f0c3cf04bffc65d53c011185528ead439d6f3a02f511961e090e5e4e0dfa013bd276d728b22 +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. RdHiJlugposfoRbog+Mkg2xeJXSzBi/UXxBnyHVF/Usqhp6Z7Acy4XwtRRb8YAbJevP9nBpCh23Fh4b1Vxl4xI0iB8aXWKtHeb98m81rfsflWvnTYbeau3ltfP/OJWqdmFsBy8DOwNxiN8sAMbGwQK8PFDk3lcRCqv8qq/tmow8= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example5.zone b/testdata/zonemd.example5.zone new file mode 100644 index 000000000..d88380ade --- /dev/null +++ b/testdata/zonemd.example5.zone @@ -0,0 +1,34 @@ +; signed version of zonemd.example2.zone +; with ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has a correct ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example6.zone b/testdata/zonemd.example6.zone new file mode 100644 index 000000000..0a7b05a8d --- /dev/null +++ b/testdata/zonemd.example6.zone @@ -0,0 +1,36 @@ +; signed with NSEC3, of zonemd.example.2.zone +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +; this zonefile has a correct ZONEMD digest, with correct DNSSEC signature. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010246e31506f321c58db811c934c6446141d651a8574fb21088a2bb6feec875fc8b60f50beae00e7f6554e2cf3cb048350ef92e2946137443e30079813db4d1bfbd +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. M0f4wkOn6dcYtaQtwvp698QL7HuKEgi+PPjYJawV8d1VNOWbbRTF9L9tHFDK42Ylq238uOxi223ZEk/pq4BP64Sm31dV54K2V95QqdzN9NDD34+sqKEgGyRcmBiE50gm3kZZ4ENqBQKc+GdlbZ2fHSI6gf6X694sSmZ7dfjq+2k= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM TYPE63 +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. Yd+g1m2aDKDUuZNv2KpKk4uSNrpB5KLM3QUqypm484VjOpnj5Wy3BjUULH3P8z+S9PG7XbaOf+yUYHK8cI6i5GTcrMhoLKaanAD09i1KbXbTVJujwA9Za7WzlFVZ3o6f1D8CbrSS3YPWNF3Mb2FYaptvZ9so7MlecuLYdEer7DY= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example7.zone b/testdata/zonemd.example7.zone new file mode 100644 index 000000000..4339bd570 --- /dev/null +++ b/testdata/zonemd.example7.zone @@ -0,0 +1,31 @@ +; DNSSEC NSEC zone without ZONEMD +; created with +; ldns-signzone -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ROT+Kh6Y0sEf+L9c2HGPvppLL/DFP5KcX/zSjy7ovM7vXTrrdhEhOedbuccN84tk6VU8udGIixd5Usc+juZ+WsiWwaSNB5rKo6lZ9ceOJlYVzLCmawePzTsl6VAIiIVXwrMxGz/amBd+Ou/1NCuXJiWVThU9PDyJ/lQZbVJEHMA= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example8.zone b/testdata/zonemd.example8.zone new file mode 100644 index 000000000..2900753c0 --- /dev/null +++ b/testdata/zonemd.example8.zone @@ -0,0 +1,34 @@ +; DNSSEC NSEC3 zone without ZONEMD +; created with +; ldns-signzone -n -s 012345 -e 20201116135527 -i 20201019135527 zonemd.example2.zone Kexample.com.+008+55566 + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN NSEC3PARAM 1 0 1 012345 +example.com. 3600 IN RRSIG NSEC3PARAM 8 2 3600 20201116135527 20201019135527 55566 example.com. CDbcPLDrpVUyk3v7kwQ3LNzzhDHS40e0LDv7IZrzMt2AO/6SJ7xhlG+qByhc7CFBUMvBNaOteO5th0tvotWxk0UrVhqRyyXNCr8SmDdAaPH4SGwJ2p+XPIwn0CTXDpyOcgCrW0Kt2OjubA+4fQwjkGYFuDATY5QOITe6kGJpKpw= +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN NSEC3 1 0 1 012345 2v43f6ripfocif5h6bbi07glq6849rnj NS SOA RRSIG DNSKEY NSEC3PARAM +v4cknoe1mioduf5bmhgfjjq4dlqet8fm.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. J2LISTGtBe+x2pNESBOYrBHAJjEDVFkmjJf2kj0GSFYisvSuy6ZUvQZZUB9sfLmEX18FpdNTieE8MrR2nbpKWfgVBDdGtcU72x/GOIRRq586A1KNtP2eJ81vcblM5dvqvpht46tF+xy85j9G9BYxpcT1PQRpvmho9yhgCxq2kUQ= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN NSEC3 1 0 1 012345 f0lpjkgefgrobj5pucem78r2ouo53fq8 A RRSIG +c6ntadrd765diocebcrq6trs8npn83o3.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. gTDi/2e/RPeSOwoBr6oqfoFsGXAknLX3J96EHzMmhtRR7W4pEW8uXKsMJ3rr4qgUUX+ZtzoCMYy+UBkiJfjpWvMToGtuADNOzz0rF8BESaW/8k6iDKPmqmwdGyLGMmfGjYPcb4qg3+9egLejA+fF1OSrhHuINeO80ouw++PL0ns= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN NSEC3 1 0 1 012345 v4cknoe1mioduf5bmhgfjjq4dlqet8fm A RRSIG +r18q2sl76hceldh0keqr7vnqc15db64a.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. VugivzPyv5+qZhl+x0frrykYyOOdZfcKdmIA13P4OzhtiRNhCRHznhrdTlmfLw/b5Rs5jFX7Iw/hhU80Geg72cYG4KVJwtP6zTyFApDl/8x3rj3vhZOc2nwpYmjjFsyrlb7M2RhcStnS6c/2R4+dBFwwVZXyJBi3fo9NybujI9g= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN NSEC3 1 0 1 012345 r18q2sl76hceldh0keqr7vnqc15db64a A RRSIG +f0lpjkgefgrobj5pucem78r2ouo53fq8.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. zishUbm8GxjaHOOUdbz0ZEut99dm+DQ/zvxhOTeS3kmUnL8t3ISew641JeNvvajAUk/xn6eGHjLBuHfwNG+itF2pSD8Gl6Ppo22Y0C9uO5TyRQalYpjtz1kI/VlIelcd0TyusmIMaRChswtpctPKITbr8Wl+MoZZtPQhJ5NjQlQ= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN NSEC3 1 0 1 012345 91onuasouslv1so1i62id4rf0l763dss A RRSIG +2v43f6ripfocif5h6bbi07glq6849rnj.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. d9CluwN3zWfLe20J212CuwNzJVbVsDR4eijuJyLpyHzziSc10CauWtUiuHeQMXCVJNwhPSb5kQTfKtql+Jd44BQlenRt/sHfa6YZEOwClN4O8V0vZ43K4vlwwWbh5kxQbFQ/e+w4vlYb1m4PHwzDLtqocNQ9T4A8SXl3A8paZqI= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN NSEC3 1 0 1 012345 c6ntadrd765diocebcrq6trs8npn83o3 A RRSIG +91onuasouslv1so1i62id4rf0l763dss.example.com. 3600 IN RRSIG NSEC3 8 3 3600 20201116135527 20201019135527 55566 example.com. czJf5HkfHLpfGcku2iZnCu9tXnM7VWOYYhGtVAwkYG0M6BO4LzRxGCV3SkUvHLFxoqQY0DZLnafPl2MKg8zsF+tusf3e3xmpcCSR29IfuDYH7GzuVCj3H0ScmXM0lvyQ92JpJ0AMqq2mW1nvKmgjkyugs+EMpxcFVjhibljocLU= diff --git a/testdata/zonemd.example9.zone b/testdata/zonemd.example9.zone new file mode 100644 index 000000000..9c035aa13 --- /dev/null +++ b/testdata/zonemd.example9.zone @@ -0,0 +1,35 @@ +; signed zone but RRSIG on ZONEMD is wrong. + +example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. 3600 IN RRSIG SOA 8 2 3600 20201116135527 20201019135527 55566 example.com. gcFHT/Q4iDZ78CK6fyY2HZr8sRtgH2Rna9fEs06RW0gqMnfDntweoIaBamOZ7NlAP84aY2bZeanmEccmkHexByUpodCoKQ4NzVXctLr0TO4PVoFyfUfj62fjhM56SF8ioDxsoDQcPtYXcjNQjwfntWofMqHCMxrb9LzbgePzhOM= +example.com. 3600 IN NS ns.example.com. +example.com. 3600 IN RRSIG NS 8 2 3600 20201116135527 20201019135527 55566 example.com. X+V3XsbJbBi9OsHpjMkGCox8RLY/uXp/XX/O/flTrIre9fMDWm9ZGnewtuQFpLgGc6hUTi0eLsuRWRA5fZXEKUBhmoR2Ph01KgE1gvlL7v6zPWQwXVcBRUr3mOSbYdNNkHkXEjiDBGEhNkfqR216zNgw563eEGXOkLUFNIx5Zpg= +example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} +example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20201116135527 20201019135527 55566 example.com. fsdnVg38PKQTH2mDOwkXL6Jre7JP7Gf8WI3CvIbmeYQUJtAlpcSbZkS3wInm3kKMxOuT55BWzndQzpfmpo91OqJjG27W0k9301NMLUwFprA6b9HK+iPAT0JpYPDPzcm1bQdarLzLS+eD/GPwmyVSX7Gze+08VfE8m8sOW2r7UjA= +example.com. 3600 IN TYPE63 \# 70 0bee1bc6010258f7620f93204bbb31b44f795b3409cc4abd9ef5601decc15675bd7751213152984eddce0626e6062e744b03b3e47711202fbb79e4a2eb8bc5cf46741b5cae6f +; old sig +; example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVHxV8Y= +; wrong sig +example.com. 3600 IN RRSIG TYPE63 8 2 3600 20201116135527 20201019135527 55566 example.com. orn8ZF/yqj9u4WrhiO6gtEcTaVsnZSWWZLfXhcIOiWSB8kKCxtZl5cG17dD3Du1NllUwMRqkp0KleLhIoUS9xeQ/0x05u+CYLrfQ62oAiD7q54ZQzpXJIH52aQzKV70ZnO03CZowhQBnetmIoKX6xLogKo8pt+BdQbo3oVAAAAA= +example.com. 3600 IN NSEC bar.example.com. NS SOA RRSIG NSEC DNSKEY TYPE63 +example.com. 3600 IN RRSIG NSEC 8 2 3600 20201116135527 20201019135527 55566 example.com. ufLrlOQprAqjnH85Rt3T0Mxd3ZB0mBeeNIr84eFJ8Rk6WiWEPm0Y1R7GRufNI24Mj7iqLcL4nJM6KK6B7dJqjqu73jw1acuYNnbsoV2BNDRXRFP2FNWTpctVdi+955f3FzgsmEJXfGiSUG0YXAEcZmdCPCn5ii2jk8mk7r6KKYo= +bar.example.com. 3600 IN A 1.2.3.4 +bar.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. NYhmRicF4C9+YxpWeQrepy4ALM1CM0USoDuGi3W5Xtp4/+YpCJfSIdR9vlJaJ2WayYuZrz9Ai2ci7oWwE1Fn3oywGwCKvGo9m0c3mC2eEtphE19wrop6pWu6um4RiFhmzYS1voraA3PAdYzze9U4NHzlk0+sb5vNZW9dSZS30Ds= +bar.example.com. 3600 IN NSEC ding.example.com. A RRSIG NSEC +bar.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. VhsGuBx20DXQZNU8ITAMnasn6NVyEjN9xtB8msH5xJn80UCuaqvFBURzcPWN3aHnykEvGfdPF/9P3WvlON0cMikWkqSLy6Q9bpvgAq13HWYh+ZcDoqLtICaB7RkBQc+6aHAqZFyQbD8/m8Kxt5eVJtV6rEuf+yPX0+3aXHhsRg0= +ding.example.com. 3600 IN A 1.2.3.4 +ding.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. OERsruISkpd1s68ute8Xm8YXisBCTkkiDMt34K+0dVqvySOJq63d3qN18BeUxZxLyHDB1eR3nZZKqEdkTqrv2r98skhWhjnOECpFbu5gKjtN/KPexbbJ+rxC0QqciuWOC7M6YE0cvI17/RB9KhVRy5rqY2X4Gt2wk2CNeD1dAko= +ding.example.com. 3600 IN NSEC foo.example.com. A RRSIG NSEC +ding.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. nb1W2aaKrU5iAQiY8gMsoMOejID19JMTEwY2rRoe+KsvzMs0rE0ifEkqit4blXaU0tfy0foJ70uqdJFqBoGz1NcSwZ6GNk/iNfGvG3XpxZ/zqEe7kkIucqqei794G7z9psqV94yZ3WaT+IswPpWrSaWv1w41RtcWufPhe4fOAmU= +foo.example.com. 3600 IN A 1.2.3.4 +foo.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. ZcUngb2pUejwnsshbJN/Dfr+Bzu8fcZXyqLArQ+10Bw1IPHyfx7yyUJ43V5tTYVHPSEsJzTnaWj+olVrNhVZxq5e0pgzSYPfGln2FEItEvMIOn33j8yKTpPW2MLyuFF5ZkXhosG20EUwRMvMmRHRz9mIZfwWoMbSGPukmLh8zMA= +foo.example.com. 3600 IN NSEC ns.example.com. A RRSIG NSEC +foo.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. fUZEpkEULRWDntN5Z7Kr8M83Hjhf08ECMKRpo6IBoBc3ayenj+YMgWAvFXC825wjENPYYWNGag0d32U83zCZxqgv+8uXZd3B7QDpTbL41aWZdc++s5YWTkYjyOWwJ1XHOv4nL3qEnJBXVzo/E1gbSKhTFuG97i+7J1MFd9MsC5s= +ns.example.com. 3600 IN A 127.0.0.1 +ns.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. SiuxuPtN/ITd+Z20j8UNUHJWbLHirE8zQOWMv5fAZ1rPKpAidrZgUL8J417GdrTwkueU2ywAJ7EzFJSwNTa7o/wUnq7svmOR6Ze6UQsKuZFZGEfqPNDRp4YuF86LU5jChuo+f/IRpydHrxVwGxDPCR9KarDM+ewfW+yI5bZeZcg= +ns.example.com. 3600 IN NSEC www.example.com. A RRSIG NSEC +ns.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. 0upKNYjiow4NDJm3I1RbUddE9GGuFYEVKswww5BAc/6WHuukupncL30lskvcSKGpByDssP2Hi2CufyEtYeGWh6q1TxtOFRqFBX1p6Q5b3tBlCtvv4h31dQR9uqLvq+GkGS5MR+0LO5kWagIpZmnI8YY5plVdXEtNbp2Ar8zvz/A= +www.example.com. 3600 IN A 127.0.0.1 +www.example.com. 3600 IN RRSIG A 8 3 3600 20201116135527 20201019135527 55566 example.com. AaIeICaPjV50TDrpbyOn94+hs8EYIMTmN4pYqj7e8GIGimqQIk5jgpwSx6SOoOF+uOqkf9GKHkQTn5YVGaeXwEQleg7mPTmMYKAOk06Y7MFUO1Vwt1Vt7Wo+Cpa3x2a1CmEkfFOi4WqP43VJnUtjjKmXoKRz3VUmqByyJYUAGbQ= +www.example.com. 3600 IN NSEC example.com. A RRSIG NSEC +www.example.com. 3600 IN RRSIG NSEC 8 3 3600 20201116135527 20201019135527 55566 example.com. meg/t6nIBqQZ0d5/dT7uu/3CuP4vE+HxqFQaj2fjUNceA/6C7QIQnqQ5Kyblg+XijDkQX0yvyFNHYdgF16UDgFT7tlNUCHk1SpF5BWzV4c4tBEhxASTz7UQo111O3Tyd6CldPzO/Se15Ud0/ZYltHEqWTfY5nJoXC/OJD9V2QOI= diff --git a/testdata/zonemd.example_a1.zone b/testdata/zonemd.example_a1.zone new file mode 100644 index 000000000..331b45a15 --- /dev/null +++ b/testdata/zonemd.example_a1.zone @@ -0,0 +1,6 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( 1800 900 604800 86400 ) + 86400 IN NS ns1 + 86400 IN NS ns2 + 86400 IN ZONEMD 2018031900 1 1 ( c68090d90a7aed71 6bc459f9340e3d7c 1370d4d24b7e2fc3 a1ddc0b9a87153b9 a9713b3c9ae5cc27 777f98b8e730044c ) +ns1 3600 IN A 203.0.113.63 +ns2 3600 IN AAAA 2001:db8::63 diff --git a/testdata/zonemd.example_a2.zone b/testdata/zonemd.example_a2.zone new file mode 100644 index 000000000..56d06ae06 --- /dev/null +++ b/testdata/zonemd.example_a2.zone @@ -0,0 +1,25 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( + 1800 900 604800 86400 ) + 86400 IN NS ns1 + 86400 IN NS ns2 + 86400 IN ZONEMD 2018031900 1 1 ( + 31cefb03814f5062 + ad12fa951ba0ef5f + 8da6ae354a415767 + 246f7dc932ceb1e7 + 42a2108f529db6a3 + 3a11c01493de358d ) +ns1 3600 IN A 203.0.113.63 +ns2 3600 IN AAAA 2001:db8::63 +occluded.sub 7200 IN TXT "I'm occluded but must be digested" +sub 7200 IN NS ns1 +duplicate 300 IN TXT "I must be digested just once" +duplicate 300 IN TXT "I must be digested just once" +foo.test. 555 IN TXT "out-of-zone data must be excluded" +non-apex 900 IN ZONEMD 2018031900 1 1 ( + 616c6c6f77656420 + 6275742069676e6f + 7265642e20616c6c + 6f77656420627574 + 2069676e6f726564 + 2e20616c6c6f7765 ) diff --git a/testdata/zonemd.example_a3.zone b/testdata/zonemd.example_a3.zone new file mode 100644 index 000000000..45c47ad05 --- /dev/null +++ b/testdata/zonemd.example_a3.zone @@ -0,0 +1,30 @@ +example. 86400 IN SOA ns1 admin 2018031900 ( + 1800 900 604800 86400 ) +example. 86400 IN NS ns1.example. +example. 86400 IN NS ns2.example. +example. 86400 IN ZONEMD 2018031900 1 1 ( + 62e6cf51b02e54b9 + b5f967d547ce4313 + 6792901f9f88e637 + 493daaf401c92c27 + 9dd10f0edb1c56f8 + 080211f8480ee306 ) +example. 86400 IN ZONEMD 2018031900 1 2 ( + 08cfa1115c7b948c + 4163a901270395ea + 226a930cd2cbcf2f + a9a5e6eb85f37c8a + 4e114d884e66f176 + eab121cb02db7d65 + 2e0cc4827e7a3204 + f166b47e5613fd27 ) +example. 86400 IN ZONEMD 2018031900 1 240 ( + e2d523f654b9422a + 96c5a8f44607bbee ) +example. 86400 IN ZONEMD 2018031900 241 1 ( + e1846540e33a9e41 + 89792d18d5d131f6 + 05fc283e ) +ns1.example. 3600 IN A 203.0.113.63 +ns2.example. 86400 IN TXT "This example has multiple digests" +ns2.example. 3600 IN AAAA 2001:db8::63 diff --git a/testdata/zonemd.example_a4.zone b/testdata/zonemd.example_a4.zone new file mode 100644 index 000000000..74b913c89 --- /dev/null +++ b/testdata/zonemd.example_a4.zone @@ -0,0 +1,127 @@ +uri.arpa. 3600 IN SOA sns.dns.icann.org. ( + noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 ) +uri.arpa. 3600 IN RRSIG NSEC 8 2 3600 ( + 20181028142623 20181007205525 47155 uri.arpa. + eEC4w/oXLR1Epwgv4MBiDtSBsXhqrJVvJWUpbX8XpetAvD35bxwNCUTi + /pAJVUXefegWeiriD2rkTgCBCMmn7YQIm3gdR+HjY/+o3BXNQnz97f+e + HAE9EDDzoNVfL1PyV/2fde9tDeUuAGVVwmD399NGq9jWYMRpyri2kysr q/g= ) +uri.arpa. 86400 IN RRSIG NS 8 2 86400 ( + 20181028172020 20181007175821 47155 uri.arpa. + ATyV2A2A8ZoggC+68u4GuP5MOUuR+2rr3eWOkEU55zAHld/7FiBxl4ln + 4byJYy7NudUwlMOEXajqFZE7DVl8PpcvrP3HeeGaVzKqaWj+aus0jbKF + Bsvs2b1qDZemBfkz/IfAhUTJKnto0vSUicJKfItu0GjyYNJCz2CqEuGD Wxc= ) +uri.arpa. 600 IN RRSIG MX 8 2 600 ( + 20181028170556 20181007175821 47155 uri.arpa. + e7/r3KXDohX1lyVavetFFObp8fB8aXT76HnN9KCQDxSnSghNM83UQV0t + lTtD8JVeN1mCvcNFZpagwIgB7XhTtm6Beur/m5ES+4uSnVeS6Q66HBZK + A3mR95IpevuVIZvvJ+GcCAQpBo6KRODYvJ/c/ZG6sfYWkZ7qg/Em5/+3 4UI= ) +uri.arpa. 3600 IN RRSIG DNSKEY 8 2 3600 ( + 20181028152832 20181007175821 15796 uri.arpa. + nzpbnh0OqsgBBP8St28pLvPEQ3wZAUdEBuUwil+rtjjWlYYiqjPxZ286 + XF4Rq1usfV5x71jZz5IqswOaQgia91ylodFpLuXD6FTGs2nXGhNKkg1V + chHgtwj70mXU72GefVgo8TxrFYzxuEFP5ZTP92t97FVWVVyyFd86sbbR + 6DZj3uA2wEvqBVLECgJLrMQ9Yy7MueJl3UA4h4E6zO2JY9Yp0W9woq0B + dqkkwYTwzogyYffPmGAJG91RJ2h6cHtFjEZe2MnaY2glqniZ0WT9vXXd + uFPm0KD9U77Ac+ZtctAF9tsZwSdAoL365E2L1usZbA+K0BnPPqGFJRJk + 5R0A1w== ) +uri.arpa. 3600 IN RRSIG DNSKEY 8 2 3600 ( + 20181028152832 20181007175821 55480 uri.arpa. + lWtQV/5szQjkXmbcD47/+rOW8kJPksRFHlzxxmzt906+DBYyfrH6uq5X + nHvrUlQO6M12uhqDeL+bDFVgqSpNy+42/OaZvaK3J8EzPZVBHPJykKMV + 63T83aAiJrAyHzOaEdmzLCpalqcEE2ImzlLHSafManRfJL8Yuv+JDZFj + 2WDWfEcUuwkmIZWX11zxp+DxwzyUlRl7x4+ok5iKZWIg5UnBAf6B8T75 + WnXzlhCw3F2pXI0a5LYg71L3Tp/xhjN6Yy9jGlIRf5BjB59X2zra3a2R + PkI09SSnuEwHyF1mDaV5BmQrLGRnCjvwXA7ho2m+vv4SP5dUdXf+GTeA + 1HeBfw== ) +uri.arpa. 3600 IN RRSIG SOA 8 2 3600 ( + 20181029114753 20181008222815 47155 uri.arpa. + qn8yBNoHDjGdT79U2Wu9IIahoS0YPOgYP8lG+qwPcrZ1BwGiHywuoUa2 + Mx6BWZlg+HDyaxj2iOmox+IIqoUHhXUbO7IUkJFlgrOKCgAR2twDHrXu + 9BUQHy9SoV16wYm3kBTEPyxW5FFm8vcdnKAF7sxSY8BbaYNpRIEjDx4A JUc= ) +uri.arpa. 3600 IN NSEC ftp.uri.arpa. NS SOA ( + MX RRSIG NSEC DNSKEY ) +uri.arpa. 86400 IN NS a.iana-servers.net. +uri.arpa. 86400 IN NS b.iana-servers.net. +uri.arpa. 86400 IN NS c.iana-servers.net. +uri.arpa. 86400 IN NS ns2.lacnic.net. +uri.arpa. 86400 IN NS sec3.apnic.net. +uri.arpa. 600 IN MX 10 pechora.icann.org. +uri.arpa. 3600 IN DNSKEY 256 3 8 ( + AwEAAcBi7tSart2J599zbYWspMNGN70IBWb4ziqyQYH9MTB/VCz6WyUK + uXunwiJJbbQ3bcLqTLWEw134B6cTMHrZpjTAb5WAwg4XcWUu8mdcPTiL + Bl6qVRlRD0WiFCTzuYUfkwsh1Rbr7rvrxSQhF5rh71zSpwV5jjjp65Wx + SdJjlH0B ) +uri.arpa. 3600 IN DNSKEY 257 3 8 ( + AwEAAbNVv6ulgRdO31MtAehz7j3ALRjwZglWesnzvllQl/+hBRZr9QoY + cO2I+DkO4Q1NKxox4DUIxj8SxPO3GwDuOFR9q2/CFi2O0mZjafbdYtWc + 3zSdBbi3q0cwCIx7GuG9eqlL+pg7mdk9dgdNZfHwB0LnqTD8ebLPsrO/ + Id7kBaiqYOfMlZnh2fp+2h6OOJZHtY0DK1UlssyB5PKsE0tVzo5s6zo9 + iXKe5u+8WTMaGDY49vG80JPAKE7ezMiH/NZcUMiE0PRZ8D3foq2dYuS5 + ym+vA83Z7v8A+Rwh4UGnjxKB8zmr803V0ASAmHz/gwH5Vb0nH+LObwFt + l3wpbp+Wpm8= ) +uri.arpa. 3600 IN DNSKEY 257 3 8 ( + AwEAAbwnFTakCvaUKsXji4mgmxZUJi1IygbnGahbkmFEa0L16J+TchKR + wcgzVfsxUGa2MmeA4hgkAooC3uy+tTmoMsgy8uq/JAj24DjiHzd46LfD + FK/qMidVqFpYSHeq2Vv5ojkuIsx4oe4KsafGWYNOczKZgH5loGjN2aJG + mrIm++XCphOskgCsQYl65MIzuXffzJyxlAuts+ecAIiVeqRaqQfr8LRU + 7wIsLxinXirprtQrbor+EtvlHp9qXE6ARTZDzf4jvsNpKvLFZtmxzFf3 + e/UJz5eHjpwDSiZL7xE8aE1o1nGfPtJx9ZnB3bapltaJ5wY+5XOCKgY0 + xmJVvNQlwdE= ) +ftp.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028080856 20181007175821 47155 uri.arpa. + HClGAqPxzkYkAT7Q/QNtQeB6YrkP6EPOef+9Qo5/2zngwAewXEAQiyF9 + jD1USJiroM11QqBS3v3aIdW/LXORs4Ez3hLcKNO1cKHsOuWAqzmE+BPP + Arfh8N95jqh/q6vpaB9UtMkQ53tM2fYU1GszOLN0knxbHgDHAh2axMGH lqM= ) +ftp.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181028103644 20181007205525 47155 uri.arpa. + WoLi+vZzkxaoLr2IGZnwkRvcDf6KxiWQd1WZP/U+AWnV+7MiqsWPZaf0 + 9toRErerGoFOiOASNxZjBGJrRgjmavOM9U+LZSconP9zrNFd4dIu6kp5 + YxlQJ0uHOvx1ZHFCj6lAt1ACUIw04ZhMydTmi27c8MzEOMepvn7iH7r7 k7k= ) +ftp.uri.arpa. 3600 IN NSEC http.uri.arpa. NAPTR ( + RRSIG NSEC ) +ftp.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^ftp://([^:/?#]*).*$!\\1!i" . ) +http.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181029010647 20181007175821 47155 uri.arpa. + U03NntQ73LHWpfLmUK8nMsqkwVsOGW2KdsyuHYAjqQSZvKbtmbv7HBmE + H1+Ii3Z+wtfdMZBy5aC/6sHdx69BfZJs16xumycMlAy6325DKTQbIMN+ + ift9GrKBC7cgCd2msF/uzSrYxxg4MJQzBPvlkwXnY3b7eJSlIXisBIn7 3b8= ) +http.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181029011815 20181007205525 47155 uri.arpa. + T7mRrdag+WSmG+n22mtBSQ/0Y3v+rdDnfQV90LN5Fq32N5K2iYFajF7F + Tp56oOznytfcL4fHrqOE0wRc9NWOCCUec9C7Wa1gJQcllEvgoAM+L6f0 + RsEjWq6+9jvlLKMXQv0xQuMX17338uoD/xiAFQSnDbiQKxwWMqVAimv5 7Zs= ) +http.uri.arpa. 3600 IN NSEC mailto.uri.arpa. NAPTR ( + RRSIG NSEC ) +http.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^http://([^:/?#]*).*$!\\1!i" . ) +mailto.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028110727 20181007175821 47155 uri.arpa. + GvxzVL85rEukwGqtuLxek9ipwjBMfTOFIEyJ7afC8HxVMs6mfFa/nEM/ + IdFvvFg+lcYoJSQYuSAVYFl3xPbgrxVSLK125QutCFMdC/YjuZEnq5cl + fQciMRD7R3+znZfm8d8u/snLV9w4D+lTBZrJJUBe1Efc8vum5vvV7819 ZoY= ) +mailto.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181028141825 20181007205525 47155 uri.arpa. + MaADUgc3fc5v++M0YmqjGk3jBdfIA5RuP62hUSlPsFZO4k37erjIGCfF + j+g84yc+QgbSde0PQHszl9fE/+SU5ZXiS9YdcbzSZxp2erFpZOTchrpg + 916T4vx6i59scodjb0l6bDyZ+mtIPrc1w6b4hUyOUTsDQoAJYxdfEuMg Vy4= ) +mailto.uri.arpa. 3600 IN NSEC urn.uri.arpa. NAPTR ( + RRSIG NSEC ) +mailto.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "!^mailto:(.*)@(.*)$!\\2!i" . ) +urn.uri.arpa. 3600 IN RRSIG NSEC 8 3 3600 ( + 20181028123243 20181007175821 47155 uri.arpa. + Hgsw4Deops1O8uWyELGe6hpR/OEqCnTHvahlwiQkHhO5CSEQrbhmFAWe + UOkmGAdTEYrSz+skLRQuITRMwzyFf4oUkZihGyhZyzHbcxWfuDc/Pd/9 + DSl56gdeBwy1evn5wBTms8yWQVkNtphbJH395gRqZuaJs3LD/qTyJ5Dp LvA= ) +urn.uri.arpa. 604800 IN RRSIG NAPTR 8 3 604800 ( + 20181029071816 20181007205525 47155 uri.arpa. + ALIZD0vBqAQQt40GQ0Efaj8OCyE9xSRJRdyvyn/H/wZVXFRFKrQYrLAS + D/K7q6CMTOxTRCu2J8yes63WJiaJEdnh+dscXzZkmOg4n5PsgZbkvUSW + BiGtxvz5jNncM0xVbkjbtByrvJQAO1cU1mnlDKe1FmVB1uLpVdA9Ib4J hMU= ) +urn.uri.arpa. 3600 IN NSEC uri.arpa. NAPTR RRSIG ( + NSEC ) +urn.uri.arpa. 604800 IN NAPTR 0 0 "" "" ( + "/urn:([^:]+)/\\1/i" . ) +uri.arpa. 3600 IN SOA sns.dns.icann.org. ( + noc.dns.icann.org. 2018100702 10800 3600 1209600 3600 ) diff --git a/testdata/zonemd.example_a5.zone b/testdata/zonemd.example_a5.zone new file mode 100644 index 000000000..246f5e237 --- /dev/null +++ b/testdata/zonemd.example_a5.zone @@ -0,0 +1,48 @@ +root-servers.net. 3600000 IN SOA a.root-servers.net. ( + nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 ) +root-servers.net. 3600000 IN NS a.root-servers.net. +root-servers.net. 3600000 IN NS b.root-servers.net. +root-servers.net. 3600000 IN NS c.root-servers.net. +root-servers.net. 3600000 IN NS d.root-servers.net. +root-servers.net. 3600000 IN NS e.root-servers.net. +root-servers.net. 3600000 IN NS f.root-servers.net. +root-servers.net. 3600000 IN NS g.root-servers.net. +root-servers.net. 3600000 IN NS h.root-servers.net. +root-servers.net. 3600000 IN NS i.root-servers.net. +root-servers.net. 3600000 IN NS j.root-servers.net. +root-servers.net. 3600000 IN NS k.root-servers.net. +root-servers.net. 3600000 IN NS l.root-servers.net. +root-servers.net. 3600000 IN NS m.root-servers.net. +a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30 +a.root-servers.net. 3600000 IN A 198.41.0.4 +b.root-servers.net. 3600000 IN MX 20 mail.isi.edu. +b.root-servers.net. 3600000 IN AAAA 2001:500:200::b +b.root-servers.net. 3600000 IN A 199.9.14.201 +c.root-servers.net. 3600000 IN AAAA 2001:500:2::c +c.root-servers.net. 3600000 IN A 192.33.4.12 +d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d +d.root-servers.net. 3600000 IN A 199.7.91.13 +e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e +e.root-servers.net. 3600000 IN A 192.203.230.10 +f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f +f.root-servers.net. 3600000 IN A 192.5.5.241 +g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d +g.root-servers.net. 3600000 IN A 192.112.36.4 +h.root-servers.net. 3600000 IN AAAA 2001:500:1::53 +h.root-servers.net. 3600000 IN A 198.97.190.53 +i.root-servers.net. 3600000 IN MX 10 mx.i.root-servers.org. +i.root-servers.net. 3600000 IN AAAA 2001:7fe::53 +i.root-servers.net. 3600000 IN A 192.36.148.17 +j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30 +j.root-servers.net. 3600000 IN A 192.58.128.30 +k.root-servers.net. 3600000 IN AAAA 2001:7fd::1 +k.root-servers.net. 3600000 IN A 193.0.14.129 +l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42 +l.root-servers.net. 3600000 IN A 199.7.83.42 +m.root-servers.net. 3600000 IN AAAA 2001:dc3::35 +m.root-servers.net. 3600000 IN A 202.12.27.33 +root-servers.net. 3600000 IN SOA a.root-servers.net. ( + nstld.verisign-grs.com. 2018091100 14400 7200 1209600 3600000 ) +root-servers.net. 3600000 IN ZONEMD 2018091100 1 1 ( + f1ca0ccd91bd5573d9f431c00ee0101b2545c97602be0a97 + 8a3b11dbfc1c776d5b3e86ae3d973d6b5349ba7f04340f79 ) diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.conf b/testdata/zonemd_reload.tdir/zonemd_reload.conf new file mode 100644 index 000000000..27bdb4424 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.conf @@ -0,0 +1,22 @@ +server: + verbosity: 7 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes +remote-control: + control-enable: yes + control-interface: @CONTROL_PATH@/controlpipe.@CONTROL_PID@ + control-use-cert: no +auth-zone: + name: "example.com" + for-upstream: yes + for-downstream: yes + zonefile: "zonemd_reload.zone" + #master: "127.0.0.1@@TOPORT@" diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.dsc b/testdata/zonemd_reload.tdir/zonemd_reload.dsc new file mode 100644 index 000000000..016c3d6c7 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.dsc @@ -0,0 +1,16 @@ +BaseName: zonemd_reload +Version: 1.0 +Description: ZONEMD check after auth_zone_reload +CreationDate: Tue 23 Oct 12:00:00 CEST 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: zonemd_reload.pre +Post: zonemd_reload.post +Test: zonemd_reload.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.post b/testdata/zonemd_reload.tdir/zonemd_reload.post new file mode 100644 index 000000000..5e315088a --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.post @@ -0,0 +1,14 @@ +# #-- zonemd_reload.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +echo "> cat logfiles" +cat fwd.log +cat unbound.log +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.pre b/testdata/zonemd_reload.tdir/zonemd_reload.pre new file mode 100644 index 000000000..fa5e4ca29 --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.pre @@ -0,0 +1,35 @@ +# #-- zonemd_reload.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT zonemd_reload.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +CONTROL_PATH=/tmp +CONTROL_PID=$$ +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@CONTROL_PATH\@?'$CONTROL_PATH'?' -e 's/@CONTROL_PID@/'$CONTROL_PID'/' < zonemd_reload.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test +echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.test b/testdata/zonemd_reload.tdir/zonemd_reload.test new file mode 100644 index 000000000..5ae1d9b0c --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.test @@ -0,0 +1,74 @@ +# #-- zonemd_reload.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +if grep SERVFAIL outfile; then + echo "> try again" + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 1 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +if grep SERVFAIL outfile; then + echo "> try again" + sleep 10 + dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +fi +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep www.example.com outfile | grep "127.0.0.1"; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> unbound-control status" +$PRE/unbound-control -c ub.conf status +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +else + echo "exit value: OK" +fi + +echo "> unbound-control auth_zone_reload example.com" +$PRE/unbound-control -c ub.conf auth_zone_reload example.com 2>&1 | tee outfile +if test $? -ne 0; then + echo "wrong exit value." + exit 1 +fi +echo "> check unbound-control output" +if grep "example.com: ZONEMD verification successful" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.testns b/testdata/zonemd_reload.tdir/zonemd_reload.testns new file mode 100644 index 000000000..f1678a1cc --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.testns @@ -0,0 +1,27 @@ +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN SOA +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +example.com. IN NS ns.example.net. +EXTRA_PACKET +REPLY QR AA NOERROR +SECTION QUESTION +example.com. IN AXFR +SECTION ANSWER +www.example.com. IN A 1.2.3.4 +example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 +ENTRY_END diff --git a/testdata/zonemd_reload.tdir/zonemd_reload.zone b/testdata/zonemd_reload.tdir/zonemd_reload.zone new file mode 100644 index 000000000..16b631c7b --- /dev/null +++ b/testdata/zonemd_reload.tdir/zonemd_reload.zone @@ -0,0 +1,8 @@ +example.com. IN SOA ns.example.com. hostmaster.example.com. 200154054 28800 7200 604800 3600 +example.com. IN NS ns.example.com. +example.com. IN ZONEMD 200154054 1 2 EFAA5B78B38AB1C45DE57B8167BCCE906451D0E72118E1F5E80B5F0C3CF04BFFC65D53C011185528EAD439D6F3A02F511961E090E5E4E0DFA013BD276D728B22 +www.example.com. IN A 127.0.0.1 +ns.example.com. IN A 127.0.0.1 +bar.example.com. IN A 1.2.3.4 +ding.example.com. IN A 1.2.3.4 +foo.example.com. IN A 1.2.3.4 diff --git a/util/config_file.c b/util/config_file.c index 4d87dee9b..9090e595c 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -262,6 +262,7 @@ config_create(void) cfg->serve_expired_reply_ttl = 30; cfg->serve_expired_client_timeout = 0; cfg->serve_original_ttl = 0; + cfg->zonemd_permissive_mode = 0; cfg->add_holddown = 30*24*3600; cfg->del_holddown = 30*24*3600; cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */ @@ -649,6 +650,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) else S_YNO("serve-original-ttl:", serve_original_ttl) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) + else S_YNO("zonemd-permissive-mode:", zonemd_permissive_mode) else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown) else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown) else S_UNSIGNED_OR_ZERO("keep-missing:", keep_missing) @@ -1070,6 +1072,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) else O_YNO(opt, "serve-original-ttl", serve_original_ttl) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) + else O_YNO(opt, "zonemd-permissive-mode", zonemd_permissive_mode) else O_UNS(opt, "add-holddown", add_holddown) else O_UNS(opt, "del-holddown", del_holddown) else O_UNS(opt, "keep-missing", keep_missing) diff --git a/util/config_file.h b/util/config_file.h index 7cf27cc2c..9d3297f7b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -396,6 +396,8 @@ struct config_file { int serve_original_ttl; /** nsec3 maximum iterations per key size, string */ char* val_nsec3_key_iterations; + /** if zonemd failures are permitted, only logged */ + int zonemd_permissive_mode; /** autotrust add holddown time, in seconds */ unsigned int add_holddown; /** autotrust del holddown time, in seconds */ @@ -727,6 +729,8 @@ struct config_auth { /** Always reply with this CNAME target if the cname override action is * used */ char* rpz_cname; + /** Reject absence of ZONEMD records, zone must have one */ + int zonemd_reject_absence; }; /** diff --git a/util/configlexer.c b/util/configlexer.c index 7febaa53d..cbf1c103c 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 343 -#define YY_END_OF_BUFFER 344 +#define YY_NUM_RULES 345 +#define YY_END_OF_BUFFER 346 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,377 +363,380 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3354] = +static const flex_int16_t yy_accept[3388] = { 0, - 1, 1, 317, 317, 321, 321, 325, 325, 329, 329, - 1, 1, 333, 333, 337, 337, 344, 341, 1, 315, - 315, 342, 2, 342, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 317, 318, 318, 319, - 342, 321, 322, 322, 323, 342, 328, 325, 326, 326, - 327, 342, 329, 330, 330, 331, 342, 340, 316, 2, - 320, 342, 340, 336, 333, 334, 334, 335, 342, 337, - 338, 338, 339, 342, 341, 0, 1, 2, 2, 2, - 2, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 1, 1, 319, 319, 323, 323, 327, 327, 331, 331, + 1, 1, 335, 335, 339, 339, 346, 343, 1, 317, + 317, 344, 2, 344, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 319, 320, 320, 321, + 344, 323, 324, 324, 325, 344, 330, 327, 328, 328, + 329, 344, 331, 332, 332, 333, 344, 342, 318, 2, + 322, 344, 342, 338, 335, 336, 336, 337, 344, 339, + 340, 340, 341, 344, 343, 0, 1, 2, 2, 2, + 2, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 317, - 0, 321, 0, 328, 0, 325, 329, 0, 340, 0, - 2, 2, 340, 336, 0, 333, 337, 0, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 319, + 0, 323, 0, 330, 0, 327, 331, 0, 342, 0, + 2, 2, 342, 338, 0, 335, 339, 0, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 342, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 125, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 134, - 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 125, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 134, + 343, 343, 343, 343, 343, 343, 343, 342, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 109, 341, 314, 341, - 341, 341, 341, 341, 341, 341, 8, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 109, 343, 316, 343, + 343, 343, 343, 343, 343, 343, 8, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 126, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 139, 341, 340, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 126, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 139, 343, 343, + 342, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 307, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 309, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 64, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 239, 341, 14, 15, 341, 19, 18, 341, 341, 223, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 342, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 64, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 241, 343, 14, 15, 343, 19, 18, 343, + 343, 225, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 132, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 221, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 3, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 132, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 223, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 3, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 340, 341, 341, 341, 341, 341, 341, 341, 301, 341, - 341, 300, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 324, - 341, 341, 341, 341, 341, 341, 341, 341, 63, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 67, 341, 270, 341, 341, + 343, 343, 343, 342, 343, 343, 343, 343, 343, 343, + 343, 303, 343, 343, 302, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 326, 343, 343, 343, 343, 343, 343, 343, + 343, 63, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 67, 343, - 341, 341, 341, 341, 341, 341, 308, 309, 341, 341, - 341, 341, 341, 341, 341, 68, 341, 341, 133, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 129, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 210, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 21, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 158, 341, 341, 340, 324, 341, + 272, 343, 343, 343, 343, 343, 343, 343, 343, 310, + 311, 343, 343, 343, 343, 343, 343, 343, 68, 343, + 343, 133, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 129, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 212, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 21, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 158, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 107, 341, 341, 341, 341, 341, 341, 341, 278, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 182, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 157, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 342, 326, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 107, 343, 343, 343, 343, + 343, 343, 343, 280, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 182, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 157, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 106, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 32, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 33, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 65, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 131, 340, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 106, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 32, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 33, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 65, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 124, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 66, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 243, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 183, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 54, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 131, 343, 343, 342, 343, 343, 343, 343, 343, + 124, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 66, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 245, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 183, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 54, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 261, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 58, 341, 59, - 341, 341, 341, 341, 341, 110, 341, 111, 341, 341, - 341, 341, 108, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 263, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 58, 343, 59, 343, 343, 343, + 343, 343, 110, 343, 111, 343, 343, 343, 343, 108, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 7, 341, 340, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 232, 341, 341, 341, 341, 160, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 244, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 45, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 55, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 7, + 343, 343, 343, 342, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 234, 343, 343, 343, 343, 160, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 246, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 45, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 202, 341, 201, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 16, 17, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 69, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 209, 341, 341, 341, - 341, 341, 341, 113, 341, 112, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 193, 341, + 343, 55, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 204, 343, 203, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 16, 17, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 69, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 211, 343, 343, 343, 343, + 343, 343, 113, 343, 112, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 140, 340, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 101, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 89, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 222, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 94, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 62, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 195, 343, 343, + 343, 343, 343, 343, 343, 343, 140, 343, 343, 342, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 101, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 89, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 224, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 94, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 196, 197, 341, 341, 341, - 272, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 6, 341, 341, 341, 341, 341, 341, - 291, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 276, 341, - 341, 341, 341, 341, 341, 302, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 42, 341, 341, - 341, 341, 44, 341, 341, 341, 90, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 62, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 198, 199, 343, 343, + 343, 274, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 6, 343, 343, 343, 343, 343, + 343, 293, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 278, + 343, 343, 343, 343, 343, 343, 304, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 42, 343, - 341, 341, 52, 341, 341, 341, 341, 341, 341, 341, - 340, 341, 189, 341, 341, 341, 135, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 214, 341, 190, - 341, 341, 341, 229, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 53, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 137, 118, 341, 119, 341, - 341, 341, 117, 341, 341, 341, 341, 341, 341, 341, - 341, 155, 341, 341, 50, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 44, 343, 343, 343, 90, 343, 343, + 343, 343, 343, 52, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 342, 343, 191, 343, 343, 343, 135, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 216, 343, 192, 343, 343, 343, 231, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 53, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 137, 118, + 343, 119, 343, 343, 343, 117, 343, 343, 343, 343, + 343, 343, 343, 343, 155, 343, 343, 50, 343, 343, - 341, 260, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 191, 341, 341, 341, 341, 341, 194, 341, 200, - 341, 341, 341, 341, 341, 228, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 105, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 130, 341, 341, 341, 341, 341, 341, 341, 60, - 341, 341, 341, 26, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 20, 341, 341, 341, 341, 341, 341, - 27, 36, 341, 165, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 262, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 193, 343, 343, 343, 343, 343, + 196, 343, 202, 343, 343, 343, 343, 343, 230, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 105, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 130, 343, 343, 343, 343, 343, + 343, 343, 60, 343, 343, 343, 26, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 20, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, - 341, 341, 341, 341, 77, 79, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 280, - 341, 341, 341, 341, 240, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 120, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 154, 341, 46, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 295, 341, 341, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 27, 36, 343, 165, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 342, 343, 343, 343, 343, 343, 343, 77, + 79, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 282, 343, 343, 343, 343, 242, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 120, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 154, 343, 46, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 159, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 289, 341, 341, 341, 220, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 305, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 176, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 114, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 171, - 341, 184, 341, 341, 341, 341, 340, 341, 143, 341, - 341, 341, 341, 341, 100, 341, 341, 341, 341, 212, + 343, 343, 343, 343, 343, 343, 297, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 159, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 291, 343, + 343, 343, 222, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 307, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 176, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 114, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 171, 343, 184, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 230, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 252, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 136, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 175, - 341, 341, 341, 341, 341, 341, 80, 341, 81, 341, - 341, 341, 341, 341, 61, 298, 341, 341, 341, 341, - 341, 88, 185, 341, 203, 341, 233, 341, 341, 195, - 273, 341, 341, 341, 341, 341, 73, 341, 187, 341, - 341, 341, 341, 341, 9, 341, 341, 341, 341, 341, + 343, 343, 343, 342, 343, 143, 343, 343, 343, 343, + 343, 100, 343, 343, 343, 343, 214, 343, 343, 343, + 343, 343, 343, 232, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 254, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 136, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 175, 343, 343, 343, + 343, 343, 343, 80, 343, 81, 343, 343, 343, 343, + 343, 61, 300, 343, 343, 343, 343, 343, 88, 185, + 343, 205, 343, 235, 343, 343, 197, 275, 343, 343, - 104, 341, 341, 341, 341, 265, 341, 341, 341, 341, - 211, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, - 341, 341, 174, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 161, 341, 279, 341, 341, 341, 341, - 341, 251, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 224, 341, 341, 341, 341, 341, 271, + 343, 343, 343, 73, 343, 187, 343, 343, 343, 343, + 343, 9, 343, 343, 343, 343, 343, 104, 343, 343, + 343, 343, 267, 343, 343, 343, 343, 213, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 342, 343, 343, 343, + 343, 174, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 161, 343, 281, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 299, 341, 186, 341, 341, 341, 341, 341, 341, 341, - 72, 74, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 103, 341, 341, 341, 341, 263, 341, 341, 341, - 341, 275, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 216, 34, 28, 30, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 35, 341, 29, - 31, 341, 341, 341, 341, 341, 341, 341, 341, 99, + 253, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 226, 343, 343, 343, 343, 343, 273, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 301, + 343, 186, 343, 343, 343, 343, 343, 343, 343, 72, + 74, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 103, 343, 343, 343, 343, 265, 343, 343, 343, 343, + 277, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 218, 34, 28, 30, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 218, 215, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 71, 341, - 341, 341, 138, 341, 121, 341, 341, 341, 341, 341, - 341, 341, 341, 156, 47, 341, 341, 341, 332, 13, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 293, 341, 296, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 12, 341, 341, 22, 341, 341, 341, - 341, 341, 269, 341, 341, 341, 341, 277, 341, 341, + 343, 343, 343, 343, 343, 343, 35, 343, 29, 31, + 343, 343, 343, 343, 343, 343, 343, 343, 99, 343, + 343, 343, 343, 343, 343, 343, 343, 342, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 220, + 217, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 71, + 343, 343, 343, 138, 343, 121, 343, 343, 343, 343, + 343, 343, 343, 343, 156, 47, 343, 343, 343, 334, + 13, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 295, 343, 298, 343, 343, 343, 343, 343, 343, - 341, 75, 341, 226, 341, 341, 341, 341, 341, 217, - 341, 341, 70, 341, 341, 341, 341, 23, 341, 43, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 170, 169, 332, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 219, 213, 341, 231, 341, 341, - 281, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 82, 341, 341, 341, 341, 264, 341, - 341, 341, 341, 199, 341, 341, 341, 341, 225, 341, + 343, 343, 343, 343, 12, 343, 343, 22, 343, 343, + 343, 343, 343, 271, 343, 343, 343, 343, 279, 343, + 343, 343, 75, 343, 228, 343, 343, 343, 343, 343, + 219, 343, 343, 70, 343, 343, 343, 343, 23, 343, + 43, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 170, 169, 343, 343, 334, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 221, 215, 343, + 233, 343, 343, 283, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 303, 304, 167, 341, 341, 76, 341, 341, 341, 341, - 177, 341, 341, 341, 115, 116, 341, 341, 341, 341, - 162, 341, 164, 341, 204, 341, 341, 341, 341, 168, - 341, 341, 234, 341, 341, 341, 341, 341, 341, 341, - 145, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 242, 341, 341, 341, 341, 341, 341, - 341, 312, 341, 24, 341, 274, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 86, 205, 341, 341, 262, 341, 297, 341, 198, 341, + 343, 343, 343, 343, 343, 343, 82, 343, 343, 343, + 343, 266, 343, 343, 343, 343, 201, 343, 343, 343, + 343, 227, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 305, 306, 167, 343, 343, 76, 343, + 343, 343, 343, 177, 343, 343, 343, 115, 116, 343, + 343, 343, 343, 162, 343, 164, 343, 206, 343, 343, + 343, 343, 168, 343, 343, 343, 343, 236, 343, 343, + 343, 343, 343, 343, 343, 145, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 244, 343, + 343, 343, 343, 343, 343, 343, 314, 343, 24, 343, - 341, 341, 341, 56, 341, 341, 341, 341, 341, 341, - 4, 341, 341, 341, 341, 128, 144, 341, 341, 341, - 181, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 237, 37, 38, 341, - 341, 341, 341, 341, 341, 341, 282, 341, 341, 341, - 341, 341, 341, 341, 250, 341, 341, 341, 341, 341, - 341, 341, 341, 208, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 85, 341, 57, 268, - 341, 238, 341, 341, 341, 341, 11, 341, 341, 341, - 341, 341, 341, 341, 341, 127, 341, 341, 341, 341, + 276, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 86, 207, 343, 343, 264, + 343, 299, 343, 200, 343, 343, 343, 343, 56, 343, + 343, 343, 343, 343, 343, 4, 343, 343, 343, 343, + 128, 144, 343, 343, 343, 181, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 239, 37, 38, 343, 343, 343, 343, + 343, 343, 343, 284, 343, 343, 343, 343, 343, 343, + 343, 252, 343, 343, 343, 343, 343, 343, 343, 343, + 210, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 206, 91, 341, 40, 341, 341, 341, 341, 341, 341, - 341, 341, 173, 341, 341, 341, 341, 341, 147, 341, - 341, 341, 341, 241, 341, 341, 341, 341, 341, 249, - 341, 341, 341, 341, 141, 341, 341, 341, 122, 123, - 341, 341, 341, 93, 97, 92, 341, 341, 341, 341, - 83, 341, 341, 341, 341, 341, 10, 341, 341, 341, - 341, 341, 266, 306, 341, 341, 341, 341, 311, 39, - 341, 341, 341, 341, 341, 172, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 98, + 343, 343, 343, 85, 343, 57, 270, 343, 240, 343, + 343, 343, 343, 11, 343, 343, 343, 343, 343, 343, + 343, 343, 127, 343, 343, 343, 343, 208, 91, 343, + 40, 343, 343, 343, 343, 343, 343, 343, 343, 173, + 343, 343, 343, 343, 343, 343, 343, 147, 343, 343, + 343, 343, 243, 343, 343, 343, 343, 343, 251, 343, + 343, 343, 343, 141, 343, 343, 343, 122, 123, 343, + 343, 343, 93, 97, 92, 343, 343, 343, 343, 83, + 343, 343, 343, 343, 343, 10, 343, 343, 343, 343, + 343, 268, 308, 343, 343, 343, 343, 313, 39, 343, - 96, 341, 51, 341, 341, 84, 294, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 192, 341, 341, 341, - 341, 341, 207, 341, 341, 341, 341, 341, 341, 341, - 341, 163, 78, 341, 341, 341, 341, 341, 283, 341, - 341, 341, 341, 341, 341, 341, 246, 341, 341, 245, - 142, 341, 341, 95, 48, 341, 148, 149, 152, 153, - 150, 151, 87, 292, 341, 341, 267, 341, 341, 341, - 341, 166, 341, 341, 341, 341, 341, 236, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 179, 178, + 343, 343, 343, 343, 172, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 98, 96, 343, 51, 343, 343, 84, 296, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 194, 343, 343, + 343, 343, 343, 209, 343, 343, 343, 343, 343, 343, + 343, 190, 343, 343, 163, 78, 343, 343, 343, 343, + 343, 285, 343, 343, 343, 343, 343, 343, 343, 248, + 343, 343, 247, 142, 343, 343, 95, 48, 343, 148, + 149, 152, 153, 150, 151, 87, 294, 343, 343, 269, - 41, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 290, 341, 341, 341, 341, 102, 341, - 235, 341, 259, 287, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 313, 341, 49, 5, 341, - 341, 227, 341, 341, 288, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 247, 25, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 248, 341, - 341, 341, 146, 341, 341, 341, 341, 341, 341, 341, - 341, 180, 341, 188, 341, 341, 341, 341, 341, 341, + 343, 343, 343, 343, 166, 343, 343, 343, 343, 189, + 343, 238, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 179, 178, 41, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 292, 343, 343, + 343, 343, 102, 343, 237, 343, 261, 289, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 315, + 343, 49, 5, 343, 343, 229, 343, 343, 290, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 249, 25, - 341, 341, 341, 284, 341, 341, 341, 341, 341, 341, - 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, - 341, 310, 341, 341, 255, 341, 341, 341, 341, 341, - 285, 341, 341, 341, 341, 341, 341, 286, 341, 341, - 341, 253, 341, 256, 257, 341, 341, 341, 341, 341, - 254, 258, 0 + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 250, 343, 343, 343, 146, 343, 343, 343, + 343, 343, 343, 343, 343, 180, 343, 188, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 286, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 312, 343, 343, 257, 343, + 343, 343, 343, 343, 287, 343, 343, 343, 343, 343, + 343, 288, 343, 343, 343, 255, 343, 258, 259, 343, + 343, 343, 343, 343, 256, 260, 0 } ; static const YY_CHAR yy_ec[256] = @@ -776,17 +779,17 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3372] = +static const flex_int16_t yy_base[3406] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 4327, 4282, 81, 6547, - 6547, 6547, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 4333, 3646, 81, 6613, + 6613, 6613, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, - 185, 199, 208, 213, 178, 123, 4186, 6547, 6547, 6547, - 107, 4109, 6547, 6547, 6547, 154, 4045, 3722, 6547, 6547, - 6547, 245, 3578, 6547, 6547, 6547, 163, 3220, 6547, 249, - 6547, 253, 148, 2696, 2594, 6547, 6547, 6547, 257, 2157, - 6547, 6547, 6547, 233, 1707, 263, 201, 0, 267, 0, + 185, 199, 208, 213, 178, 123, 3471, 6613, 6613, 6613, + 107, 3089, 6613, 6613, 6613, 154, 2938, 2734, 6613, 6613, + 6613, 245, 2551, 6613, 6613, 6613, 163, 2380, 6613, 249, + 6613, 253, 148, 2167, 2097, 6613, 6613, 6613, 257, 1895, + 6613, 6613, 6613, 233, 1571, 263, 201, 0, 267, 0, 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, 216, 263, 271, 272, 210, 279, 274, 282, 278, 291, @@ -794,8 +797,8 @@ static const flex_int16_t yy_base[3372] = 317, 311, 315, 319, 321, 331, 327, 332, 336, 322, 339, 337, 346, 345, 347, 348, 353, 351, 357, 284, 358, 359, 369, 360, 380, 365, 381, 379, 375, 366, - 367, 389, 390, 394, 393, 395, 396, 403, 404, 1665, - 419, 1172, 422, 924, 429, 854, 832, 433, 781, 437, + 367, 389, 390, 394, 393, 395, 396, 403, 404, 1355, + 419, 1172, 422, 1110, 429, 1014, 912, 433, 781, 437, 441, 0, 433, 705, 447, 479, 287, 452, 411, 445, 426, 446, 447, 448, 449, 450, 451, 453, 452, 456, 470, 234, 463, 473, 481, 479, 476, 483, 486, 487, @@ -816,717 +819,725 @@ static const flex_int16_t yy_base[3372] = 738, 741, 745, 743, 750, 752, 760, 755, 756, 771, 763, 766, 762, 773, 774, 769, 775, 793, 798, 799, 786, 800, 801, 804, 803, 805, 807, 808, 809, 818, - 811, 823, 815, 824, 825, 829, 836, 834, 6547, 831, + 811, 823, 815, 824, 825, 829, 836, 834, 6613, 831, 833, 847, 848, 849, 852, 765, 856, 858, 839, 868, - 864, 861, 870, 892, 865, 878, 869, 871, 874, 6547, - 887, 880, 916, 882, 889, 902, 903, 900, 904, 905, - 917, 910, 933, 850, 914, 922, 943, 939, 925, 938, + 864, 861, 870, 892, 865, 878, 869, 871, 874, 6613, + 887, 880, 916, 882, 889, 902, 904, 900, 903, 905, + 914, 907, 933, 850, 909, 924, 940, 936, 925, 937, - 940, 907, 941, 948, 949, 946, 951, 953, 960, 952, - 957, 959, 971, 961, 970, 972, 965, 974, 980, 985, - 987, 992, 975, 984, 995, 978, 990, 998, 1008, 1003, - 1001, 1009, 1012, 1015, 1023, 1019, 1027, 1028, 1002, 1029, - 1030, 1035, 1031, 1038, 1041, 1039, 1042, 1051, 1049, 1047, - 1048, 1054, 1055, 1056, 1058, 1061, 1064, 1063, 1068, 1072, - 1066, 1073, 1079, 1067, 1085, 1077, 6547, 1089, 6547, 1080, - 1083, 1087, 1092, 1093, 1094, 1095, 6547, 1097, 1100, 1102, - 1105, 1109, 1111, 1110, 1116, 1112, 1123, 1124, 1125, 1128, - 1135, 1130, 1133, 1138, 1137, 1140, 1141, 1144, 1142, 1147, + 939, 942, 943, 952, 948, 950, 951, 953, 961, 956, + 960, 964, 968, 962, 971, 972, 975, 977, 983, 974, + 980, 990, 973, 993, 994, 995, 997, 996, 1007, 1004, + 1000, 1001, 1015, 1014, 1028, 1017, 1026, 1027, 1030, 1029, + 1035, 1036, 1039, 1041, 1042, 1043, 1044, 1054, 1046, 1049, + 1051, 1053, 1057, 1059, 1061, 1063, 1066, 1065, 1067, 1071, + 1069, 1078, 1080, 1074, 1086, 1076, 6613, 1088, 6613, 1082, + 1091, 1092, 1090, 1097, 1093, 1094, 6613, 1096, 1100, 1104, + 1105, 1115, 1108, 1126, 1107, 1121, 1122, 1125, 1123, 1127, + 1138, 1129, 1131, 1145, 1136, 1141, 1140, 1143, 1144, 1147, - 1149, 1148, 1154, 1155, 1158, 1175, 6547, 1157, 1167, 1162, - 1159, 1168, 1169, 1187, 1185, 1188, 1186, 1190, 1203, 1198, - 1204, 1206, 1207, 1160, 1210, 1212, 1214, 1216, 1217, 1218, - 1219, 1221, 1222, 1223, 1225, 1224, 1228, 6547, 1226, 1236, - 1247, 1242, 1245, 1246, 1248, 1249, 1161, 1251, 1250, 1106, - 517, 1253, 1257, 1258, 1259, 1272, 1267, 1270, 1268, 1269, - 1275, 1274, 1276, 1278, 1287, 1283, 1289, 1291, 1299, 1298, - 1301, 1308, 1310, 1303, 1305, 1311, 1307, 1306, 1313, 1315, - 1322, 1316, 1319, 1326, 1329, 1328, 1331, 1335, 1320, 1336, - 1333, 1341, 1342, 1343, 1344, 1351, 1350, 1346, 1358, 1353, + 1151, 1153, 1154, 1155, 1156, 1175, 6613, 1157, 1165, 1167, + 1159, 1168, 1182, 1187, 1173, 1185, 1193, 1197, 1205, 1198, + 1200, 1204, 1179, 1203, 1160, 1208, 1214, 1211, 1217, 1219, + 1218, 1220, 1222, 1221, 1224, 1225, 1232, 6613, 1235, 1241, + 1246, 1253, 1236, 1239, 1249, 1251, 1252, 1255, 1256, 1257, + 1259, 517, 1258, 1263, 1275, 1264, 1277, 1272, 1228, 1274, + 1278, 1280, 1279, 1281, 1283, 1292, 1289, 1295, 1304, 1307, + 1306, 1309, 1316, 1318, 1298, 1311, 1321, 1315, 1313, 1314, + 1325, 1326, 1327, 1329, 1330, 1339, 1336, 1335, 1337, 1338, + 1343, 1341, 1345, 1346, 1347, 1349, 1360, 1357, 1358, 1365, - 1356, 1354, 1352, 1373, 1374, 1363, 1365, 6547, 1381, 1367, - 1382, 1383, 1384, 1388, 1390, 1386, 1392, 1393, 1394, 1396, - 1397, 1399, 1403, 1404, 1405, 1406, 1408, 1419, 1416, 1411, - 1427, 1426, 1428, 1418, 1430, 1432, 1431, 1440, 1438, 1441, - 1439, 1445, 1446, 1453, 1448, 1449, 1454, 1463, 1456, 1455, - 1460, 1458, 1466, 1469, 1468, 1483, 1472, 1480, 1488, 1489, - 1479, 1491, 1481, 1492, 1496, 1497, 1498, 1499, 1501, 1508, - 1503, 1510, 1505, 1509, 1511, 1506, 1522, 1512, 1523, 1526, - 1530, 1513, 1528, 1531, 1533, 1536, 1537, 1538, 1539, 1541, - 1545, 1543, 1549, 1548, 1550, 1554, 1560, 1561, 1563, 1564, + 1361, 1370, 1364, 1359, 1378, 1380, 1367, 1374, 6613, 1390, + 1287, 1388, 1392, 1393, 1394, 1395, 1386, 1387, 1399, 1401, + 1403, 1404, 1410, 1407, 1411, 1412, 1413, 1415, 1423, 1419, + 1426, 1434, 1433, 1435, 1420, 1437, 1439, 1441, 1448, 1445, + 1449, 1452, 1421, 1453, 1462, 1454, 1457, 1459, 1469, 1447, + 1465, 1468, 1471, 1475, 1477, 1480, 1487, 1482, 1485, 1502, + 1488, 1472, 1493, 1486, 1504, 1492, 1499, 1503, 1507, 1508, + 1515, 1512, 1511, 1514, 1518, 1513, 1519, 1522, 1524, 1536, + 1523, 1532, 1527, 1535, 1541, 1525, 1540, 1542, 1547, 1548, + 1550, 1549, 1551, 1553, 1558, 1559, 1562, 1561, 1564, 1568, - 1567, 1568, 1571, 1570, 1573, 1581, 1572, 1582, 1584, 1585, - 1587, 1588, 1592, 1591, 1598, 1595, 1601, 1603, 1605, 1604, - 1607, 1611, 1614, 1616, 1608, 6547, 1615, 1628, 1623, 1626, - 1624, 1627, 1629, 1637, 1632, 1635, 1633, 1638, 1639, 1664, - 6547, 1641, 6547, 6547, 1644, 6547, 6547, 1645, 1649, 6547, - 1662, 1648, 1658, 1646, 1670, 1677, 1679, 1667, 1675, 1660, - 1687, 1691, 1694, 1696, 1682, 1697, 1688, 1702, 1708, 1653, - 1704, 1705, 1711, 1721, 1716, 1724, 1718, 1726, 1727, 1729, - 1732, 1736, 1738, 1740, 1739, 1743, 1744, 1745, 1747, 1746, - 1749, 1752, 1755, 1756, 1753, 1758, 1759, 1774, 1772, 1761, + 1570, 1574, 1576, 1577, 1579, 1580, 1588, 1581, 1590, 1591, + 1592, 1594, 1595, 1602, 1604, 1598, 1608, 1605, 1611, 1610, + 1613, 1614, 1616, 1617, 1622, 1623, 1624, 6613, 1629, 1636, + 1631, 1634, 1632, 1637, 1639, 1646, 1641, 1643, 1642, 1645, + 1647, 1671, 6613, 1653, 6613, 6613, 1652, 6613, 6613, 1654, + 1655, 6613, 1658, 1656, 1659, 1674, 1681, 1684, 1666, 1679, + 1672, 1687, 1694, 1708, 1695, 1692, 1696, 1698, 1699, 1701, + 1706, 1703, 1689, 1716, 1725, 1730, 1731, 1717, 1719, 1732, + 1735, 1739, 1740, 1742, 1746, 1748, 1749, 1733, 1751, 1753, + 1756, 1754, 1757, 1759, 1763, 1764, 1760, 1767, 1766, 1776, - 1779, 6547, 1775, 1782, 1789, 1785, 1792, 1784, 1788, 1791, - 1764, 1796, 1793, 1797, 1798, 1800, 1802, 1805, 1804, 1809, - 1810, 1806, 1812, 1822, 1813, 6547, 1817, 1818, 1824, 1825, - 1828, 1831, 1833, 1829, 1835, 1836, 1839, 1847, 1849, 1840, - 1842, 1844, 1851, 1854, 1856, 6547, 1862, 1858, 1863, 1865, - 1866, 1868, 1869, 1871, 1874, 1873, 1876, 1877, 1878, 1879, - 1886, 1883, 1885, 1890, 1891, 1895, 1900, 1902, 1904, 1906, - 1908, 1910, 1911, 1912, 1913, 1915, 1916, 1924, 1927, 1923, - 1928, 1925, 1920, 1944, 1947, 1929, 1931, 1942, 1943, 1945, - 1951, 1955, 1953, 1946, 1957, 1965, 1958, 1961, 1963, 1967, + 1780, 1769, 1787, 6613, 1784, 1796, 1797, 1793, 1800, 1792, + 1799, 1801, 1772, 1783, 1802, 1803, 1806, 1807, 1804, 1808, + 1812, 1816, 1817, 1819, 1829, 1836, 1813, 6613, 1825, 1833, + 1820, 1818, 1837, 1835, 1840, 1839, 1841, 1843, 1847, 1855, + 1850, 1848, 1856, 1858, 1857, 1859, 1861, 6613, 1868, 1874, + 1862, 1871, 1865, 1869, 1878, 1879, 1880, 1882, 1884, 1888, + 1885, 1887, 1896, 1893, 1897, 1894, 1904, 1899, 1908, 1910, + 1912, 1914, 1916, 1917, 1919, 1920, 1921, 1923, 1924, 1932, + 1935, 1931, 1936, 1933, 1928, 1952, 1955, 1950, 1938, 1939, + 1953, 1941, 1960, 1969, 1964, 1956, 1965, 1972, 1968, 1971, - 1974, 1969, 1971, 1976, 1979, 1980, 1982, 1983, 6547, 1985, - 1989, 6547, 1986, 1988, 1990, 2012, 1991, 1993, 1995, 2005, - 1994, 2014, 1998, 2006, 2022, 2016, 2032, 2025, 2024, 2035, - 2029, 2037, 2036, 2040, 2041, 2043, 2046, 2047, 2053, 2049, - 2063, 2067, 2066, 2073, 2075, 2050, 2058, 2062, 2081, 2071, - 2074, 2070, 2076, 2085, 2091, 2090, 2078, 2093, 2094, 2099, - 2103, 2104, 2102, 2105, 2106, 2108, 2111, 2116, 2117, 6547, - 2124, 2125, 2119, 2127, 2121, 2135, 2131, 2130, 6547, 2133, - 2139, 2140, 2147, 2143, 2144, 2145, 2146, 2151, 2153, 2155, - 2159, 2160, 2158, 2154, 2176, 6547, 2161, 6547, 2172, 2162, + 1973, 1975, 1976, 1983, 1981, 1985, 1986, 1979, 1984, 1990, + 1993, 6613, 1997, 1999, 6613, 1998, 2000, 2002, 2024, 2005, + 2003, 2010, 2009, 2014, 2015, 2016, 2018, 2017, 2028, 2044, + 2037, 2034, 2047, 2026, 2049, 2050, 2052, 2053, 2055, 2056, + 2059, 2030, 2060, 2072, 2075, 2074, 2082, 2084, 2058, 2071, + 2061, 2091, 2081, 2083, 2086, 2089, 2094, 2098, 2096, 2102, + 2087, 2107, 2108, 2115, 2113, 2119, 2112, 2120, 2114, 2122, + 2123, 2125, 6613, 2134, 2135, 2129, 2137, 2133, 2147, 2139, + 2140, 6613, 2143, 2149, 2150, 2157, 2153, 2154, 2155, 2156, + 2161, 2163, 2165, 2169, 2170, 2168, 2164, 2186, 6613, 2171, - 2174, 2175, 2178, 2179, 2180, 2183, 6547, 6547, 2187, 2181, - 2197, 2201, 2191, 2184, 2202, 6547, 2203, 2210, 6547, 2207, - 2213, 2206, 2205, 2212, 2214, 2217, 2218, 2227, 2222, 2229, - 2224, 2226, 2234, 6547, 2235, 2236, 2240, 2241, 2237, 2243, - 2244, 2250, 2247, 6547, 2254, 2251, 2256, 2264, 2266, 2261, - 2263, 2268, 2272, 2269, 2274, 2275, 2276, 2277, 2284, 2286, - 2283, 2289, 2291, 2298, 6547, 2282, 2285, 2303, 2299, 2302, - 2306, 2307, 2308, 2309, 2310, 2311, 1996, 2312, 2318, 2319, - 2320, 2327, 2329, 2322, 2325, 2333, 2324, 2334, 2335, 2342, - 2340, 2341, 2344, 2345, 6547, 2346, 2352, 2349, 171, 2353, + 6613, 2182, 2172, 2184, 2185, 2188, 2189, 2190, 2193, 6613, + 6613, 2197, 2191, 2207, 2211, 2201, 2194, 2212, 6613, 2213, + 2220, 6613, 2217, 2223, 2216, 2215, 2222, 2224, 2227, 2228, + 2237, 2232, 2239, 2234, 2236, 2244, 6613, 2245, 2246, 2250, + 2251, 2247, 2253, 2254, 2260, 2257, 6613, 2264, 2261, 2266, + 2274, 2276, 2271, 2273, 2278, 2282, 2279, 2284, 2285, 2286, + 2287, 2294, 2296, 2293, 2299, 2301, 2308, 6613, 2292, 2295, + 2313, 2309, 2312, 2316, 2317, 2318, 2319, 2320, 2321, 2322, + 2327, 2328, 2329, 2330, 2337, 2340, 2335, 2339, 2343, 2345, + 2347, 2348, 2355, 2352, 2353, 2354, 2356, 6613, 2357, 2359, - 2356, 2354, 2355, 2359, 2362, 2357, 2378, 2379, 2364, 2376, - 2382, 2383, 2375, 2385, 2386, 2387, 2374, 2390, 2392, 2394, - 6547, 2396, 2398, 2400, 2401, 2403, 2404, 2406, 6547, 2410, - 2426, 2423, 2430, 2408, 2405, 2431, 2417, 2421, 2432, 2433, - 2435, 2437, 2440, 2442, 2444, 2443, 6547, 2447, 2448, 2452, - 2450, 2458, 2460, 2459, 2451, 2461, 2465, 2467, 2471, 2473, - 2469, 2472, 2474, 2475, 2477, 2482, 2478, 2485, 2487, 2488, - 2489, 2490, 2492, 2494, 2499, 2500, 6547, 2507, 2506, 2504, - 2509, 2510, 2512, 2522, 2513, 2532, 2515, 2523, 2516, 2535, - 2538, 2540, 2524, 2548, 2544, 2549, 2541, 2558, 2555, 2559, + 2363, 2366, 2365, 171, 2369, 2367, 2372, 2374, 2377, 2388, + 2375, 2396, 2397, 2378, 2393, 2399, 2400, 2389, 2392, 2402, + 2404, 2408, 2409, 2410, 2411, 6613, 2413, 2414, 2415, 2417, + 2418, 2420, 2429, 6613, 2422, 2435, 2437, 2439, 2444, 2441, + 2446, 2431, 2447, 2452, 2453, 2454, 2456, 2457, 2460, 2459, + 2463, 6613, 2467, 2464, 2471, 2472, 2475, 2477, 2478, 2479, + 2483, 2484, 2485, 2486, 2488, 2490, 2489, 2491, 2493, 2499, + 2500, 2496, 2504, 2509, 2506, 2507, 2510, 2513, 2514, 2519, + 2517, 6613, 2529, 2520, 2527, 2525, 2528, 2530, 2531, 2538, + 2553, 2540, 2542, 2544, 2554, 2560, 2545, 2562, 2549, 2563, - 2562, 2556, 2565, 2567, 2568, 2569, 2571, 2573, 2574, 2575, - 2576, 2584, 2591, 2581, 2592, 2590, 2595, 2583, 2601, 2614, - 2598, 6547, 2603, 2605, 2613, 2615, 2622, 2617, 2618, 2623, - 2619, 2625, 2627, 2629, 2630, 2638, 2635, 2637, 2639, 2642, - 2641, 2643, 2649, 2650, 2651, 2654, 2658, 2660, 2662, 2663, - 6547, 2664, 2666, 2669, 2670, 2673, 2674, 2678, 2680, 2682, - 2683, 2684, 2686, 2689, 2690, 2691, 2692, 2698, 2699, 2695, - 6547, 2700, 2702, 2710, 2706, 2714, 2708, 2718, 2721, 2722, - 2725, 2728, 2712, 2729, 2731, 2732, 6547, 2740, 2742, 2739, - 2743, 2741, 2746, 2747, 2749, 2751, 6547, 2752, 2753, 2754, + 2567, 2566, 2576, 2577, 2580, 2586, 2574, 2588, 2591, 2578, + 2581, 2584, 2590, 2592, 2600, 2601, 2608, 2609, 2606, 2612, + 2604, 2621, 2615, 2627, 2633, 2623, 6613, 2632, 2625, 2617, + 2637, 2644, 2639, 2641, 2642, 2645, 2649, 2650, 2651, 2652, + 2660, 2655, 2653, 2657, 2662, 2664, 2665, 2668, 2672, 2673, + 2676, 2680, 2677, 2683, 2421, 6613, 2684, 2686, 2685, 2688, + 2694, 2689, 2696, 2699, 2701, 2702, 2703, 2708, 2705, 2710, + 2711, 2712, 2718, 2605, 2714, 6613, 2716, 2715, 2721, 2720, + 2728, 2729, 2735, 2736, 2738, 2741, 2744, 2745, 2746, 2747, + 2748, 6613, 2756, 2757, 2753, 2765, 2755, 2760, 2762, 2767, - 2761, 2762, 2757, 6547, 2766, 2764, 2759, 2768, 2769, 2772, - 2774, 2775, 2770, 2780, 2782, 2789, 2796, 2783, 2793, 6547, - 2785, 2803, 2791, 2799, 2807, 2787, 2810, 2811, 2812, 2813, - 2814, 2818, 6547, 2827, 2819, 2824, 2834, 2830, 2831, 2836, - 2837, 2838, 2840, 2839, 2841, 2844, 6547, 2847, 2845, 2848, - 2850, 2852, 2853, 2855, 2868, 2860, 2865, 2867, 2870, 2873, - 2875, 2877, 2869, 2878, 2879, 2880, 2886, 2890, 2891, 2892, - 2895, 2899, 2904, 2901, 2903, 2907, 2906, 2908, 2909, 2916, - 2917, 2924, 2919, 2925, 6547, 2928, 2930, 2923, 2921, 2931, - 2933, 2935, 2937, 2940, 2936, 2938, 2948, 2945, 2942, 2955, + 2768, 6613, 2769, 832, 2770, 2771, 2772, 2780, 2781, 2776, + 6613, 2783, 2778, 2784, 2786, 2789, 2793, 2790, 2796, 2794, + 2799, 2800, 2805, 2803, 2809, 2811, 6613, 2812, 2821, 2817, + 2813, 2819, 2823, 2825, 2826, 2828, 2829, 2843, 2834, 6613, + 2852, 2847, 2839, 2855, 2842, 2830, 2853, 2857, 2858, 2859, + 2860, 2864, 2865, 6613, 2867, 2866, 2868, 2872, 2870, 2875, + 2876, 2888, 2878, 2879, 2883, 2887, 2889, 2891, 2894, 2896, + 2900, 2901, 2906, 2907, 2909, 2911, 2892, 2913, 2922, 2923, + 2918, 2926, 2921, 2928, 2929, 2930, 2937, 2939, 2940, 2941, + 2945, 6613, 2948, 2949, 2943, 2936, 2951, 2955, 2956, 2957, - 2958, 2951, 2962, 2960, 2964, 2965, 2967, 2966, 2968, 2969, - 2976, 2973, 2975, 2986, 2977, 2984, 2995, 2981, 2991, 2992, - 2993, 2994, 2982, 2998, 3004, 2999, 2997, 3006, 3007, 3015, - 3018, 3021, 3020, 3009, 3023, 3027, 3028, 6547, 3031, 3033, - 3029, 3035, 3036, 3042, 3043, 3045, 3046, 3037, 3051, 3053, - 3054, 3059, 3060, 3062, 3063, 3070, 3066, 6547, 3067, 6547, - 3068, 3069, 3072, 3081, 3076, 6547, 3087, 6547, 3077, 3091, - 3082, 3084, 6547, 3092, 3088, 3093, 3103, 3094, 3097, 3101, - 3105, 3099, 3106, 3112, 3111, 3115, 3114, 3116, 3122, 3117, - 3119, 3127, 3125, 3134, 3124, 3126, 3141, 3135, 3138, 3143, + 2958, 2960, 2962, 2961, 2965, 2967, 2974, 2978, 2975, 2981, + 2983, 2984, 2976, 2987, 2988, 2989, 2990, 2997, 2993, 2994, + 3005, 2996, 3000, 3010, 3011, 3012, 3013, 3014, 3021, 3001, + 3019, 3016, 3023, 3018, 3024, 3027, 3029, 3041, 3042, 3044, + 3025, 3036, 3046, 3049, 6613, 3052, 3053, 3050, 3054, 3056, + 3061, 3057, 3069, 3064, 3067, 3066, 3073, 3078, 3075, 3076, + 3081, 3083, 3091, 3087, 6613, 3084, 6613, 3088, 3092, 3098, + 3106, 3093, 6613, 3105, 6613, 3107, 3112, 3101, 3108, 6613, + 3115, 3096, 3114, 3119, 3121, 3122, 3125, 3126, 3127, 3128, + 3130, 3132, 3133, 3134, 3135, 3137, 3140, 3142, 3146, 3147, - 3144, 3145, 6547, 3152, 3148, 3153, 3154, 3155, 3156, 3158, - 3159, 3161, 3162, 3165, 3173, 3167, 3179, 3169, 3178, 3181, - 3193, 3177, 3194, 6547, 3190, 3192, 3195, 3196, 6547, 3198, - 3199, 3200, 3205, 3207, 3208, 3209, 3210, 3211, 3215, 3216, - 3217, 3229, 3225, 3222, 3231, 6547, 3230, 3236, 3218, 3242, - 3249, 3244, 3246, 3251, 3252, 3254, 3263, 3259, 3258, 3260, - 3261, 3262, 3265, 3272, 3273, 3269, 3276, 3275, 3279, 3286, - 3283, 3277, 3281, 3287, 3289, 3290, 3291, 3292, 3293, 3296, - 3297, 3294, 6547, 3302, 3308, 3306, 3315, 3311, 3312, 3316, - 3321, 3317, 6547, 3323, 3324, 3325, 3327, 3332, 3326, 3329, + 3153, 3145, 3156, 3157, 3161, 3163, 3164, 3165, 3166, 6613, + 3170, 3167, 3172, 3173, 3175, 3178, 3179, 3181, 3182, 3185, + 3191, 3188, 3190, 3201, 3194, 3197, 3204, 3209, 3212, 3219, + 3205, 3220, 6613, 3215, 3222, 3187, 3226, 6613, 3218, 3216, + 3227, 3230, 3233, 3234, 3235, 3236, 3237, 3241, 3242, 3243, + 3255, 3251, 3244, 3253, 6613, 3248, 3260, 3246, 3264, 3269, + 3276, 3280, 3277, 3278, 3283, 3281, 3285, 3286, 3287, 3288, + 3289, 3291, 3298, 3301, 3297, 3306, 3293, 3303, 3311, 3312, + 3296, 3304, 3313, 3315, 3318, 3320, 3319, 3321, 3262, 3323, + 3322, 6613, 3326, 3327, 3330, 3342, 3328, 3331, 3335, 3340, - 3334, 3337, 3340, 3342, 3345, 3347, 3346, 6547, 3348, 6547, - 3350, 3351, 3361, 3365, 3366, 3353, 3367, 3373, 3369, 3374, - 3376, 3379, 3377, 3383, 3380, 3385, 3386, 3388, 3400, 3391, - 3387, 3392, 3401, 3402, 3406, 3409, 3410, 3411, 6547, 6547, - 3412, 3413, 3417, 3414, 3420, 3421, 3424, 3432, 3428, 3427, - 3434, 3435, 3448, 6547, 3436, 3443, 3438, 3446, 3462, 3449, - 3464, 3465, 3452, 3440, 3472, 3468, 6547, 3461, 3469, 3476, - 3471, 3477, 3479, 6547, 3482, 6547, 3475, 3478, 3485, 3487, - 3488, 3489, 3491, 3492, 3499, 3509, 3510, 3495, 3512, 3507, - 3500, 3513, 3515, 3516, 3523, 3519, 3521, 3522, 6547, 3525, + 3344, 6613, 3350, 3351, 3352, 3356, 3358, 3345, 3353, 3361, + 3362, 3363, 3364, 3366, 3369, 3370, 6613, 3374, 6613, 3375, + 3384, 3377, 3383, 3390, 3388, 3392, 3397, 3391, 3393, 3398, + 3405, 3399, 3401, 3407, 3408, 3411, 3413, 3415, 3425, 3414, + 3419, 3421, 3426, 3428, 3436, 3433, 3429, 6613, 6613, 3431, + 3437, 3442, 3445, 3448, 3446, 3449, 3453, 3447, 3454, 3458, + 3459, 3469, 6613, 3460, 3466, 3467, 3470, 3482, 3473, 3484, + 3486, 3485, 3478, 3493, 3488, 6613, 3495, 3496, 3503, 3498, + 3499, 3506, 6613, 3501, 6613, 3504, 3505, 3512, 3507, 3513, + 3514, 3517, 3518, 3522, 3525, 3534, 3529, 3536, 3530, 3533, - 3526, 3530, 3528, 3531, 3538, 3535, 3539, 6547, 3542, 3545, - 3548, 3549, 3551, 3550, 3553, 3556, 3557, 3555, 3559, 6547, - 3558, 3561, 3572, 3573, 3565, 3574, 3576, 3579, 3587, 6547, - 3584, 3588, 3596, 3592, 3593, 3598, 3599, 3594, 3595, 3601, - 3603, 3604, 3606, 3607, 3608, 3610, 3613, 3615, 3612, 3622, - 3623, 3626, 3630, 3639, 3631, 6547, 3635, 3636, 3640, 3638, - 3642, 3643, 3645, 3648, 3650, 3651, 3661, 3662, 3653, 3664, - 3666, 3668, 3673, 3675, 6547, 3676, 3669, 3683, 3679, 3681, - 3689, 3680, 3686, 3693, 3682, 3690, 3694, 3695, 3698, 3707, - 3702, 3705, 3706, 3708, 3718, 3709, 6547, 3723, 3713, 3719, + 3537, 3539, 3540, 3547, 3544, 3545, 3546, 6613, 3549, 3552, + 3554, 3555, 3557, 3563, 3565, 3559, 6613, 3567, 3570, 3569, + 3571, 3578, 3575, 3579, 3580, 3584, 3587, 3585, 3588, 3590, + 6613, 3589, 3593, 3603, 3595, 3596, 3598, 3606, 3609, 3611, + 6613, 3615, 3616, 3623, 3619, 3621, 3622, 3626, 3627, 3628, + 3630, 3631, 3632, 3634, 3635, 3640, 3636, 3638, 3645, 3641, + 3653, 3655, 3642, 3663, 3670, 3656, 6613, 3659, 3666, 3668, + 3669, 3671, 3672, 3674, 3680, 3682, 3676, 3691, 3692, 3683, + 3687, 3695, 3697, 3705, 3700, 6613, 3712, 3698, 3713, 3702, + 3711, 3710, 3715, 3717, 3719, 3721, 3720, 3723, 3724, 3726, - 3730, 3720, 3726, 3739, 3735, 3736, 3737, 3743, 3738, 3745, - 3740, 3747, 3748, 3751, 3752, 6547, 6547, 3754, 3755, 3757, - 6547, 3759, 3761, 3771, 3763, 3767, 3770, 3774, 3775, 3773, - 3776, 3778, 3779, 6547, 3786, 3789, 3787, 3790, 3798, 3794, - 6547, 3793, 3806, 3802, 3803, 3805, 3809, 3811, 3810, 3813, - 3815, 3817, 3818, 3826, 3827, 3824, 3823, 3828, 6547, 3825, - 3831, 3834, 3836, 3837, 3840, 6547, 3841, 3842, 3849, 3851, - 3852, 3859, 3862, 3854, 3864, 3847, 3867, 3869, 3871, 3872, - 3873, 3880, 3875, 3877, 3879, 3883, 3885, 6547, 3886, 3887, - 3891, 3897, 6547, 3900, 3907, 3908, 6547, 3910, 3894, 3909, + 3738, 3730, 3733, 3729, 3734, 3745, 3737, 6613, 3752, 3748, + 3740, 3756, 3750, 3759, 3766, 3763, 3764, 3765, 3768, 3769, + 3770, 3773, 3775, 3776, 3779, 3780, 6613, 6613, 3782, 3783, + 3785, 6613, 3787, 3788, 3798, 3790, 3791, 3799, 3803, 3802, + 3801, 3804, 3806, 3807, 6613, 3813, 3821, 3816, 3817, 3825, + 3820, 6613, 3826, 3834, 3830, 3833, 3831, 3835, 3837, 3839, + 3841, 3842, 3843, 3846, 3854, 3858, 3850, 3849, 3853, 6613, + 3859, 3861, 3862, 3866, 3863, 3871, 6613, 3868, 3872, 3874, + 3878, 3880, 3891, 3877, 3885, 3893, 3888, 3894, 3895, 3897, + 3898, 3899, 3906, 3905, 3907, 3904, 3910, 3913, 6613, 3915, - 3905, 3918, 6547, 3913, 3915, 3916, 3921, 3929, 3922, 3930, - 3926, 3927, 6547, 3933, 3932, 3935, 6547, 3934, 3941, 3948, - 3950, 3936, 3958, 3953, 3938, 3954, 3955, 6547, 3957, 6547, - 3963, 3961, 3967, 6547, 3965, 3969, 3970, 3972, 3974, 3979, - 3980, 3986, 3988, 3976, 3982, 3990, 3978, 3994, 3995, 3999, - 3992, 4002, 4001, 4003, 6547, 4004, 4006, 4009, 4007, 4012, - 4014, 4020, 4015, 4021, 4022, 6547, 6547, 4029, 6547, 4030, - 4025, 4031, 6547, 4034, 4037, 4044, 4039, 4042, 4046, 4053, - 4050, 6547, 4055, 4059, 6547, 4040, 4061, 4068, 4057, 4065, - 4066, 4069, 4071, 4072, 4073, 4076, 4074, 4078, 4075, 4077, + 3916, 3921, 3923, 6613, 3926, 3934, 3935, 6613, 3936, 3931, + 3937, 3938, 3945, 6613, 3940, 3943, 3944, 3946, 3954, 3951, + 3955, 3953, 3958, 3959, 3962, 6613, 3963, 3960, 3961, 6613, + 3965, 3969, 3977, 3981, 3967, 3988, 3983, 3985, 3986, 3984, + 6613, 3991, 6613, 3994, 3995, 3998, 6613, 4000, 4001, 4003, + 4005, 4002, 4009, 4010, 4016, 4018, 4006, 4020, 4021, 4022, + 4023, 4025, 4034, 4024, 4031, 4032, 4033, 6613, 4036, 4035, + 4043, 4038, 4044, 4046, 4049, 4051, 4054, 4056, 6613, 6613, + 4063, 6613, 4057, 4064, 4065, 6613, 4067, 4070, 4074, 4066, + 4075, 4071, 4078, 4079, 6613, 4086, 4088, 6613, 4090, 4091, - 4091, 6547, 4079, 4081, 4082, 4084, 4095, 4096, 4100, 4102, - 4098, 6547, 4106, 4112, 4105, 4115, 4117, 6547, 4119, 6547, - 4108, 4121, 4122, 4125, 4129, 6547, 4131, 4132, 4136, 4137, - 4138, 4139, 4140, 4142, 4144, 4149, 4156, 4152, 4151, 4153, - 4160, 4158, 6547, 4155, 4161, 4168, 4170, 4172, 4173, 4182, - 4178, 4177, 4180, 4181, 4185, 4188, 4190, 4194, 4192, 4199, - 4196, 6547, 4203, 4205, 4202, 4217, 4206, 4210, 4208, 6547, - 4209, 4222, 4224, 6547, 4213, 4225, 4228, 4231, 4232, 4233, - 4236, 4234, 4238, 6547, 4235, 4242, 4239, 4241, 4244, 4255, - 6547, 6547, 4256, 6547, 4257, 4243, 4258, 4260, 4240, 4261, + 4098, 4093, 4094, 4095, 4101, 4096, 4099, 4106, 4107, 4108, + 4109, 4103, 4110, 4111, 6613, 4104, 4112, 4114, 4128, 4122, + 4131, 4133, 4132, 4134, 6613, 4138, 4139, 4142, 4144, 4145, + 6613, 4146, 6613, 4147, 4148, 4150, 4156, 4153, 6613, 4159, + 4163, 4167, 4164, 4168, 4169, 4170, 4174, 4176, 4178, 4186, + 4182, 4183, 4181, 4201, 4184, 6613, 4185, 4188, 4206, 4207, + 4197, 4189, 4216, 4213, 4215, 4203, 4211, 4223, 4214, 4224, + 4228, 4230, 4231, 4220, 6613, 4232, 4233, 4234, 4243, 4240, + 4245, 4246, 6613, 4247, 4248, 4251, 6613, 4249, 4250, 4257, + 4261, 4263, 4264, 4267, 4265, 4269, 6613, 4268, 4273, 4271, - 4268, 4271, 4277, 4269, 4279, 4281, 4272, 4274, 4290, 4293, - 4297, 4292, 4294, 4298, 6547, 6547, 4300, 4304, 4301, 4307, - 4308, 4303, 4311, 4320, 4312, 4321, 4324, 4326, 4333, 6547, - 4328, 4316, 4334, 4325, 6547, 4335, 4337, 4339, 4340, 4341, - 4343, 4347, 4344, 4348, 4349, 4351, 4352, 4354, 4365, 4357, - 4358, 4366, 4367, 4368, 4359, 4374, 4380, 6547, 4377, 4375, - 4381, 4382, 4384, 4387, 4388, 4389, 4390, 6547, 4395, 6547, - 4391, 4393, 4396, 4397, 4413, 4398, 4414, 4415, 4416, 4418, - 4419, 4422, 4423, 4427, 4424, 4429, 4432, 4434, 4436, 4438, - 4440, 6547, 4444, 4441, 4447, 4448, 4451, 4453, 4454, 4456, + 4272, 4287, 4286, 6613, 6613, 4288, 6613, 4290, 4274, 4278, + 4298, 4275, 4299, 4302, 4303, 4305, 4306, 4309, 4310, 4276, + 4311, 4320, 4317, 4324, 4327, 4328, 4326, 4191, 4331, 6613, + 6613, 4333, 4334, 4336, 4338, 4340, 4342, 4343, 4350, 4347, + 4355, 4358, 4348, 4365, 6613, 4362, 4363, 4364, 4367, 6613, + 4346, 4369, 4370, 4373, 4372, 4376, 4375, 4378, 4379, 4380, + 4382, 4385, 4386, 4390, 4392, 4396, 4397, 4400, 4399, 4403, + 4405, 4407, 6613, 4412, 4408, 4410, 4411, 4413, 4417, 4421, + 4426, 4422, 6613, 4415, 6613, 4428, 4425, 4440, 4431, 4445, + 4447, 4432, 4448, 4449, 4451, 4453, 4456, 4457, 4466, 4458, - 4457, 4459, 4462, 4463, 4465, 4470, 4466, 4472, 4471, 4474, - 6547, 4478, 4487, 4476, 4489, 4479, 4484, 4491, 4498, 4501, - 4492, 4502, 4503, 6547, 4504, 4496, 4507, 6547, 4508, 4509, - 4510, 4512, 4521, 4518, 4522, 4523, 4524, 6547, 4530, 4513, - 4534, 4526, 4531, 4535, 4536, 4542, 4545, 4544, 4547, 6547, - 4557, 4548, 4556, 4558, 4552, 4555, 4559, 4564, 4566, 6547, - 4570, 4571, 4572, 4579, 4574, 4584, 4581, 4583, 4582, 4585, - 4590, 4591, 4594, 4596, 4597, 4599, 4608, 4610, 4611, 6547, - 4589, 6547, 4612, 4616, 4620, 4618, 4623, 4622, 6547, 4624, - 4625, 4630, 4631, 4626, 6547, 4633, 4632, 4634, 4638, 6547, + 4462, 4467, 4460, 4471, 4477, 4474, 6613, 4478, 4480, 4481, + 4482, 4485, 4487, 4488, 4490, 4491, 4493, 4495, 4497, 4499, + 4504, 4505, 4506, 4508, 4511, 6613, 4512, 4514, 4516, 4521, + 4518, 4523, 4524, 4525, 4532, 4528, 4533, 4537, 6613, 4534, + 4538, 4543, 6613, 4540, 4544, 4546, 4550, 4552, 4545, 4553, + 4555, 4556, 6613, 4563, 4559, 4565, 4566, 4568, 4569, 4424, + 4573, 4575, 4576, 4582, 6613, 4583, 4581, 4589, 4590, 4588, + 4591, 4596, 4592, 4598, 6613, 4601, 4603, 4599, 4611, 4607, + 4615, 4616, 4618, 4610, 4612, 4619, 4620, 4627, 4630, 4631, + 4632, 4643, 4644, 4641, 6613, 4633, 6613, 4642, 4647, 4655, - 4636, 4647, 4637, 4643, 4654, 4658, 6547, 4661, 4662, 4651, - 4669, 4670, 4666, 4668, 4671, 4672, 4674, 4676, 4677, 4678, - 4687, 4680, 4683, 6547, 4689, 4692, 4698, 4699, 4682, 4700, - 4701, 4702, 4708, 4703, 6547, 4705, 4711, 4712, 4713, 4714, - 4715, 4717, 4725, 4720, 4723, 4724, 4728, 4729, 4730, 6547, - 4733, 4736, 4737, 4744, 4740, 4753, 6547, 4749, 6547, 4746, - 4756, 4759, 4739, 4763, 6547, 6547, 4750, 4767, 4766, 4769, - 4770, 6547, 6547, 4772, 6547, 4773, 6547, 4774, 4776, 6547, - 6547, 4775, 4777, 4781, 4782, 4784, 6547, 4790, 6547, 4799, - 4794, 4785, 4796, 4797, 6547, 4798, 4804, 4800, 4808, 4806, + 4656, 4650, 4660, 4658, 4652, 6613, 4654, 4662, 4667, 4664, + 4668, 6613, 4669, 4671, 4673, 4680, 6613, 4682, 4684, 4675, + 4686, 4691, 4693, 6613, 4697, 4699, 4700, 4707, 4709, 4704, + 4711, 4706, 4714, 4712, 4708, 4716, 4717, 4725, 4723, 4721, + 6613, 4727, 4729, 4734, 4736, 4730, 4738, 4728, 4740, 4743, + 4745, 6613, 4746, 4749, 4750, 4752, 4753, 4754, 4755, 4762, + 4759, 4761, 4763, 4764, 4767, 4768, 6613, 4773, 4771, 4775, + 4784, 4626, 4786, 6613, 4781, 6613, 4777, 4792, 4794, 4776, + 4795, 6613, 6613, 4799, 4804, 4800, 4806, 4801, 6613, 6613, + 4808, 6613, 4809, 6613, 4811, 4813, 6613, 6613, 4814, 4815, - 6547, 4810, 4815, 4811, 4813, 6547, 4822, 4823, 4814, 4816, - 6547, 4824, 4831, 4827, 4835, 4836, 4837, 4838, 4841, 4843, - 4839, 4844, 4846, 4847, 4854, 4861, 4863, 4865, 4869, 4858, - 4856, 4871, 4872, 4877, 4875, 4879, 4880, 4881, 4883, 4884, - 4886, 4889, 4890, 4892, 4895, 4893, 4894, 4906, 4896, 4898, - 4908, 4910, 4899, 4909, 4913, 4912, 4917, 4915, 4920, 4923, - 4922, 4924, 6547, 4928, 4930, 4933, 4935, 4934, 4940, 4942, - 4944, 4950, 4953, 6547, 4957, 6547, 4959, 4951, 4955, 4961, - 4962, 6547, 4963, 4964, 4965, 4968, 4967, 4970, 4848, 4971, - 4974, 4975, 4972, 6547, 4979, 4981, 4984, 4985, 4997, 6547, + 4816, 4817, 4824, 6613, 4831, 6613, 4826, 4832, 4818, 4828, + 4835, 6613, 4836, 4839, 4837, 4844, 4846, 6613, 4838, 4854, + 4843, 4851, 6613, 4853, 4857, 4858, 4862, 6613, 4863, 4868, + 4865, 4869, 4872, 4871, 4873, 4874, 4878, 4879, 4884, 4882, + 4883, 4885, 4894, 4896, 4898, 4900, 4901, 4886, 4905, 4906, + 4908, 4911, 4912, 4914, 4915, 4917, 4918, 4920, 4922, 4925, + 4926, 4676, 4927, 4928, 4930, 4929, 4932, 4941, 4933, 4943, + 4944, 4945, 4946, 4947, 4950, 4951, 4954, 4955, 4959, 4960, + 4962, 6613, 4963, 4957, 4965, 4971, 4973, 4978, 4980, 4990, + 4992, 4993, 6613, 4995, 6613, 4997, 4982, 4999, 4967, 5001, - 4989, 5000, 4986, 5001, 5002, 5003, 5005, 5007, 5008, 5010, - 5012, 5014, 5015, 5016, 5020, 5022, 5028, 5036, 5031, 5017, - 5033, 5037, 5038, 5039, 5040, 5041, 5042, 5048, 5053, 5057, - 6547, 5045, 6547, 5054, 5050, 5058, 5061, 5062, 5065, 5068, - 6547, 6547, 5066, 5071, 5073, 5075, 5076, 5078, 5080, 5082, - 5079, 6547, 5084, 5088, 5096, 5089, 6547, 5093, 5098, 5100, - 5104, 6547, 5101, 5105, 5106, 5112, 5107, 5116, 5117, 5119, - 5109, 5121, 5123, 5130, 6547, 6547, 6547, 6547, 5131, 5124, - 5135, 5127, 5136, 5138, 5139, 5142, 5137, 6547, 5145, 6547, - 6547, 5150, 5151, 5153, 5154, 5157, 5158, 5160, 5162, 6547, + 6613, 4984, 5002, 5003, 5006, 5005, 5007, 5009, 5008, 5012, + 5013, 5017, 6613, 5022, 5015, 5019, 5023, 5034, 6613, 5035, + 5037, 5024, 5038, 5039, 5040, 5043, 5045, 5048, 5047, 5050, + 5052, 5053, 5054, 5059, 5058, 5068, 5075, 5060, 5062, 5070, + 5071, 5074, 5076, 5080, 5081, 5082, 5088, 5090, 5094, 6613, + 5083, 6613, 5095, 5091, 5097, 5098, 5101, 5099, 5103, 6613, + 6613, 5105, 5108, 5113, 5114, 5115, 5117, 5120, 5121, 5123, + 6613, 5124, 5126, 5135, 5128, 6613, 5132, 5137, 5138, 5143, + 6613, 5140, 5144, 5145, 5151, 5146, 5155, 5156, 5159, 5148, + 5160, 5162, 5167, 6613, 6613, 6613, 6613, 5169, 5163, 5174, - 5161, 5163, 5166, 5164, 5173, 5175, 5181, 5178, 5182, 5183, - 5184, 5192, 5188, 5189, 5191, 5194, 5196, 5198, 6547, 6547, - 5200, 5204, 5205, 5215, 5207, 5211, 5210, 5223, 5218, 5220, - 5219, 5221, 5226, 5227, 5235, 5237, 5233, 5230, 6547, 5232, - 5240, 5241, 6547, 5243, 6547, 5246, 5247, 5249, 5250, 5253, - 5256, 5257, 5259, 6547, 6547, 5254, 5266, 5264, 6547, 6547, - 5261, 5269, 5271, 5274, 5275, 5276, 5277, 5278, 5284, 5279, - 6547, 5281, 6547, 5285, 5287, 5300, 5288, 5303, 5307, 5308, - 5310, 5304, 5306, 6547, 5314, 5315, 6547, 5322, 5317, 5321, - 5318, 5319, 6547, 5326, 5324, 5330, 5336, 6547, 5338, 5339, + 5171, 5175, 5177, 5178, 5180, 5176, 6613, 5190, 6613, 6613, + 5192, 5193, 5181, 5194, 5196, 5183, 5200, 5203, 6613, 5201, + 5205, 5207, 5206, 5214, 5218, 5215, 5208, 5223, 5219, 5224, + 5225, 5228, 5236, 5232, 5233, 5235, 5239, 5241, 5248, 6613, + 6613, 5238, 5253, 5242, 5255, 5256, 5257, 5258, 5265, 5260, + 5263, 5266, 5267, 5269, 5270, 5279, 5280, 5271, 5278, 6613, + 5281, 5284, 5283, 6613, 5285, 6613, 5287, 5293, 5294, 5295, + 5296, 5300, 5301, 5304, 6613, 6613, 5299, 5316, 5314, 6613, + 6613, 5303, 5306, 5311, 5319, 5321, 5315, 5323, 5324, 5336, + 5325, 6613, 5327, 6613, 5329, 5333, 5341, 5331, 5351, 5352, - 5340, 6547, 5347, 6547, 5331, 5344, 5341, 5356, 5348, 6547, - 5352, 5357, 6547, 5362, 5364, 5365, 5354, 6547, 5359, 6547, - 5366, 5370, 5373, 5376, 5378, 5380, 5371, 5381, 5382, 5389, - 5388, 5390, 6547, 6547, 135, 5398, 5385, 5391, 5395, 5400, - 5407, 5402, 5405, 5404, 6547, 6547, 5412, 6547, 5410, 5413, - 6547, 5414, 5419, 5420, 5423, 5424, 5425, 5426, 5428, 5431, - 5433, 5434, 5435, 5432, 5436, 5454, 5456, 5438, 5459, 5460, - 5462, 5464, 5466, 5452, 5469, 5470, 5471, 5472, 5473, 5475, - 5476, 5478, 5479, 6547, 5482, 5484, 5486, 5487, 6547, 5494, - 5488, 5501, 5491, 6547, 5503, 5504, 5506, 5507, 6547, 5508, + 5353, 5355, 5350, 5338, 6613, 5348, 5359, 6613, 5366, 5361, + 5363, 5362, 5365, 6613, 5368, 5370, 5374, 5378, 6613, 5382, + 5371, 5379, 6613, 5386, 6613, 5383, 5387, 5389, 5396, 5393, + 6613, 5391, 5397, 6613, 5400, 5407, 5409, 5402, 6613, 5404, + 6613, 5394, 5417, 5418, 5421, 5408, 5425, 5413, 5410, 5427, + 5435, 5431, 5432, 6613, 6613, 5439, 5437, 135, 5444, 5434, + 5440, 5445, 5446, 5453, 5448, 5450, 5456, 6613, 6613, 5458, + 6613, 5451, 5461, 6613, 5449, 5466, 5467, 5462, 5470, 5471, + 5472, 5476, 5478, 5481, 5482, 5483, 5484, 5486, 5502, 5505, + 5487, 5508, 5509, 5511, 5513, 5515, 5517, 5518, 5500, 5498, - 5510, 5514, 5511, 5512, 5517, 5519, 5530, 5522, 5523, 5521, - 6547, 6547, 6547, 5533, 5537, 6547, 5540, 5527, 5542, 5543, - 6547, 5545, 5546, 5547, 6547, 6547, 5548, 5549, 5550, 5557, - 6547, 5552, 6547, 5553, 6547, 5560, 5563, 5571, 5566, 6547, - 5576, 5578, 6547, 5584, 5586, 5588, 5580, 5577, 5590, 5591, - 6547, 5562, 5593, 5594, 5601, 5592, 5595, 5602, 5603, 5604, - 5611, 5606, 5613, 6547, 5614, 5615, 5616, 5624, 5617, 5554, - 5619, 6547, 5626, 6547, 5628, 6547, 5629, 5630, 5633, 5632, - 5635, 5638, 5639, 5640, 5648, 5644, 5650, 5652, 5655, 5656, - 6547, 6547, 5659, 5661, 6547, 5662, 6547, 5664, 6547, 5665, + 5521, 5519, 5522, 5525, 5528, 5529, 6613, 5531, 5536, 5488, + 5532, 6613, 5540, 5537, 5542, 5546, 6613, 5553, 5545, 5547, + 5555, 6613, 5543, 5558, 5559, 5560, 5562, 5565, 5567, 5572, + 5570, 5568, 5574, 6613, 6613, 6613, 5575, 5585, 6613, 5587, + 5579, 5573, 5588, 6613, 5590, 5591, 5592, 6613, 6613, 5594, + 5596, 5595, 5603, 6613, 5599, 6613, 5601, 6613, 5602, 5608, + 5609, 5612, 6613, 5618, 5614, 5616, 5624, 6613, 5632, 5634, + 5636, 5617, 5620, 5629, 5637, 6613, 5644, 5641, 5645, 5652, + 5639, 5643, 5647, 5649, 5653, 5662, 5658, 5660, 6613, 5661, + 5664, 5667, 5673, 5663, 5666, 5670, 6613, 5675, 6613, 5677, - 5666, 5669, 5667, 6547, 5671, 5673, 5677, 5680, 5676, 5679, - 6547, 5687, 5689, 5690, 5692, 6547, 6547, 5684, 5700, 5696, - 6547, 5695, 5706, 5708, 5702, 5711, 5712, 5715, 5713, 5720, - 5697, 5719, 5718, 5726, 5729, 5727, 6547, 6547, 6547, 5734, - 5721, 5742, 5740, 5744, 5743, 5735, 6547, 5745, 5749, 5751, - 5752, 5760, 5755, 5758, 6547, 5762, 5759, 5761, 5763, 5765, - 5766, 5767, 5769, 6547, 5780, 5782, 5770, 5784, 5787, 5789, - 5791, 5794, 5795, 5796, 5803, 5799, 6547, 5801, 6547, 6547, - 5802, 6547, 5805, 5806, 5807, 5809, 6547, 5812, 5813, 5814, - 5816, 5815, 5817, 5819, 5824, 6547, 5831, 5820, 5832, 5836, + 6613, 5678, 5679, 5680, 5687, 5686, 5688, 5689, 5693, 5699, + 5694, 5690, 5701, 5705, 5706, 6613, 6613, 5710, 5712, 6613, + 5713, 6613, 5715, 6613, 5716, 5717, 5719, 5718, 6613, 5721, + 5722, 5728, 5730, 5726, 5729, 6613, 5738, 5731, 5736, 5741, + 6613, 6613, 5743, 5750, 5746, 6613, 5747, 5753, 5757, 5754, + 5759, 5760, 5761, 5762, 5772, 5764, 5765, 5767, 5776, 5773, + 5781, 5786, 5779, 6613, 6613, 6613, 5785, 5790, 5798, 5794, + 5796, 5801, 5791, 6613, 5800, 5803, 5806, 5804, 5813, 5808, + 5815, 6613, 5812, 5816, 5817, 5818, 5820, 5821, 5822, 5827, + 6613, 5829, 5833, 5830, 5837, 5839, 5846, 5848, 5850, 5841, - 6547, 6547, 5838, 6547, 5843, 5844, 5834, 5852, 5845, 5847, - 5854, 5856, 6547, 5850, 5858, 5859, 5860, 5862, 6547, 5863, - 5865, 5866, 5867, 6547, 5873, 5869, 5875, 5874, 5876, 6547, - 5877, 5879, 5889, 5896, 6547, 5880, 5894, 5890, 6547, 6547, - 5905, 5907, 5898, 6547, 6547, 6547, 5909, 5910, 5911, 5913, - 6547, 5917, 5921, 5925, 5929, 5920, 6547, 5928, 5931, 5935, - 5914, 5936, 6547, 6547, 5937, 5938, 5939, 5942, 6547, 6547, - 5943, 5945, 5947, 5946, 5948, 6547, 5949, 5953, 5959, 5965, - 5970, 5956, 5961, 5972, 5979, 5980, 5975, 5976, 5977, 5982, - 5983, 5985, 5990, 5992, 5993, 5995, 5997, 6001, 6002, 6547, + 5843, 5858, 5855, 6613, 5857, 6613, 6613, 5853, 6613, 5859, + 5861, 5862, 5863, 6613, 5866, 5867, 5868, 5871, 5870, 5873, + 5875, 5877, 6613, 5886, 5878, 5888, 5889, 6613, 6613, 5892, + 6613, 5896, 5897, 5899, 5906, 5903, 5901, 5905, 5911, 6613, + 5908, 5914, 5910, 5917, 5918, 5920, 5921, 6613, 5925, 5922, + 5924, 5926, 6613, 5929, 5934, 5931, 5935, 5938, 6613, 5940, + 5939, 5942, 5952, 6613, 5951, 5955, 5953, 6613, 6613, 5961, + 5963, 5964, 6613, 6613, 6613, 5970, 5967, 5954, 5975, 6613, + 5977, 5981, 5985, 5989, 5980, 6613, 5988, 5990, 5992, 5994, + 5995, 6613, 6613, 5996, 5997, 5998, 6001, 6613, 6613, 6002, - 6547, 6006, 6547, 6009, 6003, 6547, 6547, 6011, 6014, 6018, - 6020, 6022, 6024, 6026, 6028, 6015, 6547, 6029, 6031, 6033, - 6032, 6034, 6547, 6036, 6040, 6035, 6043, 6037, 6045, 6047, - 6052, 6547, 6547, 6048, 6057, 6053, 6058, 6063, 6547, 6061, - 6071, 6068, 6067, 6069, 6073, 6070, 6547, 6074, 6075, 6547, - 6547, 6083, 6077, 6547, 6547, 6076, 6547, 6547, 6547, 6547, - 6547, 6547, 6547, 6547, 6085, 6093, 6547, 6094, 6098, 6100, - 6104, 6547, 6078, 6105, 6106, 6089, 6108, 6547, 6095, 6112, - 6111, 5292, 6113, 6119, 6117, 6115, 6121, 6124, 6125, 6126, - 6127, 6131, 6132, 6133, 6142, 6145, 6129, 6146, 6547, 6547, + 6004, 6006, 6005, 6007, 6613, 6008, 6013, 6020, 6015, 6028, + 6031, 6033, 6021, 6034, 6035, 6043, 6046, 6023, 6038, 6041, + 6045, 6049, 6051, 6056, 6058, 6057, 6060, 6065, 6061, 6066, + 6613, 6613, 6068, 6613, 6073, 6069, 6613, 6613, 6075, 6080, + 6082, 6084, 6086, 6088, 6090, 6092, 6077, 6613, 6093, 6095, + 6096, 6097, 6098, 6613, 6100, 6107, 6099, 6104, 6101, 6110, + 6116, 6613, 6108, 6121, 6613, 6613, 6112, 6122, 6124, 6126, + 6128, 6613, 6129, 6137, 6133, 6134, 6135, 6138, 6136, 6613, + 6142, 6140, 6613, 6613, 6141, 6143, 6613, 6613, 6144, 6613, + 6613, 6613, 6613, 6613, 6613, 6613, 6613, 6155, 6159, 6613, - 6547, 6138, 6135, 6157, 6153, 6159, 6160, 6164, 6166, 6148, - 6168, 6169, 6170, 6171, 6173, 6174, 6183, 6178, 6179, 6180, - 6182, 6184, 6187, 6547, 6194, 6190, 6195, 6197, 6547, 6200, - 6547, 6199, 6547, 6547, 6202, 6206, 6203, 6208, 6216, 6218, - 6209, 6213, 6219, 6220, 6222, 6547, 6229, 6547, 6547, 6224, - 6230, 6547, 6232, 6231, 6547, 6233, 6234, 6236, 6241, 6243, - 6240, 6237, 6244, 6248, 6547, 6547, 6251, 6252, 6257, 6261, - 6258, 6268, 6264, 6267, 6269, 6273, 6266, 6281, 6547, 6280, - 6277, 6284, 6547, 6286, 6287, 6288, 6289, 6291, 6298, 6293, - 6294, 6547, 6296, 6547, 6300, 6302, 6304, 6301, 6303, 6305, + 6151, 6166, 6168, 6172, 6613, 6153, 6169, 6157, 6163, 6613, + 6173, 6613, 6174, 6175, 6177, 6179, 6180, 6184, 6188, 6189, + 6191, 6190, 6192, 6196, 6193, 6198, 6194, 6200, 6207, 6204, + 6205, 6213, 6613, 6613, 6613, 6214, 6215, 6220, 6222, 6224, + 6226, 6230, 6233, 6234, 6216, 6237, 6238, 6239, 6241, 6242, + 6251, 6246, 6247, 6249, 6256, 6248, 6262, 6613, 6264, 6250, + 6252, 6270, 6613, 6258, 6613, 6267, 6613, 6613, 6275, 6276, + 6272, 6278, 6287, 6288, 6279, 6283, 6284, 6286, 6290, 6613, + 6295, 6613, 6613, 6292, 6298, 6613, 6300, 6301, 6613, 6299, + 6302, 6304, 6308, 6309, 6306, 6310, 6311, 6327, 6613, 6613, - 6315, 6319, 6313, 6547, 6317, 6327, 6321, 6329, 6331, 6333, - 6334, 6323, 6336, 6339, 6345, 6349, 6346, 6350, 6337, 6354, - 6351, 6547, 6361, 6352, 6547, 6358, 6362, 6355, 6364, 6365, - 6547, 6369, 6372, 6373, 6375, 6378, 6379, 6547, 6381, 6385, - 6382, 6547, 6388, 6547, 6547, 6390, 6387, 6394, 6397, 6399, - 6547, 6547, 6547, 6427, 6434, 6441, 6448, 6455, 6462, 6469, - 88, 6476, 6483, 6490, 6497, 6504, 6511, 6518, 6525, 6532, - 6539 + 6312, 6317, 6320, 6329, 6331, 6330, 6333, 6337, 6338, 6340, + 6341, 6350, 6613, 6347, 6348, 6352, 6613, 6354, 6349, 6355, + 6356, 6357, 6365, 6361, 6364, 6613, 6366, 6613, 6370, 6372, + 6373, 6363, 6371, 6374, 6385, 6383, 6379, 6613, 6389, 6393, + 6391, 6395, 6397, 6399, 6400, 6401, 6403, 6406, 6412, 6409, + 6416, 6417, 6413, 6421, 6418, 6613, 6428, 6419, 6613, 6425, + 6429, 6422, 6431, 6435, 6613, 6440, 6433, 6442, 6443, 6446, + 6447, 6613, 6449, 6456, 6451, 6613, 6457, 6613, 6613, 6459, + 6453, 6460, 6466, 6468, 6613, 6613, 6613, 6493, 6500, 6507, + 6514, 6521, 6528, 6535, 88, 6542, 6549, 6556, 6563, 6570, + + 6577, 6584, 6591, 6598, 6605 } ; -static const flex_int16_t yy_def[3372] = +static const flex_int16_t yy_def[3406] = { 0, - 3353, 1, 3354, 3354, 3355, 3355, 3356, 3356, 3357, 3357, - 3358, 3358, 3359, 3359, 3360, 3360, 3353, 3361, 3353, 3353, - 3353, 3353, 3362, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3363, 3353, 3353, 3353, - 3363, 3364, 3353, 3353, 3353, 3364, 3365, 3353, 3353, 3353, - 3353, 3365, 3366, 3353, 3353, 3353, 3366, 3367, 3353, 3368, - 3353, 3367, 3367, 3369, 3353, 3353, 3353, 3353, 3369, 3370, - 3353, 3353, 3353, 3370, 3361, 3361, 3353, 3371, 3362, 3371, - 3362, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3387, 1, 3388, 3388, 3389, 3389, 3390, 3390, 3391, 3391, + 3392, 3392, 3393, 3393, 3394, 3394, 3387, 3395, 3387, 3387, + 3387, 3387, 3396, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3397, 3387, 3387, 3387, + 3397, 3398, 3387, 3387, 3387, 3398, 3399, 3387, 3387, 3387, + 3387, 3399, 3400, 3387, 3387, 3387, 3400, 3401, 3387, 3402, + 3387, 3401, 3401, 3403, 3387, 3387, 3387, 3387, 3403, 3404, + 3387, 3387, 3387, 3404, 3395, 3395, 3387, 3405, 3396, 3405, + 3396, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3363, - 3363, 3364, 3364, 3365, 3365, 3353, 3366, 3366, 3367, 3367, - 3368, 3368, 3367, 3369, 3369, 3353, 3370, 3370, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3397, + 3397, 3398, 3398, 3399, 3399, 3387, 3400, 3400, 3401, 3401, + 3402, 3402, 3401, 3403, 3403, 3387, 3404, 3404, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3367, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3353, 3353, 3361, 3353, 3353, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3387, 3395, 3387, 3387, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, + 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3367, 3367, 3361, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3401, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3367, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3387, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3353, 3361, 3367, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3367, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3401, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3367, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3401, 3395, 3387, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, + 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, 3395, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3387, 3387, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3401, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3353, 3361, 3361, 3361, 3361, 3367, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, - 3361, 3353, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3353, - 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3401, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3387, + 3395, 3387, 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, - 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3387, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3353, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3395, 3387, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3353, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3353, 3367, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3401, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3387, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, - 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3353, 3361, 3361, 3353, 3361, 3353, 3361, 3353, 3361, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, - 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3387, 3395, 3395, 3387, + 3395, 3387, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3387, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, - 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, - 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3353, - 3361, 3361, 3361, 3353, 3353, 3353, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3353, 3353, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, + 3395, 3395, 3395, 3387, 3395, 3387, 3387, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, 3387, 3395, + 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3387, 3395, + 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3387, 3395, 3395, 3395, 3395, 3387, 3387, 3395, - 3353, 3361, 3353, 3361, 3361, 3353, 3353, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, - 3353, 3361, 3361, 3353, 3353, 3361, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3387, 3387, 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3387, 3387, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3395, 3387, 3387, 3395, 3395, 3387, 3387, 3395, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3395, 3395, 3387, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, - 3353, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, - 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, - 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3387, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3387, 3395, 3387, 3395, 3387, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, + 3395, 3387, 3387, 3395, 3395, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3387, - 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, - 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, - 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, - 3361, 3353, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, - 3353, 3353, 0, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353 + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, + 3395, 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3387, 3395, + 3395, 3395, 3395, 3395, 3387, 3395, 3395, 3395, 3395, 3395, + 3395, 3387, 3395, 3395, 3395, 3387, 3395, 3387, 3387, 3395, + 3395, 3395, 3395, 3395, 3387, 3387, 0, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + + 3387, 3387, 3387, 3387, 3387 } ; -static const flex_int16_t yy_nxt[6588] = +static const flex_int16_t yy_nxt[6654] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1588,7 +1599,7 @@ static const flex_int16_t yy_nxt[6588] = 311, 86, 86, 86, 86, 307, 86, 318, 86, 86, 86, 319, 86, 325, 312, 313, 315, 309, 314, 316, 86, 320, 86, 329, 321, 328, 322, 330, 327, 326, - 332, 86, 86, 86, 724, 334, 86, 338, 323, 331, + 332, 86, 86, 86, 726, 334, 86, 338, 323, 331, 324, 86, 335, 86, 86, 340, 86, 342, 86, 339, 341, 86, 333, 86, 86, 86, 344, 336, 86, 86, 86, 343, 86, 86, 346, 86, 348, 86, 345, 86, @@ -1620,641 +1631,649 @@ static const flex_int16_t yy_nxt[6588] = 467, 86, 86, 86, 86, 468, 86, 86, 86, 477, 86, 86, 86, 479, 86, 475, 478, 476, 86, 472, 470, 86, 480, 471, 473, 474, 86, 86, 86, 481, - 483, 482, 86, 487, 86, 168, 86, 86, 488, 86, - 489, 492, 86, 505, 493, 166, 484, 486, 485, 490, + 483, 482, 86, 487, 86, 86, 86, 86, 488, 86, + 489, 492, 86, 505, 493, 1513, 484, 486, 485, 490, 86, 86, 86, 86, 491, 86, 494, 495, 497, 86, 498, 86, 500, 496, 86, 506, 507, 86, 86, 508, - 504, 86, 86, 86, 86, 501, 509, 86, 502, 546, + 504, 86, 86, 86, 86, 501, 509, 86, 502, 547, 503, 86, 510, 86, 520, 86, 511, 522, 519, 523, 86, 524, 86, 525, 512, 86, 513, 527, 514, 537, 535, 536, 521, 170, 538, 86, 86, 86, 86, 526, - 86, 515, 539, 86, 516, 556, 517, 86, 518, 86, - 86, 528, 529, 542, 540, 86, 541, 165, 86, 543, - 545, 530, 544, 531, 532, 533, 86, 547, 534, 548, - 549, 86, 86, 86, 86, 558, 86, 551, 553, 86, - 550, 86, 86, 559, 86, 86, 86, 563, 555, 557, - 86, 554, 86, 86, 86, 552, 561, 566, 86, 560, - 562, 567, 568, 86, 86, 86, 565, 86, 86, 573, - 564, 86, 572, 86, 569, 574, 575, 86, 86, 570, + 86, 515, 86, 539, 516, 168, 517, 86, 518, 86, + 540, 528, 529, 543, 541, 542, 544, 86, 86, 545, + 546, 530, 548, 531, 532, 533, 86, 550, 534, 86, + 86, 549, 86, 86, 552, 86, 86, 551, 554, 559, + 557, 86, 560, 86, 86, 86, 86, 556, 564, 86, + 555, 558, 553, 86, 86, 86, 562, 86, 568, 569, + 563, 86, 567, 561, 86, 86, 86, 86, 86, 566, + 86, 578, 574, 86, 565, 570, 86, 579, 575, 576, - 86, 571, 577, 86, 578, 86, 580, 581, 86, 584, - 594, 86, 582, 576, 86, 86, 86, 585, 603, 579, - 586, 86, 86, 595, 583, 86, 589, 596, 86, 597, - 599, 587, 86, 588, 590, 591, 86, 598, 592, 593, - 86, 86, 86, 86, 86, 602, 601, 604, 86, 606, - 608, 86, 86, 600, 86, 86, 611, 607, 612, 609, - 86, 86, 86, 605, 86, 610, 613, 86, 86, 86, - 618, 86, 616, 617, 86, 614, 86, 86, 619, 86, - 86, 86, 615, 620, 624, 86, 86, 627, 623, 625, - 86, 626, 86, 86, 621, 622, 86, 628, 86, 630, + 571, 572, 573, 86, 581, 582, 86, 86, 86, 86, + 86, 595, 580, 86, 86, 166, 577, 86, 587, 597, + 86, 583, 596, 584, 586, 590, 585, 86, 86, 588, + 86, 589, 598, 591, 592, 600, 599, 593, 594, 86, + 86, 86, 86, 86, 603, 602, 604, 605, 86, 86, + 607, 601, 86, 609, 86, 86, 86, 86, 612, 86, + 610, 613, 86, 614, 86, 608, 86, 86, 606, 611, + 86, 617, 86, 619, 86, 618, 86, 615, 86, 86, + 86, 620, 86, 625, 86, 616, 621, 86, 626, 86, + 624, 86, 628, 86, 627, 86, 622, 623, 629, 86, - 86, 629, 86, 632, 634, 86, 86, 86, 86, 635, - 86, 637, 631, 86, 633, 86, 645, 647, 86, 86, - 639, 723, 86, 86, 86, 86, 636, 638, 640, 86, - 641, 642, 644, 646, 648, 643, 86, 86, 86, 649, - 652, 86, 655, 86, 650, 658, 86, 651, 86, 657, - 86, 86, 653, 86, 86, 86, 654, 86, 661, 664, - 86, 86, 86, 656, 660, 665, 667, 86, 86, 659, - 86, 86, 86, 86, 86, 86, 662, 666, 663, 681, - 86, 86, 86, 668, 670, 163, 684, 669, 86, 671, - 679, 682, 720, 698, 672, 680, 673, 683, 86, 86, + 631, 86, 633, 86, 86, 86, 86, 86, 630, 86, + 86, 632, 635, 86, 636, 638, 634, 86, 86, 640, + 86, 86, 646, 165, 637, 649, 639, 641, 86, 642, + 647, 643, 645, 648, 86, 86, 86, 644, 86, 86, + 86, 653, 86, 651, 86, 656, 652, 658, 650, 86, + 654, 86, 659, 86, 86, 655, 86, 86, 86, 662, + 86, 665, 657, 661, 86, 666, 86, 86, 86, 86, + 86, 668, 86, 86, 700, 663, 660, 664, 86, 667, + 86, 86, 671, 669, 682, 163, 86, 670, 86, 672, + 680, 683, 86, 681, 673, 86, 674, 684, 86, 685, - 86, 86, 674, 86, 675, 685, 688, 676, 677, 686, - 692, 86, 691, 687, 678, 689, 86, 86, 690, 86, - 86, 693, 696, 86, 699, 86, 694, 86, 701, 86, - 86, 86, 86, 695, 86, 86, 86, 86, 86, 86, - 707, 86, 703, 697, 702, 708, 704, 711, 712, 170, - 700, 705, 710, 713, 714, 86, 706, 709, 86, 86, - 86, 86, 86, 86, 86, 727, 86, 715, 721, 726, - 86, 86, 86, 716, 725, 718, 722, 719, 717, 729, - 86, 86, 86, 86, 728, 86, 731, 86, 86, 86, - 735, 86, 730, 734, 740, 732, 86, 733, 736, 741, + 86, 688, 675, 689, 676, 686, 86, 677, 678, 687, + 86, 86, 693, 86, 679, 698, 86, 86, 86, 692, + 697, 86, 690, 694, 86, 691, 695, 86, 702, 696, + 86, 86, 86, 86, 86, 86, 699, 86, 86, 703, + 708, 86, 704, 709, 733, 86, 701, 705, 86, 86, + 706, 712, 86, 711, 86, 707, 710, 713, 714, 170, + 716, 717, 86, 715, 86, 86, 86, 718, 86, 86, + 86, 86, 86, 723, 725, 728, 86, 86, 720, 727, + 721, 719, 729, 724, 731, 86, 722, 86, 86, 730, + 86, 86, 86, 86, 86, 737, 86, 732, 736, 742, - 86, 743, 86, 744, 86, 737, 745, 739, 738, 742, - 746, 86, 86, 747, 86, 748, 86, 749, 86, 86, - 86, 86, 750, 86, 86, 754, 86, 753, 86, 86, - 752, 757, 86, 86, 756, 86, 762, 751, 755, 86, - 758, 86, 86, 761, 86, 763, 86, 766, 86, 86, - 767, 760, 759, 765, 86, 86, 86, 86, 773, 86, - 770, 768, 764, 86, 86, 86, 86, 86, 774, 86, - 781, 86, 771, 775, 776, 769, 86, 772, 86, 777, - 86, 783, 778, 779, 780, 782, 86, 86, 788, 789, - 786, 784, 785, 787, 86, 86, 86, 86, 790, 86, + 86, 734, 86, 738, 743, 86, 735, 745, 86, 791, + 739, 86, 741, 740, 747, 744, 746, 86, 748, 86, + 86, 749, 86, 750, 86, 751, 86, 86, 86, 86, + 752, 86, 753, 756, 86, 758, 754, 755, 86, 86, + 86, 759, 86, 86, 760, 757, 764, 763, 86, 86, + 86, 86, 86, 765, 86, 767, 86, 769, 86, 86, + 86, 762, 86, 761, 772, 768, 766, 775, 161, 770, + 86, 86, 86, 86, 86, 776, 773, 86, 86, 771, + 86, 778, 774, 86, 783, 777, 779, 86, 785, 780, + 781, 86, 782, 86, 788, 784, 786, 790, 787, 86, - 791, 86, 793, 86, 794, 86, 86, 86, 795, 86, - 86, 802, 86, 798, 800, 796, 86, 86, 86, 86, - 799, 86, 792, 797, 86, 803, 808, 810, 806, 86, - 801, 86, 86, 807, 805, 809, 804, 811, 812, 86, - 86, 86, 813, 86, 86, 86, 814, 819, 821, 815, - 817, 86, 86, 86, 86, 822, 820, 816, 86, 86, - 825, 86, 86, 818, 824, 826, 86, 86, 86, 86, - 832, 86, 829, 86, 827, 828, 86, 834, 835, 86, - 837, 86, 86, 823, 839, 86, 830, 831, 833, 838, - 841, 836, 86, 86, 86, 845, 86, 842, 843, 840, + 86, 86, 789, 86, 792, 86, 86, 86, 86, 793, + 796, 795, 86, 797, 86, 798, 86, 86, 799, 800, + 86, 802, 804, 86, 86, 86, 86, 801, 86, 805, + 810, 794, 86, 86, 86, 808, 86, 803, 811, 86, + 809, 807, 812, 806, 813, 814, 86, 86, 86, 815, + 86, 817, 86, 816, 86, 821, 823, 819, 86, 825, + 86, 86, 86, 822, 818, 86, 86, 86, 824, 827, + 86, 826, 86, 820, 828, 86, 834, 831, 86, 835, + 829, 86, 86, 830, 86, 86, 837, 836, 86, 839, + 86, 832, 833, 86, 843, 86, 841, 840, 86, 86, - 846, 86, 86, 847, 86, 86, 849, 851, 844, 86, - 86, 86, 86, 850, 86, 857, 86, 848, 86, 86, - 858, 86, 86, 86, 86, 86, 86, 852, 853, 854, - 866, 855, 859, 860, 856, 86, 86, 861, 863, 86, - 865, 86, 862, 86, 86, 869, 86, 864, 871, 86, - 86, 86, 86, 867, 86, 868, 86, 880, 86, 878, - 870, 86, 86, 86, 872, 873, 881, 86, 874, 875, - 876, 877, 879, 86, 86, 882, 86, 86, 884, 886, - 86, 86, 883, 86, 86, 86, 86, 885, 890, 891, - 892, 893, 887, 889, 86, 86, 888, 86, 86, 894, + 86, 86, 849, 845, 838, 86, 86, 844, 851, 847, + 850, 842, 86, 846, 848, 86, 86, 86, 852, 853, + 86, 86, 859, 854, 86, 86, 86, 86, 86, 860, + 855, 86, 86, 861, 856, 86, 86, 86, 86, 857, + 86, 858, 862, 868, 864, 86, 863, 866, 86, 86, + 869, 865, 867, 86, 86, 86, 874, 870, 873, 871, + 86, 86, 86, 86, 86, 882, 86, 872, 880, 875, + 883, 86, 86, 876, 86, 86, 881, 86, 877, 878, + 879, 86, 888, 86, 86, 884, 886, 86, 887, 86, + 86, 885, 86, 86, 86, 893, 892, 889, 895, 894, - 86, 86, 896, 895, 86, 170, 897, 902, 86, 899, - 901, 86, 898, 900, 86, 903, 86, 86, 86, 909, - 86, 86, 904, 905, 86, 910, 912, 86, 86, 86, - 914, 906, 907, 911, 913, 916, 86, 86, 908, 86, - 86, 86, 86, 918, 922, 86, 86, 915, 86, 919, - 86, 86, 86, 923, 86, 924, 917, 86, 86, 86, - 921, 86, 86, 942, 925, 920, 86, 937, 938, 935, - 940, 86, 927, 86, 936, 86, 926, 86, 161, 928, - 86, 939, 929, 86, 943, 965, 930, 941, 86, 931, - 86, 944, 86, 948, 949, 86, 932, 933, 946, 934, + 891, 86, 890, 86, 86, 86, 896, 86, 86, 903, + 898, 86, 897, 899, 905, 86, 901, 170, 86, 900, + 902, 86, 904, 86, 86, 906, 86, 86, 912, 86, + 86, 913, 907, 908, 915, 86, 86, 86, 909, 914, + 910, 916, 86, 919, 86, 86, 917, 86, 911, 86, + 86, 921, 86, 925, 86, 86, 86, 922, 86, 86, + 86, 918, 926, 927, 920, 86, 86, 86, 86, 86, + 924, 86, 86, 928, 941, 923, 940, 942, 943, 86, + 930, 938, 939, 929, 86, 86, 931, 86, 944, 932, + 948, 945, 86, 933, 86, 946, 934, 86, 947, 950, - 86, 86, 947, 945, 86, 950, 951, 86, 952, 86, - 86, 953, 957, 959, 960, 86, 954, 86, 86, 962, - 86, 86, 955, 956, 86, 961, 964, 968, 969, 86, - 958, 86, 966, 970, 86, 963, 971, 86, 972, 86, - 86, 975, 86, 967, 974, 86, 973, 976, 977, 86, - 979, 86, 86, 86, 978, 980, 86, 86, 86, 86, - 86, 983, 86, 987, 981, 86, 86, 986, 86, 86, - 990, 86, 86, 996, 86, 982, 1007, 86, 984, 985, - 988, 994, 989, 992, 991, 86, 997, 86, 86, 1000, - 995, 998, 86, 999, 993, 86, 1001, 86, 86, 1003, + 86, 952, 86, 935, 936, 86, 937, 86, 86, 86, + 949, 86, 86, 960, 86, 963, 86, 969, 965, 86, + 951, 86, 953, 954, 967, 955, 961, 962, 956, 86, + 86, 975, 86, 957, 966, 968, 964, 972, 86, 958, + 959, 971, 973, 86, 86, 86, 86, 976, 86, 978, + 977, 974, 86, 86, 970, 86, 980, 979, 982, 86, + 981, 86, 86, 983, 86, 985, 86, 86, 986, 86, + 86, 990, 86, 86, 984, 989, 86, 86, 993, 86, + 86, 999, 86, 997, 1010, 86, 987, 991, 988, 86, + 992, 994, 995, 86, 1000, 1011, 86, 86, 998, 1001, - 1004, 86, 86, 1002, 86, 86, 86, 1005, 1008, 86, - 86, 86, 1006, 86, 1009, 86, 1011, 86, 86, 86, - 1012, 1016, 86, 86, 1019, 86, 86, 1018, 1010, 1020, - 86, 86, 1017, 1013, 1014, 86, 1015, 86, 86, 1022, - 1023, 86, 86, 1025, 86, 1021, 86, 1027, 86, 86, - 1026, 1028, 86, 86, 1033, 86, 1029, 86, 1031, 1034, - 86, 1024, 86, 1035, 86, 1032, 1038, 86, 1036, 86, - 1044, 86, 1041, 1030, 1037, 86, 86, 1043, 86, 86, - 1042, 86, 86, 1046, 86, 1040, 86, 86, 1039, 86, - 86, 86, 86, 1057, 1054, 1052, 86, 1045, 86, 86, + 86, 996, 1002, 1003, 1004, 86, 86, 1006, 1007, 86, + 86, 1005, 86, 86, 86, 86, 86, 86, 1008, 86, + 86, 86, 1009, 1012, 1014, 86, 86, 1015, 1019, 86, + 86, 86, 86, 86, 1013, 1016, 1028, 1017, 86, 1020, + 1021, 1022, 86, 1023, 1018, 1024, 86, 1025, 86, 86, + 86, 1030, 86, 86, 86, 1026, 86, 1027, 1031, 1029, + 86, 86, 1036, 86, 1038, 1034, 1032, 1037, 86, 86, + 86, 86, 86, 1035, 86, 86, 1039, 1044, 86, 1033, + 1041, 86, 86, 1046, 86, 1045, 1047, 86, 1040, 1049, + 1043, 86, 86, 86, 1042, 86, 1048, 86, 86, 1050, - 1047, 1048, 1049, 86, 86, 1058, 1050, 1051, 86, 1055, - 1059, 1056, 1053, 86, 1062, 86, 1065, 86, 1061, 86, - 1064, 86, 1060, 86, 86, 86, 86, 1063, 86, 86, - 1067, 1074, 1069, 86, 1075, 1077, 86, 86, 86, 1066, - 86, 86, 86, 1068, 86, 1070, 1082, 1072, 1071, 1073, - 1076, 1080, 1078, 1079, 1081, 86, 86, 86, 86, 86, - 86, 1086, 1089, 1083, 86, 1088, 86, 1084, 86, 1090, - 86, 86, 1093, 1095, 86, 1085, 86, 1091, 86, 1087, - 86, 1098, 86, 1092, 86, 1097, 1099, 170, 1101, 86, - 1102, 1094, 86, 86, 1096, 86, 86, 1100, 86, 86, + 86, 86, 1051, 1060, 1055, 1057, 86, 86, 178, 86, + 86, 1052, 86, 1054, 1053, 1061, 1058, 86, 1065, 1059, + 1056, 86, 1062, 86, 1068, 86, 1063, 86, 1067, 86, + 86, 1064, 86, 86, 86, 1066, 86, 86, 1070, 1077, + 1072, 86, 1078, 1080, 86, 86, 86, 1069, 86, 86, + 1071, 86, 86, 1073, 86, 1075, 1074, 1076, 1079, 1083, + 1081, 1082, 1084, 86, 1087, 86, 86, 1085, 86, 86, + 1086, 1089, 1088, 86, 1091, 1090, 1092, 86, 86, 1096, + 1093, 86, 86, 1098, 86, 86, 86, 1094, 86, 86, + 1103, 1095, 86, 1100, 86, 1104, 170, 86, 86, 86, - 1105, 86, 86, 86, 86, 1118, 86, 86, 86, 86, - 1119, 86, 1109, 1104, 1103, 1106, 1108, 1121, 86, 86, - 1278, 1110, 1107, 1120, 1111, 86, 1124, 86, 1112, 86, - 1113, 1123, 1122, 1125, 1114, 86, 1115, 86, 86, 1128, - 1126, 1116, 86, 1127, 1129, 86, 1117, 1130, 86, 86, - 86, 1131, 1132, 86, 86, 1135, 86, 1134, 1138, 86, - 86, 1137, 86, 86, 1133, 1136, 86, 1144, 1139, 1142, - 1145, 86, 1143, 1141, 1146, 86, 86, 1140, 1147, 86, - 86, 1148, 1149, 86, 86, 1150, 86, 86, 86, 86, - 1151, 86, 1161, 1152, 86, 1153, 1160, 1162, 86, 1164, + 1107, 1097, 1106, 86, 1099, 1101, 86, 1102, 1110, 1105, + 86, 86, 86, 86, 1108, 86, 86, 1109, 86, 1123, + 1124, 1126, 86, 86, 1114, 1111, 1113, 86, 86, 86, + 86, 86, 1128, 1115, 1112, 1131, 1116, 86, 1125, 86, + 1117, 86, 1118, 86, 1129, 1130, 1119, 86, 1120, 1148, + 86, 1133, 1127, 1121, 1139, 1132, 1134, 86, 1122, 1135, + 86, 1136, 86, 86, 1137, 86, 86, 1140, 86, 86, + 1143, 86, 86, 86, 86, 1142, 1138, 1141, 1149, 1150, + 1144, 1147, 1151, 1146, 86, 86, 1152, 86, 86, 1145, + 1153, 1154, 1157, 1155, 86, 86, 86, 86, 176, 86, - 1154, 1163, 1155, 86, 86, 1167, 86, 86, 1156, 1165, - 1171, 1166, 86, 1157, 1158, 86, 86, 86, 86, 86, - 1159, 86, 1172, 1177, 86, 1168, 1169, 1173, 1170, 86, - 86, 1180, 86, 1178, 86, 1175, 1174, 86, 86, 1176, - 86, 1181, 1185, 86, 86, 1183, 86, 1184, 86, 1186, - 1179, 1182, 86, 86, 1191, 1188, 86, 86, 86, 86, - 86, 1189, 1187, 1194, 86, 1192, 86, 86, 86, 1190, - 178, 86, 86, 86, 86, 86, 1193, 1201, 1196, 1195, - 1198, 1199, 1200, 1203, 1202, 86, 1197, 86, 86, 86, - 1204, 86, 86, 86, 86, 1206, 86, 86, 1211, 1205, + 86, 1166, 86, 1156, 86, 1158, 1165, 86, 1169, 86, + 1159, 86, 1160, 1167, 1168, 86, 1170, 1171, 1161, 1173, + 86, 86, 1176, 1162, 1163, 86, 86, 86, 86, 1172, + 1164, 1177, 86, 86, 1182, 86, 86, 1175, 86, 1174, + 1183, 1185, 86, 1179, 1178, 1181, 86, 86, 86, 1180, + 86, 1186, 86, 86, 1190, 1188, 86, 1191, 1184, 1189, + 86, 1187, 86, 86, 1196, 1193, 86, 86, 86, 86, + 86, 1194, 1192, 1199, 86, 1197, 86, 86, 86, 1195, + 175, 86, 86, 86, 86, 86, 1198, 1206, 1201, 1200, + 1203, 1204, 1205, 1208, 1207, 86, 1202, 86, 86, 86, - 86, 1212, 1208, 1214, 86, 1213, 1207, 1210, 1216, 1209, - 86, 1215, 1218, 1217, 86, 86, 86, 1221, 86, 86, - 86, 1223, 1222, 86, 1224, 86, 86, 86, 1219, 1225, - 86, 86, 1220, 1226, 1232, 86, 1234, 86, 1227, 86, - 86, 1228, 86, 1230, 1236, 1229, 1231, 86, 86, 86, - 86, 1238, 1235, 86, 86, 1233, 86, 86, 1240, 1241, - 86, 1237, 1244, 86, 86, 1243, 1242, 86, 1245, 86, - 1239, 1250, 1246, 1247, 86, 1249, 86, 86, 1251, 86, - 1248, 86, 86, 1252, 1254, 86, 1255, 86, 86, 86, - 86, 1261, 1259, 1262, 1253, 86, 86, 86, 86, 86, + 1209, 86, 86, 86, 86, 1211, 86, 86, 1216, 1210, + 86, 1217, 1213, 1219, 86, 1218, 1212, 1215, 1221, 1214, + 86, 1220, 1223, 1222, 86, 86, 86, 1226, 86, 86, + 86, 1228, 1227, 86, 1229, 86, 86, 86, 1224, 1230, + 86, 86, 1225, 1231, 1237, 86, 1239, 86, 1232, 86, + 86, 1233, 86, 1235, 1241, 1234, 1236, 86, 86, 86, + 86, 1243, 1240, 86, 86, 1238, 86, 86, 1245, 1246, + 86, 1242, 1249, 86, 86, 1248, 1247, 86, 1250, 86, + 1244, 1255, 1251, 1252, 86, 1254, 86, 86, 1256, 86, + 1253, 86, 86, 1257, 1259, 86, 1260, 86, 86, 86, - 1256, 1263, 86, 1260, 86, 1266, 1257, 1264, 1258, 1265, - 1269, 86, 86, 1267, 1271, 86, 86, 1270, 1268, 86, - 86, 86, 86, 86, 86, 86, 1276, 1277, 1272, 1273, - 1279, 86, 86, 86, 1283, 86, 1284, 86, 86, 1274, - 86, 1275, 86, 1286, 1281, 1287, 86, 86, 86, 1280, - 1285, 1291, 1282, 86, 86, 86, 1288, 86, 86, 86, - 1290, 1289, 170, 1293, 1297, 86, 86, 86, 86, 86, - 86, 1292, 86, 1302, 1304, 86, 1294, 86, 1296, 1301, - 1299, 1303, 1298, 1295, 1300, 1306, 1307, 86, 86, 86, - 1305, 86, 86, 1308, 1309, 86, 86, 1310, 86, 86, + 86, 1266, 1264, 1267, 1258, 86, 86, 86, 86, 86, + 1261, 1268, 86, 1265, 86, 1271, 1262, 1269, 1263, 1270, + 1274, 86, 86, 1272, 1276, 86, 86, 1275, 1273, 86, + 86, 86, 86, 86, 86, 86, 1281, 1282, 1277, 1278, + 86, 86, 86, 86, 1288, 1284, 1283, 1289, 86, 1279, + 86, 1280, 86, 86, 1286, 1292, 86, 1291, 86, 1285, + 86, 86, 1287, 1290, 1296, 86, 86, 86, 86, 86, + 86, 1302, 86, 1295, 1294, 1298, 86, 1293, 170, 86, + 86, 1303, 86, 1297, 1304, 86, 1299, 86, 86, 1301, + 86, 86, 1309, 170, 1300, 1307, 1306, 1308, 1305, 1310, - 86, 1311, 1312, 86, 1314, 86, 1316, 86, 1320, 86, - 1317, 86, 1313, 86, 86, 1315, 86, 86, 86, 86, - 1318, 86, 1324, 86, 1326, 1321, 1319, 1330, 1334, 1323, - 86, 1322, 1335, 1327, 86, 1328, 86, 1325, 1329, 86, - 1331, 1332, 1333, 86, 86, 86, 86, 1336, 86, 1337, - 86, 1340, 1338, 86, 1339, 86, 86, 86, 1343, 1347, - 86, 86, 1342, 86, 86, 86, 1348, 1341, 1345, 1344, - 1349, 86, 86, 86, 86, 1346, 1351, 1352, 86, 1354, - 86, 1353, 86, 1350, 86, 86, 86, 86, 86, 1355, - 86, 86, 1357, 1359, 1360, 86, 1364, 1356, 86, 1358, + 1311, 86, 86, 1313, 1314, 86, 86, 1315, 1312, 86, + 86, 1316, 86, 86, 1317, 86, 1319, 86, 1318, 1320, + 1321, 86, 86, 86, 86, 1327, 86, 86, 86, 1324, + 86, 86, 1322, 86, 86, 86, 1468, 1331, 1325, 1337, + 1323, 1328, 86, 1326, 86, 1330, 1329, 1333, 86, 1338, + 86, 1340, 86, 1332, 86, 1339, 1334, 86, 1335, 86, + 86, 1336, 1343, 1344, 1341, 86, 86, 86, 1342, 86, + 86, 1347, 86, 86, 1346, 1350, 86, 86, 1345, 1354, + 86, 1349, 1355, 1352, 86, 86, 1348, 1351, 86, 1356, + 86, 86, 86, 1358, 1359, 1353, 86, 86, 86, 86, - 86, 86, 86, 86, 1361, 86, 1363, 86, 1362, 1368, - 1365, 1366, 86, 86, 1376, 1371, 1369, 86, 1367, 86, - 86, 1370, 86, 86, 1372, 86, 86, 1374, 86, 86, - 1379, 1378, 1373, 1375, 1377, 86, 86, 86, 1383, 1384, - 1382, 1381, 1388, 1380, 1385, 86, 1398, 1386, 86, 1389, - 1387, 86, 1390, 86, 86, 1399, 1391, 86, 1400, 1392, - 1393, 86, 86, 1402, 1394, 1403, 1397, 1401, 86, 86, - 1395, 86, 86, 1404, 1396, 86, 1406, 1405, 86, 1408, - 86, 86, 86, 1409, 86, 1410, 86, 86, 86, 86, - 1407, 1418, 1415, 1413, 86, 176, 86, 86, 1419, 1420, + 1360, 86, 86, 86, 86, 1357, 86, 1361, 1366, 86, + 1364, 1362, 86, 86, 1365, 1367, 1363, 86, 1371, 86, + 86, 1368, 86, 86, 1370, 1369, 86, 86, 1372, 1373, + 86, 1375, 86, 86, 1376, 1378, 1383, 1374, 86, 1377, + 86, 86, 86, 86, 86, 1379, 1386, 1381, 1384, 1389, + 1382, 86, 1380, 86, 1385, 86, 1406, 86, 86, 1388, + 1391, 1387, 86, 1390, 168, 1392, 86, 86, 1396, 1394, + 1395, 1404, 1393, 86, 1397, 86, 86, 1407, 1398, 86, + 86, 1399, 1400, 1410, 1405, 1408, 1401, 86, 1409, 86, + 86, 86, 1402, 86, 86, 1411, 1403, 86, 1412, 86, - 1412, 1411, 1416, 86, 86, 86, 1414, 1417, 86, 1421, - 1428, 86, 1422, 1427, 86, 1429, 86, 1423, 86, 1424, - 1433, 1425, 1432, 1426, 1430, 1431, 86, 86, 86, 1437, - 86, 86, 86, 1434, 1438, 86, 86, 1436, 86, 1439, - 86, 1441, 86, 86, 1435, 1447, 1442, 1443, 86, 1448, - 86, 86, 86, 1440, 86, 86, 86, 1446, 1449, 1444, - 1451, 1445, 86, 86, 86, 1453, 1450, 86, 1452, 1454, - 1458, 86, 1457, 86, 1460, 86, 86, 86, 1461, 86, - 1462, 1455, 86, 86, 1463, 1466, 86, 86, 1459, 1456, - 1468, 86, 1465, 86, 1469, 86, 86, 86, 1473, 86, + 1413, 86, 1415, 86, 86, 86, 1420, 1416, 1414, 1417, + 1422, 1418, 1419, 86, 86, 1425, 1426, 86, 86, 86, + 1486, 86, 86, 1421, 1427, 86, 1429, 1423, 86, 1428, + 86, 1430, 1424, 1431, 86, 1432, 86, 1433, 86, 1434, + 86, 1436, 1435, 1437, 1438, 86, 86, 1439, 1442, 1440, + 86, 1444, 86, 1441, 86, 86, 1445, 86, 86, 1443, + 1448, 1446, 86, 86, 86, 86, 86, 1454, 86, 1455, + 86, 1450, 1449, 86, 1456, 86, 1447, 86, 86, 1453, + 1458, 86, 1451, 1452, 1457, 86, 86, 1460, 1461, 86, + 86, 1459, 1465, 86, 1464, 1467, 86, 86, 86, 86, - 1470, 1464, 86, 86, 86, 86, 1475, 1467, 86, 175, - 1477, 86, 86, 86, 1479, 86, 1481, 1471, 1472, 86, - 1478, 86, 1474, 86, 1476, 86, 1480, 86, 1483, 1486, - 1482, 86, 1485, 1484, 86, 86, 1487, 1488, 86, 1490, - 1489, 86, 86, 1492, 86, 86, 1491, 1496, 1493, 1497, - 1499, 1494, 86, 86, 86, 86, 86, 1498, 1495, 86, - 86, 1503, 86, 1500, 86, 170, 86, 86, 1508, 1509, - 86, 1502, 86, 1511, 86, 86, 1510, 86, 1501, 86, - 1505, 86, 86, 86, 1504, 86, 1506, 86, 86, 1519, - 1507, 1512, 1514, 86, 1516, 86, 86, 1513, 86, 1517, + 1469, 86, 86, 1462, 1470, 1466, 1473, 86, 1475, 86, + 1472, 1463, 86, 1476, 86, 86, 86, 1471, 86, 1477, + 1480, 86, 1474, 86, 86, 86, 1482, 86, 86, 86, + 1484, 86, 1488, 86, 86, 166, 1478, 1479, 1481, 1490, + 1485, 86, 86, 1489, 1483, 1487, 1492, 1491, 86, 86, + 1493, 86, 1495, 1494, 86, 1497, 1496, 86, 86, 86, + 86, 86, 1498, 1503, 1504, 1500, 86, 1501, 86, 86, + 86, 1505, 1506, 86, 1502, 86, 1499, 1507, 86, 1510, + 86, 86, 86, 170, 86, 86, 1509, 1517, 1518, 86, + 1520, 86, 1508, 86, 86, 1519, 86, 86, 1514, 86, - 86, 1515, 86, 1520, 86, 1518, 86, 1523, 1524, 86, - 1528, 1526, 86, 1522, 1533, 1529, 86, 1527, 1521, 1525, - 86, 1531, 1530, 86, 86, 86, 86, 86, 1532, 1540, - 1537, 86, 86, 1538, 1542, 1539, 1543, 86, 1534, 1535, - 86, 1545, 1536, 86, 86, 1541, 1546, 86, 1544, 86, - 86, 86, 86, 86, 86, 1550, 1551, 86, 86, 1554, - 86, 86, 1547, 86, 1559, 86, 86, 1549, 86, 1560, - 1548, 1552, 1553, 86, 1556, 1563, 1557, 1555, 86, 1558, - 86, 86, 86, 86, 1561, 1564, 86, 1562, 86, 1571, - 86, 86, 86, 86, 1566, 1570, 1572, 1565, 1567, 86, + 1512, 1511, 86, 86, 1515, 1521, 86, 86, 1516, 86, + 1528, 1522, 86, 86, 1525, 1533, 86, 1523, 86, 1524, + 1526, 1527, 86, 1532, 86, 86, 86, 1529, 1537, 1535, + 86, 1531, 86, 1538, 86, 1540, 86, 1530, 86, 86, + 1541, 86, 86, 86, 1536, 1534, 1546, 86, 1539, 1547, + 1542, 1548, 86, 1543, 1544, 86, 86, 1545, 1549, 1551, + 86, 1550, 1554, 1553, 1552, 86, 86, 1555, 86, 1557, + 86, 86, 86, 86, 1556, 1559, 1560, 86, 86, 86, + 86, 86, 1563, 86, 1558, 86, 1568, 1569, 86, 86, + 1561, 86, 86, 1562, 1565, 1572, 86, 1566, 1564, 1567, - 1575, 1568, 1574, 86, 86, 86, 1580, 1569, 86, 1579, - 1573, 1581, 86, 1577, 86, 1583, 86, 86, 1576, 86, - 86, 86, 86, 1588, 1589, 1578, 1584, 1587, 1582, 86, - 86, 1590, 86, 1591, 86, 1585, 86, 86, 86, 1592, - 1593, 86, 1586, 86, 86, 1595, 86, 1594, 86, 86, - 86, 86, 1596, 86, 1601, 86, 1597, 1600, 86, 1603, - 1598, 86, 1607, 1599, 86, 1609, 1604, 1608, 86, 1602, - 1610, 86, 1605, 86, 1606, 86, 1612, 86, 86, 86, - 86, 86, 86, 1620, 1611, 1616, 86, 1615, 86, 86, - 86, 1621, 1613, 1623, 86, 86, 1614, 86, 1617, 86, + 86, 86, 86, 1573, 86, 86, 1570, 86, 1571, 86, + 1575, 1574, 1579, 86, 86, 1576, 1580, 1577, 1581, 86, + 86, 1584, 86, 1578, 86, 1587, 86, 1588, 1583, 1589, + 1590, 86, 1582, 1586, 86, 86, 86, 1585, 1592, 86, + 1593, 86, 86, 86, 1597, 1591, 1598, 1599, 1596, 86, + 86, 165, 86, 86, 86, 1600, 86, 1594, 86, 1601, + 1602, 86, 86, 1595, 86, 1604, 1603, 1605, 86, 86, + 86, 86, 1610, 86, 86, 86, 1606, 1609, 86, 1613, + 86, 1616, 1607, 1612, 1608, 1618, 1617, 86, 86, 86, + 1619, 86, 1614, 1611, 86, 1621, 86, 86, 1624, 1615, - 1619, 1618, 1626, 1625, 86, 86, 86, 86, 86, 1624, - 86, 86, 86, 1627, 1622, 1635, 1632, 86, 1634, 86, - 86, 1631, 86, 1628, 1629, 1630, 1633, 1639, 86, 1636, - 1640, 86, 1638, 86, 86, 1643, 86, 1642, 1637, 1641, - 86, 86, 86, 1646, 86, 1644, 86, 1647, 86, 86, - 86, 1650, 1656, 1645, 1654, 86, 86, 1651, 86, 86, - 1648, 1655, 1649, 1658, 86, 1653, 86, 86, 1652, 1659, - 1660, 1661, 86, 86, 1657, 86, 86, 1666, 1667, 86, - 86, 86, 86, 86, 1664, 86, 1671, 1670, 1672, 86, - 86, 1663, 1662, 1675, 86, 86, 1665, 86, 1668, 1674, + 86, 86, 86, 86, 1629, 1625, 86, 86, 1620, 86, + 86, 1630, 1632, 86, 86, 1622, 1623, 1635, 86, 1634, + 1626, 1628, 1627, 86, 86, 86, 86, 86, 1633, 86, + 1643, 86, 86, 1631, 86, 1641, 86, 86, 86, 1644, + 86, 1648, 86, 1636, 1637, 1638, 1639, 1642, 1640, 86, + 1645, 1652, 1647, 1649, 86, 86, 1646, 86, 1653, 86, + 1650, 1651, 86, 86, 1655, 86, 86, 86, 1656, 86, + 86, 1659, 1654, 1663, 86, 1664, 1665, 86, 1660, 86, + 86, 1657, 86, 1658, 1668, 1662, 86, 1661, 86, 86, + 1669, 86, 1666, 1667, 86, 1670, 86, 86, 1675, 1676, - 86, 86, 1669, 1676, 86, 86, 86, 86, 1679, 1673, - 86, 1677, 86, 1678, 86, 1681, 86, 1682, 86, 86, - 1688, 1680, 1683, 1686, 86, 86, 1687, 86, 86, 86, - 86, 1684, 86, 1685, 1689, 86, 1694, 86, 86, 86, - 86, 1700, 1690, 1691, 1695, 1697, 1699, 86, 86, 1693, - 1696, 86, 1692, 1698, 86, 1702, 86, 86, 86, 1701, - 1705, 170, 1704, 1707, 1708, 86, 86, 86, 86, 86, - 1703, 86, 86, 1716, 86, 86, 1706, 1709, 86, 1717, - 86, 1711, 86, 1714, 1710, 1720, 86, 1712, 1713, 1721, - 86, 86, 86, 1724, 86, 1718, 1715, 1722, 1719, 1725, + 86, 86, 163, 1673, 86, 86, 86, 1672, 1671, 86, + 1679, 86, 1680, 1681, 86, 1677, 1674, 1683, 86, 86, + 86, 86, 1678, 1684, 1685, 86, 1682, 86, 86, 1689, + 1686, 1688, 86, 1691, 86, 86, 1690, 1687, 86, 86, + 86, 86, 1697, 86, 1695, 86, 86, 86, 86, 1692, + 86, 1703, 1698, 86, 1696, 86, 1693, 1694, 86, 86, + 86, 1700, 1709, 1699, 1706, 1708, 86, 1704, 1702, 86, + 86, 1711, 1701, 1705, 86, 1707, 86, 86, 86, 86, + 86, 1714, 1717, 86, 1716, 86, 170, 1713, 86, 1710, + 1719, 86, 86, 1718, 86, 86, 1712, 1715, 86, 1727, - 1726, 1728, 1723, 86, 1730, 86, 86, 86, 86, 86, - 1727, 86, 86, 86, 1735, 1732, 1733, 1729, 86, 1736, - 86, 86, 86, 86, 86, 1741, 1740, 1731, 86, 86, - 86, 86, 1748, 170, 1737, 86, 1734, 1739, 86, 1738, - 1749, 1743, 86, 86, 86, 1745, 1742, 1750, 1746, 86, - 1744, 1757, 1752, 1758, 1753, 86, 1754, 86, 1755, 86, - 1747, 1756, 86, 1751, 86, 86, 1760, 86, 1761, 1759, - 1762, 86, 86, 86, 86, 86, 86, 1763, 86, 1769, - 1770, 1768, 86, 1772, 1764, 86, 86, 1771, 86, 86, - 86, 1765, 86, 1766, 86, 1767, 86, 1774, 1775, 86, + 86, 86, 1720, 86, 86, 1722, 1721, 86, 1725, 1728, + 86, 1723, 1724, 1731, 86, 1733, 1732, 86, 86, 1742, + 1726, 1729, 86, 1730, 1735, 86, 1737, 1739, 86, 86, + 1736, 86, 86, 86, 1741, 86, 1744, 1734, 1738, 86, + 86, 1746, 1740, 86, 1747, 1743, 86, 86, 86, 86, + 86, 1752, 1751, 1745, 86, 86, 86, 86, 1759, 86, + 1748, 86, 1760, 1750, 86, 1749, 86, 1754, 86, 1761, + 1763, 1756, 1753, 86, 1757, 86, 1755, 86, 1764, 1796, + 1766, 1767, 86, 1768, 1765, 1762, 1758, 1769, 1773, 86, + 86, 86, 1771, 86, 86, 1770, 86, 1772, 86, 86, - 86, 1776, 86, 86, 86, 86, 86, 86, 1777, 86, - 86, 1773, 1786, 1785, 1778, 86, 1780, 1781, 1782, 86, - 1779, 86, 1791, 1783, 86, 86, 1787, 1788, 86, 86, - 86, 1784, 1790, 1789, 86, 1797, 86, 86, 86, 86, - 86, 1793, 86, 1799, 1792, 86, 1801, 86, 1795, 1794, - 86, 1796, 1800, 86, 1802, 86, 1803, 1798, 86, 86, - 86, 86, 1806, 86, 86, 1808, 86, 1815, 1805, 1809, - 1807, 1804, 1810, 1816, 86, 1811, 1812, 1817, 86, 86, - 86, 1813, 86, 1820, 1819, 1821, 86, 86, 1814, 86, - 86, 1818, 86, 86, 1824, 1822, 86, 1825, 86, 86, + 86, 86, 86, 1774, 86, 1780, 86, 1779, 1781, 86, + 86, 86, 1775, 1783, 86, 1782, 86, 86, 1776, 86, + 1777, 1785, 1778, 1786, 86, 86, 86, 1788, 86, 1784, + 1787, 86, 86, 86, 86, 86, 86, 1789, 1797, 86, + 86, 86, 1791, 86, 86, 1792, 1790, 1793, 86, 1802, + 1794, 1799, 1800, 86, 1798, 86, 1801, 86, 86, 1795, + 1804, 1803, 1808, 86, 86, 86, 86, 1806, 1805, 86, + 1810, 86, 1812, 1813, 86, 86, 86, 86, 1807, 86, + 1814, 1811, 86, 86, 1809, 1817, 1819, 86, 86, 1827, + 86, 1820, 1818, 1816, 1821, 1828, 86, 86, 1815, 1822, - 86, 86, 1828, 1834, 86, 86, 1823, 1833, 1830, 1826, - 1832, 1831, 1827, 86, 86, 86, 1840, 1829, 1836, 86, - 1835, 1841, 86, 86, 86, 86, 86, 86, 1842, 1838, - 86, 1846, 1837, 86, 86, 1839, 1843, 86, 1850, 1849, - 86, 86, 1848, 1847, 1845, 86, 1854, 86, 86, 86, - 1844, 86, 1851, 86, 1852, 1858, 86, 1853, 1855, 86, - 1859, 86, 86, 1860, 1863, 86, 1857, 1869, 1856, 1864, - 1868, 1861, 1867, 1862, 86, 86, 1866, 86, 86, 1870, - 1865, 86, 86, 1874, 86, 86, 1878, 1871, 86, 86, - 86, 86, 86, 1876, 1872, 86, 1873, 1875, 86, 1877, + 1826, 86, 1823, 86, 86, 86, 86, 1824, 1831, 1832, + 86, 86, 86, 1825, 86, 1829, 1835, 1833, 86, 1830, + 86, 86, 1844, 1836, 86, 1834, 86, 86, 86, 1839, + 1838, 1837, 86, 1841, 86, 1843, 1842, 1845, 86, 86, + 1840, 86, 86, 1851, 86, 1847, 86, 1846, 1852, 86, + 86, 1853, 1848, 1849, 1854, 86, 1857, 1850, 86, 86, + 86, 86, 86, 1861, 1860, 1865, 86, 86, 1856, 1855, + 1859, 86, 86, 86, 1858, 1863, 1869, 1862, 1864, 86, + 86, 1870, 86, 86, 161, 1866, 86, 1871, 1874, 1875, + 1868, 86, 1867, 1878, 1872, 86, 1877, 86, 86, 86, - 86, 86, 86, 1879, 86, 86, 1882, 1880, 86, 1883, - 1881, 1888, 86, 86, 1884, 1885, 1890, 1891, 1886, 1887, - 86, 1892, 86, 86, 1893, 86, 86, 1897, 86, 86, - 1899, 1895, 86, 1889, 86, 86, 86, 1903, 86, 86, - 1894, 86, 1898, 86, 86, 1896, 1906, 1905, 86, 1907, - 1901, 86, 86, 1902, 1900, 170, 1908, 1909, 86, 1904, - 1913, 86, 86, 86, 86, 1917, 86, 1911, 86, 86, - 86, 86, 86, 1912, 86, 1910, 1915, 1919, 86, 1924, - 1920, 1914, 1916, 1918, 1921, 86, 86, 86, 1928, 86, - 1922, 168, 86, 1927, 1923, 1929, 1926, 86, 1925, 1930, + 1881, 86, 1873, 1879, 1876, 1880, 86, 1882, 86, 86, + 1885, 86, 86, 1889, 86, 1887, 86, 86, 86, 86, + 86, 1888, 1890, 1884, 1886, 86, 86, 86, 1883, 1894, + 86, 86, 1901, 1893, 1899, 86, 1891, 1892, 86, 1895, + 1896, 1902, 86, 86, 1897, 1898, 86, 86, 1904, 86, + 86, 1908, 86, 86, 1910, 1903, 1900, 86, 86, 86, + 86, 1914, 86, 1905, 1906, 86, 1909, 86, 86, 1907, + 86, 1916, 86, 1917, 1912, 1918, 86, 1913, 86, 1911, + 86, 1919, 170, 86, 86, 1915, 1923, 1920, 86, 1922, + 1926, 86, 86, 86, 1924, 1921, 1930, 86, 86, 1925, - 86, 86, 1931, 1933, 1934, 86, 86, 86, 86, 86, - 1932, 86, 86, 1936, 86, 1937, 86, 86, 1935, 86, - 86, 86, 1942, 86, 1943, 86, 86, 1938, 86, 1944, - 1939, 1947, 1940, 1945, 1941, 86, 86, 1948, 1946, 86, - 1951, 1953, 1955, 86, 86, 1950, 1956, 1952, 86, 86, - 1949, 86, 86, 86, 1954, 86, 86, 1962, 86, 1965, - 1966, 86, 1967, 86, 86, 1957, 86, 1958, 1959, 1960, - 1963, 1961, 1964, 1969, 86, 86, 1970, 86, 1973, 86, - 1975, 86, 86, 1977, 1968, 1974, 86, 1971, 86, 86, - 1979, 1976, 86, 86, 86, 86, 86, 1981, 1972, 86, + 86, 86, 86, 86, 1928, 1932, 86, 1927, 86, 86, + 1937, 86, 1929, 1933, 1931, 1934, 86, 1940, 1941, 86, + 1938, 1935, 86, 1943, 86, 1942, 1936, 1939, 86, 86, + 1946, 1947, 86, 1944, 86, 86, 86, 1949, 1945, 86, + 86, 86, 1950, 86, 86, 86, 1948, 86, 86, 86, + 1955, 86, 1956, 86, 86, 86, 1960, 1957, 86, 86, + 1951, 1953, 1954, 1952, 1959, 1958, 86, 1961, 86, 86, + 1967, 1964, 86, 1966, 1963, 1968, 86, 1969, 1965, 86, + 1962, 86, 86, 86, 86, 86, 1975, 86, 1978, 86, + 1970, 1971, 1979, 86, 1980, 86, 86, 1973, 1972, 1976, - 1978, 1982, 86, 86, 1984, 1985, 86, 86, 86, 1989, - 1986, 86, 1988, 1983, 1991, 86, 1990, 1980, 86, 86, - 86, 86, 86, 166, 1987, 1999, 86, 1992, 1993, 1994, - 2001, 86, 86, 86, 1995, 2002, 86, 1997, 1996, 86, - 2003, 1998, 2000, 86, 2006, 2005, 2008, 2004, 86, 86, - 86, 86, 86, 86, 2007, 2012, 86, 2009, 86, 2014, - 86, 86, 2017, 2018, 86, 86, 2020, 86, 86, 2010, - 86, 2011, 86, 2015, 86, 2026, 86, 2013, 2025, 2022, - 86, 2023, 2016, 86, 86, 2019, 86, 86, 86, 86, - 2032, 86, 86, 2021, 2029, 2024, 2036, 2030, 2028, 86, + 86, 1977, 1974, 1982, 86, 86, 1983, 1986, 86, 1981, + 86, 86, 1988, 86, 1987, 86, 1989, 1984, 86, 1990, + 1992, 1985, 1995, 86, 86, 86, 86, 1994, 86, 1991, + 86, 1998, 86, 86, 86, 1997, 86, 86, 2002, 86, + 1993, 2001, 86, 86, 2003, 2004, 86, 86, 1996, 1999, + 86, 86, 2012, 86, 2000, 2005, 2006, 2007, 86, 2014, + 2010, 86, 2008, 86, 2015, 86, 2009, 2011, 2017, 86, + 2013, 2018, 86, 2021, 2019, 2016, 86, 86, 86, 86, + 2025, 86, 86, 86, 2027, 2022, 86, 2020, 86, 86, + 2030, 2031, 86, 86, 2033, 86, 86, 2023, 86, 2024, - 86, 2027, 86, 86, 2035, 2039, 86, 86, 2034, 2040, - 2038, 86, 2031, 2042, 2043, 86, 86, 2033, 86, 86, - 2037, 2044, 86, 86, 86, 2041, 86, 2045, 86, 2049, - 86, 86, 2052, 2053, 2054, 2048, 86, 86, 86, 86, - 86, 86, 2046, 2047, 86, 2057, 2050, 86, 2062, 86, - 86, 2056, 2061, 86, 86, 86, 2051, 2055, 2059, 2066, - 86, 2058, 86, 2067, 86, 86, 2060, 86, 2064, 2063, - 2068, 2070, 86, 2065, 2069, 86, 2074, 86, 2072, 2071, - 86, 2075, 86, 2073, 86, 86, 86, 2081, 86, 2078, - 86, 2084, 86, 86, 2076, 2083, 86, 2085, 86, 86, + 86, 86, 2039, 86, 86, 2038, 2028, 2035, 2026, 2036, + 2029, 86, 86, 2032, 86, 86, 86, 86, 2045, 86, + 86, 2034, 2037, 2042, 2043, 2040, 86, 2041, 2049, 86, + 86, 2048, 2052, 86, 86, 2053, 2047, 2051, 86, 86, + 2044, 2055, 2056, 86, 86, 2046, 86, 86, 86, 2050, + 86, 2057, 86, 2058, 86, 86, 86, 2062, 2054, 86, + 2065, 2066, 86, 86, 2061, 2067, 86, 86, 2059, 2060, + 2070, 86, 86, 2063, 86, 86, 86, 2069, 2075, 86, + 2074, 86, 2064, 2068, 86, 86, 2071, 86, 2080, 2079, + 86, 86, 2072, 86, 2084, 2076, 2073, 2081, 86, 2077, - 86, 2077, 2086, 2082, 86, 2079, 2080, 86, 2087, 2091, - 86, 2088, 2092, 86, 2093, 2095, 2089, 2096, 86, 2094, - 86, 86, 86, 86, 2090, 2100, 86, 2098, 86, 86, - 2099, 86, 2102, 2097, 86, 86, 2105, 2107, 2101, 170, - 86, 2103, 86, 86, 2108, 86, 86, 86, 86, 86, - 2113, 86, 2109, 2112, 86, 2114, 2120, 2106, 2110, 2104, - 2115, 86, 2116, 86, 2111, 2118, 86, 86, 86, 2117, - 86, 86, 2119, 2121, 86, 2123, 86, 2122, 86, 2124, - 86, 2126, 86, 86, 2130, 86, 2125, 86, 2129, 86, - 2127, 86, 86, 86, 2128, 86, 2131, 2132, 2133, 86, + 2078, 86, 2082, 2083, 86, 2087, 86, 86, 86, 2085, + 86, 86, 86, 2094, 2086, 2091, 2097, 86, 86, 86, + 86, 2089, 2088, 86, 2098, 2096, 86, 2090, 86, 86, + 2099, 2092, 2093, 2095, 86, 2104, 86, 2100, 2105, 86, + 2101, 2106, 2108, 2109, 86, 2102, 2107, 86, 86, 86, + 86, 86, 2113, 86, 2103, 2111, 86, 86, 86, 86, + 2115, 2118, 2120, 2112, 86, 2114, 86, 86, 86, 2116, + 2110, 86, 170, 86, 86, 86, 86, 2123, 86, 2127, + 86, 2128, 86, 2129, 2117, 2121, 2119, 2124, 2125, 2130, + 86, 2122, 2126, 2131, 86, 2133, 86, 86, 86, 86, - 2135, 86, 2134, 86, 2137, 86, 2142, 86, 86, 2136, - 2139, 2140, 86, 2141, 86, 86, 86, 86, 2147, 86, - 86, 2138, 86, 2143, 2144, 86, 2152, 86, 86, 2148, - 2146, 2150, 2145, 86, 86, 86, 2153, 2149, 86, 2156, - 2151, 2158, 86, 86, 86, 2154, 2159, 86, 2157, 2155, - 86, 2164, 86, 86, 2160, 86, 2166, 86, 165, 86, - 2161, 2167, 2162, 86, 2163, 2168, 86, 2170, 86, 2165, - 86, 2169, 86, 2171, 86, 2174, 2172, 2175, 86, 86, - 2173, 86, 86, 2178, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 2179, 86, 86, 2192, 86, 2181, 2177, + 2132, 86, 2134, 2135, 86, 2136, 2137, 86, 86, 2138, + 2139, 86, 2141, 86, 86, 86, 86, 2145, 86, 86, + 2140, 2144, 86, 86, 2146, 2142, 2143, 2147, 2148, 86, + 2150, 86, 2149, 86, 86, 86, 86, 86, 86, 2151, + 2155, 2157, 2152, 2156, 86, 86, 86, 86, 86, 86, + 2162, 86, 2153, 2159, 2154, 2158, 86, 86, 2167, 86, + 2161, 2163, 86, 2160, 86, 2165, 2164, 86, 2168, 86, + 86, 2166, 2171, 2174, 2169, 2173, 86, 86, 86, 86, + 86, 2179, 2172, 86, 86, 2170, 2182, 86, 86, 2181, + 2183, 86, 86, 2175, 2176, 2177, 2180, 2178, 2185, 86, - 2176, 2182, 2183, 2184, 86, 2186, 2180, 2191, 86, 86, - 2187, 86, 2189, 86, 2185, 86, 2195, 2190, 86, 86, - 2196, 86, 163, 2188, 2198, 86, 2193, 2199, 86, 2194, - 86, 2197, 86, 2201, 86, 86, 2200, 2202, 86, 2204, - 2207, 2203, 86, 2205, 86, 86, 2209, 2206, 2211, 86, - 86, 86, 86, 86, 2214, 86, 2213, 86, 2215, 2210, - 2216, 2208, 86, 2219, 86, 86, 86, 2223, 86, 86, - 2220, 86, 2224, 86, 86, 2217, 2212, 2221, 2222, 2225, - 2228, 86, 2218, 86, 2229, 86, 86, 2226, 2227, 2232, - 86, 86, 2234, 86, 86, 86, 2233, 2238, 86, 161, + 2184, 86, 2186, 86, 86, 2189, 86, 86, 86, 86, + 2188, 86, 86, 2190, 86, 2193, 86, 86, 2194, 86, + 86, 86, 86, 86, 86, 86, 2187, 86, 2192, 2191, + 2202, 2196, 2197, 2195, 2199, 86, 2198, 2204, 2201, 2206, + 2207, 86, 2200, 2203, 86, 86, 86, 86, 2205, 2210, + 2211, 86, 86, 2208, 2214, 86, 2213, 86, 86, 86, + 86, 86, 2216, 86, 2209, 2217, 86, 2212, 2218, 86, + 2220, 2222, 86, 2215, 2224, 2221, 86, 86, 2219, 2226, + 86, 86, 86, 86, 2229, 2223, 2228, 86, 2230, 86, + 2225, 86, 2231, 2234, 86, 86, 86, 86, 86, 86, - 2230, 86, 2236, 86, 2240, 86, 2231, 86, 2241, 86, - 2237, 2235, 86, 2239, 2242, 86, 86, 2243, 86, 86, - 2247, 86, 86, 86, 2249, 2245, 86, 2244, 2246, 2250, - 86, 2251, 2252, 2253, 2254, 86, 2248, 86, 86, 2257, - 2255, 86, 2256, 2260, 86, 86, 86, 86, 86, 86, - 2259, 86, 86, 86, 86, 86, 86, 86, 2258, 2269, - 2266, 2264, 2270, 2261, 2262, 2263, 2265, 2267, 86, 86, - 86, 86, 2268, 86, 86, 2272, 2274, 2271, 2278, 2275, - 2280, 86, 86, 2279, 86, 86, 2276, 170, 2273, 2282, - 86, 2277, 86, 2281, 86, 86, 2284, 2288, 2286, 2285, + 2235, 86, 86, 2227, 86, 2240, 2237, 2232, 2238, 2236, + 86, 2233, 2310, 2239, 86, 2242, 86, 2241, 2243, 86, + 86, 2244, 2246, 2247, 86, 2245, 86, 86, 86, 86, + 2249, 2248, 2251, 86, 2250, 2253, 86, 86, 2255, 2254, + 2252, 86, 2256, 86, 86, 86, 86, 86, 2262, 2258, + 2264, 2259, 2257, 86, 2260, 2265, 86, 2261, 86, 86, + 86, 86, 86, 86, 86, 2266, 2270, 2267, 2263, 2271, + 86, 2268, 2269, 2275, 86, 2272, 86, 86, 86, 2274, + 86, 86, 86, 2273, 86, 86, 86, 86, 86, 86, + 2284, 86, 2279, 2281, 2276, 2277, 2278, 2280, 2282, 86, - 2290, 2283, 2289, 86, 2291, 86, 86, 86, 2292, 2287, - 86, 86, 2295, 86, 86, 2293, 86, 86, 2296, 2300, - 86, 86, 2301, 2299, 86, 86, 3353, 2304, 2302, 86, - 2305, 2294, 2297, 86, 86, 2306, 2307, 86, 86, 86, - 2309, 86, 2303, 2298, 2308, 2310, 86, 86, 86, 2311, - 86, 2312, 86, 86, 86, 2315, 86, 86, 2313, 2318, - 86, 86, 86, 2324, 86, 86, 2322, 86, 2317, 2325, - 86, 86, 86, 2314, 2319, 2316, 2320, 2321, 86, 86, - 86, 86, 2326, 2327, 2323, 2333, 2332, 86, 86, 2329, - 86, 2330, 2335, 86, 86, 86, 2328, 86, 2336, 2331, + 86, 86, 2301, 86, 2283, 2285, 2291, 2287, 2286, 2289, + 2290, 86, 86, 2293, 2295, 86, 86, 2297, 86, 86, + 2288, 2294, 86, 86, 86, 2296, 2299, 2303, 2300, 2292, + 170, 2305, 3387, 86, 2307, 2308, 2306, 86, 2298, 86, + 86, 86, 2309, 2302, 86, 2312, 86, 86, 2313, 86, + 2317, 86, 2304, 86, 2318, 86, 86, 2321, 2316, 86, + 86, 86, 2314, 86, 2311, 2322, 2325, 2319, 86, 2323, + 2324, 86, 2326, 2315, 2320, 86, 86, 86, 86, 2327, + 86, 2329, 86, 86, 2331, 86, 86, 2332, 86, 86, + 2335, 86, 86, 86, 2341, 86, 2328, 2339, 86, 86, - 86, 86, 86, 86, 86, 2334, 86, 2337, 86, 86, - 86, 86, 2349, 2338, 2343, 2348, 2351, 2346, 2339, 2341, - 2347, 2340, 2342, 2345, 2344, 2350, 86, 86, 86, 86, - 2352, 86, 86, 2356, 2357, 86, 86, 86, 2358, 2359, - 86, 2353, 86, 2354, 2355, 86, 2362, 86, 2365, 86, - 2366, 86, 2360, 86, 86, 2361, 2363, 86, 2367, 2364, - 86, 86, 2368, 2372, 86, 2373, 86, 86, 2375, 86, - 86, 2377, 86, 2371, 2369, 86, 86, 2380, 86, 86, - 2370, 2379, 2381, 86, 86, 86, 2374, 86, 2376, 86, - 2378, 86, 86, 2382, 2383, 3353, 2386, 86, 2384, 2387, + 2330, 2334, 2342, 86, 2337, 86, 2333, 2336, 2344, 86, + 86, 2338, 86, 86, 2343, 2340, 86, 2349, 86, 2352, + 86, 86, 2347, 86, 86, 86, 86, 2346, 86, 2350, + 86, 2345, 2348, 2353, 86, 86, 2351, 86, 86, 86, + 2354, 86, 2355, 2362, 86, 86, 2366, 2356, 2369, 2358, + 2357, 2360, 2364, 86, 2363, 2359, 2361, 2367, 86, 2365, + 86, 86, 86, 2434, 86, 2368, 86, 2373, 2374, 86, + 86, 86, 2375, 86, 2370, 86, 2371, 2372, 2376, 86, + 86, 2379, 2380, 2382, 86, 2381, 2377, 86, 2378, 2383, + 86, 86, 2384, 86, 86, 86, 2385, 2389, 86, 2390, - 86, 2389, 86, 2391, 86, 86, 2385, 2392, 2388, 86, - 2390, 86, 2393, 2395, 86, 86, 86, 86, 2398, 2401, - 86, 86, 86, 86, 2396, 86, 86, 2394, 2400, 2405, - 2397, 86, 2399, 2406, 86, 86, 86, 86, 2404, 86, - 2408, 2402, 2411, 86, 86, 2403, 2412, 86, 86, 86, - 2407, 2409, 2410, 2414, 2413, 86, 2418, 86, 86, 2420, - 86, 86, 2415, 2421, 2424, 86, 2416, 2419, 86, 86, - 86, 86, 86, 2425, 2426, 2417, 2427, 86, 2422, 86, - 2423, 2429, 2431, 86, 86, 86, 2436, 86, 2433, 2434, - 2428, 2438, 86, 2430, 86, 86, 86, 86, 86, 2439, + 86, 86, 2392, 86, 86, 2394, 86, 2388, 86, 3387, + 86, 2397, 86, 2386, 2387, 2396, 2398, 86, 86, 86, + 2391, 86, 2393, 2395, 86, 86, 2404, 86, 2400, 86, + 2403, 86, 2399, 2406, 86, 2401, 86, 86, 86, 2410, + 2409, 86, 2408, 2402, 2412, 86, 86, 86, 2405, 2407, + 86, 86, 2415, 86, 2411, 2418, 86, 86, 86, 86, + 2413, 2414, 2416, 86, 2423, 86, 86, 2422, 86, 86, + 2417, 2425, 86, 2419, 2421, 2428, 86, 2424, 86, 86, + 2420, 86, 86, 2426, 2427, 2430, 86, 2435, 86, 86, + 2441, 2437, 2429, 2431, 86, 86, 86, 2436, 2438, 2432, - 2435, 2440, 86, 86, 86, 2432, 2443, 86, 2437, 86, - 86, 2442, 86, 2444, 3353, 2449, 2445, 2450, 2446, 2447, - 2441, 86, 2452, 86, 86, 86, 2448, 2455, 2451, 86, - 2454, 86, 2456, 86, 2453, 86, 170, 86, 86, 86, - 2457, 2458, 2463, 86, 86, 86, 86, 86, 2465, 86, - 86, 86, 2470, 2461, 2462, 2459, 86, 2460, 2466, 2464, - 86, 2467, 2468, 2469, 86, 2471, 2474, 86, 2473, 2478, - 2472, 86, 2475, 2476, 86, 86, 2479, 2480, 2477, 86, - 2482, 86, 86, 86, 86, 86, 2484, 86, 2481, 86, - 86, 86, 2488, 86, 2489, 86, 86, 3353, 2483, 2485, + 2433, 86, 86, 86, 86, 86, 2442, 2443, 2444, 86, + 2448, 86, 86, 2439, 86, 2440, 86, 2446, 2453, 2450, + 86, 2451, 2455, 86, 86, 86, 2445, 2452, 86, 86, + 2447, 86, 86, 86, 2456, 2460, 2457, 2449, 2459, 86, + 86, 2454, 2461, 86, 86, 86, 86, 2539, 2458, 2462, + 2466, 2467, 2463, 2464, 86, 86, 86, 86, 2468, 2465, + 86, 2471, 2472, 86, 2470, 86, 2469, 86, 86, 86, + 2473, 170, 2475, 86, 2476, 86, 2477, 86, 2474, 2482, + 86, 86, 86, 2480, 86, 2478, 86, 2479, 86, 86, + 2484, 2481, 2483, 86, 2485, 86, 2613, 86, 2489, 86, - 86, 2491, 86, 2486, 2496, 86, 2492, 2490, 2493, 2487, - 2494, 86, 86, 86, 86, 86, 86, 2495, 86, 2499, - 2500, 86, 2497, 2502, 86, 86, 86, 86, 86, 2501, - 86, 2506, 2509, 86, 2498, 2508, 86, 86, 86, 2510, - 2505, 86, 86, 86, 2503, 2504, 86, 2514, 2507, 86, - 86, 2519, 86, 86, 2511, 2518, 2512, 86, 2516, 86, - 2513, 2520, 86, 86, 2515, 2517, 86, 2528, 2521, 86, - 2524, 2522, 86, 2523, 2529, 2525, 86, 2527, 2526, 86, - 86, 2531, 86, 86, 2533, 86, 86, 86, 86, 86, - 86, 2530, 2532, 2537, 86, 86, 2541, 86, 86, 2539, + 2486, 2487, 2490, 2493, 86, 2488, 86, 2494, 2491, 2495, + 86, 2492, 86, 86, 2498, 2496, 2499, 86, 2497, 86, + 86, 86, 86, 2501, 86, 86, 2500, 86, 2503, 86, + 86, 2507, 2508, 2502, 86, 2505, 86, 2504, 86, 2510, + 86, 86, 86, 86, 2511, 2512, 2513, 86, 2506, 86, + 2509, 86, 2515, 86, 2514, 2519, 86, 2518, 86, 86, + 2516, 2517, 86, 86, 2521, 86, 86, 86, 86, 2528, + 2525, 2520, 86, 2527, 86, 86, 86, 86, 2529, 2524, + 86, 86, 2522, 2523, 86, 2533, 86, 2526, 86, 86, + 86, 2538, 2530, 2537, 86, 2531, 2532, 86, 2535, 86, - 2540, 2535, 2542, 86, 2534, 2536, 2543, 86, 2544, 86, - 86, 86, 86, 86, 2545, 2547, 2538, 86, 2552, 86, - 2549, 86, 2554, 86, 86, 2550, 86, 86, 86, 86, - 2548, 2546, 2553, 2551, 2557, 86, 86, 86, 2561, 2558, - 86, 2556, 2555, 2562, 86, 2563, 2559, 2560, 86, 86, - 86, 86, 86, 2567, 86, 2566, 86, 86, 2565, 86, - 86, 86, 2571, 2634, 2570, 3353, 2564, 86, 2568, 86, - 2569, 86, 2574, 2575, 86, 2576, 86, 2577, 86, 2572, - 2573, 2578, 86, 2579, 86, 86, 2582, 2580, 86, 2581, - 86, 2583, 86, 86, 86, 2588, 86, 86, 2590, 86, + 2536, 2540, 2534, 2541, 2542, 86, 2543, 86, 86, 2546, + 2544, 2548, 86, 86, 86, 2545, 2547, 86, 2550, 86, + 2552, 86, 86, 2551, 86, 2549, 86, 86, 86, 86, + 86, 86, 2556, 2562, 2558, 2559, 2560, 86, 2554, 86, + 2553, 86, 2555, 2561, 86, 86, 2563, 2564, 86, 86, + 86, 86, 86, 2566, 2557, 2568, 86, 86, 2571, 86, + 2572, 2573, 2569, 2565, 86, 2576, 86, 86, 2567, 2570, + 86, 86, 3387, 2577, 2574, 86, 86, 2580, 86, 2575, + 2581, 86, 86, 2582, 86, 86, 86, 86, 2586, 2585, + 2578, 86, 86, 2579, 2584, 86, 86, 86, 86, 86, - 2584, 2591, 86, 86, 2585, 86, 86, 86, 86, 86, - 2587, 86, 86, 2586, 2592, 2594, 2589, 2593, 2595, 86, - 2600, 86, 86, 86, 2597, 86, 86, 2596, 170, 2598, - 86, 2599, 2601, 86, 2608, 86, 86, 86, 2602, 2604, - 2607, 86, 2603, 86, 2606, 2609, 86, 86, 86, 2605, - 2610, 2615, 2611, 86, 3353, 86, 2619, 86, 2617, 2612, - 2618, 2616, 2620, 86, 86, 2613, 86, 2621, 86, 2614, - 86, 2622, 86, 2623, 86, 86, 86, 86, 86, 2625, - 86, 86, 2624, 86, 86, 86, 2638, 86, 86, 2632, - 2627, 2639, 86, 2626, 86, 2629, 2628, 86, 86, 86, + 2583, 2587, 2590, 2593, 2589, 2588, 2594, 86, 2595, 86, + 2596, 86, 2597, 86, 86, 2591, 2592, 2599, 86, 86, + 2601, 86, 2602, 2600, 86, 86, 2598, 86, 86, 2607, + 86, 86, 2609, 86, 2610, 86, 2603, 2604, 86, 86, + 86, 86, 86, 86, 2606, 86, 86, 2605, 2616, 2611, + 2608, 2612, 2614, 2619, 86, 2620, 86, 86, 86, 86, + 86, 2615, 2617, 86, 86, 2618, 2627, 170, 86, 2629, + 86, 2623, 86, 86, 2625, 86, 86, 2622, 86, 2628, + 86, 2630, 2621, 2624, 86, 2626, 86, 2636, 2631, 3387, + 2632, 86, 2634, 86, 2633, 86, 2638, 86, 2639, 2647, - 2630, 2631, 86, 2633, 2635, 2636, 2637, 2642, 2640, 2643, - 86, 2644, 2645, 86, 86, 86, 86, 2646, 86, 2641, - 86, 86, 2648, 86, 2654, 86, 2655, 86, 86, 86, - 86, 2649, 2647, 86, 2659, 86, 2650, 2652, 2651, 2658, - 2660, 86, 2653, 2661, 86, 2663, 86, 2657, 2656, 86, - 86, 86, 86, 86, 86, 86, 2666, 2670, 86, 2669, - 2671, 86, 2662, 86, 2665, 2664, 86, 86, 2672, 2673, - 86, 86, 2667, 2668, 86, 86, 2675, 2674, 86, 86, - 2679, 86, 2676, 2677, 86, 2684, 86, 2683, 86, 86, - 2687, 86, 86, 86, 2678, 86, 2690, 86, 2680, 2682, + 2637, 2635, 2640, 86, 2641, 86, 86, 2642, 86, 2643, + 86, 2644, 86, 2645, 86, 86, 86, 2649, 86, 86, + 86, 86, 86, 2646, 2655, 86, 86, 2653, 86, 2648, + 86, 2659, 86, 2650, 2660, 86, 86, 86, 2651, 2652, + 2654, 2656, 2661, 2657, 2658, 2663, 2664, 86, 86, 2666, + 86, 86, 86, 86, 2662, 2667, 86, 2665, 86, 2669, + 86, 86, 2675, 86, 2676, 86, 86, 86, 2670, 2668, + 2680, 86, 86, 86, 2671, 86, 2672, 2673, 2679, 2674, + 2681, 86, 2682, 86, 86, 2678, 2677, 86, 86, 86, + 2684, 2683, 2687, 86, 86, 86, 86, 2691, 2686, 2690, - 2681, 86, 86, 2685, 2688, 2692, 86, 2686, 2693, 86, - 2689, 86, 2691, 86, 86, 2694, 2698, 86, 86, 86, - 86, 2695, 86, 2701, 2702, 86, 2699, 2700, 2704, 86, - 86, 2696, 86, 2697, 86, 2705, 86, 86, 2707, 2703, - 86, 2706, 2710, 86, 86, 2711, 2708, 2713, 86, 86, - 86, 86, 86, 2714, 2718, 86, 2709, 2720, 86, 2712, - 2716, 2717, 2715, 86, 86, 2719, 86, 86, 2721, 2722, - 86, 86, 2724, 86, 86, 86, 86, 86, 2725, 86, - 2723, 2730, 2727, 2728, 2731, 2733, 86, 2734, 86, 2729, - 2726, 86, 2732, 2735, 170, 86, 86, 86, 2736, 2740, + 2692, 86, 2685, 86, 86, 2693, 2694, 86, 86, 2688, + 86, 86, 86, 2689, 86, 2695, 86, 2696, 86, 2700, + 3387, 86, 2698, 2697, 2704, 2705, 86, 86, 86, 2708, + 86, 2699, 2701, 86, 86, 2702, 86, 86, 2703, 86, + 2711, 86, 2706, 2713, 2709, 86, 2707, 2714, 86, 2710, + 86, 86, 2712, 86, 2715, 2719, 86, 86, 86, 86, + 2716, 86, 2722, 2723, 86, 2720, 2721, 2725, 86, 86, + 2717, 2718, 86, 86, 2726, 86, 86, 2728, 2724, 2731, + 86, 2727, 86, 2732, 86, 2729, 2734, 86, 86, 86, + 86, 86, 2739, 86, 86, 2730, 86, 2735, 2733, 2737, - 2737, 86, 86, 2742, 86, 86, 2741, 86, 2745, 86, - 2746, 86, 2744, 86, 2738, 2739, 2748, 86, 86, 2743, - 86, 2749, 2750, 86, 86, 2752, 2747, 2751, 86, 2753, - 2755, 86, 86, 86, 86, 2756, 86, 2754, 2757, 86, - 86, 2758, 2762, 86, 2763, 86, 86, 2760, 86, 2759, - 86, 2764, 2766, 86, 86, 2765, 86, 2768, 2767, 86, - 86, 2761, 86, 86, 2770, 2771, 86, 86, 2769, 86, - 86, 2776, 86, 2779, 86, 2774, 2773, 86, 2775, 86, - 2772, 2777, 86, 2780, 86, 2778, 2784, 86, 86, 86, - 86, 86, 86, 2781, 86, 2785, 2789, 86, 86, 2787, + 2738, 2736, 2741, 86, 2740, 86, 86, 86, 2744, 86, + 2742, 2743, 2745, 86, 86, 2747, 86, 2746, 86, 86, + 86, 86, 2748, 2751, 2749, 2752, 2754, 86, 86, 2750, + 2755, 86, 86, 2756, 2753, 2758, 170, 86, 86, 2759, + 2757, 86, 2760, 2763, 3387, 86, 86, 2765, 86, 86, + 2764, 86, 86, 2768, 86, 86, 2761, 2767, 2772, 2762, + 2769, 86, 2773, 2766, 2770, 2771, 86, 2774, 86, 86, + 86, 86, 2778, 86, 2775, 2776, 86, 2779, 86, 86, + 86, 2780, 86, 86, 86, 2777, 2785, 2786, 2781, 2787, + 2783, 86, 86, 86, 86, 2782, 86, 86, 86, 2791, - 86, 86, 2782, 2783, 2793, 86, 2788, 3210, 2786, 2791, - 2796, 2790, 2794, 86, 2797, 2798, 86, 86, 2792, 86, - 86, 86, 2799, 86, 2801, 2800, 2795, 86, 86, 2804, - 86, 86, 86, 2805, 86, 86, 2802, 86, 2806, 86, - 2809, 2803, 2811, 86, 86, 2807, 3353, 2808, 2812, 86, - 2813, 86, 86, 86, 86, 2810, 2814, 86, 2815, 2816, - 86, 86, 2818, 2820, 2817, 86, 2819, 86, 2821, 86, - 86, 2824, 86, 2822, 2825, 86, 2826, 86, 86, 86, - 2828, 2827, 2831, 86, 86, 2823, 86, 2832, 2833, 86, - 2829, 86, 2835, 86, 86, 86, 2839, 2836, 86, 2830, + 86, 2789, 2790, 2788, 2784, 2793, 86, 86, 86, 86, + 2792, 2794, 86, 86, 86, 2799, 86, 86, 2797, 86, + 3387, 2796, 2798, 2802, 86, 2795, 2800, 86, 86, 86, + 2801, 2807, 86, 2803, 86, 2804, 86, 86, 86, 2805, + 86, 2808, 86, 2806, 86, 2810, 86, 2809, 2812, 86, + 2816, 86, 2811, 2817, 86, 2814, 2824, 2813, 2819, 2820, + 2821, 86, 2815, 86, 86, 86, 86, 2822, 86, 2818, + 2825, 2823, 86, 2827, 86, 86, 86, 2828, 86, 86, + 2829, 86, 2832, 86, 86, 2826, 2834, 86, 2837, 2830, + 2835, 86, 86, 2831, 2836, 86, 86, 2838, 2839, 86, - 2840, 86, 86, 86, 86, 2842, 2834, 2841, 86, 2838, - 2843, 86, 2837, 86, 2848, 86, 2851, 86, 86, 2847, - 86, 2844, 2850, 86, 2845, 86, 86, 86, 2846, 2854, - 2852, 2853, 86, 86, 2857, 2856, 86, 86, 86, 86, - 2849, 86, 2860, 2864, 86, 86, 86, 86, 86, 86, - 2866, 86, 2855, 2858, 2859, 2863, 2861, 2870, 2867, 2862, - 2865, 2871, 2868, 2873, 2869, 86, 2872, 86, 2874, 86, - 2875, 2876, 86, 86, 2877, 86, 2878, 86, 2879, 86, - 2880, 2881, 86, 86, 86, 86, 86, 2882, 86, 86, - 2885, 86, 86, 2887, 2891, 86, 2892, 86, 2888, 86, + 86, 2833, 86, 2843, 86, 2841, 86, 86, 2844, 86, + 86, 2847, 2848, 86, 2842, 86, 2840, 86, 2845, 2849, + 86, 86, 86, 86, 2846, 2850, 86, 2853, 2851, 2854, + 86, 86, 2855, 2856, 86, 2852, 2857, 2858, 86, 2859, + 86, 2860, 2862, 2863, 86, 86, 2865, 86, 86, 2864, + 86, 2867, 86, 86, 2861, 2866, 2868, 86, 86, 86, + 2873, 86, 86, 86, 86, 2872, 86, 2875, 2876, 86, + 2869, 86, 2878, 2870, 86, 86, 2877, 2879, 2871, 86, + 86, 2882, 2881, 86, 86, 86, 2874, 2880, 2885, 86, + 2889, 86, 2883, 2884, 86, 86, 86, 86, 2891, 86, - 86, 86, 2893, 2883, 86, 2886, 2895, 86, 2896, 2898, - 2884, 2889, 2890, 2897, 86, 2899, 86, 86, 2894, 86, - 86, 86, 2904, 86, 86, 86, 2900, 86, 2901, 2902, - 86, 2905, 86, 2906, 86, 86, 86, 2910, 2914, 2903, - 86, 2908, 2911, 86, 2907, 2913, 86, 2909, 2912, 2916, - 86, 2915, 2917, 86, 2918, 86, 86, 2921, 86, 86, - 86, 86, 86, 86, 2927, 86, 86, 86, 2922, 2944, - 86, 2925, 2923, 86, 2920, 86, 86, 2928, 2930, 86, - 2919, 2931, 2961, 2926, 86, 2932, 2924, 2929, 2933, 86, - 86, 86, 2935, 86, 2934, 2936, 2937, 86, 2938, 86, + 86, 86, 2886, 2888, 2918, 2887, 2892, 2895, 2890, 2896, + 2893, 86, 2898, 86, 2897, 86, 2894, 2899, 86, 2900, + 2901, 86, 86, 2902, 86, 2903, 86, 2904, 86, 2905, + 86, 86, 86, 2908, 86, 86, 2907, 2909, 86, 2910, + 2912, 86, 86, 2916, 86, 86, 2906, 2913, 2917, 86, + 86, 2911, 2920, 86, 2922, 86, 86, 2921, 86, 86, + 86, 2914, 2915, 2919, 2923, 2924, 86, 2925, 86, 2926, + 2929, 86, 86, 86, 2928, 86, 2930, 2927, 86, 2935, + 86, 86, 2931, 86, 2936, 86, 86, 86, 86, 2933, + 2938, 2939, 86, 2940, 2932, 2934, 2937, 2941, 86, 2942, - 2939, 86, 2940, 86, 86, 86, 86, 86, 86, 2943, - 2941, 2945, 2946, 2947, 86, 86, 86, 86, 2953, 86, - 2949, 2951, 2942, 2948, 86, 2955, 86, 86, 86, 86, - 86, 2956, 86, 2957, 2958, 2952, 2950, 86, 2959, 86, - 2964, 86, 86, 86, 2954, 86, 86, 2962, 86, 2960, - 2967, 86, 86, 86, 2968, 2965, 2966, 86, 2972, 2963, - 2971, 86, 2973, 86, 2969, 86, 2974, 2977, 86, 86, - 2970, 2979, 86, 2980, 86, 86, 2982, 86, 86, 86, - 86, 2975, 86, 2987, 86, 2986, 86, 2990, 2978, 86, - 86, 2976, 86, 86, 2983, 2984, 2981, 86, 2985, 2989, + 86, 86, 2946, 86, 86, 86, 2943, 86, 86, 86, + 2952, 2944, 86, 2947, 86, 86, 86, 2948, 2950, 2945, + 2955, 86, 86, 2957, 2953, 86, 2956, 86, 2951, 86, + 86, 86, 2949, 86, 2958, 2954, 2959, 86, 2962, 2967, + 2960, 2963, 86, 2961, 2964, 86, 2965, 86, 2966, 86, + 86, 2971, 86, 2968, 86, 2970, 86, 86, 86, 2972, + 86, 2969, 86, 2973, 2974, 86, 86, 2978, 2976, 2980, + 2975, 86, 2982, 86, 86, 86, 86, 86, 2983, 86, + 86, 2977, 2984, 86, 2979, 2985, 86, 2986, 86, 2991, + 86, 86, 86, 86, 2988, 2987, 2981, 2994, 2989, 86, - 86, 2993, 86, 86, 2996, 86, 2988, 2998, 86, 86, - 86, 2992, 2991, 86, 2999, 86, 2994, 2997, 3001, 86, - 3002, 86, 2995, 3004, 86, 86, 86, 3009, 86, 3010, - 3000, 86, 86, 86, 86, 3003, 3006, 3007, 3013, 86, - 86, 3015, 86, 3005, 3011, 3014, 3008, 86, 86, 3018, - 3021, 3012, 3019, 86, 3017, 86, 86, 86, 86, 3016, - 3020, 3024, 86, 3023, 86, 86, 3022, 3027, 86, 3025, - 3030, 86, 86, 86, 86, 86, 86, 3035, 86, 86, - 86, 3353, 86, 86, 3026, 3028, 3029, 3031, 3041, 3034, - 3032, 3038, 3039, 86, 3040, 86, 3037, 86, 3036, 3033, + 86, 86, 86, 86, 2992, 2993, 86, 86, 2990, 2995, + 2998, 2999, 86, 3000, 86, 2996, 3001, 3004, 86, 86, + 2997, 3002, 3006, 86, 3007, 86, 86, 3009, 86, 86, + 86, 86, 86, 3014, 86, 86, 3013, 3017, 3005, 86, + 3003, 86, 86, 86, 86, 3010, 3011, 3008, 3012, 86, + 3016, 86, 3020, 3023, 86, 3015, 86, 3025, 3021, 86, + 86, 3019, 3018, 86, 3026, 3028, 86, 86, 3022, 3029, + 86, 3031, 86, 86, 86, 86, 3024, 86, 86, 3036, + 86, 3387, 3027, 3034, 3033, 86, 86, 3030, 3040, 86, + 3038, 3032, 86, 3044, 86, 3035, 3037, 3042, 86, 86, - 86, 3044, 86, 3045, 86, 3043, 3046, 86, 86, 86, - 3049, 3042, 86, 3051, 86, 86, 86, 3050, 86, 86, - 86, 3047, 86, 3056, 3057, 86, 86, 86, 86, 86, - 86, 3063, 86, 86, 3052, 3048, 3064, 86, 3065, 3062, - 3053, 3054, 3055, 3060, 86, 86, 3059, 86, 3061, 86, - 3069, 86, 3058, 3066, 3068, 3070, 86, 86, 86, 3073, - 86, 3072, 3071, 86, 3067, 86, 3076, 86, 3075, 86, - 3074, 86, 86, 86, 3077, 86, 86, 3080, 86, 86, - 86, 3082, 86, 3078, 3083, 3081, 86, 86, 86, 86, - 86, 3079, 86, 86, 3092, 3093, 3095, 3084, 3088, 3085, + 3039, 3041, 3043, 86, 86, 3047, 3048, 86, 3050, 86, + 3045, 86, 3049, 86, 86, 3053, 86, 86, 3052, 86, + 3056, 86, 3051, 3046, 3054, 86, 86, 3059, 86, 86, + 86, 86, 3064, 86, 86, 86, 3055, 3060, 3057, 3058, + 86, 3068, 86, 86, 3063, 3069, 86, 3061, 3070, 3067, + 86, 3066, 86, 3065, 86, 3062, 86, 3072, 3073, 86, + 3074, 86, 3075, 86, 3071, 3078, 86, 3076, 86, 3080, + 86, 86, 86, 3079, 86, 86, 86, 3085, 3086, 86, + 86, 86, 3077, 86, 86, 3081, 86, 3092, 86, 3093, + 86, 86, 3387, 3094, 3082, 3091, 3083, 3084, 3089, 86, - 3086, 3353, 86, 86, 3087, 3089, 3090, 86, 3091, 86, - 3098, 86, 3094, 3097, 3096, 3102, 3099, 3100, 86, 3101, - 86, 3103, 86, 86, 86, 3106, 86, 86, 3104, 3107, - 86, 3108, 3109, 86, 86, 3110, 3111, 3114, 86, 3112, - 3113, 86, 86, 3105, 86, 3118, 3115, 3117, 86, 86, - 86, 86, 86, 3116, 3123, 86, 86, 3122, 86, 86, - 86, 86, 86, 3119, 3126, 3125, 86, 3353, 3127, 86, - 3120, 3121, 86, 3131, 86, 3130, 3128, 3132, 86, 3135, - 3129, 3124, 3133, 86, 3134, 86, 3138, 3140, 86, 86, - 86, 3139, 86, 86, 3136, 86, 86, 3137, 86, 3148, + 3088, 86, 86, 3090, 3098, 86, 3087, 3097, 3099, 86, + 86, 3095, 86, 3102, 86, 3100, 86, 3105, 86, 86, + 3096, 86, 3104, 86, 86, 3107, 3101, 86, 3103, 3106, + 86, 86, 3108, 86, 86, 86, 3111, 86, 86, 86, + 3113, 3387, 86, 3109, 86, 3112, 3114, 86, 86, 3126, + 3110, 86, 86, 86, 3115, 86, 3123, 3116, 3124, 3117, + 3118, 3120, 3121, 3119, 86, 86, 86, 86, 86, 3122, + 3127, 3129, 3125, 3131, 86, 3132, 86, 86, 3387, 3130, + 86, 3133, 3134, 86, 3128, 3135, 3136, 3137, 86, 3138, + 86, 3139, 3140, 86, 86, 3141, 3142, 3145, 86, 3143, - 3144, 3145, 3147, 86, 3142, 86, 86, 3150, 86, 3151, - 86, 3143, 3149, 3141, 86, 86, 86, 3146, 3154, 86, - 3153, 3155, 86, 3157, 86, 3156, 3158, 86, 86, 3152, - 3159, 86, 3160, 86, 3161, 86, 3162, 86, 3163, 86, - 3164, 86, 86, 3167, 86, 86, 86, 86, 86, 86, - 86, 3166, 3172, 86, 3165, 3168, 86, 3169, 86, 3176, - 86, 86, 3175, 3173, 3178, 86, 86, 3170, 3171, 3174, - 86, 86, 3182, 3180, 86, 3177, 86, 3184, 3185, 3179, - 86, 86, 86, 86, 86, 3187, 86, 86, 86, 86, - 86, 86, 3181, 3191, 3183, 3186, 86, 3192, 86, 3190, + 3144, 86, 86, 86, 3148, 86, 3146, 86, 86, 86, + 86, 86, 3147, 3154, 86, 86, 3153, 86, 86, 86, + 86, 86, 3150, 3157, 3156, 3149, 86, 3158, 86, 3151, + 3152, 3161, 3162, 86, 86, 3159, 86, 3163, 3387, 3160, + 3155, 86, 3164, 3165, 86, 3166, 86, 86, 86, 3167, + 3171, 86, 3168, 3173, 86, 3172, 86, 3169, 86, 86, + 3170, 3174, 86, 3177, 86, 3181, 3175, 3178, 3180, 86, + 86, 86, 3183, 86, 86, 3176, 3182, 3184, 86, 86, + 3187, 86, 86, 3179, 3186, 3188, 86, 3190, 86, 3185, + 86, 3189, 3191, 86, 3192, 86, 3193, 86, 3194, 86, - 3193, 3188, 86, 3196, 3189, 3194, 86, 86, 86, 3197, - 3199, 86, 3200, 86, 3202, 3195, 3201, 86, 86, 86, - 3198, 86, 3205, 3204, 86, 86, 86, 3203, 86, 3209, - 86, 3207, 86, 3212, 86, 3206, 3208, 86, 86, 86, - 86, 3211, 86, 3213, 86, 86, 86, 3214, 86, 3219, - 3221, 86, 3215, 3216, 3218, 86, 3220, 3224, 86, 86, - 3223, 86, 3225, 3217, 3226, 3227, 86, 3222, 3228, 3229, - 86, 3231, 86, 86, 3232, 3230, 3233, 86, 3234, 86, - 3235, 86, 86, 86, 86, 3237, 86, 86, 3238, 3239, - 3242, 86, 86, 86, 3246, 86, 86, 86, 3245, 3248, + 3195, 86, 3196, 86, 3197, 86, 86, 3200, 86, 86, + 86, 86, 86, 86, 86, 3199, 3198, 86, 3201, 3205, + 86, 86, 3202, 86, 3209, 86, 3208, 3206, 3210, 86, + 3207, 3203, 3204, 3212, 86, 86, 3211, 86, 3214, 86, + 3216, 86, 86, 3213, 3219, 3218, 86, 86, 86, 86, + 86, 86, 3221, 86, 86, 86, 86, 86, 3227, 3217, + 3220, 3225, 3226, 3215, 86, 3224, 86, 3222, 86, 3223, + 86, 3228, 86, 3230, 3238, 3231, 86, 3232, 3233, 86, + 3234, 86, 86, 3229, 3235, 86, 86, 86, 86, 3236, + 86, 3237, 86, 86, 3244, 3243, 3239, 86, 3246, 3242, - 86, 3236, 3241, 86, 3244, 3243, 3249, 86, 86, 3252, - 86, 3240, 86, 86, 3255, 86, 86, 3247, 3250, 86, - 3256, 86, 86, 3259, 3257, 3260, 86, 3251, 3253, 86, - 3254, 86, 86, 86, 3265, 86, 3261, 86, 3264, 3262, - 3258, 3266, 86, 86, 86, 86, 86, 86, 3270, 86, - 86, 3263, 3272, 86, 86, 3277, 86, 86, 3267, 3269, - 3279, 86, 3278, 3268, 86, 86, 3271, 3274, 3273, 3275, - 86, 86, 3276, 3283, 86, 3285, 3284, 86, 3286, 86, - 86, 86, 86, 3281, 3280, 3287, 86, 3288, 3291, 3282, - 86, 3289, 3292, 86, 86, 3293, 3294, 86, 3290, 86, + 3240, 86, 86, 86, 86, 86, 86, 86, 3245, 86, + 3241, 86, 3255, 86, 3247, 3253, 3258, 86, 86, 3250, + 86, 3248, 3249, 3254, 3252, 3257, 86, 86, 86, 86, + 3251, 3260, 3263, 86, 3256, 86, 3265, 86, 3259, 86, + 3266, 3261, 3267, 86, 3264, 3268, 86, 86, 3262, 3270, + 86, 86, 86, 3271, 86, 86, 3272, 3273, 3276, 86, + 86, 86, 86, 86, 86, 86, 3269, 3279, 3280, 86, + 3275, 86, 3278, 3277, 3282, 86, 3283, 86, 3284, 3274, + 86, 3281, 3286, 86, 3285, 86, 3287, 3289, 86, 86, + 3290, 86, 86, 3291, 3293, 3294, 86, 86, 3288, 86, - 86, 86, 86, 3295, 86, 3300, 86, 86, 3297, 86, - 3303, 86, 3304, 86, 86, 86, 86, 86, 86, 3296, - 3302, 3298, 3307, 3299, 3305, 3301, 86, 3306, 86, 3311, - 86, 3310, 86, 3308, 86, 3309, 86, 3312, 3353, 3313, - 86, 3315, 86, 3317, 86, 3318, 86, 86, 3322, 86, - 86, 3319, 86, 3316, 3320, 3321, 3314, 3323, 86, 86, - 3324, 3325, 86, 86, 86, 86, 3326, 86, 86, 3328, - 3327, 86, 3329, 3331, 86, 86, 3333, 86, 86, 3337, - 3334, 3338, 86, 3330, 3332, 86, 86, 3335, 86, 3341, - 3342, 86, 86, 3344, 86, 86, 3336, 3345, 86, 3343, + 86, 86, 3299, 86, 3298, 86, 3295, 3300, 86, 3296, + 3292, 86, 86, 86, 86, 86, 3297, 86, 3304, 86, + 3306, 86, 86, 86, 86, 86, 3301, 3303, 3311, 3312, + 86, 3302, 3305, 86, 3308, 3309, 3307, 3319, 3310, 3313, + 86, 3317, 86, 86, 86, 3314, 86, 3320, 3315, 3318, + 86, 86, 3316, 86, 86, 3321, 3322, 3325, 3323, 3326, + 86, 86, 86, 86, 3328, 86, 3327, 86, 86, 86, + 86, 3329, 3334, 3324, 86, 3331, 86, 86, 86, 86, + 3337, 3330, 3338, 86, 86, 86, 86, 86, 3332, 3333, + 3336, 3341, 86, 3335, 3339, 3342, 86, 3340, 86, 3345, - 86, 86, 3346, 86, 3339, 3340, 3347, 86, 3348, 3351, - 86, 3352, 86, 3353, 3353, 3353, 3353, 3353, 3353, 3349, - 3353, 3353, 3353, 3353, 3353, 3353, 3350, 47, 47, 47, - 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, - 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, - 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, - 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, - 80, 80, 80, 80, 80, 80, 89, 89, 3353, 89, - 89, 89, 89, 160, 160, 3353, 3353, 3353, 160, 160, - 162, 162, 3353, 3353, 162, 3353, 162, 164, 3353, 3353, + 3344, 3346, 86, 3343, 86, 3347, 86, 3349, 86, 3351, + 86, 3352, 86, 86, 86, 3356, 86, 3353, 3387, 86, + 3354, 3359, 86, 3350, 3357, 86, 86, 3358, 3348, 86, + 86, 86, 86, 3355, 86, 86, 3360, 3361, 86, 3363, + 3365, 86, 86, 3367, 86, 3362, 86, 3368, 86, 3371, + 3364, 3366, 3372, 86, 3369, 86, 86, 3375, 3376, 86, + 86, 3378, 86, 3370, 86, 3373, 86, 3377, 3379, 86, + 86, 3380, 86, 86, 3374, 3381, 3387, 3382, 3385, 86, + 3386, 86, 3387, 3387, 3387, 3383, 3387, 3387, 3387, 3387, + 3387, 3387, 3384, 47, 47, 47, 47, 47, 47, 47, - 3353, 3353, 3353, 164, 167, 167, 3353, 3353, 3353, 167, - 167, 169, 3353, 3353, 3353, 3353, 3353, 169, 171, 171, - 3353, 171, 171, 171, 171, 174, 3353, 3353, 3353, 3353, - 3353, 174, 177, 177, 3353, 3353, 3353, 177, 177, 90, - 90, 3353, 90, 90, 90, 90, 17, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353 + 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, + 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, + 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, + 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, + 80, 80, 89, 89, 3387, 89, 89, 89, 89, 160, + 160, 3387, 3387, 3387, 160, 160, 162, 162, 3387, 3387, + 162, 3387, 162, 164, 3387, 3387, 3387, 3387, 3387, 164, + 167, 167, 3387, 3387, 3387, 167, 167, 169, 3387, 3387, + 3387, 3387, 3387, 169, 171, 171, 3387, 171, 171, 171, + 171, 174, 3387, 3387, 3387, 3387, 3387, 174, 177, 177, + + 3387, 3387, 3387, 177, 177, 90, 90, 3387, 90, 90, + 90, 90, 17, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387 } ; -static const flex_int16_t yy_chk[6588] = +static const flex_int16_t yy_chk[6654] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2264,18 +2283,18 @@ static const flex_int16_t yy_chk[6588] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3361, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3395, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2735, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2758, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1099, 32, 36, 36, 37, 37, + 28, 92, 31, 32, 1104, 32, 36, 36, 37, 37, 28, 45, 45, 37, 97, 36, 45, 97, 41, 41, 45, 36, 87, 41, 93, 36, 87, 37, 93, 37, @@ -2314,9 +2333,9 @@ static const flex_int16_t yy_chk[6588] = 200, 201, 202, 197, 203, 204, 201, 202, 205, 197, 197, 199, 196, 206, 205, 207, 203, 206, 208, 200, 207, 209, 213, 210, 211, 204, 214, 213, 216, 217, - 551, 214, 218, 216, 208, 209, 211, 205, 210, 211, + 552, 214, 218, 216, 208, 209, 211, 205, 210, 211, 215, 215, 220, 220, 215, 219, 215, 221, 218, 217, - 222, 219, 223, 221, 551, 224, 222, 227, 215, 221, + 222, 219, 223, 221, 552, 224, 222, 227, 215, 221, 215, 224, 225, 227, 228, 229, 230, 231, 225, 228, 230, 229, 223, 231, 232, 234, 233, 225, 235, 236, 237, 232, 233, 238, 235, 239, 237, 240, 234, 241, @@ -2348,638 +2367,646 @@ static const flex_int16_t yy_chk[6588] = 339, 339, 340, 342, 343, 340, 345, 344, 346, 347, 347, 348, 349, 349, 351, 345, 348, 346, 353, 343, 342, 350, 350, 342, 344, 344, 352, 354, 355, 351, - 353, 352, 356, 357, 360, 167, 361, 358, 358, 357, - 358, 361, 369, 369, 362, 166, 354, 356, 355, 358, + 353, 352, 356, 357, 360, 1304, 361, 358, 358, 357, + 358, 361, 369, 369, 362, 1304, 354, 356, 355, 358, 362, 363, 364, 394, 360, 365, 363, 364, 365, 367, 365, 368, 367, 364, 372, 370, 371, 371, 375, 372, 368, 370, 377, 373, 378, 367, 373, 379, 367, 394, 367, 376, 373, 382, 376, 384, 373, 377, 375, 378, 381, 379, 385, 381, 373, 374, 374, 382, 374, 386, - 384, 385, 376, 388, 386, 386, 387, 389, 390, 381, - 402, 374, 387, 392, 374, 402, 374, 395, 374, 383, - 391, 383, 383, 390, 388, 396, 389, 164, 399, 391, - 393, 383, 392, 383, 383, 383, 393, 395, 383, 396, - 397, 400, 398, 401, 403, 404, 397, 398, 399, 406, - 397, 404, 405, 405, 407, 410, 408, 409, 401, 403, - 411, 400, 412, 409, 414, 398, 407, 412, 417, 406, - 408, 413, 413, 415, 413, 416, 411, 418, 423, 418, - 410, 426, 417, 419, 414, 419, 419, 424, 420, 415, + 384, 385, 376, 388, 386, 386, 389, 387, 390, 381, + 392, 374, 395, 387, 374, 167, 374, 391, 374, 383, + 387, 383, 383, 390, 388, 389, 391, 396, 399, 392, + 393, 383, 395, 383, 383, 383, 393, 397, 383, 398, + 400, 396, 401, 397, 398, 402, 403, 397, 399, 404, + 402, 405, 405, 406, 407, 404, 408, 401, 409, 410, + 400, 403, 398, 411, 409, 414, 407, 412, 413, 413, + 408, 413, 412, 406, 415, 416, 423, 420, 417, 411, + 418, 420, 418, 421, 410, 414, 419, 421, 419, 419, - 421, 416, 420, 427, 421, 422, 422, 423, 425, 426, - 430, 428, 424, 419, 431, 439, 430, 427, 439, 421, - 428, 429, 432, 431, 425, 433, 429, 432, 434, 433, - 435, 428, 436, 428, 429, 429, 435, 434, 429, 429, - 437, 438, 440, 441, 443, 438, 437, 440, 442, 442, - 444, 444, 446, 436, 445, 447, 447, 443, 448, 445, - 450, 451, 449, 441, 448, 446, 449, 452, 453, 454, - 454, 455, 452, 453, 456, 450, 458, 457, 454, 461, - 464, 459, 451, 455, 459, 460, 462, 462, 458, 460, - 466, 461, 463, 470, 456, 457, 471, 463, 465, 465, + 415, 416, 417, 422, 422, 423, 424, 425, 426, 428, + 427, 430, 421, 431, 432, 166, 419, 430, 428, 432, + 429, 424, 431, 425, 427, 429, 426, 434, 433, 428, + 436, 428, 433, 429, 429, 435, 434, 429, 429, 437, + 438, 435, 440, 439, 438, 437, 439, 440, 441, 442, + 442, 436, 443, 444, 444, 445, 446, 447, 447, 449, + 445, 448, 450, 449, 451, 443, 452, 448, 441, 446, + 453, 452, 454, 454, 455, 453, 456, 450, 458, 457, + 459, 454, 461, 459, 460, 451, 455, 464, 460, 466, + 458, 462, 462, 463, 461, 470, 456, 457, 463, 465, - 472, 464, 468, 468, 471, 473, 474, 475, 476, 472, - 478, 474, 466, 479, 470, 480, 482, 484, 481, 550, - 476, 550, 482, 484, 483, 486, 473, 475, 478, 485, - 478, 479, 481, 483, 485, 480, 487, 488, 489, 486, - 488, 490, 491, 492, 487, 494, 493, 487, 491, 493, - 495, 494, 489, 496, 497, 499, 490, 498, 496, 499, - 500, 502, 501, 492, 495, 500, 502, 503, 504, 494, - 508, 505, 511, 524, 547, 510, 497, 501, 498, 510, - 509, 512, 513, 503, 505, 162, 513, 504, 506, 506, - 508, 511, 547, 524, 506, 509, 506, 512, 515, 517, + 465, 468, 468, 473, 471, 472, 475, 476, 464, 478, + 474, 466, 471, 479, 472, 474, 470, 480, 481, 476, + 485, 483, 482, 164, 473, 485, 475, 478, 482, 478, + 483, 479, 481, 484, 486, 487, 489, 480, 488, 484, + 490, 488, 492, 487, 493, 491, 487, 493, 486, 495, + 489, 491, 494, 497, 496, 490, 498, 499, 494, 496, + 500, 499, 492, 495, 501, 500, 502, 503, 504, 505, + 508, 502, 511, 525, 525, 497, 494, 498, 509, 501, + 510, 512, 505, 503, 510, 162, 515, 504, 506, 506, + 508, 511, 523, 509, 506, 513, 506, 512, 516, 513, - 514, 516, 506, 518, 506, 514, 516, 506, 506, 514, - 519, 520, 518, 515, 506, 517, 519, 521, 517, 522, - 523, 519, 522, 525, 525, 526, 520, 527, 527, 528, - 529, 530, 531, 521, 532, 533, 534, 536, 535, 539, - 533, 537, 529, 523, 528, 534, 530, 537, 539, 540, - 526, 531, 536, 540, 541, 542, 532, 535, 543, 544, - 541, 545, 546, 549, 548, 554, 552, 542, 548, 553, - 553, 554, 555, 543, 552, 545, 549, 546, 544, 556, - 557, 559, 560, 558, 555, 556, 558, 562, 561, 563, - 562, 564, 557, 561, 565, 559, 566, 560, 563, 565, + 514, 515, 506, 516, 506, 514, 517, 506, 506, 514, + 518, 520, 519, 521, 506, 523, 524, 522, 519, 518, + 522, 526, 517, 519, 528, 517, 520, 527, 527, 521, + 529, 531, 530, 532, 534, 533, 524, 535, 536, 528, + 533, 559, 529, 534, 559, 537, 526, 530, 539, 543, + 531, 537, 544, 536, 540, 532, 535, 539, 540, 541, + 542, 543, 545, 541, 546, 547, 542, 544, 548, 549, + 550, 553, 551, 549, 551, 554, 554, 556, 546, 553, + 547, 545, 555, 550, 557, 558, 548, 560, 555, 556, + 557, 561, 563, 562, 564, 563, 565, 558, 562, 566, - 565, 567, 567, 568, 568, 563, 569, 564, 563, 566, - 570, 570, 569, 571, 571, 572, 574, 573, 575, 578, - 577, 572, 573, 573, 576, 577, 579, 576, 580, 582, - 575, 580, 583, 589, 579, 581, 585, 574, 578, 584, - 581, 586, 585, 584, 587, 586, 591, 589, 588, 590, - 590, 583, 582, 588, 592, 593, 594, 595, 596, 598, - 593, 591, 587, 597, 596, 603, 600, 602, 597, 601, - 601, 599, 594, 598, 599, 592, 606, 595, 607, 599, - 610, 603, 599, 599, 600, 602, 604, 605, 609, 610, - 606, 604, 605, 607, 609, 611, 612, 613, 611, 616, + 611, 560, 567, 564, 566, 566, 561, 568, 568, 611, + 564, 575, 565, 564, 570, 567, 569, 569, 571, 571, + 570, 572, 572, 573, 576, 574, 579, 580, 578, 573, + 574, 574, 575, 578, 577, 580, 576, 577, 581, 582, + 583, 581, 584, 585, 582, 579, 586, 585, 588, 587, + 589, 590, 586, 587, 592, 589, 591, 591, 593, 594, + 595, 584, 596, 583, 594, 590, 588, 597, 160, 592, + 598, 599, 604, 597, 601, 598, 595, 603, 600, 593, + 607, 600, 596, 602, 602, 599, 600, 608, 604, 600, + 600, 605, 601, 606, 607, 603, 605, 610, 606, 617, - 612, 614, 613, 615, 614, 617, 618, 619, 615, 620, - 621, 622, 622, 618, 620, 616, 623, 624, 625, 626, - 619, 627, 612, 617, 630, 623, 628, 630, 626, 629, - 621, 634, 628, 627, 625, 629, 624, 631, 631, 632, - 631, 633, 632, 635, 637, 636, 633, 638, 640, 634, - 636, 639, 641, 638, 640, 641, 639, 635, 642, 643, - 644, 645, 646, 637, 643, 644, 644, 647, 650, 649, - 648, 652, 647, 651, 645, 646, 648, 650, 651, 653, - 653, 655, 654, 642, 655, 657, 647, 647, 649, 654, - 656, 652, 661, 658, 663, 659, 656, 657, 658, 655, + 618, 612, 608, 610, 612, 613, 614, 615, 616, 613, + 615, 614, 619, 616, 620, 617, 621, 622, 618, 619, + 624, 621, 623, 623, 625, 626, 627, 620, 628, 624, + 629, 613, 630, 635, 643, 627, 629, 622, 630, 631, + 628, 626, 631, 625, 632, 632, 633, 632, 634, 633, + 636, 635, 637, 634, 638, 639, 641, 637, 640, 643, + 650, 639, 641, 640, 636, 642, 644, 646, 642, 645, + 647, 644, 648, 638, 645, 645, 649, 648, 651, 650, + 646, 652, 649, 647, 653, 662, 652, 651, 654, 654, + 655, 648, 648, 656, 657, 658, 656, 655, 659, 664, - 659, 659, 660, 660, 662, 664, 662, 664, 658, 665, - 666, 667, 668, 663, 669, 670, 671, 661, 673, 676, - 671, 670, 674, 672, 675, 678, 682, 665, 666, 667, - 679, 668, 672, 673, 669, 677, 679, 674, 676, 680, - 678, 683, 675, 681, 684, 682, 685, 677, 684, 686, - 687, 688, 689, 680, 690, 681, 692, 692, 691, 690, - 683, 694, 693, 695, 685, 686, 693, 696, 687, 688, - 688, 689, 691, 697, 698, 694, 699, 700, 696, 698, - 701, 702, 695, 704, 703, 707, 705, 697, 702, 703, - 704, 705, 699, 701, 706, 708, 700, 709, 710, 706, + 657, 661, 661, 659, 653, 666, 663, 658, 663, 660, + 662, 656, 667, 659, 660, 660, 668, 665, 664, 665, + 669, 670, 671, 666, 673, 672, 676, 674, 671, 672, + 667, 675, 677, 673, 668, 678, 681, 679, 686, 669, + 683, 670, 674, 680, 676, 682, 675, 678, 684, 680, + 681, 677, 679, 687, 685, 688, 686, 682, 685, 683, + 689, 690, 692, 691, 693, 693, 694, 684, 691, 687, + 694, 695, 696, 688, 698, 697, 692, 699, 689, 689, + 690, 700, 699, 701, 85, 695, 697, 702, 698, 703, + 704, 696, 705, 706, 708, 704, 703, 700, 706, 705, - 711, 712, 708, 707, 714, 713, 709, 714, 716, 711, - 713, 715, 710, 712, 717, 715, 718, 720, 719, 721, - 721, 725, 716, 717, 722, 722, 723, 723, 727, 724, - 725, 718, 719, 722, 724, 728, 729, 731, 720, 730, - 732, 728, 733, 730, 734, 735, 737, 727, 736, 731, - 734, 738, 739, 735, 742, 736, 729, 745, 748, 754, - 733, 752, 749, 754, 737, 732, 770, 748, 749, 742, - 752, 753, 739, 760, 745, 751, 738, 740, 160, 740, - 758, 751, 740, 755, 755, 770, 740, 753, 759, 740, - 756, 756, 757, 760, 761, 765, 740, 740, 758, 740, + 702, 707, 701, 709, 710, 711, 707, 712, 713, 714, + 709, 716, 708, 710, 716, 714, 712, 715, 718, 711, + 713, 717, 715, 720, 719, 717, 721, 722, 723, 723, + 724, 724, 718, 719, 725, 725, 726, 727, 720, 724, + 721, 726, 729, 730, 731, 733, 727, 732, 722, 730, + 734, 732, 735, 736, 737, 739, 738, 733, 740, 736, + 741, 729, 737, 738, 731, 747, 744, 750, 751, 754, + 735, 753, 755, 739, 751, 734, 750, 753, 754, 759, + 741, 744, 747, 740, 742, 761, 742, 756, 755, 742, + 759, 756, 760, 742, 757, 757, 742, 758, 758, 761, - 761, 767, 759, 757, 762, 762, 762, 763, 762, 764, - 766, 762, 763, 765, 766, 768, 762, 771, 772, 768, - 85, 769, 762, 762, 773, 767, 769, 773, 774, 775, - 764, 777, 771, 774, 774, 768, 775, 776, 776, 778, - 779, 779, 780, 772, 778, 781, 777, 780, 781, 782, - 783, 783, 785, 784, 782, 784, 786, 787, 788, 790, - 789, 787, 791, 791, 785, 792, 795, 790, 793, 794, - 794, 796, 797, 800, 800, 786, 811, 811, 788, 789, - 792, 798, 793, 796, 795, 799, 801, 798, 803, 804, - 799, 801, 801, 803, 797, 804, 805, 808, 806, 807, + 762, 763, 773, 742, 742, 766, 742, 763, 765, 767, + 760, 768, 769, 765, 770, 768, 772, 773, 770, 771, + 762, 764, 764, 764, 771, 764, 766, 767, 764, 774, + 778, 778, 779, 764, 770, 772, 769, 776, 775, 764, + 764, 775, 776, 776, 777, 780, 788, 779, 781, 781, + 780, 777, 782, 783, 774, 784, 783, 782, 785, 785, + 784, 786, 787, 786, 789, 788, 790, 792, 789, 791, + 793, 793, 794, 797, 787, 792, 795, 796, 796, 799, + 798, 802, 802, 800, 813, 813, 790, 794, 791, 800, + 795, 797, 798, 801, 803, 814, 814, 805, 801, 803, - 808, 809, 805, 806, 810, 807, 813, 809, 812, 812, - 814, 815, 810, 816, 813, 817, 815, 819, 818, 822, - 816, 820, 820, 821, 823, 823, 825, 822, 814, 824, - 827, 828, 821, 817, 818, 824, 819, 829, 830, 827, - 828, 831, 834, 830, 832, 825, 833, 832, 835, 836, - 831, 833, 837, 840, 838, 841, 834, 842, 836, 838, - 838, 829, 839, 839, 843, 837, 842, 844, 840, 845, - 848, 848, 845, 835, 841, 847, 849, 847, 850, 851, - 845, 852, 853, 850, 854, 844, 856, 855, 843, 857, - 858, 859, 860, 861, 858, 856, 862, 849, 863, 861, + 803, 799, 805, 806, 807, 810, 808, 809, 810, 806, + 807, 808, 811, 809, 812, 815, 816, 819, 811, 817, + 818, 820, 812, 815, 817, 821, 827, 818, 822, 822, + 823, 832, 824, 831, 816, 819, 832, 820, 829, 823, + 824, 825, 825, 826, 821, 827, 830, 829, 834, 826, + 833, 834, 836, 835, 837, 830, 838, 831, 835, 833, + 839, 842, 840, 841, 841, 838, 836, 840, 840, 843, + 845, 844, 846, 839, 847, 851, 842, 847, 853, 837, + 844, 849, 854, 849, 852, 847, 850, 850, 843, 852, + 846, 855, 856, 857, 845, 858, 851, 859, 861, 853, - 851, 852, 853, 864, 865, 862, 854, 855, 866, 859, - 863, 860, 857, 867, 866, 868, 869, 869, 865, 870, - 868, 871, 864, 872, 873, 874, 875, 867, 876, 877, - 871, 878, 873, 883, 879, 881, 880, 878, 882, 870, - 879, 881, 886, 872, 887, 874, 886, 876, 875, 877, - 880, 884, 882, 883, 885, 888, 889, 884, 890, 894, - 885, 889, 892, 887, 891, 891, 893, 888, 892, 893, - 895, 897, 896, 898, 898, 888, 899, 894, 896, 890, - 900, 901, 902, 895, 903, 900, 901, 901, 903, 904, - 904, 897, 905, 906, 899, 907, 908, 902, 910, 913, + 862, 860, 854, 863, 858, 860, 864, 866, 80, 863, + 865, 855, 868, 857, 856, 864, 861, 867, 868, 862, + 859, 869, 865, 870, 871, 871, 866, 872, 870, 873, + 874, 867, 875, 876, 877, 869, 878, 879, 873, 880, + 875, 885, 881, 883, 882, 880, 884, 872, 881, 883, + 874, 889, 890, 876, 892, 878, 877, 879, 882, 886, + 884, 885, 887, 888, 890, 886, 891, 888, 887, 896, + 889, 891, 890, 893, 893, 892, 894, 895, 897, 898, + 895, 899, 894, 900, 900, 898, 901, 896, 902, 903, + 904, 897, 908, 902, 905, 904, 904, 909, 906, 907, - 907, 914, 911, 915, 917, 917, 918, 921, 919, 1077, - 918, 923, 913, 906, 905, 908, 911, 920, 920, 924, - 1077, 914, 910, 919, 915, 916, 923, 922, 916, 926, - 916, 922, 921, 924, 916, 925, 916, 929, 928, 927, - 925, 916, 931, 926, 927, 927, 916, 928, 930, 933, - 932, 929, 930, 934, 935, 932, 936, 931, 934, 937, - 938, 933, 940, 946, 930, 932, 939, 940, 935, 938, - 941, 947, 939, 937, 942, 948, 941, 936, 943, 943, - 942, 944, 945, 952, 950, 946, 944, 951, 945, 953, - 947, 957, 951, 948, 949, 949, 950, 952, 954, 954, + 907, 899, 906, 910, 901, 903, 911, 903, 910, 905, + 913, 916, 914, 917, 908, 918, 921, 909, 920, 920, + 921, 923, 923, 922, 916, 911, 914, 924, 925, 926, + 928, 927, 925, 917, 913, 928, 918, 919, 922, 934, + 919, 929, 919, 942, 926, 927, 919, 932, 919, 942, + 931, 930, 924, 919, 934, 929, 930, 930, 919, 931, + 933, 932, 935, 936, 933, 937, 938, 935, 939, 940, + 937, 949, 941, 943, 951, 936, 933, 935, 943, 944, + 938, 941, 945, 940, 950, 944, 946, 946, 945, 939, + 947, 948, 951, 949, 953, 947, 954, 948, 75, 955, - 949, 953, 949, 956, 955, 957, 958, 959, 949, 955, - 961, 956, 960, 949, 949, 963, 961, 962, 964, 965, - 949, 966, 962, 967, 967, 958, 959, 963, 960, 968, - 969, 971, 973, 968, 975, 965, 964, 971, 972, 966, - 974, 972, 976, 978, 977, 974, 980, 975, 976, 977, - 969, 973, 981, 982, 983, 980, 984, 985, 986, 987, - 983, 981, 978, 986, 988, 984, 989, 994, 990, 982, - 80, 993, 991, 992, 997, 1000, 985, 993, 988, 987, - 990, 991, 992, 995, 994, 999, 989, 1001, 1002, 995, - 997, 1003, 1004, 1005, 1010, 1000, 1006, 1014, 1005, 999, + 961, 954, 956, 950, 952, 952, 953, 957, 957, 959, + 952, 958, 952, 955, 956, 960, 958, 959, 952, 961, + 962, 963, 964, 952, 952, 967, 965, 969, 964, 960, + 952, 965, 966, 968, 970, 970, 971, 963, 972, 962, + 971, 974, 976, 967, 966, 969, 978, 974, 975, 968, + 977, 975, 980, 981, 979, 977, 983, 980, 972, 978, + 979, 976, 984, 985, 986, 983, 987, 988, 989, 990, + 986, 984, 981, 989, 991, 987, 992, 997, 993, 985, + 74, 996, 994, 995, 1000, 1003, 988, 996, 991, 990, + 993, 994, 995, 998, 997, 1002, 992, 1004, 1005, 998, - 1009, 1006, 1002, 1010, 1013, 1009, 1001, 1004, 1012, 1003, - 1011, 1011, 1014, 1013, 1012, 1015, 1017, 1018, 1023, 1022, - 1020, 1020, 1018, 1018, 1020, 1024, 1021, 1025, 1015, 1021, - 1026, 1027, 1017, 1022, 1028, 1029, 1030, 1031, 1023, 1032, - 1028, 1024, 1030, 1026, 1032, 1025, 1027, 1033, 1035, 1036, - 1039, 1035, 1031, 1037, 1038, 1029, 1040, 1041, 1037, 1038, - 1043, 1033, 1041, 1042, 1046, 1040, 1039, 1045, 1042, 1047, - 1036, 1048, 1043, 1045, 1050, 1047, 1051, 1048, 1049, 1049, - 1046, 1052, 1054, 1050, 1052, 1053, 1053, 1055, 1056, 1057, - 1058, 1059, 1057, 1060, 1051, 1066, 1061, 1059, 1067, 1060, + 1000, 1006, 1007, 1008, 1013, 1003, 1009, 1017, 1008, 1002, + 1012, 1009, 1005, 1013, 1016, 1012, 1004, 1007, 1015, 1006, + 1014, 1014, 1017, 1016, 1015, 1018, 1020, 1021, 1026, 1025, + 1023, 1023, 1021, 1021, 1023, 1027, 1024, 1028, 1018, 1024, + 1029, 1030, 1020, 1025, 1031, 1032, 1033, 1034, 1026, 1035, + 1031, 1027, 1033, 1029, 1035, 1028, 1030, 1036, 1038, 1039, + 1042, 1038, 1034, 1040, 1041, 1032, 1043, 1044, 1040, 1041, + 1046, 1036, 1044, 1045, 1049, 1043, 1042, 1048, 1045, 1050, + 1039, 1051, 1046, 1048, 1053, 1050, 1054, 1051, 1052, 1052, + 1049, 1055, 1057, 1053, 1055, 1056, 1056, 1058, 1059, 1060, - 1054, 1061, 1062, 1058, 1063, 1064, 1055, 1062, 1056, 1063, - 1068, 1064, 1069, 1066, 1070, 1070, 1068, 1069, 1067, 1071, - 1072, 1073, 1074, 1075, 1076, 1078, 1075, 1076, 1071, 1072, - 1078, 1079, 1080, 1081, 1082, 1084, 1083, 1087, 1085, 1073, - 1082, 1074, 1083, 1085, 1080, 1086, 1086, 1088, 1089, 1079, - 1084, 1090, 1081, 1091, 1092, 1090, 1087, 1093, 1094, 1096, - 1089, 1088, 1098, 1092, 1097, 1097, 1100, 1102, 1103, 1101, - 1106, 1091, 1104, 1103, 1105, 1105, 1093, 1109, 1096, 1102, - 1100, 1104, 1098, 1094, 1101, 1107, 1108, 1117, 1113, 1110, - 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1111, 1114, 1115, + 1061, 1062, 1060, 1063, 1054, 1069, 1064, 1062, 1070, 1063, + 1057, 1064, 1065, 1061, 1066, 1067, 1058, 1065, 1059, 1066, + 1071, 1067, 1072, 1069, 1073, 1073, 1071, 1072, 1070, 1074, + 1075, 1076, 1077, 1078, 1079, 1080, 1078, 1079, 1074, 1075, + 1081, 1082, 1083, 1084, 1085, 1081, 1080, 1086, 1087, 1076, + 1085, 1077, 1088, 1086, 1083, 1089, 1089, 1088, 1090, 1082, + 1091, 1092, 1084, 1087, 1093, 1094, 1095, 1096, 1093, 1097, + 1099, 1100, 1100, 1092, 1091, 1095, 1101, 1090, 1103, 1102, + 1106, 1101, 1105, 1094, 1102, 1107, 1096, 1108, 1111, 1099, + 1109, 1114, 1108, 68, 1097, 1106, 1105, 1107, 1103, 1109, - 1116, 1112, 1113, 1118, 1115, 1119, 1117, 1120, 1122, 1122, - 1118, 1123, 1114, 1124, 1125, 1116, 1126, 1127, 1135, 1128, - 1119, 1134, 1126, 1130, 1128, 1123, 1120, 1130, 1134, 1125, - 1137, 1124, 1135, 1128, 1138, 1128, 1132, 1127, 1128, 1131, - 1131, 1132, 1133, 1133, 1136, 1139, 1140, 1136, 1141, 1137, - 1142, 1140, 1138, 1143, 1139, 1144, 1146, 1145, 1143, 1148, - 1148, 1149, 1142, 1151, 1155, 1150, 1149, 1141, 1145, 1144, - 1150, 1152, 1154, 1153, 1156, 1146, 1152, 1153, 1157, 1155, - 1158, 1154, 1161, 1151, 1159, 1162, 1160, 1163, 1164, 1156, - 1165, 1167, 1158, 1160, 1161, 1166, 1165, 1157, 1168, 1159, + 1110, 1110, 1118, 1112, 1113, 1119, 1115, 1114, 1111, 1112, + 1113, 1115, 1116, 1117, 1116, 1120, 1118, 1121, 1117, 1119, + 1120, 1122, 1123, 1124, 1125, 1127, 1127, 1128, 1129, 1123, + 1130, 1131, 1121, 1132, 1255, 1135, 1255, 1131, 1124, 1135, + 1122, 1128, 1133, 1125, 1142, 1130, 1129, 1133, 1136, 1136, + 1137, 1138, 1138, 1132, 1140, 1137, 1133, 1139, 1133, 1141, + 1143, 1133, 1141, 1142, 1139, 1144, 1145, 1146, 1140, 1147, + 1148, 1145, 1150, 1149, 1144, 1148, 1151, 1154, 1143, 1153, + 1153, 1147, 1154, 1150, 1155, 1156, 1146, 1149, 1157, 1155, + 1158, 1159, 1160, 1157, 1158, 1151, 1161, 1162, 1163, 1164, - 1169, 1170, 1171, 1172, 1162, 1173, 1164, 1174, 1163, 1169, - 1166, 1167, 1175, 1176, 1178, 1172, 1170, 1180, 1168, 1179, - 1178, 1171, 1181, 1182, 1173, 1183, 1185, 1175, 1187, 1189, - 1181, 1180, 1174, 1176, 1179, 1184, 1188, 1193, 1185, 1186, - 1184, 1183, 1189, 1182, 1186, 1186, 1193, 1187, 1190, 1190, - 1188, 1191, 1191, 1192, 1197, 1194, 1191, 1195, 1195, 1191, - 1191, 1194, 1196, 1197, 1191, 1198, 1192, 1196, 1199, 1202, - 1191, 1198, 1200, 1199, 1191, 1201, 1201, 1200, 1203, 1203, - 1204, 1205, 1206, 1204, 1207, 1204, 1208, 1209, 1210, 1211, - 1202, 1212, 1209, 1207, 1214, 75, 1218, 1212, 1213, 1214, + 1159, 1165, 1167, 1166, 1168, 1156, 1169, 1160, 1165, 1172, + 1163, 1161, 1170, 1171, 1164, 1166, 1162, 1173, 1170, 1175, + 1176, 1167, 1174, 1177, 1169, 1168, 1178, 1179, 1171, 1172, + 1181, 1174, 1180, 1184, 1175, 1177, 1183, 1173, 1186, 1176, + 1185, 1187, 1183, 1188, 1189, 1178, 1186, 1180, 1184, 1189, + 1181, 1190, 1179, 1192, 1185, 1193, 1199, 1194, 1197, 1188, + 1191, 1187, 1199, 1190, 63, 1191, 1191, 1195, 1195, 1193, + 1194, 1197, 1192, 1196, 1196, 1198, 1200, 1200, 1196, 1202, + 1201, 1196, 1196, 1203, 1198, 1201, 1196, 1207, 1202, 1203, + 1204, 1210, 1196, 1205, 1211, 1204, 1196, 1212, 1205, 1206, - 1206, 1205, 1210, 1216, 1213, 1215, 1208, 1211, 1217, 1215, - 1218, 1221, 1216, 1217, 1219, 1219, 1223, 1216, 1224, 1216, - 1223, 1216, 1221, 1216, 1220, 1220, 1225, 1220, 1226, 1227, - 1228, 1229, 1231, 1224, 1227, 1227, 1230, 1226, 1232, 1228, - 1233, 1230, 1234, 1235, 1225, 1236, 1231, 1232, 1237, 1237, - 1238, 1236, 1239, 1229, 1241, 1240, 1242, 1235, 1238, 1233, - 1240, 1234, 1243, 1244, 1245, 1242, 1239, 1246, 1241, 1243, - 1247, 1247, 1246, 1248, 1249, 1249, 1250, 1252, 1250, 1253, - 1252, 1244, 1254, 1255, 1253, 1256, 1256, 1257, 1248, 1245, - 1258, 1258, 1255, 1259, 1259, 1260, 1261, 1262, 1263, 1263, + 1206, 1208, 1208, 1213, 1209, 1214, 1212, 1209, 1207, 1209, + 1214, 1210, 1211, 1215, 1216, 1217, 1218, 1221, 1274, 1219, + 1274, 1217, 1218, 1213, 1219, 1220, 1221, 1215, 1223, 1220, + 1230, 1221, 1216, 1221, 1222, 1221, 1226, 1221, 1229, 1222, + 1224, 1224, 1223, 1225, 1225, 1228, 1225, 1226, 1230, 1228, + 1231, 1232, 1233, 1229, 1234, 1235, 1232, 1232, 1236, 1231, + 1235, 1233, 1237, 1238, 1239, 1240, 1243, 1241, 1242, 1242, + 1244, 1237, 1236, 1241, 1243, 1245, 1234, 1246, 1247, 1240, + 1245, 1248, 1238, 1239, 1244, 1249, 1250, 1247, 1248, 1251, + 1253, 1246, 1252, 1252, 1251, 1254, 1254, 1257, 1259, 1258, - 1260, 1254, 1264, 1265, 1266, 1267, 1265, 1257, 1270, 74, - 1267, 1268, 1269, 1272, 1269, 1273, 1272, 1261, 1262, 1275, - 1268, 1277, 1264, 1274, 1266, 1283, 1270, 1276, 1274, 1277, - 1273, 1278, 1276, 1275, 1279, 1280, 1278, 1279, 1281, 1281, - 1280, 1282, 1284, 1283, 1285, 1286, 1282, 1288, 1284, 1289, - 1291, 1285, 1290, 1288, 1292, 1289, 1291, 1290, 1286, 1293, - 1294, 1295, 1295, 1292, 1296, 1298, 1299, 1300, 1301, 1302, - 1303, 1294, 1307, 1305, 1301, 1302, 1303, 1306, 1293, 1305, - 1298, 1308, 1309, 1313, 1296, 1310, 1299, 1311, 1312, 1312, - 1300, 1306, 1307, 1314, 1309, 1315, 1318, 1306, 1321, 1310, + 1257, 1260, 1262, 1249, 1258, 1253, 1261, 1261, 1263, 1263, + 1260, 1250, 1264, 1264, 1265, 1266, 1267, 1259, 1269, 1265, + 1268, 1268, 1262, 1270, 1271, 1272, 1270, 1275, 1278, 1277, + 1272, 1273, 1277, 1280, 1279, 58, 1266, 1267, 1269, 1279, + 1273, 1281, 1282, 1278, 1271, 1275, 1281, 1280, 1283, 1284, + 1282, 1285, 1284, 1283, 1286, 1286, 1285, 1287, 1288, 1289, + 1290, 1291, 1287, 1293, 1294, 1289, 1295, 1290, 1297, 1293, + 1294, 1295, 1296, 1298, 1291, 1299, 1288, 1297, 1296, 1300, + 1300, 1301, 1303, 1305, 1306, 1307, 1299, 1308, 1309, 1310, + 1312, 1313, 1298, 1308, 1309, 1310, 1312, 1314, 1305, 1315, - 1326, 1308, 1316, 1313, 1323, 1311, 1319, 1316, 1317, 1317, - 1322, 1319, 1324, 1315, 1326, 1322, 1322, 1321, 1314, 1318, - 1325, 1324, 1323, 1327, 1328, 1329, 1330, 1331, 1325, 1331, - 1329, 1332, 1335, 1329, 1334, 1330, 1335, 1336, 1327, 1328, - 1334, 1337, 1328, 1338, 1339, 1332, 1337, 1337, 1336, 1340, - 1341, 1342, 1344, 1343, 1345, 1341, 1342, 1346, 1349, 1345, - 1348, 1350, 1338, 1351, 1351, 1352, 1353, 1340, 1354, 1352, - 1339, 1343, 1344, 1356, 1348, 1355, 1349, 1346, 1357, 1350, - 1358, 1355, 1363, 1359, 1353, 1356, 1360, 1354, 1361, 1363, - 1362, 1364, 1365, 1366, 1358, 1362, 1364, 1357, 1359, 1367, + 1303, 1301, 1316, 1318, 1306, 1313, 1317, 1320, 1307, 1319, + 1319, 1313, 1321, 1322, 1316, 1324, 1324, 1314, 1323, 1315, + 1317, 1318, 1325, 1323, 1326, 1328, 1331, 1320, 1329, 1326, + 1330, 1322, 1332, 1329, 1329, 1331, 1333, 1321, 1334, 1335, + 1332, 1336, 1337, 1346, 1328, 1325, 1336, 1339, 1330, 1336, + 1333, 1337, 1343, 1334, 1335, 1345, 1338, 1335, 1338, 1341, + 1342, 1339, 1344, 1343, 1342, 1341, 1347, 1344, 1344, 1346, + 1348, 1349, 1350, 1351, 1345, 1348, 1349, 1352, 1353, 1356, + 1355, 1357, 1352, 1359, 1347, 1358, 1358, 1359, 1360, 1361, + 1350, 1363, 1364, 1351, 1355, 1362, 1365, 1356, 1353, 1357, - 1367, 1360, 1366, 1368, 1369, 1370, 1372, 1361, 1371, 1371, - 1365, 1373, 1372, 1369, 1374, 1375, 1375, 1373, 1368, 1377, - 1376, 1378, 1379, 1380, 1381, 1370, 1376, 1379, 1374, 1380, - 1381, 1382, 1383, 1383, 1389, 1377, 1388, 1382, 1384, 1384, - 1386, 1386, 1378, 1387, 1390, 1388, 1391, 1387, 1392, 1395, - 1393, 1396, 1389, 1394, 1394, 1399, 1390, 1393, 1398, 1396, - 1391, 1397, 1400, 1392, 1402, 1401, 1397, 1400, 1400, 1395, - 1401, 1401, 1398, 1404, 1399, 1403, 1403, 1405, 1406, 1408, - 1407, 1409, 1410, 1411, 1402, 1407, 1412, 1406, 1413, 1411, - 1415, 1412, 1404, 1414, 1418, 1423, 1405, 1416, 1408, 1414, + 1366, 1362, 1367, 1363, 1368, 1377, 1360, 1369, 1361, 1370, + 1365, 1364, 1369, 1371, 1372, 1366, 1370, 1367, 1371, 1373, + 1374, 1374, 1375, 1368, 1376, 1377, 1378, 1378, 1373, 1379, + 1380, 1381, 1372, 1376, 1383, 1379, 1380, 1375, 1382, 1382, + 1383, 1384, 1385, 1386, 1387, 1381, 1388, 1389, 1386, 1396, + 1387, 57, 1388, 1389, 1390, 1390, 1395, 1384, 1391, 1391, + 1393, 1393, 1394, 1385, 1397, 1395, 1394, 1396, 1398, 1399, + 1400, 1401, 1401, 1402, 1404, 1403, 1397, 1400, 1405, 1404, + 1406, 1407, 1398, 1403, 1399, 1408, 1407, 1407, 1409, 1413, + 1408, 1408, 1405, 1402, 1410, 1410, 1411, 1412, 1413, 1406, - 1410, 1409, 1417, 1416, 1419, 1420, 1421, 1422, 1417, 1415, - 1427, 1424, 1426, 1418, 1413, 1426, 1423, 1425, 1425, 1428, - 1429, 1422, 1434, 1419, 1420, 1421, 1424, 1430, 1430, 1427, - 1431, 1431, 1429, 1433, 1432, 1434, 1435, 1433, 1428, 1432, - 1436, 1437, 1441, 1437, 1439, 1435, 1440, 1437, 1442, 1443, - 1448, 1440, 1446, 1436, 1444, 1444, 1445, 1441, 1446, 1447, - 1437, 1445, 1439, 1448, 1449, 1443, 1450, 1451, 1442, 1449, - 1450, 1451, 1452, 1453, 1447, 1454, 1455, 1456, 1457, 1457, - 1459, 1461, 1462, 1456, 1454, 1463, 1463, 1462, 1464, 1465, - 1469, 1453, 1452, 1469, 1464, 1471, 1455, 1472, 1459, 1467, + 1414, 1415, 1416, 1417, 1418, 1414, 1419, 1420, 1409, 1422, + 1418, 1419, 1421, 1423, 1430, 1411, 1412, 1424, 1421, 1423, + 1415, 1417, 1416, 1424, 1425, 1426, 1427, 1428, 1422, 1432, + 1432, 1434, 1431, 1420, 1429, 1430, 1433, 1435, 1441, 1433, + 1436, 1437, 1437, 1425, 1426, 1427, 1428, 1431, 1429, 1442, + 1434, 1441, 1436, 1438, 1438, 1439, 1435, 1440, 1442, 1443, + 1439, 1440, 1444, 1448, 1444, 1446, 1447, 1449, 1444, 1450, + 1452, 1447, 1443, 1451, 1451, 1452, 1453, 1454, 1448, 1456, + 1455, 1444, 1453, 1446, 1456, 1450, 1457, 1449, 1459, 1460, + 1457, 1458, 1454, 1455, 1461, 1458, 1462, 1466, 1463, 1464, - 1467, 1475, 1461, 1470, 1470, 1474, 1476, 1478, 1474, 1465, - 1479, 1471, 1482, 1472, 1480, 1476, 1477, 1477, 1481, 1483, - 1483, 1475, 1478, 1481, 1485, 1484, 1482, 1487, 1486, 1488, - 1490, 1479, 1491, 1480, 1484, 1489, 1489, 1495, 1493, 1496, - 1492, 1495, 1485, 1486, 1490, 1492, 1494, 1494, 1498, 1488, - 1491, 1499, 1487, 1493, 1497, 1497, 1500, 1501, 1502, 1496, - 1500, 1505, 1499, 1502, 1504, 1504, 1506, 1507, 1508, 1509, - 1498, 1510, 1511, 1511, 1512, 1513, 1501, 1505, 1514, 1512, - 1516, 1507, 1518, 1509, 1506, 1515, 1515, 1508, 1508, 1516, - 1522, 1519, 1517, 1519, 1520, 1513, 1510, 1517, 1514, 1520, + 1464, 1468, 52, 1461, 1463, 1469, 1472, 1460, 1459, 1482, + 1469, 1470, 1470, 1471, 1478, 1466, 1462, 1474, 1474, 1471, + 1476, 1479, 1468, 1476, 1477, 1477, 1472, 1483, 1481, 1482, + 1478, 1481, 1484, 1484, 1485, 1486, 1483, 1479, 1487, 1488, + 1489, 1490, 1490, 1491, 1488, 1492, 1493, 1494, 1495, 1485, + 1496, 1496, 1491, 1497, 1489, 1498, 1486, 1487, 1502, 1499, + 1500, 1493, 1502, 1492, 1499, 1501, 1501, 1497, 1495, 1503, + 1504, 1504, 1494, 1498, 1505, 1500, 1506, 1507, 1508, 1509, + 1512, 1507, 1511, 1511, 1509, 1513, 1514, 1506, 1515, 1503, + 1513, 1516, 1517, 1512, 1518, 1519, 1505, 1508, 1520, 1520, - 1521, 1523, 1518, 1525, 1526, 1526, 1521, 1523, 1527, 1528, - 1522, 1530, 1531, 1532, 1532, 1528, 1530, 1525, 1533, 1533, - 1534, 1535, 1536, 1537, 1538, 1538, 1537, 1527, 1539, 1540, - 1541, 1549, 1543, 68, 1534, 1544, 1531, 1536, 1543, 1535, - 1544, 1540, 1542, 1547, 1545, 1542, 1539, 1545, 1542, 1548, - 1541, 1552, 1547, 1553, 1548, 1550, 1549, 1552, 1550, 1553, - 1542, 1551, 1551, 1545, 1554, 1555, 1555, 1556, 1556, 1554, - 1557, 1559, 1558, 1560, 1561, 1562, 1557, 1558, 1563, 1564, - 1565, 1563, 1566, 1567, 1559, 1564, 1565, 1566, 1568, 1567, - 1572, 1560, 1569, 1561, 1573, 1562, 1571, 1569, 1570, 1570, + 1536, 1522, 1514, 1523, 1521, 1516, 1515, 1525, 1518, 1521, + 1526, 1517, 1517, 1524, 1524, 1526, 1525, 1527, 1531, 1536, + 1519, 1522, 1528, 1523, 1528, 1529, 1530, 1532, 1534, 1540, + 1529, 1539, 1530, 1532, 1535, 1535, 1539, 1527, 1531, 1537, + 1541, 1541, 1534, 1542, 1542, 1537, 1543, 1544, 1545, 1546, + 1547, 1547, 1546, 1540, 1548, 1549, 1550, 1553, 1552, 1558, + 1543, 1556, 1553, 1545, 1552, 1544, 1554, 1549, 1551, 1554, + 1556, 1551, 1548, 1557, 1551, 1589, 1550, 1559, 1557, 1589, + 1559, 1560, 1560, 1561, 1558, 1554, 1551, 1562, 1566, 1561, + 1563, 1564, 1564, 1562, 1566, 1563, 1565, 1565, 1567, 1568, - 1574, 1571, 1575, 1576, 1577, 1578, 1579, 1582, 1572, 1580, - 1581, 1568, 1581, 1580, 1573, 1584, 1575, 1576, 1577, 1586, - 1574, 1585, 1587, 1578, 1588, 1589, 1582, 1584, 1587, 1590, - 1592, 1579, 1586, 1585, 1591, 1594, 1594, 1595, 1596, 1599, - 1597, 1589, 1600, 1596, 1588, 1598, 1598, 1601, 1591, 1590, - 1602, 1592, 1597, 1603, 1599, 1604, 1600, 1595, 1605, 1607, - 1606, 1609, 1603, 1611, 1612, 1605, 1616, 1612, 1602, 1606, - 1604, 1601, 1606, 1613, 1613, 1607, 1609, 1614, 1614, 1615, - 1617, 1609, 1619, 1617, 1616, 1618, 1618, 1620, 1611, 1621, - 1623, 1615, 1622, 1625, 1621, 1619, 1624, 1622, 1626, 1627, + 1569, 1570, 1571, 1567, 1572, 1573, 1577, 1572, 1574, 1581, + 1575, 1573, 1568, 1576, 1574, 1575, 1578, 1582, 1569, 1576, + 1570, 1578, 1571, 1579, 1579, 1580, 1583, 1581, 1584, 1577, + 1580, 1585, 1587, 1586, 1588, 1591, 1590, 1582, 1590, 1593, + 1594, 1597, 1584, 1595, 1598, 1585, 1583, 1586, 1599, 1596, + 1587, 1593, 1594, 1600, 1591, 1596, 1595, 1601, 1608, 1588, + 1598, 1597, 1603, 1603, 1604, 1605, 1609, 1600, 1599, 1606, + 1605, 1607, 1607, 1608, 1610, 1611, 1612, 1613, 1601, 1614, + 1609, 1606, 1615, 1616, 1604, 1612, 1614, 1618, 1620, 1622, + 1622, 1615, 1613, 1611, 1615, 1623, 1623, 1621, 1610, 1616, - 1631, 1628, 1625, 1630, 1630, 1632, 1620, 1629, 1627, 1623, - 1628, 1627, 1624, 1629, 1633, 1634, 1636, 1626, 1632, 1635, - 1631, 1636, 1636, 1637, 1638, 1641, 1642, 1644, 1637, 1634, - 1643, 1643, 1633, 1645, 1646, 1635, 1638, 1647, 1647, 1646, - 1650, 1649, 1645, 1644, 1642, 1648, 1649, 1651, 1652, 1655, - 1641, 1657, 1647, 1664, 1648, 1653, 1656, 1648, 1650, 1658, - 1653, 1653, 1660, 1655, 1658, 1663, 1652, 1664, 1651, 1659, - 1663, 1656, 1662, 1657, 1668, 1659, 1661, 1661, 1662, 1665, - 1660, 1666, 1669, 1670, 1671, 1665, 1673, 1666, 1677, 1670, - 1672, 1678, 1673, 1672, 1668, 1675, 1669, 1671, 1679, 1672, + 1621, 1625, 1618, 1624, 1628, 1626, 1629, 1618, 1626, 1627, + 1627, 1630, 1632, 1620, 1633, 1624, 1630, 1628, 1631, 1625, + 1634, 1635, 1638, 1631, 1636, 1629, 1637, 1640, 1638, 1634, + 1633, 1632, 1641, 1636, 1642, 1637, 1636, 1639, 1639, 1643, + 1635, 1644, 1647, 1645, 1650, 1641, 1646, 1640, 1645, 1645, + 1651, 1646, 1642, 1643, 1647, 1652, 1652, 1644, 1653, 1655, + 1658, 1654, 1656, 1656, 1655, 1658, 1657, 1659, 1651, 1650, + 1654, 1660, 1661, 1664, 1653, 1657, 1662, 1656, 1657, 1665, + 1666, 1662, 1662, 1667, 47, 1659, 1669, 1664, 1667, 1668, + 1661, 1673, 1660, 1671, 1665, 1668, 1670, 1670, 1672, 1671, - 1680, 1681, 1682, 1675, 1683, 1684, 1679, 1677, 1688, 1680, - 1678, 1685, 1685, 1691, 1681, 1682, 1686, 1687, 1683, 1684, - 1690, 1688, 1686, 1687, 1689, 1689, 1692, 1693, 1693, 1694, - 1695, 1691, 1696, 1685, 1697, 1698, 1695, 1700, 1700, 1701, - 1690, 1703, 1694, 1702, 1704, 1692, 1703, 1702, 1706, 1704, - 1697, 1705, 1707, 1698, 1696, 1709, 1705, 1706, 1710, 1701, - 1711, 1711, 1712, 1714, 1713, 1715, 1715, 1709, 1718, 1716, - 1717, 1721, 1719, 1710, 1722, 1707, 1713, 1717, 1725, 1723, - 1718, 1712, 1714, 1716, 1719, 1723, 1724, 1726, 1727, 1727, - 1721, 63, 1728, 1726, 1722, 1728, 1725, 1731, 1724, 1729, + 1674, 1675, 1666, 1672, 1669, 1673, 1674, 1675, 1677, 1678, + 1679, 1680, 1681, 1682, 1684, 1681, 1679, 1686, 1687, 1682, + 1689, 1681, 1684, 1678, 1680, 1688, 1690, 1691, 1677, 1689, + 1692, 1693, 1695, 1688, 1694, 1694, 1686, 1687, 1695, 1690, + 1691, 1696, 1697, 1699, 1692, 1693, 1700, 1696, 1698, 1698, + 1701, 1702, 1702, 1703, 1704, 1697, 1694, 1705, 1706, 1707, + 1704, 1709, 1709, 1699, 1700, 1710, 1703, 1711, 1712, 1701, + 1713, 1711, 1716, 1712, 1706, 1713, 1714, 1707, 1715, 1705, + 1718, 1714, 1720, 1719, 1721, 1710, 1719, 1715, 1723, 1718, + 1722, 1722, 1724, 1725, 1720, 1716, 1726, 1726, 1728, 1721, - 1729, 1732, 1731, 1733, 1734, 1734, 1735, 1738, 1739, 1733, - 1732, 1736, 1737, 1736, 1740, 1737, 1741, 1742, 1735, 1743, - 1744, 1745, 1742, 1746, 1743, 1749, 1747, 1738, 1748, 1744, - 1739, 1747, 1740, 1745, 1741, 1750, 1751, 1748, 1746, 1752, - 1750, 1751, 1753, 1753, 1755, 1749, 1754, 1750, 1757, 1758, - 1748, 1760, 1754, 1759, 1752, 1761, 1762, 1761, 1763, 1763, - 1764, 1764, 1765, 1765, 1766, 1755, 1769, 1757, 1758, 1759, - 1762, 1760, 1762, 1767, 1767, 1768, 1768, 1770, 1771, 1771, - 1773, 1772, 1777, 1776, 1766, 1772, 1773, 1769, 1774, 1776, - 1778, 1774, 1779, 1782, 1780, 1785, 1778, 1780, 1770, 1783, + 1727, 1729, 1732, 1730, 1724, 1728, 1733, 1723, 1735, 1736, + 1734, 1737, 1725, 1729, 1727, 1730, 1734, 1737, 1738, 1738, + 1735, 1732, 1739, 1740, 1740, 1739, 1733, 1736, 1742, 1743, + 1744, 1745, 1745, 1742, 1746, 1747, 1744, 1747, 1743, 1748, + 1749, 1750, 1748, 1751, 1752, 1753, 1746, 1754, 1755, 1757, + 1753, 1758, 1754, 1756, 1760, 1763, 1758, 1755, 1759, 18, + 1749, 1751, 1752, 1750, 1757, 1756, 1761, 1759, 1762, 1766, + 1763, 1761, 1768, 1762, 1760, 1764, 1764, 1765, 1761, 1769, + 1759, 1770, 1771, 1765, 1772, 1773, 1772, 1774, 1774, 1777, + 1766, 1768, 1775, 1775, 1776, 1776, 1780, 1770, 1769, 1773, - 1777, 1781, 1781, 1786, 1783, 1784, 1784, 1787, 1788, 1788, - 1785, 1789, 1787, 1782, 1790, 1791, 1789, 1779, 1792, 1793, - 1790, 1794, 1796, 58, 1786, 1795, 1799, 1791, 1791, 1791, - 1798, 1795, 1800, 1802, 1791, 1798, 1798, 1793, 1792, 1803, - 1799, 1794, 1796, 1801, 1802, 1801, 1804, 1800, 1805, 1806, - 1807, 1809, 1804, 1811, 1803, 1808, 1808, 1805, 1810, 1810, - 1812, 1813, 1813, 1814, 1814, 1815, 1818, 1818, 1819, 1806, - 1820, 1807, 1822, 1811, 1823, 1825, 1825, 1809, 1824, 1820, - 1826, 1822, 1812, 1827, 1824, 1815, 1830, 1828, 1829, 1831, - 1831, 1832, 1833, 1819, 1828, 1823, 1836, 1829, 1827, 1835, + 1781, 1773, 1771, 1778, 1778, 1779, 1779, 1782, 1782, 1777, + 1783, 1788, 1784, 1785, 1783, 1790, 1785, 1780, 1784, 1787, + 1789, 1781, 1792, 1792, 1791, 1787, 1789, 1791, 1793, 1788, + 1794, 1795, 1795, 1797, 1796, 1794, 1798, 1799, 1799, 1800, + 1790, 1798, 1804, 1802, 1800, 1801, 1803, 1805, 1793, 1796, + 1807, 1801, 1806, 1811, 1797, 1802, 1802, 1802, 1806, 1809, + 1804, 1810, 1802, 1813, 1809, 1809, 1803, 1805, 1811, 1812, + 1807, 1812, 1814, 1815, 1813, 1810, 1816, 1817, 1818, 1815, + 1819, 1819, 1820, 1821, 1821, 1816, 1822, 1814, 1823, 1824, + 1824, 1825, 1825, 1826, 1829, 1829, 1830, 1817, 1831, 1818, - 1837, 1826, 1836, 1838, 1835, 1839, 1842, 1840, 1833, 1840, - 1838, 1839, 1830, 1843, 1844, 1844, 1845, 1832, 1846, 1843, - 1837, 1845, 1847, 1849, 1848, 1842, 1850, 1846, 1851, 1850, - 1852, 1853, 1853, 1854, 1855, 1849, 1857, 1856, 1860, 1854, - 1855, 1858, 1847, 1848, 1861, 1858, 1851, 1862, 1863, 1863, - 1864, 1857, 1862, 1865, 1867, 1868, 1852, 1856, 1860, 1868, - 1876, 1858, 1869, 1869, 1870, 1871, 1861, 1874, 1865, 1864, - 1870, 1872, 1872, 1867, 1871, 1873, 1875, 1875, 1874, 1873, - 1877, 1876, 1878, 1874, 1879, 1880, 1881, 1882, 1883, 1879, - 1884, 1885, 1885, 1882, 1877, 1884, 1886, 1886, 1887, 1889, + 1833, 1834, 1836, 1836, 1837, 1835, 1822, 1831, 1820, 1833, + 1823, 1835, 1838, 1826, 1841, 1840, 1839, 1842, 1842, 1843, + 1844, 1830, 1834, 1839, 1840, 1837, 1846, 1838, 1847, 1848, + 1849, 1846, 1850, 1851, 1847, 1851, 1844, 1849, 1850, 1853, + 1841, 1854, 1855, 1855, 1857, 1843, 1856, 1854, 1858, 1848, + 1859, 1856, 1860, 1857, 1861, 1862, 1863, 1861, 1853, 1864, + 1864, 1865, 1868, 1867, 1860, 1866, 1869, 1865, 1858, 1859, + 1869, 1866, 1871, 1862, 1872, 1873, 1875, 1868, 1874, 1874, + 1873, 1878, 1863, 1867, 1876, 1879, 1869, 1880, 1880, 1879, + 1884, 1881, 1871, 1882, 1884, 1875, 1872, 1881, 1885, 1876, - 1890, 1878, 1887, 1883, 1891, 1880, 1881, 1899, 1889, 1892, - 1892, 1890, 1894, 1894, 1895, 1896, 1890, 1898, 1901, 1895, - 1895, 1896, 1900, 1898, 1891, 1902, 1904, 1900, 1905, 1906, - 1901, 1902, 1905, 1899, 1907, 1909, 1908, 1910, 1904, 1911, - 1912, 1906, 1908, 1910, 1911, 1915, 1914, 1918, 1916, 1922, - 1918, 1925, 1912, 1916, 1919, 1919, 1925, 1909, 1914, 1907, - 1920, 1920, 1921, 1921, 1915, 1923, 1924, 1926, 1927, 1922, - 1929, 1923, 1924, 1926, 1932, 1929, 1931, 1927, 1935, 1931, - 1933, 1933, 1936, 1937, 1938, 1938, 1932, 1939, 1937, 1944, - 1935, 1947, 1940, 1941, 1936, 1945, 1939, 1940, 1941, 1942, + 1878, 1887, 1882, 1883, 1883, 1886, 1886, 1888, 1889, 1885, + 1890, 1891, 1892, 1893, 1885, 1890, 1896, 1896, 1894, 1893, + 1895, 1888, 1887, 1897, 1897, 1895, 1898, 1889, 1900, 1901, + 1898, 1891, 1892, 1894, 1902, 1903, 1903, 1900, 1905, 1905, + 1901, 1906, 1907, 1909, 1910, 1901, 1906, 1906, 1907, 1909, + 1911, 1912, 1913, 1915, 1902, 1911, 1916, 1917, 1913, 1918, + 1916, 1919, 1921, 1912, 1920, 1915, 1922, 1919, 1921, 1917, + 1910, 1923, 1924, 1928, 1929, 1925, 1927, 1924, 1931, 1929, + 1935, 1931, 1932, 1932, 1918, 1922, 1920, 1925, 1927, 1933, + 1933, 1923, 1928, 1934, 1934, 1936, 1937, 1940, 1938, 1939, - 1943, 1943, 1942, 1946, 1945, 1951, 1950, 1948, 1949, 1944, - 1947, 1948, 1950, 1949, 1953, 1952, 1954, 1956, 1956, 1957, - 1959, 1946, 1958, 1951, 1952, 1960, 1960, 1961, 1963, 1956, - 1954, 1958, 1953, 1962, 1964, 1965, 1961, 1957, 1971, 1964, - 1959, 1968, 1968, 1970, 1972, 1962, 1970, 1974, 1965, 1963, - 1975, 1976, 1977, 1986, 1971, 1978, 1978, 1976, 57, 1979, - 1972, 1979, 1974, 1981, 1975, 1980, 1980, 1983, 1983, 1977, - 1989, 1981, 1984, 1984, 1987, 1988, 1986, 1989, 1990, 1991, - 1987, 1988, 1992, 1992, 1993, 1994, 1995, 1997, 1999, 1996, - 2000, 1998, 2003, 1993, 2004, 2005, 2006, 2006, 1995, 1991, + 1935, 1936, 1937, 1938, 1942, 1939, 1940, 1944, 1945, 1942, + 1944, 1946, 1946, 1948, 1949, 1952, 1950, 1951, 1951, 1957, + 1945, 1950, 1953, 1954, 1952, 1948, 1949, 1953, 1954, 1955, + 1956, 1956, 1955, 1958, 1959, 1960, 1961, 1964, 1962, 1957, + 1961, 1963, 1958, 1962, 1965, 1966, 1967, 1963, 1970, 1969, + 1969, 1972, 1959, 1965, 1960, 1964, 1971, 1973, 1973, 1974, + 1967, 1969, 1975, 1966, 1976, 1971, 1970, 1977, 1974, 1978, + 1983, 1972, 1977, 1983, 1975, 1981, 1981, 1984, 1985, 1990, + 1987, 1989, 1978, 1988, 1992, 1976, 1992, 1989, 1991, 1991, + 1993, 1993, 1994, 1984, 1985, 1987, 1990, 1988, 1996, 1996, - 1990, 1996, 1997, 1998, 2001, 2000, 1994, 2005, 2007, 2008, - 2001, 2011, 2003, 2009, 1999, 2010, 2009, 2004, 2015, 2013, - 2010, 2021, 52, 2001, 2013, 2014, 2007, 2014, 2016, 2008, - 2017, 2011, 2019, 2016, 2022, 2023, 2015, 2017, 2024, 2021, - 2024, 2019, 2025, 2022, 2027, 2028, 2027, 2023, 2029, 2029, - 2030, 2031, 2032, 2033, 2032, 2034, 2031, 2035, 2033, 2028, - 2034, 2025, 2036, 2037, 2039, 2038, 2040, 2041, 2044, 2037, - 2038, 2042, 2041, 2041, 2045, 2035, 2030, 2039, 2040, 2042, - 2046, 2046, 2036, 2047, 2047, 2048, 2049, 2044, 2045, 2050, - 2052, 2051, 2052, 2053, 2054, 2050, 2051, 2055, 2055, 47, + 1994, 1997, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2006, + 2000, 2001, 2007, 2002, 2005, 2005, 2012, 2016, 2006, 2008, + 2009, 2010, 2011, 2013, 2014, 2017, 1999, 2018, 2004, 2003, + 2014, 2008, 2009, 2007, 2011, 2020, 2010, 2016, 2013, 2018, + 2019, 2019, 2012, 2014, 2021, 2023, 2022, 2024, 2017, 2022, + 2023, 2026, 2027, 2020, 2027, 2028, 2026, 2029, 2030, 2032, + 2034, 2035, 2029, 2036, 2021, 2030, 2038, 2024, 2032, 2037, + 2035, 2037, 2040, 2028, 2040, 2036, 2041, 2043, 2034, 2042, + 2042, 2044, 2045, 2046, 2045, 2038, 2044, 2047, 2046, 2048, + 2041, 2049, 2047, 2050, 2053, 2051, 2052, 2055, 2057, 2050, - 2048, 2056, 2054, 2057, 2057, 2059, 2049, 2058, 2058, 2061, - 2054, 2053, 2060, 2056, 2059, 2065, 2063, 2060, 2064, 2067, - 2064, 2069, 2071, 2068, 2066, 2063, 2075, 2061, 2063, 2066, - 2066, 2067, 2068, 2069, 2071, 2072, 2065, 2073, 2076, 2075, - 2072, 2077, 2073, 2078, 2078, 2079, 2080, 2082, 2085, 2081, - 2077, 2083, 2087, 2099, 2088, 2086, 2096, 2089, 2076, 2088, - 2085, 2082, 2089, 2079, 2080, 2081, 2083, 2086, 2090, 2093, - 2095, 2097, 2087, 2098, 2100, 2093, 2095, 2090, 2099, 2096, - 2101, 2101, 2104, 2100, 2102, 2107, 2097, 2108, 2093, 2103, - 2103, 2098, 2105, 2102, 2106, 18, 2105, 2109, 2107, 2106, + 2051, 2058, 2062, 2043, 2128, 2055, 2053, 2048, 2054, 2052, + 2061, 2049, 2128, 2054, 2054, 2058, 2066, 2057, 2059, 2059, + 2060, 2060, 2062, 2063, 2067, 2061, 2064, 2069, 2065, 2063, + 2065, 2064, 2067, 2074, 2066, 2068, 2068, 2070, 2070, 2069, + 2067, 2071, 2071, 2072, 2073, 2076, 2077, 2078, 2077, 2073, + 2079, 2074, 2072, 2080, 2076, 2079, 2079, 2076, 2081, 2082, + 2084, 2085, 2088, 2089, 2086, 2080, 2085, 2081, 2078, 2086, + 2090, 2082, 2084, 2091, 2091, 2088, 2092, 2093, 2095, 2090, + 2094, 2098, 2096, 2089, 2100, 2101, 2099, 2109, 2112, 2120, + 2101, 2110, 2095, 2098, 2092, 2093, 2094, 2096, 2099, 2103, - 2110, 2104, 2109, 2109, 2111, 2112, 2110, 2113, 2112, 2108, - 2111, 2114, 2117, 2117, 2119, 2113, 2122, 2118, 2118, 2120, - 2120, 2121, 2121, 2119, 2123, 2125, 17, 2124, 2122, 2132, - 2125, 2114, 2118, 2124, 2126, 2126, 2127, 2127, 2134, 2128, - 2129, 2131, 2123, 2118, 2128, 2131, 2129, 2133, 2136, 2132, - 2137, 2133, 2138, 2139, 2140, 2137, 2141, 2143, 2134, 2140, - 2142, 2144, 2145, 2146, 2146, 2147, 2144, 2148, 2139, 2147, - 2150, 2151, 2155, 2136, 2141, 2138, 2142, 2143, 2149, 2152, - 2153, 2154, 2148, 2149, 2145, 2155, 2154, 2156, 2160, 2151, - 2159, 2152, 2157, 2157, 2161, 2162, 2150, 2163, 2159, 2153, + 2102, 2106, 2120, 2108, 2100, 2102, 2110, 2106, 2103, 2108, + 2109, 2111, 2113, 2112, 2114, 2114, 2115, 2116, 2116, 2117, + 2106, 2113, 2118, 2119, 2121, 2115, 2118, 2122, 2119, 2111, + 2123, 2124, 17, 2122, 2125, 2126, 2124, 2124, 2117, 2127, + 2125, 2126, 2127, 2121, 2129, 2132, 2132, 2133, 2133, 2134, + 2135, 2135, 2123, 2136, 2136, 2137, 2138, 2139, 2134, 2151, + 2140, 2143, 2133, 2139, 2129, 2140, 2143, 2137, 2141, 2141, + 2142, 2142, 2144, 2133, 2138, 2146, 2147, 2148, 2144, 2146, + 2149, 2148, 2152, 2153, 2151, 2155, 2154, 2152, 2157, 2156, + 2155, 2158, 2159, 2160, 2161, 2161, 2147, 2159, 2162, 2163, - 2164, 2165, 2166, 2167, 2171, 2156, 2172, 2160, 2169, 2173, - 2174, 2176, 2174, 2161, 2166, 2173, 2176, 2171, 2162, 2164, - 2172, 2163, 2165, 2169, 2167, 2175, 2175, 2177, 2178, 2179, - 2177, 2180, 2181, 2181, 2182, 2182, 2183, 2185, 2183, 2184, - 2184, 2178, 2186, 2179, 2180, 2187, 2187, 2188, 2189, 2189, - 2190, 2190, 2185, 2191, 2194, 2186, 2188, 2193, 2191, 2188, - 2195, 2196, 2193, 2197, 2197, 2198, 2198, 2199, 2200, 2200, - 2201, 2202, 2202, 2196, 2194, 2203, 2204, 2205, 2205, 2207, - 2195, 2204, 2206, 2206, 2209, 2208, 2199, 2210, 2201, 2214, - 2203, 2212, 2216, 2207, 2208, 0, 2212, 2217, 2209, 2213, + 2149, 2154, 2162, 2164, 2157, 2165, 2153, 2156, 2164, 2166, + 2167, 2158, 2169, 2168, 2163, 2160, 2170, 2169, 2171, 2172, + 2172, 2175, 2167, 2176, 2177, 2174, 2178, 2166, 2184, 2170, + 2179, 2165, 2168, 2174, 2180, 2182, 2171, 2260, 2187, 2181, + 2175, 2186, 2176, 2184, 2189, 2192, 2189, 2177, 2192, 2179, + 2178, 2181, 2187, 2188, 2186, 2180, 2182, 2190, 2190, 2188, + 2191, 2193, 2194, 2260, 2195, 2191, 2196, 2196, 2197, 2197, + 2198, 2200, 2198, 2203, 2193, 2201, 2194, 2195, 2199, 2199, + 2202, 2202, 2203, 2204, 2204, 2203, 2200, 2206, 2201, 2205, + 2205, 2208, 2206, 2209, 2210, 2211, 2208, 2212, 2212, 2213, - 2213, 2215, 2215, 2217, 2218, 2221, 2210, 2218, 2214, 2226, - 2216, 2219, 2219, 2220, 2220, 2222, 2223, 2225, 2223, 2227, - 2227, 2229, 2230, 2231, 2221, 2232, 2240, 2219, 2226, 2232, - 2222, 2234, 2225, 2233, 2233, 2235, 2236, 2237, 2231, 2242, - 2235, 2229, 2239, 2239, 2243, 2230, 2240, 2241, 2244, 2245, - 2234, 2236, 2237, 2242, 2241, 2246, 2246, 2248, 2247, 2248, - 2249, 2252, 2243, 2249, 2251, 2255, 2244, 2247, 2256, 2253, - 2251, 2254, 2257, 2252, 2253, 2245, 2254, 2258, 2249, 2259, - 2249, 2256, 2258, 2261, 2262, 2263, 2264, 2265, 2261, 2262, - 2255, 2266, 2264, 2257, 2267, 2269, 2268, 2266, 2270, 2267, + 2213, 2214, 2215, 2215, 2216, 2217, 2217, 2211, 2218, 0, + 2219, 2220, 2220, 2209, 2210, 2219, 2221, 2221, 2222, 2223, + 2214, 2224, 2216, 2218, 2225, 2227, 2228, 2228, 2223, 2229, + 2227, 2231, 2222, 2230, 2230, 2224, 2232, 2233, 2234, 2234, + 2233, 2236, 2232, 2225, 2235, 2235, 2237, 2240, 2229, 2231, + 2238, 2241, 2238, 2244, 2234, 2242, 2242, 2245, 2249, 2246, + 2236, 2237, 2240, 2247, 2248, 2248, 2250, 2247, 2251, 2252, + 2241, 2250, 2255, 2244, 2246, 2254, 2254, 2249, 2256, 2257, + 2245, 2258, 2259, 2251, 2252, 2256, 2261, 2261, 2262, 2263, + 2266, 2263, 2255, 2257, 2267, 2264, 2266, 2262, 2264, 2258, - 2263, 2268, 2281, 2271, 2272, 2259, 2271, 2273, 2265, 2274, - 2275, 2270, 2276, 2272, 0, 2277, 2273, 2278, 2274, 2275, - 2269, 2277, 2281, 2278, 2279, 2283, 2276, 2285, 2279, 2284, - 2284, 2286, 2286, 2285, 2283, 2288, 2287, 2290, 2291, 2294, - 2286, 2287, 2292, 2292, 2293, 2297, 2296, 2298, 2294, 2301, - 2303, 2299, 2301, 2290, 2291, 2288, 2304, 2288, 2296, 2293, - 2302, 2297, 2298, 2299, 2310, 2302, 2305, 2305, 2304, 2310, - 2303, 2306, 2306, 2308, 2308, 2309, 2311, 2312, 2309, 2313, - 2314, 2314, 2311, 2312, 2315, 2316, 2316, 2317, 2313, 2318, - 2319, 2320, 2320, 2322, 2321, 2329, 2323, 0, 2315, 2317, + 2259, 2270, 2268, 2269, 2271, 2273, 2267, 2268, 2269, 2272, + 2273, 2274, 2278, 2264, 2276, 2264, 2277, 2271, 2279, 2276, + 2280, 2277, 2281, 2284, 2279, 2285, 2270, 2278, 2281, 2282, + 2272, 2283, 2286, 2287, 2282, 2286, 2283, 2274, 2285, 2372, + 2288, 2280, 2287, 2289, 2290, 2291, 2296, 2372, 2284, 2288, + 2292, 2293, 2289, 2290, 2294, 2298, 2292, 2293, 2294, 2291, + 2299, 2299, 2300, 2302, 2298, 2305, 2296, 2307, 2300, 2301, + 2301, 2304, 2302, 2303, 2303, 2308, 2304, 2310, 2301, 2309, + 2309, 2311, 2313, 2307, 2314, 2305, 2315, 2305, 2320, 2462, + 2311, 2308, 2310, 2316, 2313, 2318, 2462, 2319, 2318, 2321, - 2321, 2323, 2325, 2318, 2329, 2326, 2325, 2322, 2326, 2319, - 2327, 2327, 2328, 2330, 2331, 2332, 2334, 2328, 2336, 2332, - 2333, 2333, 2330, 2336, 2337, 2338, 2339, 2340, 2341, 2334, - 2342, 2340, 2343, 2344, 2331, 2342, 2345, 2346, 2343, 2344, - 2339, 2347, 2348, 2349, 2337, 2338, 2351, 2348, 2341, 2352, - 2353, 2354, 2363, 2355, 2345, 2353, 2346, 2354, 2351, 2360, - 2347, 2355, 2358, 2367, 2349, 2352, 2356, 2367, 2356, 2361, - 2361, 2358, 2362, 2360, 2368, 2362, 2364, 2364, 2363, 2369, - 2368, 2370, 2370, 2371, 2374, 2374, 2376, 2378, 2382, 2379, - 2383, 2369, 2371, 2382, 2384, 2385, 2386, 2386, 2392, 2384, + 2314, 2315, 2319, 2322, 2322, 2316, 2323, 2323, 2320, 2325, + 2325, 2321, 2326, 2327, 2328, 2326, 2329, 2330, 2327, 2332, + 2328, 2335, 2329, 2331, 2331, 2334, 2330, 2333, 2333, 2336, + 2337, 2337, 2338, 2332, 2340, 2335, 2339, 2334, 2338, 2340, + 2342, 2348, 2343, 2346, 2342, 2343, 2344, 2344, 2336, 2345, + 2339, 2347, 2346, 2349, 2345, 2350, 2350, 2349, 2351, 2353, + 2347, 2348, 2354, 2355, 2353, 2356, 2357, 2358, 2359, 2360, + 2357, 2351, 2361, 2359, 2362, 2360, 2363, 2364, 2361, 2356, + 2365, 2366, 2354, 2355, 2369, 2365, 2368, 2358, 2370, 2380, + 2377, 2371, 2362, 2370, 2375, 2363, 2364, 2371, 2368, 2373, - 2385, 2378, 2388, 2388, 2376, 2379, 2390, 2391, 2391, 2393, - 2394, 2396, 2390, 2398, 2392, 2394, 2383, 2397, 2400, 2400, - 2397, 2399, 2403, 2402, 2404, 2398, 2405, 2409, 2403, 2410, - 2396, 2393, 2402, 2399, 2407, 2407, 2408, 2412, 2412, 2408, - 2414, 2405, 2404, 2413, 2413, 2414, 2409, 2410, 2415, 2416, - 2417, 2418, 2421, 2418, 2419, 2417, 2420, 2422, 2416, 2423, - 2424, 2489, 2422, 2489, 2421, 0, 2415, 2425, 2419, 2431, - 2420, 2430, 2425, 2426, 2426, 2427, 2427, 2428, 2428, 2423, - 2424, 2429, 2429, 2430, 2432, 2433, 2433, 2431, 2435, 2432, - 2434, 2434, 2436, 2437, 2438, 2439, 2439, 2440, 2441, 2441, + 2369, 2373, 2366, 2375, 2377, 2378, 2378, 2379, 2381, 2381, + 2379, 2385, 2384, 2386, 2388, 2380, 2384, 2385, 2387, 2387, + 2391, 2391, 2393, 2388, 2395, 2386, 2396, 2399, 2400, 2401, + 2402, 2409, 2399, 2407, 2401, 2402, 2403, 2403, 2395, 2407, + 2393, 2410, 2396, 2405, 2405, 2408, 2408, 2409, 2411, 2413, + 2415, 2419, 2414, 2411, 2400, 2414, 2421, 2416, 2417, 2417, + 2419, 2420, 2415, 2410, 2422, 2424, 2424, 2420, 2413, 2416, + 2425, 2426, 0, 2425, 2421, 2427, 2429, 2429, 2431, 2422, + 2430, 2430, 2432, 2431, 2434, 2433, 2435, 2436, 2435, 2434, + 2426, 2437, 2438, 2427, 2433, 2440, 2441, 2439, 2442, 2448, - 2435, 2442, 2442, 2443, 2436, 2444, 2446, 2447, 2445, 2449, - 2438, 2450, 2453, 2437, 2443, 2445, 2440, 2444, 2446, 2448, - 2451, 2451, 2454, 2452, 2448, 2456, 2455, 2447, 2458, 2449, - 2457, 2450, 2452, 2459, 2459, 2461, 2460, 2462, 2453, 2455, - 2458, 2464, 2454, 2465, 2457, 2460, 2466, 2468, 2467, 2456, - 2461, 2467, 2462, 2469, 0, 2470, 2471, 2471, 2469, 2464, - 2470, 2468, 2472, 2472, 2478, 2465, 2473, 2473, 2479, 2466, - 2475, 2475, 2477, 2477, 2480, 2481, 2483, 2484, 2485, 2479, - 2487, 2486, 2478, 2488, 2490, 2493, 2493, 2491, 2492, 2487, - 2481, 2495, 2495, 2480, 2496, 2484, 2483, 2497, 2498, 2503, + 2432, 2436, 2439, 2442, 2438, 2437, 2443, 2443, 2444, 2444, + 2445, 2445, 2446, 2446, 2447, 2440, 2441, 2448, 2449, 2450, + 2450, 2451, 2451, 2449, 2452, 2453, 2447, 2454, 2455, 2456, + 2456, 2457, 2458, 2458, 2459, 2459, 2452, 2453, 2460, 2461, + 2463, 2464, 2466, 2465, 2455, 2467, 2469, 2454, 2465, 2460, + 2457, 2461, 2463, 2468, 2468, 2469, 2470, 2471, 2472, 2473, + 2474, 2464, 2466, 2475, 2476, 2467, 2476, 2477, 2478, 2478, + 2484, 2472, 2479, 2480, 2474, 2481, 2483, 2471, 2485, 2477, + 2499, 2479, 2470, 2473, 2486, 2475, 2487, 2486, 2480, 0, + 2481, 2488, 2484, 2489, 2483, 2497, 2488, 2502, 2489, 2499, - 2485, 2486, 2501, 2488, 2490, 2491, 2492, 2498, 2496, 2499, - 2499, 2501, 2502, 2502, 2504, 2505, 2506, 2503, 2507, 2497, - 2508, 2509, 2505, 2510, 2511, 2511, 2512, 2512, 2513, 2514, - 2520, 2506, 2504, 2515, 2516, 2516, 2507, 2509, 2508, 2515, - 2517, 2517, 2510, 2518, 2519, 2520, 2521, 2514, 2513, 2518, - 2522, 2523, 2524, 2525, 2526, 2527, 2523, 2527, 2532, 2526, - 2528, 2528, 2519, 2535, 2522, 2521, 2529, 2534, 2529, 2530, - 2530, 2536, 2524, 2525, 2537, 2538, 2534, 2532, 2539, 2543, - 2538, 2540, 2535, 2536, 2544, 2545, 2545, 2544, 2546, 2547, - 2548, 2548, 2551, 2549, 2537, 2550, 2551, 2553, 2539, 2543, + 2487, 2485, 2490, 2490, 2491, 2491, 2492, 2492, 2494, 2494, + 2496, 2496, 2498, 2497, 2500, 2503, 2504, 2502, 2506, 2505, + 2507, 2509, 2508, 2498, 2508, 2510, 2511, 2506, 2515, 2500, + 2512, 2512, 2516, 2503, 2514, 2514, 2517, 2522, 2504, 2505, + 2507, 2509, 2515, 2510, 2511, 2517, 2518, 2518, 2520, 2521, + 2521, 2523, 2524, 2525, 2516, 2522, 2526, 2520, 2527, 2524, + 2529, 2528, 2530, 2530, 2531, 2531, 2532, 2533, 2525, 2523, + 2535, 2535, 2534, 2538, 2526, 2539, 2527, 2528, 2534, 2529, + 2536, 2536, 2537, 2540, 2541, 2533, 2532, 2542, 2537, 2543, + 2539, 2538, 2542, 2544, 2545, 2546, 2551, 2546, 2541, 2545, - 2540, 2554, 2556, 2546, 2549, 2554, 2558, 2547, 2555, 2555, - 2550, 2559, 2553, 2560, 2563, 2556, 2561, 2561, 2564, 2565, - 2567, 2558, 2571, 2565, 2566, 2566, 2563, 2564, 2568, 2568, - 2569, 2559, 2570, 2560, 2572, 2569, 2573, 2580, 2571, 2567, - 2582, 2570, 2574, 2574, 2579, 2579, 2572, 2581, 2581, 2583, - 2587, 2584, 2585, 2582, 2586, 2586, 2573, 2589, 2589, 2580, - 2584, 2585, 2583, 2592, 2593, 2587, 2594, 2595, 2592, 2593, - 2596, 2597, 2595, 2598, 2601, 2599, 2602, 2604, 2596, 2603, - 2594, 2602, 2598, 2599, 2603, 2605, 2605, 2606, 2606, 2601, - 2597, 2608, 2604, 2607, 2607, 2609, 2610, 2611, 2608, 2612, + 2547, 2547, 2540, 2548, 2554, 2548, 2549, 2549, 2553, 2543, + 2555, 2556, 2558, 2544, 2557, 2551, 2559, 2553, 2562, 2557, + 0, 2563, 2555, 2554, 2563, 2564, 2564, 2565, 2566, 2567, + 2567, 2556, 2558, 2568, 2569, 2559, 2570, 2572, 2562, 2573, + 2570, 2575, 2565, 2573, 2568, 2577, 2566, 2574, 2574, 2569, + 2578, 2579, 2572, 2582, 2575, 2580, 2580, 2583, 2584, 2586, + 2577, 2590, 2584, 2585, 2585, 2582, 2583, 2587, 2587, 2588, + 2578, 2579, 2589, 2591, 2588, 2592, 2599, 2590, 2586, 2593, + 2593, 2589, 2598, 2598, 2601, 2591, 2600, 2600, 2602, 2606, + 2603, 2604, 2605, 2605, 2613, 2592, 2616, 2601, 2599, 2603, - 2609, 2613, 2614, 2614, 2615, 2612, 2613, 2616, 2617, 2617, - 2618, 2618, 2616, 2621, 2610, 2611, 2622, 2622, 2623, 2615, - 2625, 2623, 2624, 2627, 2626, 2625, 2621, 2624, 2624, 2626, - 2628, 2629, 2631, 2630, 2632, 2629, 2628, 2627, 2630, 2633, - 2634, 2631, 2635, 2638, 2636, 2640, 2637, 2633, 2635, 2632, - 2636, 2637, 2640, 2641, 2642, 2638, 2644, 2642, 2641, 2646, - 2647, 2634, 2648, 2649, 2646, 2647, 2650, 2656, 2644, 2651, - 2652, 2652, 2653, 2657, 2661, 2650, 2649, 2658, 2651, 2657, - 2648, 2653, 2662, 2658, 2663, 2656, 2664, 2664, 2665, 2666, - 2667, 2668, 2670, 2661, 2672, 2665, 2669, 2669, 2674, 2667, + 2604, 2602, 2608, 2608, 2606, 2611, 2612, 2614, 2613, 2615, + 2611, 2612, 2614, 2617, 2620, 2616, 2618, 2615, 2621, 2623, + 2622, 2627, 2617, 2621, 2618, 2622, 2624, 2624, 2626, 2620, + 2625, 2625, 2629, 2626, 2623, 2628, 2628, 2630, 2631, 2629, + 2627, 2632, 2630, 2633, 0, 2634, 2635, 2635, 2636, 2633, + 2634, 2642, 2637, 2638, 2638, 2644, 2631, 2637, 2644, 2632, + 2639, 2639, 2645, 2636, 2642, 2643, 2643, 2645, 2645, 2646, + 2647, 2648, 2649, 2650, 2646, 2647, 2651, 2650, 2649, 2652, + 2653, 2651, 2654, 2655, 2658, 2648, 2656, 2657, 2652, 2658, + 2654, 2659, 2656, 2657, 2661, 2653, 2663, 2662, 2665, 2663, - 2675, 2677, 2662, 2663, 2675, 3182, 2668, 3182, 2666, 2672, - 2678, 2670, 2676, 2676, 2679, 2680, 2678, 2682, 2674, 2683, - 2679, 2680, 2681, 2681, 2683, 2682, 2677, 2685, 2686, 2688, - 2689, 2691, 2692, 2689, 2690, 2688, 2685, 2695, 2690, 2694, - 2694, 2686, 2696, 2696, 2705, 2691, 0, 2692, 2697, 2697, - 2699, 2699, 2700, 2701, 2707, 2695, 2700, 2706, 2701, 2703, - 2703, 2709, 2706, 2708, 2705, 2711, 2707, 2717, 2708, 2708, - 2712, 2712, 2719, 2709, 2714, 2714, 2715, 2715, 2716, 2721, - 2717, 2716, 2722, 2722, 2727, 2711, 2723, 2723, 2724, 2724, - 2719, 2725, 2726, 2726, 2728, 2729, 2730, 2727, 2737, 2721, + 2667, 2661, 2662, 2659, 2655, 2667, 2668, 2669, 2670, 2671, + 2665, 2668, 2677, 2672, 2673, 2673, 2682, 2674, 2671, 2683, + 0, 2670, 2672, 2678, 2684, 2669, 2674, 2679, 2687, 2678, + 2677, 2685, 2685, 2679, 2686, 2682, 2688, 2689, 2691, 2683, + 2693, 2686, 2695, 2684, 2698, 2688, 2696, 2687, 2690, 2690, + 2696, 2704, 2689, 2697, 2697, 2693, 2704, 2691, 2699, 2700, + 2701, 2706, 2695, 2703, 2699, 2700, 2701, 2702, 2702, 2698, + 2706, 2703, 2707, 2709, 2710, 2712, 2711, 2710, 2713, 2709, + 2711, 2715, 2715, 2716, 2721, 2707, 2717, 2717, 2721, 2712, + 2718, 2718, 2722, 2713, 2720, 2720, 2726, 2722, 2724, 2724, - 2731, 2731, 2730, 2732, 2738, 2736, 2725, 2732, 2739, 2729, - 2736, 2736, 2728, 2740, 2741, 2742, 2744, 2744, 2743, 2740, - 2741, 2737, 2743, 2749, 2738, 2747, 2750, 2752, 2739, 2750, - 2747, 2749, 2753, 2754, 2754, 2753, 2755, 2756, 2757, 2758, - 2742, 2759, 2756, 2760, 2760, 2764, 2761, 2762, 2763, 2765, - 2762, 2768, 2752, 2755, 2755, 2759, 2757, 2765, 2762, 2758, - 2761, 2766, 2763, 2767, 2764, 2774, 2766, 2766, 2767, 2767, - 2768, 2769, 2769, 2770, 2770, 2771, 2771, 2772, 2772, 2773, - 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2775, 2780, 2781, - 2778, 2782, 2783, 2780, 2785, 2785, 2786, 2786, 2781, 2787, + 2727, 2716, 2728, 2729, 2732, 2727, 2730, 2742, 2729, 2729, + 2733, 2733, 2735, 2735, 2728, 2738, 2726, 2740, 2730, 2736, + 2736, 2746, 2737, 2749, 2732, 2737, 2748, 2742, 2738, 2743, + 2743, 2744, 2744, 2745, 2745, 2740, 2746, 2747, 2747, 2748, + 2750, 2749, 2751, 2752, 2752, 2753, 2756, 2760, 2751, 2753, + 2757, 2759, 2756, 2761, 2750, 2757, 2759, 2759, 2762, 2763, + 2764, 2765, 2775, 2766, 2772, 2763, 2764, 2766, 2767, 2767, + 2760, 2770, 2772, 2761, 2773, 2778, 2770, 2773, 2762, 2776, + 2777, 2777, 2776, 2779, 2780, 2781, 2765, 2775, 2779, 2782, + 2783, 2783, 2778, 2778, 2784, 2785, 2786, 2787, 2785, 2788, - 2788, 2791, 2787, 2776, 2793, 2779, 2790, 2790, 2791, 2793, - 2777, 2782, 2783, 2792, 2792, 2795, 2795, 2796, 2788, 2797, - 2798, 2800, 2801, 2801, 2803, 2804, 2796, 2802, 2797, 2798, - 2805, 2802, 2806, 2803, 2810, 2808, 2809, 2807, 2810, 2800, - 2818, 2805, 2807, 2807, 2804, 2809, 2814, 2806, 2808, 2815, - 2815, 2814, 2817, 2817, 2818, 2819, 2820, 2822, 2822, 2823, - 2824, 2827, 2828, 2829, 2830, 2832, 2834, 2870, 2823, 2852, - 2830, 2828, 2824, 2836, 2820, 2852, 2837, 2832, 2836, 2839, - 2819, 2837, 2870, 2829, 2838, 2838, 2827, 2834, 2839, 2841, - 2848, 2842, 2842, 2847, 2841, 2842, 2844, 2844, 2845, 2845, + 2791, 2810, 2780, 2782, 2810, 2781, 2785, 2788, 2784, 2789, + 2786, 2800, 2790, 2799, 2789, 2789, 2787, 2790, 2790, 2791, + 2792, 2792, 2793, 2793, 2794, 2794, 2795, 2795, 2796, 2796, + 2797, 2798, 2802, 2799, 2801, 2803, 2798, 2800, 2804, 2801, + 2803, 2805, 2806, 2808, 2808, 2811, 2797, 2804, 2809, 2809, + 2814, 2802, 2813, 2813, 2815, 2815, 2823, 2814, 2819, 2816, + 2820, 2805, 2806, 2811, 2816, 2818, 2818, 2819, 2821, 2820, + 2824, 2824, 2825, 2826, 2823, 2827, 2825, 2821, 2828, 2830, + 2829, 2832, 2826, 2831, 2830, 2830, 2842, 2833, 2837, 2828, + 2832, 2833, 2841, 2837, 2827, 2829, 2831, 2838, 2838, 2840, - 2846, 2846, 2847, 2849, 2850, 2856, 2853, 2854, 2857, 2850, - 2848, 2853, 2854, 2855, 2855, 2858, 2859, 2860, 2861, 2862, - 2857, 2859, 2849, 2856, 2861, 2863, 2863, 2865, 2866, 2867, - 2869, 2865, 2871, 2866, 2867, 2860, 2858, 2868, 2868, 2873, - 2875, 2875, 2877, 2878, 2862, 2880, 2879, 2871, 2881, 2869, - 2879, 2882, 2883, 2884, 2880, 2877, 2878, 2886, 2884, 2873, - 2883, 2885, 2885, 2887, 2881, 2888, 2886, 2889, 2889, 2890, - 2882, 2893, 2893, 2894, 2894, 2896, 2898, 2898, 2900, 2901, - 2903, 2887, 2902, 2905, 2905, 2903, 2906, 2908, 2890, 2909, - 2907, 2888, 2910, 2908, 2900, 2901, 2896, 2918, 2902, 2907, + 2840, 2843, 2845, 2845, 2846, 2847, 2841, 2850, 2852, 2851, + 2853, 2842, 2855, 2846, 2857, 2859, 2853, 2847, 2851, 2843, + 2859, 2860, 2861, 2861, 2855, 2862, 2860, 2865, 2852, 2866, + 2872, 2864, 2850, 2873, 2862, 2857, 2864, 2867, 2867, 2872, + 2865, 2867, 2874, 2866, 2869, 2869, 2870, 2870, 2871, 2871, + 2875, 2877, 2881, 2873, 2878, 2875, 2882, 2877, 2879, 2878, + 2883, 2874, 2884, 2879, 2880, 2880, 2885, 2884, 2882, 2886, + 2881, 2887, 2888, 2888, 2890, 2886, 2894, 2891, 2890, 2895, + 2892, 2883, 2891, 2896, 2885, 2892, 2893, 2893, 2898, 2900, + 2900, 2902, 2903, 2904, 2895, 2894, 2887, 2904, 2896, 2906, - 2912, 2912, 2913, 2914, 2915, 2915, 2906, 2919, 2922, 2920, - 2931, 2910, 2909, 2919, 2920, 2925, 2913, 2918, 2923, 2923, - 2924, 2924, 2914, 2926, 2926, 2927, 2929, 2930, 2928, 2931, - 2922, 2933, 2932, 2930, 2941, 2925, 2927, 2928, 2934, 2934, - 2936, 2936, 2935, 2926, 2932, 2935, 2929, 2940, 2946, 2942, - 2945, 2933, 2943, 2943, 2941, 2942, 2945, 2944, 2948, 2940, - 2944, 2949, 2949, 2948, 2950, 2951, 2946, 2952, 2953, 2950, - 2954, 2954, 2957, 2952, 2958, 2956, 2959, 2960, 2960, 2961, - 2962, 0, 2963, 2967, 2951, 2953, 2953, 2956, 2967, 2959, - 2957, 2963, 2965, 2965, 2966, 2966, 2962, 2968, 2961, 2958, + 2905, 2907, 2908, 2912, 2902, 2903, 2909, 2911, 2898, 2905, + 2908, 2909, 2910, 2910, 2913, 2906, 2911, 2914, 2914, 2915, + 2907, 2912, 2918, 2918, 2919, 2919, 2921, 2923, 2923, 2925, + 2926, 2928, 2927, 2930, 2930, 2931, 2928, 2933, 2915, 2934, + 2913, 2932, 2935, 2933, 2938, 2925, 2926, 2921, 2927, 2939, + 2932, 2937, 2937, 2940, 2940, 2931, 2943, 2944, 2938, 2945, + 2947, 2935, 2934, 2944, 2945, 2948, 2948, 2950, 2939, 2949, + 2949, 2951, 2951, 2952, 2953, 2954, 2943, 2956, 2957, 2955, + 2958, 0, 2947, 2953, 2952, 2955, 2960, 2950, 2959, 2959, + 2957, 2951, 2963, 2963, 2961, 2954, 2956, 2961, 2967, 2962, - 2969, 2970, 2970, 2971, 2971, 2969, 2972, 2972, 2973, 2974, - 2975, 2968, 2976, 2978, 2978, 2981, 2975, 2976, 2983, 2984, - 2985, 2973, 2986, 2986, 2988, 2988, 2989, 2990, 2992, 2991, - 2993, 2994, 2994, 2998, 2981, 2974, 2995, 2995, 2997, 2993, - 2983, 2984, 2985, 2991, 2997, 2999, 2990, 3007, 2992, 3000, - 3003, 3003, 2989, 2998, 3000, 3005, 3005, 3006, 3009, 3008, - 3010, 3007, 3006, 3014, 2999, 3008, 3011, 3011, 3010, 3012, - 3009, 3015, 3016, 3017, 3012, 3018, 3020, 3016, 3021, 3022, - 3023, 3018, 3026, 3014, 3020, 3017, 3025, 3028, 3027, 3029, - 3031, 3015, 3032, 3036, 3029, 3031, 3033, 3021, 3026, 3022, + 2958, 2960, 2962, 2968, 2973, 2969, 2970, 2970, 2972, 2971, + 2967, 2969, 2971, 2975, 2972, 2976, 2976, 2978, 2975, 2977, + 2979, 2980, 2973, 2968, 2977, 2983, 2979, 2981, 2981, 2984, + 2985, 2986, 2987, 2987, 2988, 2989, 2978, 2983, 2980, 2980, + 2990, 2992, 2992, 2994, 2986, 2993, 2993, 2984, 2994, 2990, + 2995, 2989, 2996, 2988, 3000, 2985, 3001, 2996, 2997, 2997, + 2998, 2998, 2999, 2999, 2995, 3002, 3008, 3000, 3003, 3005, + 3005, 3002, 3010, 3003, 3011, 3012, 3013, 3013, 3015, 3015, + 3016, 3017, 3001, 3019, 3018, 3008, 3020, 3021, 3021, 3022, + 3022, 3025, 0, 3024, 3010, 3020, 3011, 3012, 3018, 3024, - 3023, 0, 3033, 3038, 3025, 3027, 3027, 3037, 3028, 3034, - 3037, 3043, 3032, 3036, 3034, 3043, 3038, 3041, 3041, 3042, - 3042, 3047, 3047, 3048, 3049, 3050, 3050, 3061, 3048, 3052, - 3052, 3053, 3053, 3056, 3053, 3054, 3054, 3056, 3054, 3055, - 3055, 3058, 3055, 3049, 3059, 3061, 3058, 3060, 3060, 3062, - 3065, 3066, 3067, 3059, 3068, 3068, 3071, 3067, 3072, 3074, - 3073, 3075, 3077, 3062, 3073, 3072, 3078, 0, 3074, 3082, - 3065, 3066, 3079, 3079, 3083, 3078, 3075, 3080, 3080, 3083, - 3077, 3071, 3081, 3081, 3082, 3084, 3085, 3086, 3087, 3088, - 3089, 3085, 3085, 3086, 3084, 3090, 3091, 3084, 3092, 3094, + 3017, 3026, 3027, 3019, 3030, 3030, 3016, 3027, 3032, 3032, + 3033, 3025, 3034, 3035, 3037, 3033, 3036, 3038, 3038, 3035, + 3026, 3041, 3037, 3043, 3039, 3041, 3034, 3042, 3036, 3039, + 3044, 3045, 3042, 3046, 3047, 3050, 3045, 3051, 3049, 3052, + 3047, 0, 3054, 3043, 3056, 3046, 3049, 3055, 3057, 3062, + 3044, 3058, 3061, 3060, 3050, 3062, 3058, 3051, 3060, 3052, + 3054, 3056, 3056, 3055, 3065, 3063, 3067, 3078, 3066, 3057, + 3063, 3066, 3061, 3070, 3070, 3071, 3071, 3072, 0, 3067, + 3077, 3072, 3076, 3076, 3065, 3077, 3078, 3079, 3079, 3081, + 3081, 3082, 3082, 3085, 3082, 3083, 3083, 3085, 3083, 3084, - 3090, 3091, 3093, 3093, 3088, 3094, 3095, 3096, 3096, 3097, - 3097, 3089, 3095, 3087, 3098, 3099, 3105, 3092, 3102, 3102, - 3099, 3104, 3104, 3108, 3108, 3105, 3109, 3109, 3116, 3098, - 3110, 3110, 3111, 3111, 3112, 3112, 3113, 3113, 3114, 3114, - 3115, 3115, 3118, 3119, 3119, 3121, 3120, 3122, 3126, 3124, - 3128, 3118, 3125, 3125, 3116, 3120, 3127, 3121, 3129, 3129, - 3130, 3134, 3128, 3126, 3131, 3131, 3136, 3122, 3124, 3127, - 3135, 3137, 3137, 3135, 3140, 3130, 3138, 3140, 3141, 3134, - 3143, 3142, 3144, 3146, 3141, 3143, 3145, 3148, 3149, 3156, - 3153, 3173, 3136, 3148, 3138, 3142, 3152, 3149, 3165, 3146, + 3084, 3087, 3084, 3088, 3089, 3089, 3087, 3090, 3091, 3094, + 3095, 3096, 3088, 3097, 3097, 3100, 3096, 3101, 3103, 3102, + 3104, 3106, 3091, 3102, 3101, 3090, 3107, 3103, 3109, 3094, + 3095, 3107, 3108, 3108, 3113, 3104, 3118, 3109, 0, 3106, + 3100, 3110, 3110, 3111, 3111, 3112, 3112, 3114, 3115, 3113, + 3116, 3119, 3114, 3117, 3120, 3116, 3116, 3115, 3121, 3117, + 3115, 3118, 3122, 3121, 3123, 3125, 3119, 3122, 3124, 3124, + 3126, 3125, 3127, 3127, 3129, 3120, 3126, 3128, 3128, 3130, + 3133, 3133, 3136, 3123, 3130, 3135, 3135, 3139, 3139, 3129, + 3147, 3136, 3140, 3140, 3141, 3141, 3142, 3142, 3143, 3143, - 3152, 3144, 3176, 3165, 3145, 3153, 3166, 3168, 3179, 3166, - 3169, 3169, 3170, 3170, 3173, 3156, 3171, 3171, 3174, 3175, - 3168, 3177, 3176, 3175, 3181, 3180, 3183, 3174, 3186, 3181, - 3185, 3179, 3184, 3184, 3187, 3177, 3180, 3188, 3189, 3190, - 3191, 3183, 3197, 3185, 3192, 3193, 3194, 3186, 3203, 3191, - 3193, 3202, 3187, 3188, 3190, 3195, 3192, 3196, 3196, 3198, - 3195, 3210, 3197, 3189, 3198, 3202, 3205, 3194, 3203, 3204, - 3204, 3206, 3206, 3207, 3207, 3205, 3208, 3208, 3209, 3209, - 3210, 3211, 3212, 3213, 3214, 3212, 3215, 3216, 3213, 3214, - 3217, 3218, 3219, 3220, 3221, 3221, 3217, 3222, 3220, 3223, + 3144, 3144, 3145, 3145, 3146, 3146, 3149, 3150, 3150, 3151, + 3152, 3153, 3157, 3155, 3159, 3149, 3147, 3158, 3151, 3156, + 3156, 3163, 3152, 3160, 3160, 3167, 3159, 3157, 3161, 3161, + 3158, 3153, 3155, 3164, 3164, 3168, 3163, 3169, 3168, 3170, + 3170, 3171, 3173, 3167, 3174, 3173, 3175, 3176, 3177, 3179, + 3174, 3178, 3176, 3182, 3185, 3181, 3186, 3189, 3185, 3171, + 3175, 3181, 3182, 3169, 3201, 3179, 3206, 3177, 3198, 3178, + 3208, 3186, 3199, 3198, 3208, 3199, 3209, 3201, 3202, 3202, + 3203, 3203, 3207, 3189, 3204, 3204, 3211, 3213, 3214, 3206, + 3215, 3207, 3216, 3217, 3216, 3215, 3209, 3218, 3218, 3214, - 3223, 3211, 3216, 3226, 3219, 3218, 3225, 3225, 3227, 3228, - 3228, 3215, 3232, 3230, 3235, 3235, 3237, 3222, 3226, 3236, - 3236, 3238, 3241, 3239, 3237, 3240, 3242, 3227, 3230, 3239, - 3232, 3240, 3243, 3244, 3245, 3245, 3241, 3250, 3244, 3242, - 3238, 3247, 3247, 3251, 3254, 3253, 3256, 3257, 3254, 3258, - 3262, 3243, 3257, 3261, 3259, 3262, 3260, 3263, 3250, 3253, - 3264, 3264, 3263, 3251, 3267, 3268, 3256, 3259, 3258, 3260, - 3269, 3271, 3261, 3270, 3270, 3272, 3271, 3273, 3273, 3277, - 3274, 3272, 3275, 3268, 3267, 3274, 3276, 3275, 3278, 3269, - 3281, 3276, 3280, 3280, 3278, 3281, 3282, 3282, 3277, 3284, + 3211, 3219, 3220, 3222, 3221, 3223, 3225, 3227, 3217, 3224, + 3213, 3226, 3227, 3228, 3219, 3225, 3230, 3230, 3231, 3222, + 3229, 3220, 3221, 3226, 3224, 3229, 3232, 3236, 3237, 3245, + 3223, 3232, 3238, 3238, 3228, 3239, 3240, 3240, 3231, 3241, + 3241, 3236, 3242, 3242, 3239, 3243, 3243, 3244, 3237, 3245, + 3246, 3247, 3248, 3246, 3249, 3250, 3247, 3248, 3251, 3252, + 3253, 3256, 3254, 3260, 3251, 3261, 3244, 3254, 3255, 3255, + 3250, 3264, 3253, 3252, 3257, 3257, 3259, 3259, 3260, 3249, + 3266, 3256, 3262, 3262, 3261, 3271, 3264, 3269, 3269, 3270, + 3270, 3272, 3275, 3271, 3273, 3274, 3276, 3277, 3266, 3278, - 3285, 3286, 3287, 3284, 3288, 3289, 3290, 3291, 3286, 3293, - 3293, 3289, 3295, 3295, 3298, 3296, 3299, 3297, 3300, 3285, - 3291, 3287, 3297, 3288, 3296, 3290, 3303, 3296, 3301, 3301, - 3305, 3300, 3302, 3298, 3307, 3299, 3312, 3302, 0, 3303, - 3306, 3306, 3308, 3308, 3309, 3309, 3310, 3311, 3313, 3313, - 3319, 3310, 3314, 3307, 3311, 3312, 3305, 3314, 3315, 3317, - 3315, 3316, 3316, 3318, 3321, 3324, 3317, 3320, 3328, 3319, - 3318, 3326, 3320, 3323, 3323, 3327, 3326, 3329, 3330, 3330, - 3327, 3332, 3332, 3321, 3324, 3333, 3334, 3328, 3335, 3335, - 3336, 3336, 3337, 3339, 3339, 3341, 3329, 3340, 3340, 3337, + 3273, 3274, 3279, 3279, 3278, 3284, 3275, 3281, 3281, 3276, + 3272, 3285, 3290, 3287, 3288, 3291, 3277, 3292, 3288, 3295, + 3291, 3293, 3294, 3296, 3297, 3301, 3284, 3287, 3296, 3297, + 3302, 3285, 3290, 3303, 3293, 3294, 3292, 3306, 3295, 3298, + 3298, 3304, 3304, 3306, 3305, 3301, 3307, 3307, 3302, 3305, + 3308, 3309, 3303, 3310, 3311, 3308, 3309, 3312, 3310, 3314, + 3314, 3315, 3319, 3312, 3316, 3316, 3315, 3318, 3320, 3321, + 3322, 3318, 3323, 3311, 3324, 3320, 3332, 3325, 3323, 3327, + 3327, 3319, 3329, 3329, 3333, 3330, 3331, 3334, 3321, 3322, + 3325, 3331, 3337, 3324, 3330, 3332, 3336, 3330, 3335, 3335, - 3347, 3343, 3341, 3346, 3333, 3334, 3343, 3348, 3346, 3349, - 3349, 3350, 3350, 0, 0, 0, 0, 0, 0, 3347, - 0, 0, 0, 0, 0, 0, 3348, 3354, 3354, 3354, - 3354, 3354, 3354, 3354, 3355, 3355, 3355, 3355, 3355, 3355, - 3355, 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3357, 3357, - 3357, 3357, 3357, 3357, 3357, 3358, 3358, 3358, 3358, 3358, - 3358, 3358, 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3360, - 3360, 3360, 3360, 3360, 3360, 3360, 3362, 3362, 0, 3362, - 3362, 3362, 3362, 3363, 3363, 0, 0, 0, 3363, 3363, - 3364, 3364, 0, 0, 3364, 0, 3364, 3365, 0, 0, + 3334, 3336, 3339, 3333, 3341, 3337, 3340, 3340, 3342, 3342, + 3343, 3343, 3344, 3345, 3346, 3347, 3347, 3344, 0, 3348, + 3345, 3350, 3350, 3341, 3348, 3349, 3353, 3349, 3339, 3351, + 3352, 3355, 3358, 3346, 3354, 3362, 3351, 3352, 3360, 3354, + 3357, 3357, 3361, 3360, 3363, 3353, 3367, 3361, 3364, 3364, + 3355, 3358, 3366, 3366, 3362, 3368, 3369, 3369, 3370, 3370, + 3371, 3373, 3373, 3363, 3375, 3367, 3381, 3371, 3374, 3374, + 3377, 3375, 3380, 3382, 3368, 3377, 0, 3380, 3383, 3383, + 3384, 3384, 0, 0, 0, 3381, 0, 0, 0, 0, + 0, 0, 3382, 3388, 3388, 3388, 3388, 3388, 3388, 3388, - 0, 0, 0, 3365, 3366, 3366, 0, 0, 0, 3366, - 3366, 3367, 0, 0, 0, 0, 0, 3367, 3368, 3368, - 0, 3368, 3368, 3368, 3368, 3369, 0, 0, 0, 0, - 0, 3369, 3370, 3370, 0, 0, 0, 3370, 3370, 3371, - 3371, 0, 3371, 3371, 3371, 3371, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3353, 3353 + 3389, 3389, 3389, 3389, 3389, 3389, 3389, 3390, 3390, 3390, + 3390, 3390, 3390, 3390, 3391, 3391, 3391, 3391, 3391, 3391, + 3391, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3393, 3393, + 3393, 3393, 3393, 3393, 3393, 3394, 3394, 3394, 3394, 3394, + 3394, 3394, 3396, 3396, 0, 3396, 3396, 3396, 3396, 3397, + 3397, 0, 0, 0, 3397, 3397, 3398, 3398, 0, 0, + 3398, 0, 3398, 3399, 0, 0, 0, 0, 0, 3399, + 3400, 3400, 0, 0, 0, 3400, 3400, 3401, 0, 0, + 0, 0, 0, 3401, 3402, 3402, 0, 3402, 3402, 3402, + 3402, 3403, 0, 0, 0, 0, 0, 3403, 3404, 3404, + + 0, 0, 0, 3404, 3404, 3405, 3405, 0, 3405, 3405, + 3405, 3405, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, + 3387, 3387, 3387 } ; static yy_state_type yy_last_accepting_state; @@ -3185,7 +3212,7 @@ static void config_end_include(void) } #endif -#line 3186 "" +#line 3213 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3194,9 +3221,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3195 "" +#line 3222 "" -#line 3197 "" +#line 3224 "" #define INITIAL 0 #define quotedstring 1 @@ -3420,7 +3447,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3421 "" +#line 3448 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3453,13 +3480,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 >= 3354 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6547 ); + while ( yy_base[yy_current_state] != 6613 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4430,435 +4457,435 @@ YY_RULE_SETUP case 189: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 248: YY_RULE_SETUP -#line 464 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 463 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 249: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 464 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 250: YY_RULE_SETUP -#line 467 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 466 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 251: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 252: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 253: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 254: YY_RULE_SETUP -#line 472 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 471 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 255: YY_RULE_SETUP -#line 474 "./util/configlexer.lex" +#line 472 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" +#line 474 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP -#line 478 "./util/configlexer.lex" +#line 476 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP -#line 480 "./util/configlexer.lex" +#line 478 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 259: YY_RULE_SETUP -#line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 480 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 260: YY_RULE_SETUP -#line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 482 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 272: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 273: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 274: YY_RULE_SETUP @@ -4868,240 +4895,250 @@ YY_RULE_SETUP case 275: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 286: YY_RULE_SETUP -#line 510 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 509 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 287: YY_RULE_SETUP -#line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 510 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 288: YY_RULE_SETUP -#line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 512 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 292: YY_RULE_SETUP #line 517 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 293: YY_RULE_SETUP #line 518 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 294: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 309: YY_RULE_SETUP #line 534 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 310: YY_RULE_SETUP #line 535 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 311: YY_RULE_SETUP #line 536 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 312: YY_RULE_SETUP #line 537 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 313: YY_RULE_SETUP #line 538 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 314: YY_RULE_SETUP #line 539 "./util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } YY_BREAK case 315: -/* rule 315 can match eol */ YY_RULE_SETUP #line 540 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 316: +YY_RULE_SETUP +#line 541 "./util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 317: +/* rule 317 can match eol */ +YY_RULE_SETUP +#line 542 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 316: +case 318: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 545 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 544 "./util/configlexer.lex" +#line 546 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 317: +case 319: YY_RULE_SETUP -#line 549 "./util/configlexer.lex" +#line 551 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 318: -/* rule 318 can match eol */ +case 320: +/* rule 320 can match eol */ YY_RULE_SETUP -#line 550 "./util/configlexer.lex" +#line 552 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 319: +case 321: YY_RULE_SETUP -#line 552 "./util/configlexer.lex" +#line 554 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5114,34 +5151,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 320: +case 322: YY_RULE_SETUP -#line 564 "./util/configlexer.lex" +#line 566 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 565 "./util/configlexer.lex" +#line 567 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 321: +case 323: YY_RULE_SETUP -#line 570 "./util/configlexer.lex" +#line 572 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 322: -/* rule 322 can match eol */ +case 324: +/* rule 324 can match eol */ YY_RULE_SETUP -#line 571 "./util/configlexer.lex" +#line 573 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 323: +case 325: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5154,38 +5191,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 324: +case 326: YY_RULE_SETUP -#line 585 "./util/configlexer.lex" +#line 587 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 587 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 325: -YY_RULE_SETUP -#line 591 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 326: -/* rule 326 can match eol */ -YY_RULE_SETUP -#line 592 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 327: YY_RULE_SETUP #line 593 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 328: +/* rule 328 can match eol */ YY_RULE_SETUP #line 594 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 329: +YY_RULE_SETUP +#line 595 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 330: +YY_RULE_SETUP +#line 596 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5193,27 +5230,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 599 "./util/configlexer.lex" +#line 601 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 329: +case 331: YY_RULE_SETUP -#line 603 "./util/configlexer.lex" +#line 605 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 330: -/* rule 330 can match eol */ +case 332: +/* rule 332 can match eol */ YY_RULE_SETUP -#line 604 "./util/configlexer.lex" +#line 606 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 331: +case 333: YY_RULE_SETUP -#line 606 "./util/configlexer.lex" +#line 608 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5223,7 +5260,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 612 "./util/configlexer.lex" +#line 614 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5238,39 +5275,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 332: +case 334: YY_RULE_SETUP -#line 626 "./util/configlexer.lex" +#line 628 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 629 "./util/configlexer.lex" +#line 631 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 333: -YY_RULE_SETUP -#line 633 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK -case 334: -/* rule 334 can match eol */ -YY_RULE_SETUP -#line 634 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } - YY_BREAK case 335: YY_RULE_SETUP #line 635 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 336: +/* rule 336 can match eol */ YY_RULE_SETUP #line 636 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +case 337: +YY_RULE_SETUP +#line 637 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 338: +YY_RULE_SETUP +#line 638 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5279,29 +5316,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 642 "./util/configlexer.lex" +#line 644 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 337: +case 339: YY_RULE_SETUP -#line 646 "./util/configlexer.lex" +#line 648 "./util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 338: -/* rule 338 can match eol */ +case 340: +/* rule 340 can match eol */ YY_RULE_SETUP -#line 647 "./util/configlexer.lex" +#line 649 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 339: +case 341: YY_RULE_SETUP -#line 651 "./util/configlexer.lex" +#line 653 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5310,33 +5347,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 340: +case 342: YY_RULE_SETUP -#line 659 "./util/configlexer.lex" +#line 661 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 341: +case 343: YY_RULE_SETUP -#line 663 "./util/configlexer.lex" +#line 665 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 342: +case 344: YY_RULE_SETUP -#line 667 "./util/configlexer.lex" +#line 669 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 343: +case 345: YY_RULE_SETUP -#line 671 "./util/configlexer.lex" +#line 673 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5337 "" +#line 5374 "" case YY_END_OF_BUFFER: { @@ -5631,7 +5668,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3354 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5659,11 +5696,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 >= 3354 ) + if ( yy_current_state >= 3388 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3353); + yy_is_jam = (yy_current_state == 3387); return yy_is_jam ? 0 : yy_current_state; } @@ -6302,6 +6339,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 671 "./util/configlexer.lex" +#line 673 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index bc4e92c7f..b52ddf81e 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -401,6 +401,8 @@ key-cache-slabs{COLON} { YDVAR(1, VAR_KEY_CACHE_SLABS) } neg-cache-size{COLON} { YDVAR(1, VAR_NEG_CACHE_SIZE) } val-nsec3-keysize-iterations{COLON} { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +zonemd-permissive-mode{COLON} { YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +zonemd-reject-absence{COLON} { YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } add-holddown{COLON} { YDVAR(1, VAR_ADD_HOLDDOWN) } del-holddown{COLON} { YDVAR(1, VAR_DEL_HOLDDOWN) } keep-missing{COLON} { YDVAR(1, VAR_KEEP_MISSING) } diff --git a/util/configparser.c b/util/configparser.c index c0b9ae011..4da644d3a 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -445,7 +445,9 @@ extern int yydebug; VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 563 /* VAR_NSID */ + VAR_NSID = 563, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 564, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_REJECT_ABSENCE = 565 /* VAR_ZONEMD_REJECT_ABSENCE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -759,6 +761,8 @@ extern int yydebug; #define VAR_EDNS_CLIENT_STRING 561 #define VAR_EDNS_CLIENT_STRING_OPCODE 562 #define VAR_NSID 563 +#define VAR_ZONEMD_PERMISSIVE_MODE 564 +#define VAR_ZONEMD_REJECT_ABSENCE 565 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -768,7 +772,7 @@ union YYSTYPE char* str; -#line 772 "util/configparser.c" +#line 776 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -1095,340 +1099,344 @@ enum yysymbol_kind_t YYSYMBOL_VAR_EDNS_CLIENT_STRING = 306, /* VAR_EDNS_CLIENT_STRING */ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 307, /* VAR_EDNS_CLIENT_STRING_OPCODE */ YYSYMBOL_VAR_NSID = 308, /* VAR_NSID */ - YYSYMBOL_YYACCEPT = 309, /* $accept */ - YYSYMBOL_toplevelvars = 310, /* toplevelvars */ - YYSYMBOL_toplevelvar = 311, /* toplevelvar */ - YYSYMBOL_force_toplevel = 312, /* force_toplevel */ - YYSYMBOL_serverstart = 313, /* serverstart */ - YYSYMBOL_contents_server = 314, /* contents_server */ - YYSYMBOL_content_server = 315, /* content_server */ - YYSYMBOL_stubstart = 316, /* stubstart */ - YYSYMBOL_contents_stub = 317, /* contents_stub */ - YYSYMBOL_content_stub = 318, /* content_stub */ - YYSYMBOL_forwardstart = 319, /* forwardstart */ - YYSYMBOL_contents_forward = 320, /* contents_forward */ - YYSYMBOL_content_forward = 321, /* content_forward */ - YYSYMBOL_viewstart = 322, /* viewstart */ - YYSYMBOL_contents_view = 323, /* contents_view */ - YYSYMBOL_content_view = 324, /* content_view */ - YYSYMBOL_authstart = 325, /* authstart */ - YYSYMBOL_contents_auth = 326, /* contents_auth */ - YYSYMBOL_content_auth = 327, /* content_auth */ - YYSYMBOL_rpz_tag = 328, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 329, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 330, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 331, /* rpz_log */ - YYSYMBOL_rpz_log_name = 332, /* rpz_log_name */ - YYSYMBOL_rpzstart = 333, /* rpzstart */ - YYSYMBOL_contents_rpz = 334, /* contents_rpz */ - YYSYMBOL_content_rpz = 335, /* content_rpz */ - YYSYMBOL_server_num_threads = 336, /* server_num_threads */ - YYSYMBOL_server_verbosity = 337, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 338, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 339, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 340, /* server_extended_statistics */ - YYSYMBOL_server_shm_enable = 341, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 342, /* server_shm_key */ - YYSYMBOL_server_port = 343, /* server_port */ - YYSYMBOL_server_send_client_subnet = 344, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 345, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 346, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 347, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 348, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 349, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 350, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 351, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 352, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 353, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 354, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 355, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 356, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 357, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 358, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 359, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 360, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 361, /* server_interface_automatic */ - YYSYMBOL_server_do_ip4 = 362, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 363, /* server_do_ip6 */ - YYSYMBOL_server_do_udp = 364, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 365, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 366, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 367, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 368, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 369, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 370, /* server_tcp_idle_timeout */ - YYSYMBOL_server_tcp_keepalive = 371, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 372, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_tcp_upstream = 373, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 374, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 375, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 376, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 377, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 378, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 379, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 380, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 381, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 382, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 383, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 384, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 385, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 386, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 387, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 388, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 389, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 390, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 391, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 392, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 393, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 394, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 395, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 396, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 397, /* server_log_queries */ - YYSYMBOL_server_log_replies = 398, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 399, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 400, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 401, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 402, /* server_chroot */ - YYSYMBOL_server_username = 403, /* server_username */ - YYSYMBOL_server_directory = 404, /* server_directory */ - YYSYMBOL_server_logfile = 405, /* server_logfile */ - YYSYMBOL_server_pidfile = 406, /* server_pidfile */ - YYSYMBOL_server_root_hints = 407, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 408, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 409, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 410, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 411, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 412, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 413, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 414, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 415, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 416, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 417, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 418, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 419, /* server_hide_trustanchor */ - YYSYMBOL_server_identity = 420, /* server_identity */ - YYSYMBOL_server_version = 421, /* server_version */ - YYSYMBOL_server_nsid = 422, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 423, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 424, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 425, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 426, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 427, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 428, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 429, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 430, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 431, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 432, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 433, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 434, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 435, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 436, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 437, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 438, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 439, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 440, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 441, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 442, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 443, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 444, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 445, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 446, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 447, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_keep_probing = 448, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 449, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 450, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 451, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 452, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 453, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 454, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 455, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 456, /* server_harden_algo_downgrade */ - YYSYMBOL_server_use_caps_for_id = 457, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 458, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 459, /* server_private_address */ - YYSYMBOL_server_private_domain = 460, /* server_private_domain */ - YYSYMBOL_server_prefetch = 461, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 462, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 463, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 464, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 465, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 466, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 467, /* server_access_control */ - YYSYMBOL_server_module_conf = 468, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 469, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 470, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 471, /* server_val_sig_skew_max */ - YYSYMBOL_server_cache_max_ttl = 472, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 473, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 474, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 475, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 476, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 477, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 478, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 479, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 480, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 481, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 482, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 483, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 484, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_serve_original_ttl = 485, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 486, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 487, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 488, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 489, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_add_holddown = 490, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 491, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 492, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 493, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 494, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 495, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 496, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 497, /* server_local_zone */ - YYSYMBOL_server_local_data = 498, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 499, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 500, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 501, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 502, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 503, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 504, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 505, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 506, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_define_tag = 507, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 508, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 509, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 510, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 511, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 512, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 513, /* server_access_control_view */ - YYSYMBOL_server_response_ip_tag = 514, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 515, /* server_ip_ratelimit */ - YYSYMBOL_server_ratelimit = 516, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 517, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 518, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 519, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 520, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 521, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 522, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 523, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 524, /* server_ratelimit_factor */ - YYSYMBOL_server_low_rtt = 525, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 526, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 527, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 528, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 529, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 530, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 531, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 532, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 533, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 534, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 535, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 536, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 537, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 538, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 539, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 540, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 541, /* server_edns_client_string_opcode */ - YYSYMBOL_stub_name = 542, /* stub_name */ - YYSYMBOL_stub_host = 543, /* stub_host */ - YYSYMBOL_stub_addr = 544, /* stub_addr */ - YYSYMBOL_stub_first = 545, /* stub_first */ - YYSYMBOL_stub_no_cache = 546, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 547, /* stub_ssl_upstream */ - YYSYMBOL_stub_prime = 548, /* stub_prime */ - YYSYMBOL_forward_name = 549, /* forward_name */ - YYSYMBOL_forward_host = 550, /* forward_host */ - YYSYMBOL_forward_addr = 551, /* forward_addr */ - YYSYMBOL_forward_first = 552, /* forward_first */ - YYSYMBOL_forward_no_cache = 553, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 554, /* forward_ssl_upstream */ - YYSYMBOL_auth_name = 555, /* auth_name */ - YYSYMBOL_auth_zonefile = 556, /* auth_zonefile */ - YYSYMBOL_auth_master = 557, /* auth_master */ - YYSYMBOL_auth_url = 558, /* auth_url */ - YYSYMBOL_auth_allow_notify = 559, /* auth_allow_notify */ - YYSYMBOL_auth_for_downstream = 560, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 561, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 562, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 563, /* view_name */ - YYSYMBOL_view_local_zone = 564, /* view_local_zone */ - YYSYMBOL_view_response_ip = 565, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 566, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 567, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 568, /* view_local_data_ptr */ - YYSYMBOL_view_first = 569, /* view_first */ - YYSYMBOL_rcstart = 570, /* rcstart */ - YYSYMBOL_contents_rc = 571, /* contents_rc */ - YYSYMBOL_content_rc = 572, /* content_rc */ - YYSYMBOL_rc_control_enable = 573, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 574, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 575, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 576, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 577, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 578, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 579, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 580, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 581, /* dtstart */ - YYSYMBOL_contents_dt = 582, /* contents_dt */ - YYSYMBOL_content_dt = 583, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 584, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 585, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 586, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 587, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 588, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 589, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 590, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 591, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 592, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 593, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 594, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 595, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 596, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 597, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 598, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 599, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 600, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 601, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 602, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 603, /* pythonstart */ - YYSYMBOL_contents_py = 604, /* contents_py */ - YYSYMBOL_content_py = 605, /* content_py */ - YYSYMBOL_py_script = 606, /* py_script */ - YYSYMBOL_dynlibstart = 607, /* dynlibstart */ - YYSYMBOL_contents_dl = 608, /* contents_dl */ - YYSYMBOL_content_dl = 609, /* content_dl */ - YYSYMBOL_dl_file = 610, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 611, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 612, /* server_log_identity */ - YYSYMBOL_server_response_ip = 613, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 614, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 615, /* dnscstart */ - YYSYMBOL_contents_dnsc = 616, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 617, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 618, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 619, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 620, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 621, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 622, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 623, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 624, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 625, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 626, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 627, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 628, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 629, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 630, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 631, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 632, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 633, /* redis_server_host */ - YYSYMBOL_redis_server_port = 634, /* redis_server_port */ - YYSYMBOL_redis_timeout = 635, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 636, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 637, /* server_tcp_connection_limit */ - YYSYMBOL_ipsetstart = 638, /* ipsetstart */ - YYSYMBOL_contents_ipset = 639, /* contents_ipset */ - YYSYMBOL_content_ipset = 640, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 641, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 642 /* ipset_name_v6 */ + YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 309, /* VAR_ZONEMD_PERMISSIVE_MODE */ + YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 310, /* VAR_ZONEMD_REJECT_ABSENCE */ + YYSYMBOL_YYACCEPT = 311, /* $accept */ + YYSYMBOL_toplevelvars = 312, /* toplevelvars */ + YYSYMBOL_toplevelvar = 313, /* toplevelvar */ + YYSYMBOL_force_toplevel = 314, /* force_toplevel */ + YYSYMBOL_serverstart = 315, /* serverstart */ + YYSYMBOL_contents_server = 316, /* contents_server */ + YYSYMBOL_content_server = 317, /* content_server */ + YYSYMBOL_stubstart = 318, /* stubstart */ + YYSYMBOL_contents_stub = 319, /* contents_stub */ + YYSYMBOL_content_stub = 320, /* content_stub */ + YYSYMBOL_forwardstart = 321, /* forwardstart */ + YYSYMBOL_contents_forward = 322, /* contents_forward */ + YYSYMBOL_content_forward = 323, /* content_forward */ + YYSYMBOL_viewstart = 324, /* viewstart */ + YYSYMBOL_contents_view = 325, /* contents_view */ + YYSYMBOL_content_view = 326, /* content_view */ + YYSYMBOL_authstart = 327, /* authstart */ + YYSYMBOL_contents_auth = 328, /* contents_auth */ + YYSYMBOL_content_auth = 329, /* content_auth */ + YYSYMBOL_rpz_tag = 330, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 331, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 332, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 333, /* rpz_log */ + YYSYMBOL_rpz_log_name = 334, /* rpz_log_name */ + YYSYMBOL_rpzstart = 335, /* rpzstart */ + YYSYMBOL_contents_rpz = 336, /* contents_rpz */ + YYSYMBOL_content_rpz = 337, /* content_rpz */ + YYSYMBOL_server_num_threads = 338, /* server_num_threads */ + YYSYMBOL_server_verbosity = 339, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 340, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 341, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 342, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 343, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 344, /* server_shm_key */ + YYSYMBOL_server_port = 345, /* server_port */ + YYSYMBOL_server_send_client_subnet = 346, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 347, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 348, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 349, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 350, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 351, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 352, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 353, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 354, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 355, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 356, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 357, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 358, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 359, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 360, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 361, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 362, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 363, /* server_interface_automatic */ + YYSYMBOL_server_do_ip4 = 364, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 365, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 366, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 367, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 368, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 369, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 370, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 371, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 372, /* server_tcp_idle_timeout */ + YYSYMBOL_server_tcp_keepalive = 373, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 374, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 375, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 376, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 377, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 378, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 379, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 380, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 381, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 382, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 383, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 384, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 385, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 386, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 387, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 388, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 389, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 390, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 391, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 392, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 393, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 394, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 395, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 396, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 397, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 398, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 399, /* server_log_queries */ + YYSYMBOL_server_log_replies = 400, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 401, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 402, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 403, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 404, /* server_chroot */ + YYSYMBOL_server_username = 405, /* server_username */ + YYSYMBOL_server_directory = 406, /* server_directory */ + YYSYMBOL_server_logfile = 407, /* server_logfile */ + YYSYMBOL_server_pidfile = 408, /* server_pidfile */ + YYSYMBOL_server_root_hints = 409, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 410, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 411, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 412, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 413, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 414, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 415, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 416, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 417, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 418, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 419, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 420, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 421, /* server_hide_trustanchor */ + YYSYMBOL_server_identity = 422, /* server_identity */ + YYSYMBOL_server_version = 423, /* server_version */ + YYSYMBOL_server_nsid = 424, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 425, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 426, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 427, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 428, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 429, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 430, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 431, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 432, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 433, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 434, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 435, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 436, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 437, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 438, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 439, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 440, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 441, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 442, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 443, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 444, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 445, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 446, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 447, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 448, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 449, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_keep_probing = 450, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 451, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 452, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 453, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 454, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 455, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 456, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 457, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 458, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 459, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 460, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 461, /* server_private_address */ + YYSYMBOL_server_private_domain = 462, /* server_private_domain */ + YYSYMBOL_server_prefetch = 463, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 464, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 465, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 466, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 467, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 468, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 469, /* server_access_control */ + YYSYMBOL_server_module_conf = 470, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 471, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 472, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 473, /* server_val_sig_skew_max */ + YYSYMBOL_server_cache_max_ttl = 474, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 475, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 476, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 477, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 478, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 479, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 480, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 481, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 482, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 483, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 484, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 485, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 486, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_serve_original_ttl = 487, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 488, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 489, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 490, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 491, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 492, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 493, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 494, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 495, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 496, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 497, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 498, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 499, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 500, /* server_local_zone */ + YYSYMBOL_server_local_data = 501, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 502, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 503, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 504, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 505, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 506, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 507, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 508, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 509, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 510, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 511, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 512, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 513, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 514, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 515, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 516, /* server_access_control_view */ + YYSYMBOL_server_response_ip_tag = 517, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 518, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 519, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 520, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 521, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 522, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 523, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 524, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 525, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 526, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 527, /* server_ratelimit_factor */ + YYSYMBOL_server_low_rtt = 528, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 529, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 530, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 531, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 532, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 533, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 534, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 535, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 536, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 537, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 538, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 539, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 540, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 541, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 542, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 543, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 544, /* server_edns_client_string_opcode */ + YYSYMBOL_stub_name = 545, /* stub_name */ + YYSYMBOL_stub_host = 546, /* stub_host */ + YYSYMBOL_stub_addr = 547, /* stub_addr */ + YYSYMBOL_stub_first = 548, /* stub_first */ + YYSYMBOL_stub_no_cache = 549, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 550, /* stub_ssl_upstream */ + YYSYMBOL_stub_prime = 551, /* stub_prime */ + YYSYMBOL_forward_name = 552, /* forward_name */ + YYSYMBOL_forward_host = 553, /* forward_host */ + YYSYMBOL_forward_addr = 554, /* forward_addr */ + YYSYMBOL_forward_first = 555, /* forward_first */ + YYSYMBOL_forward_no_cache = 556, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 557, /* forward_ssl_upstream */ + YYSYMBOL_auth_name = 558, /* auth_name */ + YYSYMBOL_auth_zonefile = 559, /* auth_zonefile */ + YYSYMBOL_auth_master = 560, /* auth_master */ + YYSYMBOL_auth_url = 561, /* auth_url */ + YYSYMBOL_auth_allow_notify = 562, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_reject_absence = 563, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 564, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 565, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 566, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 567, /* view_name */ + YYSYMBOL_view_local_zone = 568, /* view_local_zone */ + YYSYMBOL_view_response_ip = 569, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 570, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 571, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 572, /* view_local_data_ptr */ + YYSYMBOL_view_first = 573, /* view_first */ + YYSYMBOL_rcstart = 574, /* rcstart */ + YYSYMBOL_contents_rc = 575, /* contents_rc */ + YYSYMBOL_content_rc = 576, /* content_rc */ + YYSYMBOL_rc_control_enable = 577, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 578, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 579, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 580, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 581, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 582, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 583, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 584, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 585, /* dtstart */ + YYSYMBOL_contents_dt = 586, /* contents_dt */ + YYSYMBOL_content_dt = 587, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 588, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 589, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 590, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 591, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 592, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 593, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 594, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 595, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 596, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 597, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 598, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 599, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 600, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 601, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 602, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 603, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 604, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 605, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 606, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 607, /* pythonstart */ + YYSYMBOL_contents_py = 608, /* contents_py */ + YYSYMBOL_content_py = 609, /* content_py */ + YYSYMBOL_py_script = 610, /* py_script */ + YYSYMBOL_dynlibstart = 611, /* dynlibstart */ + YYSYMBOL_contents_dl = 612, /* contents_dl */ + YYSYMBOL_content_dl = 613, /* content_dl */ + YYSYMBOL_dl_file = 614, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 615, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 616, /* server_log_identity */ + YYSYMBOL_server_response_ip = 617, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 618, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 619, /* dnscstart */ + YYSYMBOL_contents_dnsc = 620, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 621, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 622, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 623, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 624, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 625, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 626, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 627, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 628, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 629, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 630, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 631, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 632, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 633, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 634, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 635, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 636, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 637, /* redis_server_host */ + YYSYMBOL_redis_server_port = 638, /* redis_server_port */ + YYSYMBOL_redis_timeout = 639, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 640, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 641, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 642, /* ipsetstart */ + YYSYMBOL_contents_ipset = 643, /* contents_ipset */ + YYSYMBOL_content_ipset = 644, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 645, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 646 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -1738,18 +1746,18 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 652 +#define YYLAST 657 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 309 +#define YYNTOKENS 311 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 334 +#define YYNNTS 336 /* YYNRULES -- Number of rules. */ -#define YYNRULES 644 +#define YYNRULES 648 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 957 +#define YYNSTATES 963 -#define YYMAXUTOK 563 +#define YYMAXUTOK 565 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1819,78 +1827,78 @@ static const yytype_int16 yytranslate[] = 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 + 305, 306, 307, 308, 309, 310 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 187, 187, 187, 188, 188, 189, 189, 190, 190, - 190, 191, 191, 192, 192, 193, 193, 194, 196, 202, - 207, 208, 209, 209, 209, 210, 210, 211, 211, 211, - 212, 212, 213, 213, 213, 214, 214, 215, 215, 215, - 216, 216, 216, 217, 217, 218, 218, 219, 219, 220, - 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, - 225, 225, 226, 226, 226, 227, 227, 227, 228, 228, - 229, 229, 230, 230, 231, 231, 232, 232, 232, 233, - 233, 234, 234, 235, 235, 235, 236, 236, 237, 237, - 238, 238, 239, 239, 239, 240, 240, 241, 241, 242, - 242, 243, 243, 244, 244, 245, 245, 245, 246, 246, - 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, - 250, 250, 250, 251, 252, 252, 252, 253, 253, 253, - 254, 254, 255, 255, 256, 256, 256, 257, 257, 257, - 258, 258, 259, 259, 259, 260, 260, 261, 261, 261, - 262, 262, 263, 263, 264, 264, 265, 266, 266, 267, - 267, 268, 268, 269, 270, 270, 271, 271, 272, 272, - 273, 273, 274, 274, 275, 275, 275, 276, 276, 277, - 277, 278, 278, 279, 280, 280, 281, 281, 282, 283, - 283, 284, 284, 285, 285, 286, 286, 287, 287, 287, - 288, 288, 288, 289, 289, 290, 291, 291, 292, 292, - 293, 293, 294, 294, 295, 295, 295, 296, 296, 296, - 297, 297, 297, 298, 298, 299, 299, 300, 300, 301, - 301, 302, 302, 304, 316, 317, 318, 318, 318, 318, - 318, 319, 319, 321, 333, 334, 335, 335, 335, 335, - 336, 336, 338, 352, 353, 354, 354, 354, 354, 355, - 355, 355, 357, 374, 375, 376, 376, 376, 376, 377, - 377, 377, 378, 381, 400, 417, 425, 435, 443, 460, - 461, 462, 462, 462, 462, 462, 463, 463, 463, 464, - 464, 466, 475, 484, 495, 504, 513, 522, 533, 542, - 554, 568, 583, 594, 611, 628, 645, 662, 677, 692, - 705, 720, 729, 738, 747, 756, 765, 774, 783, 792, - 801, 810, 819, 828, 837, 846, 859, 868, 881, 890, - 899, 908, 915, 922, 931, 938, 947, 955, 962, 969, - 977, 986, 994, 1010, 1018, 1026, 1034, 1042, 1050, 1059, - 1068, 1082, 1091, 1100, 1109, 1118, 1127, 1136, 1143, 1150, - 1176, 1184, 1191, 1198, 1205, 1212, 1220, 1228, 1236, 1243, - 1254, 1265, 1272, 1281, 1290, 1299, 1306, 1313, 1329, 1337, - 1345, 1355, 1365, 1375, 1389, 1397, 1410, 1421, 1429, 1442, - 1451, 1460, 1469, 1478, 1488, 1498, 1506, 1519, 1528, 1536, - 1545, 1553, 1566, 1575, 1585, 1592, 1602, 1612, 1622, 1632, - 1642, 1652, 1662, 1672, 1679, 1686, 1693, 1702, 1711, 1720, - 1729, 1736, 1746, 1766, 1773, 1791, 1804, 1817, 1826, 1835, - 1844, 1853, 1863, 1873, 1884, 1893, 1902, 1911, 1920, 1929, - 1938, 1947, 1960, 1973, 1982, 1989, 1998, 2007, 2016, 2025, - 2033, 2046, 2054, 2099, 2106, 2121, 2131, 2141, 2148, 2155, - 2162, 2171, 2179, 2193, 2214, 2235, 2247, 2259, 2271, 2280, - 2301, 2311, 2320, 2328, 2336, 2349, 2362, 2377, 2392, 2401, - 2410, 2416, 2425, 2434, 2444, 2454, 2464, 2473, 2483, 2492, - 2505, 2518, 2530, 2544, 2556, 2570, 2579, 2591, 2601, 2608, - 2615, 2624, 2633, 2643, 2653, 2663, 2670, 2677, 2686, 2695, - 2705, 2715, 2722, 2729, 2736, 2744, 2754, 2764, 2774, 2784, - 2823, 2833, 2841, 2849, 2864, 2873, 2878, 2879, 2880, 2880, - 2880, 2881, 2881, 2881, 2882, 2882, 2884, 2894, 2903, 2910, - 2917, 2924, 2931, 2938, 2945, 2950, 2951, 2952, 2952, 2952, - 2953, 2953, 2953, 2954, 2955, 2955, 2956, 2956, 2957, 2957, - 2958, 2959, 2960, 2961, 2962, 2963, 2965, 2974, 2984, 2991, - 2998, 3007, 3014, 3021, 3028, 3035, 3044, 3053, 3060, 3067, - 3077, 3087, 3097, 3107, 3117, 3127, 3132, 3133, 3134, 3136, - 3142, 3147, 3148, 3149, 3151, 3157, 3167, 3174, 3183, 3191, - 3196, 3197, 3199, 3199, 3199, 3200, 3200, 3201, 3202, 3203, - 3204, 3205, 3207, 3217, 3226, 3233, 3242, 3249, 3258, 3266, - 3279, 3287, 3300, 3305, 3306, 3307, 3307, 3308, 3308, 3308, - 3309, 3311, 3323, 3335, 3347, 3362, 3375, 3388, 3399, 3404, - 3405, 3406, 3406, 3408, 3423 + 0, 188, 188, 188, 189, 189, 190, 190, 191, 191, + 191, 192, 192, 193, 193, 194, 194, 195, 197, 203, + 208, 209, 210, 210, 210, 211, 211, 212, 212, 212, + 213, 213, 214, 214, 214, 215, 215, 216, 216, 216, + 217, 217, 217, 218, 218, 219, 219, 220, 220, 221, + 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, + 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, + 230, 230, 231, 231, 232, 232, 233, 233, 233, 234, + 234, 235, 235, 236, 236, 236, 237, 237, 238, 238, + 239, 239, 240, 240, 240, 241, 241, 242, 242, 243, + 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, + 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, + 251, 251, 251, 252, 253, 253, 253, 254, 254, 254, + 255, 255, 256, 256, 257, 257, 257, 258, 258, 258, + 259, 259, 260, 260, 260, 261, 261, 262, 262, 262, + 263, 263, 264, 264, 265, 265, 266, 267, 267, 268, + 268, 269, 269, 270, 271, 271, 272, 272, 273, 273, + 274, 274, 275, 275, 276, 276, 276, 277, 277, 278, + 278, 279, 279, 280, 281, 281, 282, 282, 283, 284, + 284, 285, 285, 286, 286, 287, 287, 288, 288, 288, + 289, 289, 289, 290, 290, 291, 292, 292, 293, 293, + 294, 294, 295, 295, 296, 296, 296, 297, 297, 297, + 298, 298, 298, 299, 299, 300, 300, 301, 301, 302, + 302, 303, 303, 304, 306, 318, 319, 320, 320, 320, + 320, 320, 321, 321, 323, 335, 336, 337, 337, 337, + 337, 338, 338, 340, 354, 355, 356, 356, 356, 356, + 357, 357, 357, 359, 377, 378, 379, 379, 379, 379, + 380, 380, 380, 381, 381, 384, 403, 420, 428, 438, + 446, 463, 464, 465, 465, 465, 465, 465, 466, 466, + 466, 467, 467, 469, 478, 487, 498, 507, 516, 525, + 536, 545, 557, 571, 586, 597, 614, 631, 648, 665, + 680, 695, 708, 723, 732, 741, 750, 759, 768, 777, + 786, 795, 804, 813, 822, 831, 840, 849, 862, 871, + 884, 893, 902, 911, 918, 925, 934, 941, 950, 958, + 965, 972, 980, 989, 997, 1013, 1021, 1029, 1037, 1045, + 1053, 1062, 1071, 1085, 1094, 1103, 1112, 1121, 1130, 1139, + 1146, 1153, 1179, 1187, 1194, 1201, 1208, 1215, 1223, 1231, + 1239, 1246, 1257, 1268, 1275, 1284, 1293, 1302, 1309, 1316, + 1332, 1340, 1348, 1358, 1368, 1378, 1392, 1400, 1413, 1424, + 1432, 1445, 1454, 1463, 1472, 1481, 1491, 1501, 1509, 1522, + 1531, 1539, 1548, 1556, 1569, 1578, 1588, 1595, 1605, 1615, + 1625, 1635, 1645, 1655, 1665, 1675, 1682, 1689, 1696, 1705, + 1714, 1723, 1732, 1739, 1749, 1769, 1776, 1794, 1807, 1820, + 1829, 1838, 1847, 1856, 1866, 1876, 1887, 1896, 1905, 1914, + 1923, 1932, 1941, 1950, 1963, 1976, 1985, 1992, 2001, 2010, + 2019, 2028, 2037, 2045, 2058, 2066, 2111, 2118, 2133, 2143, + 2153, 2160, 2167, 2174, 2183, 2191, 2205, 2226, 2247, 2259, + 2271, 2283, 2292, 2313, 2323, 2332, 2340, 2348, 2361, 2374, + 2389, 2404, 2413, 2422, 2428, 2437, 2446, 2456, 2466, 2476, + 2485, 2495, 2504, 2517, 2530, 2542, 2556, 2568, 2582, 2591, + 2603, 2613, 2620, 2627, 2636, 2645, 2655, 2665, 2675, 2682, + 2689, 2698, 2707, 2717, 2727, 2734, 2741, 2748, 2756, 2766, + 2776, 2786, 2796, 2806, 2845, 2855, 2863, 2871, 2886, 2895, + 2900, 2901, 2902, 2902, 2902, 2903, 2903, 2903, 2904, 2904, + 2906, 2916, 2925, 2932, 2939, 2946, 2953, 2960, 2967, 2972, + 2973, 2974, 2974, 2974, 2975, 2975, 2975, 2976, 2977, 2977, + 2978, 2978, 2979, 2979, 2980, 2981, 2982, 2983, 2984, 2985, + 2987, 2996, 3006, 3013, 3020, 3029, 3036, 3043, 3050, 3057, + 3066, 3075, 3082, 3089, 3099, 3109, 3119, 3129, 3139, 3149, + 3154, 3155, 3156, 3158, 3164, 3169, 3170, 3171, 3173, 3179, + 3189, 3196, 3205, 3213, 3218, 3219, 3221, 3221, 3221, 3222, + 3222, 3223, 3224, 3225, 3226, 3227, 3229, 3239, 3248, 3255, + 3264, 3271, 3280, 3288, 3301, 3309, 3322, 3327, 3328, 3329, + 3329, 3330, 3330, 3330, 3331, 3333, 3345, 3357, 3369, 3384, + 3397, 3410, 3421, 3426, 3427, 3428, 3428, 3430, 3445 }; #endif @@ -2021,17 +2029,17 @@ static const char *const yytname[] = "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", - "$accept", "toplevelvars", "toplevelvar", "force_toplevel", - "serverstart", "contents_server", "content_server", "stubstart", - "contents_stub", "content_stub", "forwardstart", "contents_forward", - "content_forward", "viewstart", "contents_view", "content_view", - "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", - "rpzstart", "contents_rpz", "content_rpz", "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_zone", + "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_REJECT_ABSENCE", "$accept", + "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", + "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", + "contents_rpz", "content_rpz", "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_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -2094,8 +2102,8 @@ static const char *const yytname[] = "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1", "server_val_log_level", - "server_val_nsec3_keysize_iterations", "server_add_holddown", - "server_del_holddown", "server_keep_missing", + "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode", + "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", @@ -2122,19 +2130,19 @@ static const char *const yytname[] = "stub_prime", "forward_name", "forward_host", "forward_addr", "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify", - "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled", - "view_name", "view_local_zone", "view_response_ip", - "view_response_ip_data", "view_local_data", "view_local_data_ptr", - "view_first", "rcstart", "contents_rc", "content_rc", - "rc_control_enable", "rc_control_port", "rc_control_interface", - "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", - "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", - "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional", - "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls", - "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle", - "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file", - "dt_dnstap_send_identity", "dt_dnstap_send_version", - "dt_dnstap_identity", "dt_dnstap_version", + "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream", + "auth_fallback_enabled", "view_name", "view_local_zone", + "view_response_ip", "view_response_ip_data", "view_local_data", + "view_local_data_ptr", "view_first", "rcstart", "contents_rc", + "content_rc", "rc_control_enable", "rc_control_port", + "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", + "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", + "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", + "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip", + "dt_dnstap_tls", "dt_dnstap_tls_server_name", + "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file", + "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity", + "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", @@ -2199,11 +2207,12 @@ static const yytype_int16 yytoknum[] = 525, 526, 527, 528, 529, 530, 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 + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565 }; #endif -#define YYPACT_NINF (-296) +#define YYPACT_NINF (-299) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -2217,15 +2226,15 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -296, 0, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, 292, -42, -38, -43, -21, -44, -11, -96, - -109, -295, -216, -245, -287, 3, 4, 13, 25, 26, - 27, 30, 31, 32, 33, 34, 35, 37, 38, 39, - 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 54, 55, 84, 85, 88, 89, 91, 93, - 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, + -299, 0, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, 292, -39, -35, -43, -44, -28, -67, -93, + -108, -298, -221, -222, -292, 3, 4, 5, 6, 37, + 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 54, 55, 56, 57, 58, 79, + 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, + 92, 94, 96, 97, 98, 99, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, @@ -2236,83 +2245,84 @@ static const yytype_int16 yypact[] = 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, 212, 213, 214, 215, 216, 220, 221, 222, 223, - 224, 225, 226, 228, 229, 231, 232, 234, 235, 237, - 239, 252, 253, 254, 255, 256, 257, 258, 259, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 285, 286, 287, 289, 290, 291, 293, 327, - 328, 329, 330, 334, 335, 336, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, 378, 379, - 380, 381, 382, 383, 384, -296, -296, -296, -296, -296, - -296, -296, -296, 385, 386, 390, 394, 395, 420, -296, - -296, -296, -296, -296, -296, -296, 421, 422, 431, 444, - 445, 446, 447, -296, -296, -296, -296, -296, -296, -296, - -296, 448, 449, 450, 451, 452, 453, 454, 455, -296, - -296, -296, -296, -296, -296, -296, -296, -296, 456, 457, - 458, 459, 460, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, 461, 462, 463, 503, 505, 522, - 523, 524, -296, -296, -296, -296, -296, -296, -296, -296, - -296, 525, 526, 527, 528, 529, 530, 531, 532, 543, - 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - 555, -296, -296, 556, -296, -296, 557, 560, 563, 566, - 567, 576, 577, 578, 580, 581, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, 582, 583, 584, - 585, 586, 587, -296, -296, -296, -296, -296, -296, -296, - 591, 592, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, 593, 594, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, 595, 596, 597, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, 598, 599, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, 600, 601, 602, 603, 604, - 605, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, 606, -296, -296, -296, -296, -296, -296, - -296, -296, -296, 607, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - 608, -296, -296, 609, 610, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, 611, 612, 613, -296, -296, - -296, -296, -296, -296, -296, -296, -296 + 210, 212, 213, 214, 216, 222, 223, 224, 225, 226, + 228, 229, 231, 232, 237, 238, 240, 241, 242, 244, + 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, + 257, 258, 259, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 285, 286, 287, 289, 290, 291, 293, 327, 328, + 329, 330, 334, 335, 336, 378, 379, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + 380, 381, 382, 383, 384, 385, 386, -299, -299, -299, + -299, -299, -299, -299, -299, 390, 394, 395, 420, 421, + 422, -299, -299, -299, -299, -299, -299, -299, 431, 444, + 445, 446, 447, 448, 449, -299, -299, -299, -299, -299, + -299, -299, -299, 450, 451, 452, 453, 454, 455, 456, + 457, 458, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, 459, 460, 461, 462, 463, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 503, 505, + 522, 523, 524, 525, 526, 527, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 528, 529, 530, 531, 532, + 543, 544, 545, 546, 547, 548, 549, 551, 552, 553, + 554, 555, 556, 557, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, 560, -299, -299, 563, -299, -299, + 566, 567, 576, 577, 578, 580, 581, 582, 583, 584, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, 585, 586, 587, 592, 593, 594, -299, -299, -299, + -299, -299, -299, -299, 595, 596, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, 597, + 598, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 599, 600, 601, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 602, 603, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, 604, + 605, 606, 607, 608, 609, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 610, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 611, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, 612, -299, -299, 613, 614, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, 615, 616, 617, -299, -299, -299, -299, -299, -299, + -299, -299, -299 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -2320,10 +2330,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 233, 243, 525, 585, 544, - 252, 599, 622, 262, 638, 278, 590, 3, 17, 21, - 235, 245, 254, 264, 280, 527, 546, 587, 592, 601, - 624, 640, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 234, 244, 529, 589, 548, + 253, 603, 626, 263, 642, 280, 594, 3, 17, 21, + 236, 246, 255, 265, 282, 531, 550, 591, 596, 605, + 628, 644, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 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, @@ -2345,155 +2355,156 @@ static const yytype_int16 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, 20, 22, 23, 86, - 89, 98, 200, 201, 24, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 37, 77, 25, 90, 91, - 48, 70, 85, 26, 27, 30, 31, 28, 29, 32, - 33, 34, 35, 36, 121, 212, 122, 124, 125, 126, - 214, 219, 215, 226, 227, 228, 229, 127, 128, 129, - 130, 131, 132, 133, 196, 87, 76, 102, 119, 120, - 224, 221, 123, 38, 39, 40, 41, 42, 78, 92, - 93, 108, 64, 74, 65, 204, 205, 103, 58, 59, - 203, 60, 61, 232, 112, 116, 137, 147, 174, 150, - 225, 113, 71, 43, 44, 45, 100, 138, 139, 140, - 141, 46, 47, 49, 50, 52, 53, 51, 145, 151, - 54, 55, 56, 62, 81, 117, 95, 146, 88, 170, - 96, 97, 114, 115, 222, 101, 57, 79, 82, 63, - 66, 104, 105, 80, 171, 106, 67, 68, 69, 213, - 118, 188, 189, 190, 191, 192, 193, 194, 202, 107, - 75, 109, 110, 111, 172, 72, 73, 94, 83, 84, - 99, 134, 135, 223, 136, 142, 143, 144, 175, 176, - 178, 180, 181, 179, 182, 197, 148, 149, 154, 155, - 152, 153, 156, 157, 159, 158, 216, 218, 217, 173, - 183, 184, 185, 186, 187, 206, 208, 207, 209, 210, - 211, 230, 231, 177, 195, 198, 199, 220, 0, 0, - 0, 0, 0, 0, 0, 234, 236, 237, 238, 240, - 241, 242, 239, 0, 0, 0, 0, 0, 0, 244, - 246, 247, 248, 249, 250, 251, 0, 0, 0, 0, - 0, 0, 0, 253, 255, 256, 259, 260, 257, 261, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 263, - 265, 266, 267, 268, 272, 269, 270, 271, 0, 0, - 0, 0, 0, 283, 287, 288, 289, 290, 279, 281, - 282, 284, 285, 286, 0, 0, 0, 0, 0, 0, - 0, 0, 526, 528, 530, 529, 535, 531, 532, 533, - 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 22, 23, + 86, 89, 98, 200, 201, 24, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 37, 77, 25, 90, + 91, 48, 70, 85, 26, 27, 30, 31, 28, 29, + 32, 33, 34, 35, 36, 121, 212, 122, 124, 125, + 126, 214, 219, 215, 226, 227, 228, 229, 127, 128, + 129, 130, 131, 132, 133, 196, 87, 76, 102, 119, + 120, 224, 221, 123, 38, 39, 40, 41, 42, 78, + 92, 93, 108, 64, 74, 65, 204, 205, 103, 58, + 59, 203, 60, 61, 232, 112, 116, 137, 147, 174, + 150, 225, 113, 71, 43, 44, 45, 100, 138, 139, + 140, 141, 46, 47, 49, 50, 52, 53, 51, 145, + 151, 54, 55, 56, 62, 81, 117, 95, 146, 88, + 170, 96, 97, 114, 115, 222, 101, 57, 79, 82, + 63, 66, 104, 105, 80, 171, 106, 67, 68, 69, + 213, 118, 188, 189, 190, 191, 192, 193, 194, 202, + 107, 75, 233, 109, 110, 111, 172, 72, 73, 94, + 83, 84, 99, 134, 135, 223, 136, 142, 143, 144, + 175, 176, 178, 180, 181, 179, 182, 197, 148, 149, + 154, 155, 152, 153, 156, 157, 159, 158, 216, 218, + 217, 173, 183, 184, 185, 186, 187, 206, 208, 207, + 209, 210, 211, 230, 231, 177, 195, 198, 199, 220, + 0, 0, 0, 0, 0, 0, 0, 235, 237, 238, + 239, 241, 242, 243, 240, 0, 0, 0, 0, 0, + 0, 245, 247, 248, 249, 250, 251, 252, 0, 0, + 0, 0, 0, 0, 0, 254, 256, 257, 260, 261, + 258, 262, 259, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 264, 266, 267, 268, 269, 273, 274, 270, + 271, 272, 0, 0, 0, 0, 0, 285, 289, 290, + 291, 292, 281, 283, 284, 286, 287, 288, 0, 0, + 0, 0, 0, 0, 0, 0, 530, 532, 534, 533, + 539, 535, 536, 537, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 545, 547, 549, 548, 550, 551, 552, 553, 554, 555, + 0, 0, 0, 0, 549, 551, 553, 552, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, - 0, 586, 588, 0, 591, 593, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 600, 602, 603, 604, - 606, 607, 605, 608, 609, 610, 611, 0, 0, 0, - 0, 0, 0, 623, 625, 626, 627, 628, 629, 630, - 0, 0, 639, 641, 642, 292, 291, 298, 311, 309, - 321, 317, 318, 322, 319, 320, 323, 324, 325, 326, - 327, 357, 358, 359, 360, 361, 387, 388, 389, 395, - 396, 314, 397, 398, 401, 399, 400, 404, 405, 406, - 420, 372, 373, 375, 376, 407, 423, 366, 368, 424, - 430, 431, 432, 315, 386, 449, 450, 367, 444, 350, - 310, 362, 421, 427, 408, 0, 0, 453, 316, 293, - 349, 412, 294, 312, 313, 363, 364, 451, 410, 414, - 415, 295, 454, 390, 419, 351, 371, 425, 426, 429, - 443, 365, 447, 445, 446, 378, 385, 416, 417, 379, - 380, 409, 434, 352, 353, 356, 328, 330, 331, 332, - 333, 334, 341, 342, 343, 344, 345, 346, 347, 455, - 456, 458, 391, 392, 393, 394, 402, 403, 459, 460, - 461, 0, 0, 0, 411, 381, 383, 595, 470, 474, - 472, 471, 475, 473, 0, 0, 478, 479, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 413, 428, - 448, 483, 484, 382, 462, 0, 0, 0, 0, 0, - 0, 435, 436, 437, 438, 439, 440, 441, 442, 596, - 374, 369, 433, 348, 296, 297, 370, 485, 486, 487, - 488, 489, 491, 490, 492, 493, 494, 329, 336, 480, - 482, 481, 335, 0, 355, 418, 457, 354, 384, 337, - 338, 340, 339, 0, 496, 377, 497, 498, 499, 503, - 502, 500, 501, 504, 505, 506, 507, 509, 508, 518, - 0, 522, 523, 0, 0, 524, 510, 516, 511, 512, - 513, 515, 517, 514, 273, 274, 275, 276, 277, 536, - 538, 537, 540, 541, 542, 543, 539, 566, 568, 569, - 570, 571, 572, 573, 574, 575, 576, 567, 577, 578, - 579, 580, 581, 582, 583, 584, 589, 594, 612, 613, - 614, 617, 615, 616, 618, 619, 620, 621, 631, 632, - 633, 634, 635, 636, 643, 644, 422, 452, 469, 597, - 598, 476, 477, 463, 464, 0, 0, 0, 468, 637, - 495, 519, 520, 521, 467, 465, 466 + 566, 567, 568, 569, 0, 590, 592, 0, 595, 597, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 604, 606, 607, 608, 610, 611, 609, 612, 613, 614, + 615, 0, 0, 0, 0, 0, 0, 627, 629, 630, + 631, 632, 633, 634, 0, 0, 643, 645, 646, 294, + 293, 300, 313, 311, 323, 319, 320, 324, 321, 322, + 325, 326, 327, 328, 329, 359, 360, 361, 362, 363, + 389, 390, 391, 397, 398, 316, 399, 400, 403, 401, + 402, 406, 407, 408, 422, 374, 375, 377, 378, 409, + 425, 368, 370, 426, 432, 433, 434, 317, 388, 452, + 453, 369, 446, 352, 312, 364, 423, 429, 410, 0, + 0, 456, 318, 295, 351, 414, 296, 314, 315, 365, + 366, 454, 412, 416, 417, 297, 457, 392, 421, 353, + 373, 427, 428, 431, 445, 367, 450, 448, 449, 380, + 387, 418, 419, 381, 382, 411, 436, 354, 355, 358, + 330, 332, 333, 334, 335, 336, 343, 344, 345, 346, + 347, 348, 349, 458, 459, 461, 393, 394, 395, 396, + 404, 405, 462, 463, 464, 0, 0, 0, 413, 383, + 385, 599, 473, 477, 475, 474, 478, 476, 0, 0, + 481, 482, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 415, 430, 451, 486, 487, 384, 465, 0, + 0, 0, 0, 0, 0, 437, 438, 439, 440, 441, + 442, 443, 444, 600, 376, 371, 435, 350, 298, 299, + 372, 488, 489, 490, 491, 492, 494, 493, 495, 496, + 497, 331, 338, 483, 485, 484, 337, 0, 357, 420, + 460, 356, 386, 339, 340, 342, 341, 0, 499, 379, + 447, 500, 501, 502, 506, 505, 503, 504, 507, 508, + 509, 510, 512, 511, 522, 0, 526, 527, 0, 0, + 528, 513, 520, 514, 515, 516, 519, 521, 517, 518, + 275, 276, 277, 278, 279, 540, 542, 541, 544, 545, + 546, 547, 543, 570, 572, 573, 574, 575, 576, 577, + 578, 579, 580, 571, 581, 582, 583, 584, 585, 586, + 587, 588, 593, 598, 616, 617, 618, 621, 619, 620, + 622, 623, 624, 625, 635, 636, 637, 638, 639, 640, + 647, 648, 424, 455, 472, 601, 602, 479, 480, 466, + 467, 0, 0, 0, 471, 641, 498, 523, 524, 525, + 470, 468, 469 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, 588, 589, 590, 614, - 615, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296 + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, 265, 591, 618, + 619, 620, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 32, 256, 20, 33, 475, - 21, 34, 489, 22, 35, 503, 23, 36, 519, 533, - 534, 535, 536, 537, 24, 37, 538, 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, 329, - 330, 331, 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, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 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, 462, 476, 477, 478, 479, 480, 481, 482, - 490, 491, 492, 493, 494, 495, 520, 521, 522, 523, - 524, 525, 526, 527, 504, 505, 506, 507, 508, 509, - 510, 25, 38, 552, 553, 554, 555, 556, 557, 558, - 559, 560, 26, 39, 580, 581, 582, 583, 584, 585, - 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 27, 40, 601, 602, 28, 41, - 604, 605, 463, 464, 465, 466, 29, 42, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 30, - 43, 633, 634, 635, 636, 637, 638, 639, 467, 31, - 44, 642, 643, 644 + -1, 1, 17, 18, 19, 32, 257, 20, 33, 477, + 21, 34, 491, 22, 35, 505, 23, 36, 522, 537, + 538, 539, 540, 541, 24, 37, 542, 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, 329, 330, + 331, 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, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 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, 462, 463, 464, 478, 479, 480, 481, 482, 483, + 484, 492, 493, 494, 495, 496, 497, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 506, 507, 508, 509, + 510, 511, 512, 25, 38, 556, 557, 558, 559, 560, + 561, 562, 563, 564, 26, 39, 584, 585, 586, 587, + 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 27, 40, 605, 606, + 28, 41, 608, 609, 465, 466, 467, 468, 29, 42, + 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, + 630, 30, 43, 637, 638, 639, 640, 641, 642, 643, + 469, 31, 44, 646, 647, 648 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2501,88 +2512,88 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 2, 511, 496, 468, 600, 469, 470, 483, 640, 641, - 603, 3, 4, 645, 646, 484, 485, 627, 628, 629, - 630, 631, 632, 647, 511, 606, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 648, 649, 650, 497, 498, - 651, 652, 653, 654, 655, 656, 5, 657, 658, 659, - 660, 661, 6, 662, 663, 664, 665, 666, 667, 668, - 669, 670, 671, 499, 672, 673, 471, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, - 574, 575, 576, 577, 578, 579, 544, 545, 546, 547, - 548, 549, 550, 551, 674, 675, 7, 472, 676, 677, - 486, 678, 487, 679, 680, 681, 682, 473, 683, 684, - 685, 686, 8, 687, 688, 689, 690, 691, 692, 693, - 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, - 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, - 500, 501, 714, 715, 716, 717, 718, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, - 732, 733, 9, 734, 735, 736, 737, 738, 739, 740, - 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, - 502, 751, 752, 753, 754, 755, 756, 757, 758, 759, - 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, - 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, - 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, - 790, 10, 791, 792, 793, 794, 795, 513, 514, 515, - 796, 797, 798, 799, 800, 801, 802, 518, 803, 804, - 11, 805, 806, 474, 807, 808, 488, 809, 512, 810, - 513, 514, 515, 516, 517, 528, 529, 530, 531, 532, - 518, 12, 811, 812, 813, 814, 815, 816, 817, 818, - 13, 819, 820, 821, 822, 823, 824, 825, 826, 827, - 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, - 838, 839, 840, 841, 14, 842, 843, 844, 15, 845, - 846, 847, 0, 848, 16, 45, 46, 47, 48, 49, + 2, 513, 498, 644, 645, 604, 470, 607, 471, 472, + 485, 3, 4, 649, 650, 651, 652, 513, 486, 487, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 548, 549, 550, 551, 552, 553, 554, 555, 499, 500, + 631, 632, 633, 634, 635, 636, 5, 653, 654, 655, + 656, 657, 6, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 501, 668, 669, 670, 671, 672, 473, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 673, + 674, 675, 676, 677, 678, 679, 7, 680, 681, 682, + 474, 683, 684, 488, 685, 489, 686, 687, 688, 689, + 475, 690, 8, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, + 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, + 502, 503, 718, 719, 720, 721, 722, 723, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, + 736, 737, 9, 738, 739, 740, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 504, 755, 756, 757, 758, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, + 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, + 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, 10, 795, 796, 797, 514, 798, 515, 516, 517, + 518, 519, 799, 800, 801, 802, 803, 520, 804, 805, + 11, 806, 807, 515, 516, 517, 476, 808, 809, 490, + 810, 811, 812, 520, 813, 814, 815, 816, 817, 818, + 819, 12, 820, 821, 822, 823, 521, 824, 825, 826, + 13, 532, 533, 534, 535, 536, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 14, 845, 846, 847, 15, 848, + 849, 850, 543, 851, 16, 45, 46, 47, 48, 49, 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, 849, 850, 851, - 852, 77, 78, 79, 853, 854, 855, 80, 81, 82, + 70, 71, 72, 73, 74, 75, 76, 852, 853, 854, + 855, 77, 78, 79, 856, 857, 858, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 856, 857, - 858, 859, 860, 861, 862, 863, 864, 121, 122, 123, - 865, 124, 125, 126, 866, 867, 127, 128, 129, 130, + 113, 114, 115, 116, 117, 118, 119, 120, 859, 860, + 861, 862, 863, 864, 865, 866, 867, 121, 122, 123, + 868, 124, 125, 126, 869, 870, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 868, 869, 870, 151, 152, 153, 154, 155, 156, 157, - 158, 871, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 171, 172, 173, 174, 175, 176, + 871, 872, 873, 151, 152, 153, 154, 155, 156, 157, + 158, 874, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 892, 210, 893, 211, 212, 213, 214, + 207, 208, 209, 895, 210, 896, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 904, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 905, 906, 907, 908, 909, 910, 911, - 237, 912, 913, 914, 915, 916, 917, 918, 238, 239, - 919, 240, 241, 920, 242, 243, 921, 922, 244, 245, - 246, 247, 248, 249, 250, 251, 923, 924, 925, 252, - 926, 927, 928, 929, 930, 931, 932, 933, 253, 254, - 255, 934, 935, 936, 937, 938, 939, 940, 941, 942, - 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, - 953, 954, 955, 956, 0, 539, 540, 541, 0, 0, + 225, 226, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 908, 909, 910, 911, 912, 913, 914, + 237, 915, 916, 917, 918, 919, 920, 921, 238, 239, + 922, 240, 241, 923, 242, 243, 924, 925, 244, 245, + 246, 247, 248, 249, 250, 251, 926, 927, 928, 252, + 929, 930, 931, 932, 933, 934, 935, 936, 253, 254, + 255, 256, 937, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, + 955, 956, 957, 958, 959, 960, 961, 962, 544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 542, 543 + 0, 0, 0, 0, 0, 545, 546, 547 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 45, 113, 47, 48, 45, 295, 296, - 305, 11, 12, 10, 10, 53, 54, 262, 263, 264, - 265, 266, 267, 10, 45, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 10, 10, 10, 81, 82, - 10, 10, 10, 10, 10, 10, 46, 10, 10, 10, + 0, 45, 45, 295, 296, 113, 45, 305, 47, 48, + 45, 11, 12, 10, 10, 10, 10, 45, 53, 54, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 97, 98, 99, 100, 101, 102, 103, 104, 81, 82, + 262, 263, 264, 265, 266, 267, 46, 10, 10, 10, 10, 10, 52, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 106, 10, 10, 108, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 97, 98, 99, 100, - 101, 102, 103, 104, 10, 10, 96, 139, 10, 10, - 138, 10, 140, 10, 10, 10, 10, 149, 10, 10, - 10, 10, 112, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 106, 10, 10, 10, 10, 10, 108, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 10, + 10, 10, 10, 10, 10, 10, 96, 10, 10, 10, + 139, 10, 10, 138, 10, 140, 10, 10, 10, 10, + 149, 10, 112, 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, 183, 184, 10, 10, 10, 10, 10, 10, 10, 10, @@ -2593,15 +2604,15 @@ static const yytype_int16 yycheck[] = 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, 221, 10, 10, 10, 10, 10, 271, 272, 273, - 10, 10, 10, 10, 10, 10, 10, 281, 10, 10, - 240, 10, 10, 285, 10, 10, 284, 10, 269, 10, - 271, 272, 273, 274, 275, 299, 300, 301, 302, 303, - 281, 261, 10, 10, 10, 10, 10, 10, 10, 10, - 270, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 221, 10, 10, 10, 269, 10, 271, 272, 273, + 274, 275, 10, 10, 10, 10, 10, 281, 10, 10, + 240, 10, 10, 271, 272, 273, 285, 10, 10, 284, + 10, 10, 10, 281, 10, 10, 10, 10, 10, 10, + 10, 261, 10, 10, 10, 10, 310, 10, 10, 10, + 270, 299, 300, 301, 302, 303, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 294, 10, 10, 10, 298, 10, - 10, 10, -1, 10, 304, 13, 14, 15, 16, 17, + 10, 10, 37, 10, 304, 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, 40, 41, 42, 43, 44, 10, 10, 10, @@ -2631,23 +2642,23 @@ static const yytype_int16 yycheck[] = 10, 279, 280, 10, 282, 283, 10, 10, 286, 287, 288, 289, 290, 291, 292, 293, 10, 10, 10, 297, 10, 10, 10, 10, 10, 10, 10, 10, 306, 307, - 308, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 308, 309, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, 37, 37, 37, -1, -1, + 10, 10, 10, 10, 10, 10, 10, 10, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 37 + -1, -1, -1, -1, -1, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 310, 0, 11, 12, 46, 52, 96, 112, 162, - 221, 240, 261, 270, 294, 298, 304, 311, 312, 313, - 316, 319, 322, 325, 333, 570, 581, 603, 607, 615, - 628, 638, 314, 317, 320, 323, 326, 334, 571, 582, - 604, 608, 616, 629, 639, 13, 14, 15, 16, 17, + 0, 312, 0, 11, 12, 46, 52, 96, 112, 162, + 221, 240, 261, 270, 294, 298, 304, 313, 314, 315, + 318, 321, 324, 327, 335, 574, 585, 607, 611, 619, + 632, 642, 316, 319, 322, 325, 328, 336, 575, 586, + 608, 612, 620, 633, 643, 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, 40, 41, 42, 43, 44, 49, 50, 51, @@ -2668,46 +2679,46 @@ static const yytype_int16 yystos[] = 233, 234, 235, 236, 237, 238, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 268, 276, 277, 279, 280, 282, 283, 286, 287, 288, 289, 290, 291, - 292, 293, 297, 306, 307, 308, 315, 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, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 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, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 539, 540, 541, 611, 612, 613, 614, 637, 45, 47, - 48, 108, 139, 149, 285, 318, 542, 543, 544, 545, - 546, 547, 548, 45, 53, 54, 138, 140, 284, 321, - 549, 550, 551, 552, 553, 554, 45, 81, 82, 106, - 183, 184, 223, 324, 563, 564, 565, 566, 567, 568, - 569, 45, 269, 271, 272, 273, 274, 275, 281, 327, - 555, 556, 557, 558, 559, 560, 561, 562, 299, 300, - 301, 302, 303, 328, 329, 330, 331, 332, 335, 555, - 556, 557, 558, 559, 97, 98, 99, 100, 101, 102, - 103, 104, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 292, 293, 297, 306, 307, 308, 309, 317, 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, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 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, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 615, 616, 617, 618, 641, + 45, 47, 48, 108, 139, 149, 285, 320, 545, 546, + 547, 548, 549, 550, 551, 45, 53, 54, 138, 140, + 284, 323, 552, 553, 554, 555, 556, 557, 45, 81, + 82, 106, 183, 184, 223, 326, 567, 568, 569, 570, + 571, 572, 573, 45, 269, 271, 272, 273, 274, 275, + 281, 310, 329, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 299, 300, 301, 302, 303, 330, 331, 332, + 333, 334, 337, 558, 559, 560, 561, 562, 97, 98, + 99, 100, 101, 102, 103, 104, 576, 577, 578, 579, + 580, 581, 582, 583, 584, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 113, 605, 606, 305, 609, 610, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 262, 263, 264, - 265, 266, 267, 630, 631, 632, 633, 634, 635, 636, - 295, 296, 640, 641, 642, 10, 10, 10, 10, 10, + 603, 604, 605, 606, 113, 609, 610, 305, 613, 614, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 262, 263, 264, 265, 266, 267, 634, 635, 636, + 637, 638, 639, 640, 295, 296, 644, 645, 646, 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, @@ -2738,42 +2749,43 @@ static const yytype_int16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 309, 310, 310, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 312, 313, - 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, 316, 317, 317, 318, 318, 318, 318, - 318, 318, 318, 319, 320, 320, 321, 321, 321, 321, - 321, 321, 322, 323, 323, 324, 324, 324, 324, 324, - 324, 324, 325, 326, 326, 327, 327, 327, 327, 327, - 327, 327, 327, 328, 329, 330, 331, 332, 333, 334, - 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 0, 311, 312, 312, 313, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 314, 315, + 316, 316, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, + 317, 317, 317, 317, 318, 319, 319, 320, 320, 320, + 320, 320, 320, 320, 321, 322, 322, 323, 323, 323, + 323, 323, 323, 324, 325, 325, 326, 326, 326, 326, + 326, 326, 326, 327, 328, 328, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 330, 331, 332, 333, 334, + 335, 336, 336, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 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, 369, 370, 371, 372, 373, 374, @@ -2796,19 +2808,19 @@ static const yytype_int16 yyr1[] = 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, 567, 568, 569, 570, 571, 571, 572, 572, - 572, 572, 572, 572, 572, 572, 573, 574, 575, 576, - 577, 578, 579, 580, 581, 582, 582, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 584, 585, 586, 587, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 575, 576, 576, 576, 576, 576, 576, 576, 576, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, + 586, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 604, 605, 606, - 607, 608, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 616, 617, 617, 617, 617, 617, 617, 617, 617, - 617, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 629, 630, 630, 630, 630, 630, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 639, 640, 640, 641, 642 + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 608, 609, 610, 611, 612, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 620, 621, 621, 621, 621, + 621, 621, 621, 621, 621, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 633, 634, + 634, 634, 634, 634, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 643, 644, 644, 645, 646 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2837,13 +2849,13 @@ static const yytype_int8 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, 2, 0, 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, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 0, 1, 1, 1, 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, 2, @@ -2856,29 +2868,29 @@ static const yytype_int8 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, 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, 2, 2, 2, 2, - 2, 2, 3, 2, 2, 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, 2, 2, 2, 3, 2, 2, 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, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 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, 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, 1, 2, 0, 1, 2, - 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, + 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 3, 1, 2, - 0, 1, 1, 2, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 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, 1, + 2, 0, 1, 2, 1, 2, 0, 1, 2, 2, + 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 2, 3, 1, 2, 0, 1, 1, 2, 2 }; @@ -3359,23 +3371,23 @@ yyreduce: switch (yyn) { case 18: -#line 197 "./util/configparser.y" +#line 198 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); } -#line 3367 "util/configparser.c" +#line 3379 "util/configparser.c" break; case 19: -#line 203 "./util/configparser.y" +#line 204 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 3375 "util/configparser.c" +#line 3387 "util/configparser.c" break; - case 233: -#line 305 "./util/configparser.y" + case 234: +#line 307 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -3386,11 +3398,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 3390 "util/configparser.c" +#line 3402 "util/configparser.c" break; - case 243: -#line 322 "./util/configparser.y" + case 244: +#line 324 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -3401,11 +3413,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 3405 "util/configparser.c" +#line 3417 "util/configparser.c" break; - case 252: -#line 339 "./util/configparser.y" + case 253: +#line 341 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -3418,11 +3430,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 3422 "util/configparser.c" +#line 3434 "util/configparser.c" break; - case 262: -#line 358 "./util/configparser.y" + case 263: +#line 360 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -3434,15 +3446,16 @@ yyreduce: s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->zonemd_reject_absence = 0; s->isrpz = 0; } else yyerror("out of memory"); } -#line 3442 "util/configparser.c" +#line 3455 "util/configparser.c" break; - case 273: -#line 382 "./util/configparser.y" + case 275: +#line 385 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -3459,11 +3472,11 @@ yyreduce: } } -#line 3463 "util/configparser.c" +#line 3476 "util/configparser.c" break; - case 274: -#line 401 "./util/configparser.y" + case 276: +#line 404 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -3478,21 +3491,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 3482 "util/configparser.c" +#line 3495 "util/configparser.c" break; - case 275: -#line 418 "./util/configparser.y" + case 277: +#line 421 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 3492 "util/configparser.c" +#line 3505 "util/configparser.c" break; - case 276: -#line 426 "./util/configparser.y" + case 278: +#line 429 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3500,21 +3513,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3504 "util/configparser.c" +#line 3517 "util/configparser.c" break; - case 277: -#line 436 "./util/configparser.y" + case 279: +#line 439 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 3514 "util/configparser.c" +#line 3527 "util/configparser.c" break; - case 278: -#line 444 "./util/configparser.y" + case 280: +#line 447 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -3530,11 +3543,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 3534 "util/configparser.c" +#line 3547 "util/configparser.c" break; - case 291: -#line 467 "./util/configparser.y" + case 293: +#line 470 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3542,11 +3555,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3546 "util/configparser.c" +#line 3559 "util/configparser.c" break; - case 292: -#line 476 "./util/configparser.y" + case 294: +#line 479 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3554,11 +3567,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3558 "util/configparser.c" +#line 3571 "util/configparser.c" break; - case 293: -#line 485 "./util/configparser.y" + case 295: +#line 488 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3568,11 +3581,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3572 "util/configparser.c" +#line 3585 "util/configparser.c" break; - case 294: -#line 496 "./util/configparser.y" + case 296: +#line 499 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3580,11 +3593,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3584 "util/configparser.c" +#line 3597 "util/configparser.c" break; - case 295: -#line 505 "./util/configparser.y" + case 297: +#line 508 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3592,11 +3605,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3596 "util/configparser.c" +#line 3609 "util/configparser.c" break; - case 296: -#line 514 "./util/configparser.y" + case 298: +#line 517 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3604,11 +3617,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3608 "util/configparser.c" +#line 3621 "util/configparser.c" break; - case 297: -#line 523 "./util/configparser.y" + case 299: +#line 526 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3618,11 +3631,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3622 "util/configparser.c" +#line 3635 "util/configparser.c" break; - case 298: -#line 534 "./util/configparser.y" + case 300: +#line 537 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3630,11 +3643,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3634 "util/configparser.c" +#line 3647 "util/configparser.c" break; - case 299: -#line 543 "./util/configparser.y" + case 301: +#line 546 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3645,11 +3658,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3649 "util/configparser.c" +#line 3662 "util/configparser.c" break; - case 300: -#line 555 "./util/configparser.y" + case 302: +#line 558 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3661,11 +3674,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3665 "util/configparser.c" +#line 3678 "util/configparser.c" break; - case 301: -#line 569 "./util/configparser.y" + case 303: +#line 572 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3679,11 +3692,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3683 "util/configparser.c" +#line 3696 "util/configparser.c" break; - case 302: -#line 584 "./util/configparser.y" + case 304: +#line 587 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3693,11 +3706,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3697 "util/configparser.c" +#line 3710 "util/configparser.c" break; - case 303: -#line 595 "./util/configparser.y" + case 305: +#line 598 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3713,11 +3726,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3717 "util/configparser.c" +#line 3730 "util/configparser.c" break; - case 304: -#line 612 "./util/configparser.y" + case 306: +#line 615 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3733,11 +3746,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3737 "util/configparser.c" +#line 3750 "util/configparser.c" break; - case 305: -#line 629 "./util/configparser.y" + case 307: +#line 632 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3753,11 +3766,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3757 "util/configparser.c" +#line 3770 "util/configparser.c" break; - case 306: -#line 646 "./util/configparser.y" + case 308: +#line 649 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3773,11 +3786,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3777 "util/configparser.c" +#line 3790 "util/configparser.c" break; - case 307: -#line 663 "./util/configparser.y" + case 309: +#line 666 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3791,11 +3804,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3795 "util/configparser.c" +#line 3808 "util/configparser.c" break; - case 308: -#line 678 "./util/configparser.y" + case 310: +#line 681 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3809,11 +3822,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3813 "util/configparser.c" +#line 3826 "util/configparser.c" break; - case 309: -#line 693 "./util/configparser.y" + case 311: +#line 696 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3825,11 +3838,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3829 "util/configparser.c" +#line 3842 "util/configparser.c" break; - case 310: -#line 706 "./util/configparser.y" + case 312: +#line 709 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3843,11 +3856,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3847 "util/configparser.c" +#line 3860 "util/configparser.c" break; - case 311: -#line 721 "./util/configparser.y" + case 313: +#line 724 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3855,11 +3868,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3859 "util/configparser.c" +#line 3872 "util/configparser.c" break; - case 312: -#line 730 "./util/configparser.y" + case 314: +#line 733 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3867,11 +3880,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3871 "util/configparser.c" +#line 3884 "util/configparser.c" break; - case 313: -#line 739 "./util/configparser.y" + case 315: +#line 742 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3879,11 +3892,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3883 "util/configparser.c" +#line 3896 "util/configparser.c" break; - case 314: -#line 748 "./util/configparser.y" + case 316: +#line 751 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3891,11 +3904,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3895 "util/configparser.c" +#line 3908 "util/configparser.c" break; - case 315: -#line 757 "./util/configparser.y" + case 317: +#line 760 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3903,11 +3916,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3907 "util/configparser.c" +#line 3920 "util/configparser.c" break; - case 316: -#line 766 "./util/configparser.y" + case 318: +#line 769 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3915,11 +3928,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3919 "util/configparser.c" +#line 3932 "util/configparser.c" break; - case 317: -#line 775 "./util/configparser.y" + case 319: +#line 778 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3927,11 +3940,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3931 "util/configparser.c" +#line 3944 "util/configparser.c" break; - case 318: -#line 784 "./util/configparser.y" + case 320: +#line 787 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3939,11 +3952,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3943 "util/configparser.c" +#line 3956 "util/configparser.c" break; - case 319: -#line 793 "./util/configparser.y" + case 321: +#line 796 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3951,11 +3964,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3955 "util/configparser.c" +#line 3968 "util/configparser.c" break; - case 320: -#line 802 "./util/configparser.y" + case 322: +#line 805 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3963,11 +3976,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3967 "util/configparser.c" +#line 3980 "util/configparser.c" break; - case 321: -#line 811 "./util/configparser.y" + case 323: +#line 814 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3975,11 +3988,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3979 "util/configparser.c" +#line 3992 "util/configparser.c" break; - case 322: -#line 820 "./util/configparser.y" + case 324: +#line 823 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3987,11 +4000,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3991 "util/configparser.c" +#line 4004 "util/configparser.c" break; - case 323: -#line 829 "./util/configparser.y" + case 325: +#line 832 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3999,11 +4012,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4003 "util/configparser.c" +#line 4016 "util/configparser.c" break; - case 324: -#line 838 "./util/configparser.y" + case 326: +#line 841 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4011,11 +4024,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4028 "util/configparser.c" break; - case 325: -#line 847 "./util/configparser.y" + case 327: +#line 850 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4027,11 +4040,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4031 "util/configparser.c" +#line 4044 "util/configparser.c" break; - case 326: -#line 860 "./util/configparser.y" + case 328: +#line 863 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4039,11 +4052,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4043 "util/configparser.c" +#line 4056 "util/configparser.c" break; - case 327: -#line 869 "./util/configparser.y" + case 329: +#line 872 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4055,11 +4068,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4059 "util/configparser.c" +#line 4072 "util/configparser.c" break; - case 328: -#line 882 "./util/configparser.y" + case 330: +#line 885 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4067,11 +4080,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4071 "util/configparser.c" +#line 4084 "util/configparser.c" break; - case 329: -#line 891 "./util/configparser.y" + case 331: +#line 894 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4079,11 +4092,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4083 "util/configparser.c" +#line 4096 "util/configparser.c" break; - case 330: -#line 900 "./util/configparser.y" + case 332: +#line 903 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4091,31 +4104,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4095 "util/configparser.c" +#line 4108 "util/configparser.c" break; - case 331: -#line 909 "./util/configparser.y" + case 333: +#line 912 "./util/configparser.y" { 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 4105 "util/configparser.c" +#line 4118 "util/configparser.c" break; - case 332: -#line 916 "./util/configparser.y" + case 334: +#line 919 "./util/configparser.y" { 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 4115 "util/configparser.c" +#line 4128 "util/configparser.c" break; - case 333: -#line 923 "./util/configparser.y" + case 335: +#line 926 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4123,21 +4136,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4127 "util/configparser.c" +#line 4140 "util/configparser.c" break; - case 334: -#line 932 "./util/configparser.y" + case 336: +#line 935 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 4137 "util/configparser.c" +#line 4150 "util/configparser.c" break; - case 335: -#line 939 "./util/configparser.y" + case 337: +#line 942 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4145,53 +4158,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4149 "util/configparser.c" +#line 4162 "util/configparser.c" break; - case 336: -#line 948 "./util/configparser.y" + case 338: +#line 951 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4160 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 337: -#line 956 "./util/configparser.y" + case 339: +#line 959 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 4170 "util/configparser.c" +#line 4183 "util/configparser.c" break; - case 338: -#line 963 "./util/configparser.y" + case 340: +#line 966 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 4180 "util/configparser.c" +#line 4193 "util/configparser.c" break; - case 339: -#line 970 "./util/configparser.y" + case 341: +#line 973 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4191 "util/configparser.c" +#line 4204 "util/configparser.c" break; - case 340: -#line 978 "./util/configparser.y" + case 342: +#line 981 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4199,11 +4212,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4203 "util/configparser.c" +#line 4216 "util/configparser.c" break; - case 341: -#line 987 "./util/configparser.y" + case 343: +#line 990 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4211,11 +4224,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4215 "util/configparser.c" +#line 4228 "util/configparser.c" break; - case 342: -#line 995 "./util/configparser.y" + case 344: +#line 998 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -4231,11 +4244,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 4235 "util/configparser.c" +#line 4248 "util/configparser.c" break; - case 343: -#line 1011 "./util/configparser.y" + case 345: +#line 1014 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4243,11 +4256,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4247 "util/configparser.c" +#line 4260 "util/configparser.c" break; - case 344: -#line 1019 "./util/configparser.y" + case 346: +#line 1022 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -4255,11 +4268,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4259 "util/configparser.c" +#line 4272 "util/configparser.c" break; - case 345: -#line 1027 "./util/configparser.y" + case 347: +#line 1030 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -4267,11 +4280,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4271 "util/configparser.c" +#line 4284 "util/configparser.c" break; - case 346: -#line 1035 "./util/configparser.y" + case 348: +#line 1038 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4279,11 +4292,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4283 "util/configparser.c" +#line 4296 "util/configparser.c" break; - case 347: -#line 1043 "./util/configparser.y" + case 349: +#line 1046 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4291,11 +4304,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4295 "util/configparser.c" +#line 4308 "util/configparser.c" break; - case 348: -#line 1051 "./util/configparser.y" + case 350: +#line 1054 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4303,11 +4316,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4307 "util/configparser.c" +#line 4320 "util/configparser.c" break; - case 349: -#line 1060 "./util/configparser.y" + case 351: +#line 1063 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4315,11 +4328,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4319 "util/configparser.c" +#line 4332 "util/configparser.c" break; - case 350: -#line 1069 "./util/configparser.y" + case 352: +#line 1072 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4332,11 +4345,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4336 "util/configparser.c" +#line 4349 "util/configparser.c" break; - case 351: -#line 1083 "./util/configparser.y" + case 353: +#line 1086 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4344,11 +4357,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4348 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 352: -#line 1092 "./util/configparser.y" + case 354: +#line 1095 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4356,11 +4369,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4360 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 353: -#line 1101 "./util/configparser.y" + case 355: +#line 1104 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4368,11 +4381,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4372 "util/configparser.c" +#line 4385 "util/configparser.c" break; - case 354: -#line 1110 "./util/configparser.y" + case 356: +#line 1113 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4380,11 +4393,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4384 "util/configparser.c" +#line 4397 "util/configparser.c" break; - case 355: -#line 1119 "./util/configparser.y" + case 357: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4392,11 +4405,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4396 "util/configparser.c" +#line 4409 "util/configparser.c" break; - case 356: -#line 1128 "./util/configparser.y" + case 358: +#line 1131 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4404,31 +4417,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4408 "util/configparser.c" +#line 4421 "util/configparser.c" break; - case 357: -#line 1137 "./util/configparser.y" + case 359: +#line 1140 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 4418 "util/configparser.c" +#line 4431 "util/configparser.c" break; - case 358: -#line 1144 "./util/configparser.y" + case 360: +#line 1147 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 4428 "util/configparser.c" +#line 4441 "util/configparser.c" break; - case 359: -#line 1151 "./util/configparser.y" + case 361: +#line 1154 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -4453,105 +4466,105 @@ yyreduce: } } } -#line 4457 "util/configparser.c" +#line 4470 "util/configparser.c" break; - case 360: -#line 1177 "./util/configparser.y" + case 362: +#line 1180 "./util/configparser.y" { 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 4468 "util/configparser.c" +#line 4481 "util/configparser.c" break; - case 361: -#line 1185 "./util/configparser.y" + case 363: +#line 1188 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 4478 "util/configparser.c" +#line 4491 "util/configparser.c" break; - case 362: -#line 1192 "./util/configparser.y" + case 364: +#line 1195 "./util/configparser.y" { 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 4488 "util/configparser.c" +#line 4501 "util/configparser.c" break; - case 363: -#line 1199 "./util/configparser.y" + case 365: +#line 1202 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4498 "util/configparser.c" +#line 4511 "util/configparser.c" break; - case 364: -#line 1206 "./util/configparser.y" + case 366: +#line 1209 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4508 "util/configparser.c" +#line 4521 "util/configparser.c" break; - case 365: -#line 1213 "./util/configparser.y" + case 367: +#line 1216 "./util/configparser.y" { 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 4519 "util/configparser.c" +#line 4532 "util/configparser.c" break; - case 366: -#line 1221 "./util/configparser.y" + case 368: +#line 1224 "./util/configparser.y" { 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 4530 "util/configparser.c" +#line 4543 "util/configparser.c" break; - case 367: -#line 1229 "./util/configparser.y" + case 369: +#line 1232 "./util/configparser.y" { 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 4541 "util/configparser.c" +#line 4554 "util/configparser.c" break; - case 368: -#line 1237 "./util/configparser.y" + case 370: +#line 1240 "./util/configparser.y" { 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 4551 "util/configparser.c" +#line 4564 "util/configparser.c" break; - case 369: -#line 1244 "./util/configparser.y" + case 371: +#line 1247 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4561,11 +4574,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4565 "util/configparser.c" +#line 4578 "util/configparser.c" break; - case 370: -#line 1255 "./util/configparser.y" + case 372: +#line 1258 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4575,21 +4588,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4579 "util/configparser.c" +#line 4592 "util/configparser.c" break; - case 371: -#line 1266 "./util/configparser.y" + case 373: +#line 1269 "./util/configparser.y" { 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 4589 "util/configparser.c" +#line 4602 "util/configparser.c" break; - case 372: -#line 1273 "./util/configparser.y" + case 374: +#line 1276 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4597,11 +4610,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4601 "util/configparser.c" +#line 4614 "util/configparser.c" break; - case 373: -#line 1282 "./util/configparser.y" + case 375: +#line 1285 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4609,11 +4622,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4613 "util/configparser.c" +#line 4626 "util/configparser.c" break; - case 374: -#line 1291 "./util/configparser.y" + case 376: +#line 1294 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4621,31 +4634,31 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4625 "util/configparser.c" +#line 4638 "util/configparser.c" break; - case 375: -#line 1300 "./util/configparser.y" + case 377: +#line 1303 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4635 "util/configparser.c" +#line 4648 "util/configparser.c" break; - case 376: -#line 1307 "./util/configparser.y" + case 378: +#line 1310 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4645 "util/configparser.c" +#line 4658 "util/configparser.c" break; - case 377: -#line 1314 "./util/configparser.y" + case 379: +#line 1317 "./util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4660,33 +4673,33 @@ yyreduce: yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4664 "util/configparser.c" +#line 4677 "util/configparser.c" break; - case 378: -#line 1330 "./util/configparser.y" + case 380: +#line 1333 "./util/configparser.y" { 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 4675 "util/configparser.c" +#line 4688 "util/configparser.c" break; - case 379: -#line 1338 "./util/configparser.y" + case 381: +#line 1341 "./util/configparser.y" { 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 4686 "util/configparser.c" +#line 4699 "util/configparser.c" break; - case 380: -#line 1346 "./util/configparser.y" + case 382: +#line 1349 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4695,11 +4708,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4699 "util/configparser.c" +#line 4712 "util/configparser.c" break; - case 381: -#line 1356 "./util/configparser.y" + case 383: +#line 1359 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4708,11 +4721,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4712 "util/configparser.c" +#line 4725 "util/configparser.c" break; - case 382: -#line 1366 "./util/configparser.y" + case 384: +#line 1369 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4721,11 +4734,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4725 "util/configparser.c" +#line 4738 "util/configparser.c" break; - case 383: -#line 1376 "./util/configparser.y" + case 385: +#line 1379 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4738,22 +4751,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4742 "util/configparser.c" +#line 4755 "util/configparser.c" break; - case 384: -#line 1390 "./util/configparser.y" + case 386: +#line 1393 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4753 "util/configparser.c" +#line 4766 "util/configparser.c" break; - case 385: -#line 1398 "./util/configparser.y" + case 387: +#line 1401 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4765,11 +4778,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" +#line 4782 "util/configparser.c" break; - case 386: -#line 1411 "./util/configparser.y" + case 388: +#line 1414 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4779,22 +4792,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4783 "util/configparser.c" +#line 4796 "util/configparser.c" break; - case 387: -#line 1422 "./util/configparser.y" + case 389: +#line 1425 "./util/configparser.y" { 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 4794 "util/configparser.c" +#line 4807 "util/configparser.c" break; - case 388: -#line 1430 "./util/configparser.y" + case 390: +#line 1433 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4806,11 +4819,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4810 "util/configparser.c" +#line 4823 "util/configparser.c" break; - case 389: -#line 1443 "./util/configparser.y" + case 391: +#line 1446 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4818,11 +4831,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4822 "util/configparser.c" +#line 4835 "util/configparser.c" break; - case 390: -#line 1452 "./util/configparser.y" + case 392: +#line 1455 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4830,11 +4843,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4834 "util/configparser.c" +#line 4847 "util/configparser.c" break; - case 391: -#line 1461 "./util/configparser.y" + case 393: +#line 1464 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4842,11 +4855,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4846 "util/configparser.c" +#line 4859 "util/configparser.c" break; - case 392: -#line 1470 "./util/configparser.y" + case 394: +#line 1473 "./util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4854,11 +4867,11 @@ yyreduce: else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4858 "util/configparser.c" +#line 4871 "util/configparser.c" break; - case 393: -#line 1479 "./util/configparser.y" + case 395: +#line 1482 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4867,11 +4880,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4871 "util/configparser.c" +#line 4884 "util/configparser.c" break; - case 394: -#line 1489 "./util/configparser.y" + case 396: +#line 1492 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4880,22 +4893,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4884 "util/configparser.c" +#line 4897 "util/configparser.c" break; - case 395: -#line 1499 "./util/configparser.y" + case 397: +#line 1502 "./util/configparser.y" { 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 4895 "util/configparser.c" +#line 4908 "util/configparser.c" break; - case 396: -#line 1507 "./util/configparser.y" + case 398: +#line 1510 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4907,11 +4920,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4911 "util/configparser.c" +#line 4924 "util/configparser.c" break; - case 397: -#line 1520 "./util/configparser.y" + case 399: +#line 1523 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4919,22 +4932,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4923 "util/configparser.c" +#line 4936 "util/configparser.c" break; - case 398: -#line 1529 "./util/configparser.y" + case 400: +#line 1532 "./util/configparser.y" { 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 4934 "util/configparser.c" +#line 4947 "util/configparser.c" break; - case 399: -#line 1537 "./util/configparser.y" + case 401: +#line 1540 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4942,22 +4955,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4946 "util/configparser.c" +#line 4959 "util/configparser.c" break; - case 400: -#line 1546 "./util/configparser.y" + case 402: +#line 1549 "./util/configparser.y" { 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 4957 "util/configparser.c" +#line 4970 "util/configparser.c" break; - case 401: -#line 1554 "./util/configparser.y" + case 403: +#line 1557 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4969,11 +4982,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4973 "util/configparser.c" +#line 4986 "util/configparser.c" break; - case 402: -#line 1567 "./util/configparser.y" + case 404: +#line 1570 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4981,11 +4994,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4985 "util/configparser.c" +#line 4998 "util/configparser.c" break; - case 403: -#line 1576 "./util/configparser.y" + case 405: +#line 1579 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4994,21 +5007,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4998 "util/configparser.c" +#line 5011 "util/configparser.c" break; - case 404: -#line 1586 "./util/configparser.y" + case 406: +#line 1589 "./util/configparser.y" { 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 5008 "util/configparser.c" +#line 5021 "util/configparser.c" break; - case 405: -#line 1593 "./util/configparser.y" + case 407: +#line 1596 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5017,11 +5030,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5021 "util/configparser.c" +#line 5034 "util/configparser.c" break; - case 406: -#line 1603 "./util/configparser.y" + case 408: +#line 1606 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5030,11 +5043,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5034 "util/configparser.c" +#line 5047 "util/configparser.c" break; - case 407: -#line 1613 "./util/configparser.y" + case 409: +#line 1616 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5043,11 +5056,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5047 "util/configparser.c" +#line 5060 "util/configparser.c" break; - case 408: -#line 1623 "./util/configparser.y" + case 410: +#line 1626 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5056,11 +5069,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5060 "util/configparser.c" +#line 5073 "util/configparser.c" break; - case 409: -#line 1633 "./util/configparser.y" + case 411: +#line 1636 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5069,11 +5082,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5073 "util/configparser.c" +#line 5086 "util/configparser.c" break; - case 410: -#line 1643 "./util/configparser.y" + case 412: +#line 1646 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5082,11 +5095,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5086 "util/configparser.c" +#line 5099 "util/configparser.c" break; - case 411: -#line 1653 "./util/configparser.y" + case 413: +#line 1656 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5095,11 +5108,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5099 "util/configparser.c" +#line 5112 "util/configparser.c" break; - case 412: -#line 1663 "./util/configparser.y" + case 414: +#line 1666 "./util/configparser.y" { 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) @@ -5108,41 +5121,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5112 "util/configparser.c" +#line 5125 "util/configparser.c" break; - case 413: -#line 1673 "./util/configparser.y" + case 415: +#line 1676 "./util/configparser.y" { 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 5122 "util/configparser.c" +#line 5135 "util/configparser.c" break; - case 414: -#line 1680 "./util/configparser.y" + case 416: +#line 1683 "./util/configparser.y" { 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 5132 "util/configparser.c" +#line 5145 "util/configparser.c" break; - case 415: -#line 1687 "./util/configparser.y" + case 417: +#line 1690 "./util/configparser.y" { 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 5142 "util/configparser.c" +#line 5155 "util/configparser.c" break; - case 416: -#line 1694 "./util/configparser.y" + case 418: +#line 1697 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5150,11 +5163,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5154 "util/configparser.c" +#line 5167 "util/configparser.c" break; - case 417: -#line 1703 "./util/configparser.y" + case 419: +#line 1706 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5162,11 +5175,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5166 "util/configparser.c" +#line 5179 "util/configparser.c" break; - case 418: -#line 1712 "./util/configparser.y" + case 420: +#line 1715 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5174,11 +5187,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5178 "util/configparser.c" +#line 5191 "util/configparser.c" break; - case 419: -#line 1721 "./util/configparser.y" + case 421: +#line 1724 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5186,21 +5199,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5190 "util/configparser.c" +#line 5203 "util/configparser.c" break; - case 420: -#line 1730 "./util/configparser.y" + case 422: +#line 1733 "./util/configparser.y" { 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 5200 "util/configparser.c" +#line 5213 "util/configparser.c" break; - case 421: -#line 1737 "./util/configparser.y" + case 423: +#line 1740 "./util/configparser.y" { 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) @@ -5209,11 +5222,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5213 "util/configparser.c" +#line 5226 "util/configparser.c" break; - case 422: -#line 1747 "./util/configparser.y" + case 424: +#line 1750 "./util/configparser.y" { 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 && @@ -5232,21 +5245,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 5236 "util/configparser.c" +#line 5249 "util/configparser.c" break; - case 423: -#line 1767 "./util/configparser.y" + case 425: +#line 1770 "./util/configparser.y" { 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 5246 "util/configparser.c" +#line 5259 "util/configparser.c" break; - case 424: -#line 1774 "./util/configparser.y" + case 426: +#line 1777 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5263,11 +5276,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5267 "util/configparser.c" +#line 5280 "util/configparser.c" break; - case 425: -#line 1792 "./util/configparser.y" + case 427: +#line 1795 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5279,11 +5292,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5283 "util/configparser.c" +#line 5296 "util/configparser.c" break; - case 426: -#line 1805 "./util/configparser.y" + case 428: +#line 1808 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -5295,11 +5308,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5299 "util/configparser.c" +#line 5312 "util/configparser.c" break; - case 427: -#line 1818 "./util/configparser.y" + case 429: +#line 1821 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5307,11 +5320,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5311 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 428: -#line 1827 "./util/configparser.y" + case 430: +#line 1830 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5319,11 +5332,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5323 "util/configparser.c" +#line 5336 "util/configparser.c" break; - case 429: -#line 1836 "./util/configparser.y" + case 431: +#line 1839 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5331,11 +5344,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5335 "util/configparser.c" +#line 5348 "util/configparser.c" break; - case 430: -#line 1845 "./util/configparser.y" + case 432: +#line 1848 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5343,11 +5356,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5347 "util/configparser.c" +#line 5360 "util/configparser.c" break; - case 431: -#line 1854 "./util/configparser.y" + case 433: +#line 1857 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5356,11 +5369,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5360 "util/configparser.c" +#line 5373 "util/configparser.c" break; - case 432: -#line 1864 "./util/configparser.y" + case 434: +#line 1867 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5369,11 +5382,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5373 "util/configparser.c" +#line 5386 "util/configparser.c" break; - case 433: -#line 1874 "./util/configparser.y" + case 435: +#line 1877 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5383,11 +5396,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5387 "util/configparser.c" +#line 5400 "util/configparser.c" break; - case 434: -#line 1885 "./util/configparser.y" + case 436: +#line 1888 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5395,11 +5408,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5399 "util/configparser.c" +#line 5412 "util/configparser.c" break; - case 435: -#line 1894 "./util/configparser.y" + case 437: +#line 1897 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5407,11 +5420,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5411 "util/configparser.c" +#line 5424 "util/configparser.c" break; - case 436: -#line 1903 "./util/configparser.y" + case 438: +#line 1906 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5419,11 +5432,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5423 "util/configparser.c" +#line 5436 "util/configparser.c" break; - case 437: -#line 1912 "./util/configparser.y" + case 439: +#line 1915 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5431,11 +5444,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5435 "util/configparser.c" +#line 5448 "util/configparser.c" break; - case 438: -#line 1921 "./util/configparser.y" + case 440: +#line 1924 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5443,11 +5456,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5447 "util/configparser.c" +#line 5460 "util/configparser.c" break; - case 439: -#line 1930 "./util/configparser.y" + case 441: +#line 1933 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5455,11 +5468,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5459 "util/configparser.c" +#line 5472 "util/configparser.c" break; - case 440: -#line 1939 "./util/configparser.y" + case 442: +#line 1942 "./util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5467,11 +5480,11 @@ yyreduce: else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5471 "util/configparser.c" +#line 5484 "util/configparser.c" break; - case 441: -#line 1948 "./util/configparser.y" + case 443: +#line 1951 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5483,11 +5496,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5487 "util/configparser.c" +#line 5500 "util/configparser.c" break; - case 442: -#line 1961 "./util/configparser.y" + case 444: +#line 1964 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5499,11 +5512,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5503 "util/configparser.c" +#line 5516 "util/configparser.c" break; - case 443: -#line 1974 "./util/configparser.y" + case 445: +#line 1977 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5511,21 +5524,33 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5515 "util/configparser.c" +#line 5528 "util/configparser.c" break; - case 444: -#line 1983 "./util/configparser.y" + case 446: +#line 1986 "./util/configparser.y" { 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 5525 "util/configparser.c" +#line 5538 "util/configparser.c" break; - case 445: -#line 1990 "./util/configparser.y" + case 447: +#line 1993 "./util/configparser.y" + { + OUTYY(("P(server_zonemd_permissive_mode:%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->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 5550 "util/configparser.c" + break; + + case 448: +#line 2002 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5533,11 +5558,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5537 "util/configparser.c" +#line 5562 "util/configparser.c" break; - case 446: -#line 1999 "./util/configparser.y" + case 449: +#line 2011 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5545,11 +5570,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5549 "util/configparser.c" +#line 5574 "util/configparser.c" break; - case 447: -#line 2008 "./util/configparser.y" + case 450: +#line 2020 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5557,11 +5582,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5561 "util/configparser.c" +#line 5586 "util/configparser.c" break; - case 448: -#line 2017 "./util/configparser.y" + case 451: +#line 2029 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5570,22 +5595,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5574 "util/configparser.c" +#line 5599 "util/configparser.c" break; - case 449: -#line 2026 "./util/configparser.y" + case 452: +#line 2038 "./util/configparser.y" { 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 5585 "util/configparser.c" +#line 5610 "util/configparser.c" break; - case 450: -#line 2034 "./util/configparser.y" + case 453: +#line 2046 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5597,22 +5622,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5601 "util/configparser.c" +#line 5626 "util/configparser.c" break; - case 451: -#line 2047 "./util/configparser.y" + case 454: +#line 2059 "./util/configparser.y" { 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 5612 "util/configparser.c" +#line 5637 "util/configparser.c" break; - case 452: -#line 2055 "./util/configparser.y" + case 455: +#line 2067 "./util/configparser.y" { 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 && @@ -5656,21 +5681,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5660 "util/configparser.c" +#line 5685 "util/configparser.c" break; - case 453: -#line 2100 "./util/configparser.y" + case 456: +#line 2112 "./util/configparser.y" { 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 5670 "util/configparser.c" +#line 5695 "util/configparser.c" break; - case 454: -#line 2107 "./util/configparser.y" + case 457: +#line 2119 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5684,11 +5709,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5688 "util/configparser.c" +#line 5713 "util/configparser.c" break; - case 455: -#line 2122 "./util/configparser.y" + case 458: +#line 2134 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5697,11 +5722,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5701 "util/configparser.c" +#line 5726 "util/configparser.c" break; - case 456: -#line 2132 "./util/configparser.y" + case 459: +#line 2144 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5710,41 +5735,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5714 "util/configparser.c" +#line 5739 "util/configparser.c" break; - case 457: -#line 2142 "./util/configparser.y" + case 460: +#line 2154 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5724 "util/configparser.c" +#line 5749 "util/configparser.c" break; - case 458: -#line 2149 "./util/configparser.y" + case 461: +#line 2161 "./util/configparser.y" { 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 5734 "util/configparser.c" +#line 5759 "util/configparser.c" break; - case 459: -#line 2156 "./util/configparser.y" + case 462: +#line 2168 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5744 "util/configparser.c" +#line 5769 "util/configparser.c" break; - case 460: -#line 2163 "./util/configparser.y" + case 463: +#line 2175 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5752,22 +5777,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5756 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 461: -#line 2172 "./util/configparser.y" + case 464: +#line 2184 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5767 "util/configparser.c" +#line 5792 "util/configparser.c" break; - case 462: -#line 2180 "./util/configparser.y" + case 465: +#line 2192 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5780,11 +5805,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5784 "util/configparser.c" +#line 5809 "util/configparser.c" break; - case 463: -#line 2194 "./util/configparser.y" + case 466: +#line 2206 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5804,11 +5829,11 @@ yyreduce: } } } -#line 5808 "util/configparser.c" +#line 5833 "util/configparser.c" break; - case 464: -#line 2215 "./util/configparser.y" + case 467: +#line 2227 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5828,11 +5853,11 @@ yyreduce: } } } -#line 5832 "util/configparser.c" +#line 5857 "util/configparser.c" break; - case 465: -#line 2236 "./util/configparser.y" + case 468: +#line 2248 "./util/configparser.y" { 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, @@ -5843,11 +5868,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5847 "util/configparser.c" +#line 5872 "util/configparser.c" break; - case 466: -#line 2248 "./util/configparser.y" + case 469: +#line 2260 "./util/configparser.y" { 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, @@ -5858,11 +5883,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5862 "util/configparser.c" +#line 5887 "util/configparser.c" break; - case 467: -#line 2260 "./util/configparser.y" + case 470: +#line 2272 "./util/configparser.y" { 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, @@ -5873,11 +5898,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5877 "util/configparser.c" +#line 5902 "util/configparser.c" break; - case 468: -#line 2272 "./util/configparser.y" + case 471: +#line 2284 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5885,11 +5910,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5889 "util/configparser.c" +#line 5914 "util/configparser.c" break; - case 469: -#line 2281 "./util/configparser.y" + case 472: +#line 2293 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5909,11 +5934,11 @@ yyreduce: } } } -#line 5913 "util/configparser.c" +#line 5938 "util/configparser.c" break; - case 470: -#line 2302 "./util/configparser.y" + case 473: +#line 2314 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5921,11 +5946,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5925 "util/configparser.c" +#line 5950 "util/configparser.c" break; - case 471: -#line 2312 "./util/configparser.y" + case 474: +#line 2324 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5933,33 +5958,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5937 "util/configparser.c" +#line 5962 "util/configparser.c" break; - case 472: -#line 2321 "./util/configparser.y" + case 475: +#line 2333 "./util/configparser.y" { 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 5948 "util/configparser.c" +#line 5973 "util/configparser.c" break; - case 473: -#line 2329 "./util/configparser.y" + case 476: +#line 2341 "./util/configparser.y" { 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 5959 "util/configparser.c" +#line 5984 "util/configparser.c" break; - case 474: -#line 2337 "./util/configparser.y" + case 477: +#line 2349 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5971,11 +5996,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5975 "util/configparser.c" +#line 6000 "util/configparser.c" break; - case 475: -#line 2350 "./util/configparser.y" + case 478: +#line 2362 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5987,11 +6012,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5991 "util/configparser.c" +#line 6016 "util/configparser.c" break; - case 476: -#line 2363 "./util/configparser.y" + case 479: +#line 2375 "./util/configparser.y" { 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) { @@ -6005,11 +6030,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 6009 "util/configparser.c" +#line 6034 "util/configparser.c" break; - case 477: -#line 2378 "./util/configparser.y" + case 480: +#line 2390 "./util/configparser.y" { 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) { @@ -6023,11 +6048,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 6027 "util/configparser.c" +#line 6052 "util/configparser.c" break; - case 478: -#line 2393 "./util/configparser.y" + case 481: +#line 2405 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6035,11 +6060,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6039 "util/configparser.c" +#line 6064 "util/configparser.c" break; - case 479: -#line 2402 "./util/configparser.y" + case 482: +#line 2414 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6047,20 +6072,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6051 "util/configparser.c" +#line 6076 "util/configparser.c" break; - case 480: -#line 2411 "./util/configparser.y" + case 483: +#line 2423 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 6060 "util/configparser.c" +#line 6085 "util/configparser.c" break; - case 481: -#line 2417 "./util/configparser.y" + case 484: +#line 2429 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -6068,11 +6093,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6072 "util/configparser.c" +#line 6097 "util/configparser.c" break; - case 482: -#line 2426 "./util/configparser.y" + case 485: +#line 2438 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6080,11 +6105,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6084 "util/configparser.c" +#line 6109 "util/configparser.c" break; - case 483: -#line 2435 "./util/configparser.y" + case 486: +#line 2447 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6093,11 +6118,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6097 "util/configparser.c" +#line 6122 "util/configparser.c" break; - case 484: -#line 2445 "./util/configparser.y" + case 487: +#line 2457 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6106,11 +6131,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6110 "util/configparser.c" +#line 6135 "util/configparser.c" break; - case 485: -#line 2455 "./util/configparser.y" + case 488: +#line 2467 "./util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6119,11 +6144,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6123 "util/configparser.c" +#line 6148 "util/configparser.c" break; - case 486: -#line 2465 "./util/configparser.y" + case 489: +#line 2477 "./util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6131,11 +6156,11 @@ yyreduce: else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6135 "util/configparser.c" +#line 6160 "util/configparser.c" break; - case 487: -#line 2474 "./util/configparser.y" + case 490: +#line 2486 "./util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6144,11 +6169,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6148 "util/configparser.c" +#line 6173 "util/configparser.c" break; - case 488: -#line 2484 "./util/configparser.y" + case 491: +#line 2496 "./util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6156,11 +6181,11 @@ yyreduce: else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6160 "util/configparser.c" +#line 6185 "util/configparser.c" break; - case 489: -#line 2493 "./util/configparser.y" + case 492: +#line 2505 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -6172,11 +6197,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6176 "util/configparser.c" +#line 6201 "util/configparser.c" break; - case 490: -#line 2506 "./util/configparser.y" + case 493: +#line 2518 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -6188,11 +6213,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6192 "util/configparser.c" +#line 6217 "util/configparser.c" break; - case 491: -#line 2519 "./util/configparser.y" + case 494: +#line 2531 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -6203,11 +6228,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6207 "util/configparser.c" +#line 6232 "util/configparser.c" break; - case 492: -#line 2531 "./util/configparser.y" + case 495: +#line 2543 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -6220,11 +6245,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6224 "util/configparser.c" +#line 6249 "util/configparser.c" break; - case 493: -#line 2545 "./util/configparser.y" + case 496: +#line 2557 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -6235,11 +6260,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6239 "util/configparser.c" +#line 6264 "util/configparser.c" break; - case 494: -#line 2557 "./util/configparser.y" + case 497: +#line 2569 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -6252,11 +6277,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6256 "util/configparser.c" +#line 6281 "util/configparser.c" break; - case 495: -#line 2571 "./util/configparser.y" + case 498: +#line 2583 "./util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -6264,11 +6289,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-string"); } -#line 6268 "util/configparser.c" +#line 6293 "util/configparser.c" break; - case 496: -#line 2580 "./util/configparser.y" + case 499: +#line 2592 "./util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -6279,11 +6304,11 @@ yyreduce: free((yyvsp[0].str)); } -#line 6283 "util/configparser.c" +#line 6308 "util/configparser.c" break; - case 497: -#line 2592 "./util/configparser.y" + case 500: +#line 2604 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -6292,31 +6317,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 6296 "util/configparser.c" +#line 6321 "util/configparser.c" break; - case 498: -#line 2602 "./util/configparser.y" + case 501: +#line 2614 "./util/configparser.y" { 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 6306 "util/configparser.c" +#line 6331 "util/configparser.c" break; - case 499: -#line 2609 "./util/configparser.y" + case 502: +#line 2621 "./util/configparser.y" { 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 6316 "util/configparser.c" +#line 6341 "util/configparser.c" break; - case 500: -#line 2616 "./util/configparser.y" + case 503: +#line 2628 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6324,11 +6349,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6328 "util/configparser.c" +#line 6353 "util/configparser.c" break; - case 501: -#line 2625 "./util/configparser.y" + case 504: +#line 2637 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6336,11 +6361,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6340 "util/configparser.c" +#line 6365 "util/configparser.c" break; - case 502: -#line 2634 "./util/configparser.y" + case 505: +#line 2646 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6349,11 +6374,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6353 "util/configparser.c" +#line 6378 "util/configparser.c" break; - case 503: -#line 2644 "./util/configparser.y" + case 506: +#line 2656 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6362,11 +6387,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6366 "util/configparser.c" +#line 6391 "util/configparser.c" break; - case 504: -#line 2654 "./util/configparser.y" + case 507: +#line 2666 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6375,31 +6400,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6379 "util/configparser.c" +#line 6404 "util/configparser.c" break; - case 505: -#line 2664 "./util/configparser.y" + case 508: +#line 2676 "./util/configparser.y" { 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 6389 "util/configparser.c" +#line 6414 "util/configparser.c" break; - case 506: -#line 2671 "./util/configparser.y" + case 509: +#line 2683 "./util/configparser.y" { 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 6399 "util/configparser.c" +#line 6424 "util/configparser.c" break; - case 507: -#line 2678 "./util/configparser.y" + case 510: +#line 2690 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6407,11 +6432,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6411 "util/configparser.c" +#line 6436 "util/configparser.c" break; - case 508: -#line 2687 "./util/configparser.y" + case 511: +#line 2699 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6419,11 +6444,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6423 "util/configparser.c" +#line 6448 "util/configparser.c" break; - case 509: -#line 2696 "./util/configparser.y" + case 512: +#line 2708 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6432,11 +6457,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6436 "util/configparser.c" +#line 6461 "util/configparser.c" break; - case 510: -#line 2706 "./util/configparser.y" + case 513: +#line 2718 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6445,52 +6470,65 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6449 "util/configparser.c" +#line 6474 "util/configparser.c" break; - case 511: -#line 2716 "./util/configparser.y" + case 514: +#line 2728 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 6459 "util/configparser.c" +#line 6484 "util/configparser.c" break; - case 512: -#line 2723 "./util/configparser.y" + case 515: +#line 2735 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6469 "util/configparser.c" +#line 6494 "util/configparser.c" break; - case 513: -#line 2730 "./util/configparser.y" + case 516: +#line 2742 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6479 "util/configparser.c" +#line 6504 "util/configparser.c" break; - case 514: -#line 2737 "./util/configparser.y" + case 517: +#line 2749 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6490 "util/configparser.c" +#line 6515 "util/configparser.c" break; - case 515: -#line 2745 "./util/configparser.y" + case 518: +#line 2757 "./util/configparser.y" + { + OUTYY(("P(zonemd-reject-absence:%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->auths->zonemd_reject_absence = + (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 6528 "util/configparser.c" + break; + + case 519: +#line 2767 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6499,11 +6537,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6503 "util/configparser.c" +#line 6541 "util/configparser.c" break; - case 516: -#line 2755 "./util/configparser.y" + case 520: +#line 2777 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6512,11 +6550,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6516 "util/configparser.c" +#line 6554 "util/configparser.c" break; - case 517: -#line 2765 "./util/configparser.y" + case 521: +#line 2787 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6525,11 +6563,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6529 "util/configparser.c" +#line 6567 "util/configparser.c" break; - case 518: -#line 2775 "./util/configparser.y" + case 522: +#line 2797 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6538,11 +6576,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6542 "util/configparser.c" +#line 6580 "util/configparser.c" break; - case 519: -#line 2785 "./util/configparser.y" + case 523: +#line 2807 "./util/configparser.y" { 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 && @@ -6580,11 +6618,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 6584 "util/configparser.c" +#line 6622 "util/configparser.c" break; - case 520: -#line 2824 "./util/configparser.y" + case 524: +#line 2846 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6593,33 +6631,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6597 "util/configparser.c" +#line 6635 "util/configparser.c" break; - case 521: -#line 2834 "./util/configparser.y" + case 525: +#line 2856 "./util/configparser.y" { 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 6608 "util/configparser.c" +#line 6646 "util/configparser.c" break; - case 522: -#line 2842 "./util/configparser.y" + case 526: +#line 2864 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6619 "util/configparser.c" +#line 6657 "util/configparser.c" break; - case 523: -#line 2850 "./util/configparser.y" + case 527: +#line 2872 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6633,11 +6671,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 6637 "util/configparser.c" +#line 6675 "util/configparser.c" break; - case 524: -#line 2865 "./util/configparser.y" + case 528: +#line 2887 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6645,19 +6683,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6649 "util/configparser.c" +#line 6687 "util/configparser.c" break; - case 525: -#line 2874 "./util/configparser.y" + case 529: +#line 2896 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 6657 "util/configparser.c" +#line 6695 "util/configparser.c" break; - case 536: -#line 2885 "./util/configparser.y" + case 540: +#line 2907 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6666,11 +6704,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6670 "util/configparser.c" +#line 6708 "util/configparser.c" break; - case 537: -#line 2895 "./util/configparser.y" + case 541: +#line 2917 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6678,79 +6716,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6682 "util/configparser.c" +#line 6720 "util/configparser.c" break; - case 538: -#line 2904 "./util/configparser.y" + case 542: +#line 2926 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6692 "util/configparser.c" +#line 6730 "util/configparser.c" break; - case 539: -#line 2911 "./util/configparser.y" + case 543: +#line 2933 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6702 "util/configparser.c" +#line 6740 "util/configparser.c" break; - case 540: -#line 2918 "./util/configparser.y" + case 544: +#line 2940 "./util/configparser.y" { 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 6712 "util/configparser.c" +#line 6750 "util/configparser.c" break; - case 541: -#line 2925 "./util/configparser.y" + case 545: +#line 2947 "./util/configparser.y" { 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 6722 "util/configparser.c" +#line 6760 "util/configparser.c" break; - case 542: -#line 2932 "./util/configparser.y" + case 546: +#line 2954 "./util/configparser.y" { 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 6732 "util/configparser.c" +#line 6770 "util/configparser.c" break; - case 543: -#line 2939 "./util/configparser.y" + case 547: +#line 2961 "./util/configparser.y" { 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 6742 "util/configparser.c" +#line 6780 "util/configparser.c" break; - case 544: -#line 2946 "./util/configparser.y" + case 548: +#line 2968 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 6750 "util/configparser.c" +#line 6788 "util/configparser.c" break; - case 566: -#line 2966 "./util/configparser.y" + case 570: +#line 2988 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6758,11 +6796,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6762 "util/configparser.c" +#line 6800 "util/configparser.c" break; - case 567: -#line 2975 "./util/configparser.y" + case 571: +#line 2997 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6771,31 +6809,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6775 "util/configparser.c" +#line 6813 "util/configparser.c" break; - case 568: -#line 2985 "./util/configparser.y" + case 572: +#line 3007 "./util/configparser.y" { 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 6785 "util/configparser.c" +#line 6823 "util/configparser.c" break; - case 569: -#line 2992 "./util/configparser.y" + case 573: +#line 3014 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6795 "util/configparser.c" +#line 6833 "util/configparser.c" break; - case 570: -#line 2999 "./util/configparser.y" + case 574: +#line 3021 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6803,51 +6841,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6807 "util/configparser.c" +#line 6845 "util/configparser.c" break; - case 571: -#line 3008 "./util/configparser.y" + case 575: +#line 3030 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6817 "util/configparser.c" +#line 6855 "util/configparser.c" break; - case 572: -#line 3015 "./util/configparser.y" + case 576: +#line 3037 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6827 "util/configparser.c" +#line 6865 "util/configparser.c" break; - case 573: -#line 3022 "./util/configparser.y" + case 577: +#line 3044 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6837 "util/configparser.c" +#line 6875 "util/configparser.c" break; - case 574: -#line 3029 "./util/configparser.y" + case 578: +#line 3051 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6847 "util/configparser.c" +#line 6885 "util/configparser.c" break; - case 575: -#line 3036 "./util/configparser.y" + case 579: +#line 3058 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6855,11 +6893,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6859 "util/configparser.c" +#line 6897 "util/configparser.c" break; - case 576: -#line 3045 "./util/configparser.y" + case 580: +#line 3067 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6867,31 +6905,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6871 "util/configparser.c" +#line 6909 "util/configparser.c" break; - case 577: -#line 3054 "./util/configparser.y" + case 581: +#line 3076 "./util/configparser.y" { 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 6881 "util/configparser.c" +#line 6919 "util/configparser.c" break; - case 578: -#line 3061 "./util/configparser.y" + case 582: +#line 3083 "./util/configparser.y" { 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 6891 "util/configparser.c" +#line 6929 "util/configparser.c" break; - case 579: -#line 3068 "./util/configparser.y" + case 583: +#line 3090 "./util/configparser.y" { 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) @@ -6900,11 +6938,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6904 "util/configparser.c" +#line 6942 "util/configparser.c" break; - case 580: -#line 3078 "./util/configparser.y" + case 584: +#line 3100 "./util/configparser.y" { 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) @@ -6913,11 +6951,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6917 "util/configparser.c" +#line 6955 "util/configparser.c" break; - case 581: -#line 3088 "./util/configparser.y" + case 585: +#line 3110 "./util/configparser.y" { 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) @@ -6926,11 +6964,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6930 "util/configparser.c" +#line 6968 "util/configparser.c" break; - case 582: -#line 3098 "./util/configparser.y" + case 586: +#line 3120 "./util/configparser.y" { 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) @@ -6939,11 +6977,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6943 "util/configparser.c" +#line 6981 "util/configparser.c" break; - case 583: -#line 3108 "./util/configparser.y" + case 587: +#line 3130 "./util/configparser.y" { 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) @@ -6952,11 +6990,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6956 "util/configparser.c" +#line 6994 "util/configparser.c" break; - case 584: -#line 3118 "./util/configparser.y" + case 588: +#line 3140 "./util/configparser.y" { 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) @@ -6965,47 +7003,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6969 "util/configparser.c" - break; - - case 585: -#line 3128 "./util/configparser.y" - { - OUTYY(("\nP(python:)\n")); - } -#line 6977 "util/configparser.c" +#line 7007 "util/configparser.c" break; case 589: -#line 3137 "./util/configparser.y" +#line 3150 "./util/configparser.y" + { + OUTYY(("\nP(python:)\n")); + } +#line 7015 "util/configparser.c" + break; + + case 593: +#line 3159 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6987 "util/configparser.c" - break; - - case 590: -#line 3143 "./util/configparser.y" - { - OUTYY(("\nP(dynlib:)\n")); - } -#line 6995 "util/configparser.c" +#line 7025 "util/configparser.c" break; case 594: -#line 3152 "./util/configparser.y" +#line 3165 "./util/configparser.y" + { + OUTYY(("\nP(dynlib:)\n")); + } +#line 7033 "util/configparser.c" + break; + + case 598: +#line 3174 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 7005 "util/configparser.c" +#line 7043 "util/configparser.c" break; - case 595: -#line 3158 "./util/configparser.y" + case 599: +#line 3180 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7014,21 +7052,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7018 "util/configparser.c" +#line 7056 "util/configparser.c" break; - case 596: -#line 3168 "./util/configparser.y" + case 600: +#line 3190 "./util/configparser.y" { 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 7028 "util/configparser.c" +#line 7066 "util/configparser.c" break; - case 597: -#line 3175 "./util/configparser.y" + case 601: +#line 3197 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -7036,30 +7074,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 7040 "util/configparser.c" +#line 7078 "util/configparser.c" break; - case 598: -#line 3184 "./util/configparser.y" + case 602: +#line 3206 "./util/configparser.y" { 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 7051 "util/configparser.c" +#line 7089 "util/configparser.c" break; - case 599: -#line 3192 "./util/configparser.y" + case 603: +#line 3214 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 7059 "util/configparser.c" +#line 7097 "util/configparser.c" break; - case 612: -#line 3208 "./util/configparser.y" + case 616: +#line 3230 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -7067,11 +7105,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 7071 "util/configparser.c" +#line 7109 "util/configparser.c" break; - case 613: -#line 3218 "./util/configparser.y" + case 617: +#line 3240 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -7079,21 +7117,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 7083 "util/configparser.c" +#line 7121 "util/configparser.c" break; - case 614: -#line 3227 "./util/configparser.y" + case 618: +#line 3249 "./util/configparser.y" { 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 7093 "util/configparser.c" +#line 7131 "util/configparser.c" break; - case 615: -#line 3234 "./util/configparser.y" + case 619: +#line 3256 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -7101,21 +7139,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 7105 "util/configparser.c" +#line 7143 "util/configparser.c" break; - case 616: -#line 3243 "./util/configparser.y" + case 620: +#line 3265 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 7115 "util/configparser.c" +#line 7153 "util/configparser.c" break; - case 617: -#line 3250 "./util/configparser.y" + case 621: +#line 3272 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -7123,22 +7161,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 7127 "util/configparser.c" +#line 7165 "util/configparser.c" break; - case 618: -#line 3259 "./util/configparser.y" + case 622: +#line 3281 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 7138 "util/configparser.c" +#line 7176 "util/configparser.c" break; - case 619: -#line 3267 "./util/configparser.y" + case 623: +#line 3289 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -7150,22 +7188,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 7154 "util/configparser.c" +#line 7192 "util/configparser.c" break; - case 620: -#line 3280 "./util/configparser.y" + case 624: +#line 3302 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 7165 "util/configparser.c" +#line 7203 "util/configparser.c" break; - case 621: -#line 3288 "./util/configparser.y" + case 625: +#line 3310 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -7177,19 +7215,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 7181 "util/configparser.c" +#line 7219 "util/configparser.c" break; - case 622: -#line 3301 "./util/configparser.y" + case 626: +#line 3323 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 7189 "util/configparser.c" +#line 7227 "util/configparser.c" break; - case 631: -#line 3312 "./util/configparser.y" + case 635: +#line 3334 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -7200,11 +7238,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7204 "util/configparser.c" +#line 7242 "util/configparser.c" break; - case 632: -#line 3324 "./util/configparser.y" + case 636: +#line 3346 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -7215,11 +7253,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7219 "util/configparser.c" +#line 7257 "util/configparser.c" break; - case 633: -#line 3336 "./util/configparser.y" + case 637: +#line 3358 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -7230,11 +7268,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7234 "util/configparser.c" +#line 7272 "util/configparser.c" break; - case 634: -#line 3348 "./util/configparser.y" + case 638: +#line 3370 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7248,11 +7286,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7252 "util/configparser.c" +#line 7290 "util/configparser.c" break; - case 635: -#line 3363 "./util/configparser.y" + case 639: +#line 3385 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -7264,11 +7302,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7268 "util/configparser.c" +#line 7306 "util/configparser.c" break; - case 636: -#line 3376 "./util/configparser.y" + case 640: +#line 3398 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7280,11 +7318,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7284 "util/configparser.c" +#line 7322 "util/configparser.c" break; - case 637: -#line 3389 "./util/configparser.y" + case 641: +#line 3411 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7294,19 +7332,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 7298 "util/configparser.c" +#line 7336 "util/configparser.c" break; - case 638: -#line 3400 "./util/configparser.y" + case 642: +#line 3422 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 7306 "util/configparser.c" +#line 7344 "util/configparser.c" break; - case 643: -#line 3409 "./util/configparser.y" + case 647: +#line 3431 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7320,11 +7358,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7324 "util/configparser.c" +#line 7362 "util/configparser.c" break; - case 644: -#line 3424 "./util/configparser.y" + case 648: +#line 3446 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7338,11 +7376,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7342 "util/configparser.c" +#line 7380 "util/configparser.c" break; -#line 7346 "util/configparser.c" +#line 7384 "util/configparser.c" default: break; } @@ -7536,7 +7574,7 @@ yyreturn: return yyresult; } -#line 3438 "./util/configparser.y" +#line 3460 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 2ca046ba0..fcbb51ec4 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -359,7 +359,9 @@ extern int yydebug; VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 563 /* VAR_NSID */ + VAR_NSID = 563, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 564, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_REJECT_ABSENCE = 565 /* VAR_ZONEMD_REJECT_ABSENCE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -673,6 +675,8 @@ extern int yydebug; #define VAR_EDNS_CLIENT_STRING 561 #define VAR_EDNS_CLIENT_STRING_OPCODE 562 #define VAR_NSID 563 +#define VAR_ZONEMD_PERMISSIVE_MODE 564 +#define VAR_ZONEMD_REJECT_ABSENCE 565 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -682,7 +686,7 @@ union YYSTYPE char* str; -#line 686 "util/configparser.h" +#line 690 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 272a97969..10f5ac1c4 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -182,6 +182,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING %token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID +%token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_REJECT_ABSENCE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -299,7 +300,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | server_tls_use_sni | server_edns_client_string | - server_edns_client_string_opcode | server_nsid + server_edns_client_string_opcode | server_nsid | + server_zonemd_permissive_mode ; stubstart: VAR_STUB_ZONE { @@ -366,6 +368,7 @@ authstart: VAR_AUTH_ZONE s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; + s->zonemd_reject_absence = 0; s->isrpz = 0; } else yyerror("out of memory"); @@ -375,7 +378,7 @@ contents_auth: contents_auth content_auth | ; content_auth: auth_name | auth_zonefile | auth_master | auth_url | auth_for_downstream | auth_for_upstream | auth_fallback_enabled | - auth_allow_notify + auth_allow_notify | auth_zonemd_reject_absence ; rpz_tag: VAR_TAGS STRING_ARG @@ -1986,6 +1989,15 @@ server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG cfg_parser->cfg->val_nsec3_key_iterations = $2; } ; +server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG + { + OUTYY(("P(server_zonemd_permissive_mode:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->zonemd_permissive_mode = (strcmp($2, "yes")==0); + free($2); + } + ; server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG { OUTYY(("P(server_add_holddown:%s)\n", $2)); @@ -2741,6 +2753,16 @@ auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG yyerror("out of memory"); } ; +auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG + { + OUTYY(("P(zonemd-reject-absence:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->auths->zonemd_reject_absence = + (strcmp($2, "yes")==0); + free($2); + } + ; auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG { OUTYY(("P(for-downstream:%s)\n", $2)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index a9e9d3a03..2b01e533c 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -583,6 +583,7 @@ int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr) else if(fptr == &probe_answer_cb) return 1; else if(fptr == &auth_xfer_probe_lookup_callback) return 1; else if(fptr == &auth_xfer_transfer_lookup_callback) return 1; + else if(fptr == &auth_zonemd_dnskey_lookup_callback) return 1; return 0; } diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 15cccf017..a4d020143 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -141,6 +141,69 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) #endif } +/** hash structure for keeping track of running hashes */ +struct secalgo_hash { + /** the openssl message digest context */ + EVP_MD_CTX* ctx; +}; + +/** create secalgo hash with hash type */ +static struct secalgo_hash* secalgo_hash_create_md(const EVP_MD* md) +{ + struct secalgo_hash* h; + if(!md) + return NULL; + h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->ctx = EVP_MD_CTX_create(); + if(!h->ctx) { + free(h); + return NULL; + } + if(!EVP_DigestInit_ex(h->ctx, md, NULL)) { + EVP_MD_CTX_destroy(h->ctx); + free(h); + return NULL; + } + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + return secalgo_hash_create_md(EVP_sha384()); +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + return secalgo_hash_create_md(EVP_sha512()); +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + return EVP_DigestUpdate(hash->ctx, (unsigned char*)data, + (unsigned int)len); +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + if(EVP_MD_CTX_size(hash->ctx) > (int)maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = EVP_MD_CTX_size(hash->ctx); + return EVP_DigestFinal_ex(hash->ctx, result, NULL); +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + EVP_MD_CTX_destroy(hash->ctx); + free(hash); +} + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. @@ -823,6 +886,64 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) (void)HASH_HashBuf(HASH_AlgSHA256, res, buf, (unsigned long)len); } +/** the secalgo hash structure */ +struct secalgo_hash { + /** hash context */ + HASHContext* ctx; +}; + +/** create hash struct of type */ +static struct secalgo_hash* secalgo_hash_create_type(HASH_HashType tp) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->ctx = HASH_Create(tp); + if(!h->ctx) { + free(h); + return NULL; + } + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + return secalgo_hash_create_type(HASH_AlgSHA384); +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + return secalgo_hash_create_type(HASH_AlgSHA512); +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + HASH_Update(hash->ctx, (unsigned char*)data, (unsigned int)len); + return 1; +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + unsigned int reslen = 0; + if(HASH_ResultLenContext(hash->ctx) > (unsigned int)maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + HASH_End(hash->ctx, (unsigned char*)result, &reslen, + (unsigned int)maxlen); + *resultlen = (size_t)reslen; + return 1; +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + HASH_Destroy(hash->ctx); + free(hash); +} + size_t ds_digest_size_supported(int algo) { @@ -1451,6 +1572,82 @@ secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) _digest_nettle(SHA256_DIGEST_SIZE, (uint8_t*)buf, len, res); } +/** secalgo hash structure */ +struct secalgo_hash { + /** if it is 384 or 512 */ + int active; + /** context for sha384 */ + struct sha384_ctx ctx384; + /** context for sha512 */ + struct sha512_ctx ctx512; +}; + +struct secalgo_hash* secalgo_hash_create_sha384(void) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->active = 384; + sha384_init(&h->ctx384); + return h; +} + +struct secalgo_hash* secalgo_hash_create_sha512(void) +{ + struct secalgo_hash* h = calloc(1, sizeof(*h)); + if(!h) + return NULL; + h->active = 512; + sha512_init(&h->ctx512); + return h; +} + +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len) +{ + if(hash->active == 384) { + sha384_update(&hash->ctx384, len, data); + } else if(hash->active == 512) { + sha512_update(&hash->ctx512, len, data); + } else { + return 0; + } + return 1; +} + +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen) +{ + if(hash->active == 384) { + if(SHA384_DIGEST_SIZE > maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = SHA384_DIGEST_SIZE; + sha384_digest(&hash->ctx384, SHA384_DIGEST_SIZE, + (unsigned char*)result); + } else if(hash->active == 512) { + if(SHA512_DIGEST_SIZE > maxlen) { + *resultlen = 0; + log_err("secalgo_hash_final: hash buffer too small"); + return 0; + } + *resultlen = SHA512_DIGEST_SIZE; + sha512_digest(&hash->ctx512, SHA512_DIGEST_SIZE, + (unsigned char*)result); + } else { + *resultlen = 0; + return 0; + } + return 1; +} + +void secalgo_hash_delete(struct secalgo_hash* hash) +{ + if(!hash) return; + free(hash); +} + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. diff --git a/validator/val_secalgo.h b/validator/val_secalgo.h index 52aaeb9f6..8b6080dc2 100644 --- a/validator/val_secalgo.h +++ b/validator/val_secalgo.h @@ -43,6 +43,7 @@ #ifndef VALIDATOR_VAL_SECALGO_H #define VALIDATOR_VAL_SECALGO_H struct sldns_buffer; +struct secalgo_hash; /** Return size of nsec3 hash algorithm, 0 if not supported */ size_t nsec3_hash_algo_size_supported(int id); @@ -67,6 +68,48 @@ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, */ void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res); +/** + * Start a hash of type sha384. Allocates structure, then inits it, + * so that a series of updates can be performed, before the final result. + * @return hash structure. NULL on malloc failure or no support. + */ +struct secalgo_hash* secalgo_hash_create_sha384(void); + +/** + * Start a hash of type sha512. Allocates structure, then inits it, + * so that a series of updates can be performed, before the final result. + * @return hash structure. NULL on malloc failure or no support. + */ +struct secalgo_hash* secalgo_hash_create_sha512(void); + +/** + * Update a hash with more information to add to it. + * @param hash: the hash that is updated. + * @param data: data to add. + * @param len: length of data. + * @return false on failure. + */ +int secalgo_hash_update(struct secalgo_hash* hash, uint8_t* data, size_t len); + +/** + * Get the final result of the hash. + * @param hash: the hash that has had updates to it. + * @param result: where to store the result. + * @param maxlen: length of the result buffer, eg. size of the allocation. + * If not large enough the routine fails. + * @param resultlen: the length of the result, returned to the caller. + * How much of maxlen is used. + * @return false on failure. + */ +int secalgo_hash_final(struct secalgo_hash* hash, uint8_t* result, + size_t maxlen, size_t* resultlen); + +/** + * Delete the hash structure. + * @param hash: the hash to delete. + */ +void secalgo_hash_delete(struct secalgo_hash* hash); + /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index de730f681..14e13da06 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -1187,7 +1187,7 @@ rrset_canonical(struct regional* region, sldns_buffer* buf, * section, to prevent that a wildcard synthesized NSEC can be used in * the non-existence proves. */ if(ntohs(k->rk.type) == LDNS_RR_TYPE_NSEC && - section == LDNS_SECTION_AUTHORITY) { + section == LDNS_SECTION_AUTHORITY && qstate) { k->rk.dname = regional_alloc_init(qstate->region, can_owner, can_owner_len); if(!k->rk.dname) @@ -1199,6 +1199,59 @@ rrset_canonical(struct regional* region, sldns_buffer* buf, return 1; } +int +rrset_canonicalize_to_buffer(struct regional* region, sldns_buffer* buf, + struct ub_packed_rrset_key* k) +{ + struct rbtree_type* sortree = NULL; + struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; + uint8_t* can_owner = NULL; + size_t can_owner_len = 0; + struct canon_rr* walk; + struct canon_rr* rrs; + + sortree = (struct rbtree_type*)regional_alloc(region, + sizeof(rbtree_type)); + if(!sortree) + return 0; + if(d->count > RR_COUNT_MAX) + return 0; /* integer overflow protection */ + rrs = regional_alloc(region, sizeof(struct canon_rr)*d->count); + if(!rrs) { + return 0; + } + rbtree_init(sortree, &canonical_tree_compare); + canonical_sort(k, d, sortree, rrs); + + sldns_buffer_clear(buf); + RBTREE_FOR(walk, struct canon_rr*, sortree) { + /* see if there is enough space left in the buffer */ + if(sldns_buffer_remaining(buf) < can_owner_len + 2 + 2 + 4 + + d->rr_len[walk->rr_idx]) { + log_err("verify: failed to canonicalize, " + "rrset too big"); + return 0; + } + /* determine canonical owner name */ + if(can_owner) + sldns_buffer_write(buf, can_owner, can_owner_len); + else { + can_owner = sldns_buffer_current(buf); + sldns_buffer_write(buf, k->rk.dname, k->rk.dname_len); + query_dname_tolower(can_owner); + can_owner_len = k->rk.dname_len; + } + sldns_buffer_write(buf, &k->rk.type, 2); + sldns_buffer_write(buf, &k->rk.rrset_class, 2); + sldns_buffer_write_u32(buf, d->rr_ttl[walk->rr_idx]); + sldns_buffer_write(buf, d->rr_data[walk->rr_idx], + d->rr_len[walk->rr_idx]); + canonicalize_rdata(buf, k, d->rr_len[walk->rr_idx]); + } + sldns_buffer_flip(buf); + return 1; +} + /** pretty print rrsig error with dates */ static void sigdate_error(const char* str, int32_t expi, int32_t incep, int32_t now) diff --git a/validator/val_sigcrypt.h b/validator/val_sigcrypt.h index 755a1d6e1..23ca1d91b 100644 --- a/validator/val_sigcrypt.h +++ b/validator/val_sigcrypt.h @@ -334,4 +334,16 @@ int canonical_tree_compare(const void* k1, const void* k2); int rrset_canonical_equal(struct regional* region, struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2); +/** + * Canonicalize an rrset into the buffer. For an auth zone record, so + * this does not use a signature, or the RRSIG TTL or the wildcard label + * count from the RRSIG. + * @param region: temporary region. + * @param buf: the buffer to use. + * @param k: the rrset to insert. + * @return false on alloc error. + */ +int rrset_canonicalize_to_buffer(struct regional* region, + struct sldns_buffer* buf, struct ub_packed_rrset_key* k); + #endif /* VALIDATOR_VAL_SIGCRYPT_H */