summaryrefslogtreecommitdiffstats
path: root/tests/deckard
diff options
context:
space:
mode:
Diffstat (limited to 'tests/deckard')
-rw-r--r--tests/deckard/.gitignore20
-rw-r--r--tests/deckard/.gitlab-ci.yml116
-rw-r--r--tests/deckard/.gitmodules6
-rw-r--r--tests/deckard/LICENSE23
-rw-r--r--tests/deckard/Makefile58
-rw-r--r--tests/deckard/README.rst98
-rw-r--r--tests/deckard/ci/README.rst4
-rw-r--r--tests/deckard/ci/common.sh17
-rwxr-xr-xtests/deckard/ci/compare-rplint.sh31
-rwxr-xr-xtests/deckard/ci/compare-tests.sh30
-rwxr-xr-xtests/deckard/ci/junit-compare.py37
-rwxr-xr-xtests/deckard/ci/mypy-run.sh13
-rwxr-xr-xtests/deckard/ci/pylint-run.sh12
-rwxr-xr-xtests/deckard/ci/runlocally.sh41
-rw-r--r--tests/deckard/configs/getdns.yaml12
-rw-r--r--tests/deckard/configs/knotd_master.yaml10
-rw-r--r--tests/deckard/configs/knotd_slave.yaml10
-rw-r--r--tests/deckard/configs/kresd.yaml10
-rw-r--r--tests/deckard/configs/pdns.yaml15
-rw-r--r--tests/deckard/configs/unbound.yaml13
-rw-r--r--tests/deckard/conftest.py156
-rw-r--r--tests/deckard/contrib/deckard.vim26
-rw-r--r--tests/deckard/contrib/libfaketime/.gitignore9
-rw-r--r--tests/deckard/contrib/libfaketime/COPYING339
-rw-r--r--tests/deckard/contrib/libfaketime/Makefile34
-rw-r--r--tests/deckard/contrib/libfaketime/NEWS134
-rw-r--r--tests/deckard/contrib/libfaketime/README534
-rw-r--r--tests/deckard/contrib/libfaketime/README.OSX144
-rw-r--r--tests/deckard/contrib/libfaketime/README.developers106
-rw-r--r--tests/deckard/contrib/libfaketime/TODO9
-rw-r--r--tests/deckard/contrib/libfaketime/man/Makefile14
-rw-r--r--tests/deckard/contrib/libfaketime/man/Makefile.OSX15
-rw-r--r--tests/deckard/contrib/libfaketime/man/faketime.182
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Arch/PKGBUILD-32bit.txt25
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Debian/avoid-spurious-lrt.patch30
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Debian/control40
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Debian/fix-infinite-recursion-on-real_clock_gettime.patch29
-rwxr-xr-xtests/deckard/contrib/libfaketime/packaging/Linux/Debian/libfaketime.install3
-rwxr-xr-xtests/deckard/contrib/libfaketime/packaging/Linux/Debian/rules17
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime-fix-infinite-recursion-on-real_clock_gettime.patch13
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime.spec.txt55
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/OSX/Fink/libfaketime.info53
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/OSX/Homebrew/libfaketime.rb21
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/Portfile45
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/patch-test-Makefile.OSX.diff12
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/OSX/README65
-rw-r--r--tests/deckard/contrib/libfaketime/packaging/README14
-rw-r--r--tests/deckard/contrib/libfaketime/src/Makefile118
-rw-r--r--tests/deckard/contrib/libfaketime/src/Makefile.OSX75
-rw-r--r--tests/deckard/contrib/libfaketime/src/faketime.c385
-rw-r--r--tests/deckard/contrib/libfaketime/src/faketime_common.h61
-rw-r--r--tests/deckard/contrib/libfaketime/src/libfaketime.c2646
-rw-r--r--tests/deckard/contrib/libfaketime/src/libfaketime.map21
-rw-r--r--tests/deckard/contrib/libfaketime/src/sunos_endian.h12
-rw-r--r--tests/deckard/contrib/libfaketime/src/time_ops.h104
-rw-r--r--tests/deckard/contrib/libfaketime/src/timeprivacy270
-rw-r--r--tests/deckard/contrib/libfaketime/src/uthash.h1208
-rw-r--r--tests/deckard/contrib/libfaketime/test/Makefile31
-rw-r--r--tests/deckard/contrib/libfaketime/test/Makefile.OSX30
-rw-r--r--tests/deckard/contrib/libfaketime/test/README-testframe.txt39
-rw-r--r--tests/deckard/contrib/libfaketime/test/functests/common.inc63
-rw-r--r--tests/deckard/contrib/libfaketime/test/functests/dont_test_false.sh6
-rw-r--r--tests/deckard/contrib/libfaketime/test/functests/test_exclude_mono.sh87
-rw-r--r--tests/deckard/contrib/libfaketime/test/functests/test_null.sh13
-rw-r--r--tests/deckard/contrib/libfaketime/test/functests/test_true.sh7
-rwxr-xr-xtests/deckard/contrib/libfaketime/test/functests/test_walkone.sh67
-rwxr-xr-xtests/deckard/contrib/libfaketime/test/test.sh66
-rwxr-xr-xtests/deckard/contrib/libfaketime/test/test_OSX.sh46
-rw-r--r--tests/deckard/contrib/libfaketime/test/testframe.inc55
-rwxr-xr-xtests/deckard/contrib/libfaketime/test/testframe.sh99
-rw-r--r--tests/deckard/contrib/libfaketime/test/timetest.c284
-rw-r--r--tests/deckard/contrib/libswrap/.gitignore9
-rw-r--r--tests/deckard/contrib/libswrap/AUTHORS3
-rw-r--r--tests/deckard/contrib/libswrap/CMakeLists.txt86
-rw-r--r--tests/deckard/contrib/libswrap/COPYING32
-rw-r--r--tests/deckard/contrib/libswrap/CPackConfig.cmake53
-rw-r--r--tests/deckard/contrib/libswrap/CTestConfig.cmake9
-rw-r--r--tests/deckard/contrib/libswrap/ChangeLog60
-rw-r--r--tests/deckard/contrib/libswrap/ConfigureChecks.cmake232
-rw-r--r--tests/deckard/contrib/libswrap/DefineOptions.cmake1
-rw-r--r--tests/deckard/contrib/libswrap/README21
-rw-r--r--tests/deckard/contrib/libswrap/README.install78
-rw-r--r--tests/deckard/contrib/libswrap/TODO33
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/AddCMockaTest.cmake23
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/COPYING-CMAKE-SCRIPTS22
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/CheckCCompilerFlagSSP.cmake26
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/DefineCMakeDefaults.cmake30
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/DefineCompilerFlags.cmake93
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/DefineInstallationPaths.cmake109
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/DefinePlatformDefaults.cmake32
-rw-r--r--tests/deckard/contrib/libswrap/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake17
-rw-r--r--tests/deckard/contrib/libswrap/config.h.cmake74
-rw-r--r--tests/deckard/contrib/libswrap/doc/CMakeLists.txt4
-rw-r--r--tests/deckard/contrib/libswrap/doc/README3
-rw-r--r--tests/deckard/contrib/libswrap/doc/socket_wrapper.1204
-rw-r--r--tests/deckard/contrib/libswrap/doc/socket_wrapper.1.txt95
-rwxr-xr-xtests/deckard/contrib/libswrap/example/openssh.sh66
-rw-r--r--tests/deckard/contrib/libswrap/socket_wrapper-config-version.cmake.in11
-rw-r--r--tests/deckard/contrib/libswrap/socket_wrapper-config.cmake.in1
-rw-r--r--tests/deckard/contrib/libswrap/socket_wrapper.pc.cmake4
-rw-r--r--tests/deckard/contrib/libswrap/src/CMakeLists.txt26
-rw-r--r--tests/deckard/contrib/libswrap/src/socket_wrapper.c5475
-rw-r--r--tests/deckard/contrib/libswrap/tests/CMakeLists.txt57
-rw-r--r--tests/deckard/contrib/libswrap/tests/README9
-rw-r--r--tests/deckard/contrib/libswrap/tests/echo_srv.c925
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_bind.c536
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_connect.c101
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_get_peer_sock_name.c476
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_sendmsg_recvmsg.c273
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket.c69
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket_options.c368
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_write_read.c156
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_tcp_writev_readv.c189
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_udp_send_recv.c160
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_udp_sendmsg_recvmsg.c407
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_echo_udp_sendto_recvfrom.c316
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_ioctl.c110
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_sendmsg_recvmsg_fd.c116
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_swrap_unit.c120
-rw-r--r--tests/deckard/contrib/libswrap/tests/test_tcp_listen.c115
-rw-r--r--tests/deckard/contrib/libswrap/tests/torture.c318
-rw-r--r--tests/deckard/contrib/libswrap/tests/torture.h88
-rw-r--r--tests/deckard/contrib/libswrap/tests/valgrind.supp16
-rwxr-xr-xtests/deckard/deckard.py432
-rw-r--r--tests/deckard/deckard_pytest.ini7
-rwxr-xr-xtests/deckard/deckard_pytest.py67
-rw-r--r--tests/deckard/doc/devel_guide.rst25
-rw-r--r--tests/deckard/doc/scenario_example.rst337
-rw-r--r--tests/deckard/doc/scenario_guide.rst431
-rw-r--r--tests/deckard/doc/user_guide.rst297
-rwxr-xr-xtests/deckard/getdns_run.sh63
-rwxr-xr-xtests/deckard/knotd_master_run.sh6
-rwxr-xr-xtests/deckard/knotd_slave_run.sh6
-rwxr-xr-xtests/deckard/kresd_run.sh5
-rwxr-xr-xtests/deckard/pdns_run.sh5
-rw-r--r--tests/deckard/platform.mk27
-rw-r--r--tests/deckard/pydnstest/__init__.py0
-rw-r--r--tests/deckard/pydnstest/augwrap.py227
-rw-r--r--tests/deckard/pydnstest/deckard.aug94
-rw-r--r--tests/deckard/pydnstest/empty.rpl20
-rw-r--r--tests/deckard/pydnstest/matchpart.py238
-rw-r--r--tests/deckard/pydnstest/scenario.py1058
-rw-r--r--tests/deckard/pydnstest/tests/__init__.py0
-rw-r--r--tests/deckard/pydnstest/tests/test_parse_config.py17
-rw-r--r--tests/deckard/pydnstest/tests/test_scenario.py55
-rw-r--r--tests/deckard/pydnstest/testserver.py278
-rw-r--r--tests/deckard/pylintrc26
-rw-r--r--tests/deckard/requirements.txt7
-rwxr-xr-xtests/deckard/rplint.py335
-rwxr-xr-xtests/deckard/rplint.sh5
-rw-r--r--tests/deckard/rplint_pytest.ini4
-rwxr-xr-xtests/deckard/run.sh12
-rw-r--r--tests/deckard/sets/knotd/master/example.com.zone22
-rw-r--r--tests/deckard/sets/knotd/master/iter_ns.rpl28
-rw-r--r--tests/deckard/sets/knotd/slave/iter_ns.rpl78
-rw-r--r--tests/deckard/sets/resolver/LICENSE30
-rw-r--r--tests/deckard/sets/resolver/black_data.rpl300
-rw-r--r--tests/deckard/sets/resolver/black_dnskey.rpl508
-rw-r--r--tests/deckard/sets/resolver/black_ds.rpl418
-rw-r--r--tests/deckard/sets/resolver/black_ent.rpl451
-rw-r--r--tests/deckard/sets/resolver/black_prime.rpl300
-rw-r--r--tests/deckard/sets/resolver/iter_badglue.rpl272
-rw-r--r--tests/deckard/sets/resolver/iter_badraw.rpl18699
-rw-r--r--tests/deckard/sets/resolver/iter_cname_badauth.rpl267
-rw-r--r--tests/deckard/sets/resolver/iter_cname_cache.rpl297
-rw-r--r--tests/deckard/sets/resolver/iter_cname_double.rpl294
-rw-r--r--tests/deckard/sets/resolver/iter_cname_nx.rpl288
-rw-r--r--tests/deckard/sets/resolver/iter_cname_qnamecopy.rpl331
-rw-r--r--tests/deckard/sets/resolver/iter_cycle.rpl258
-rw-r--r--tests/deckard/sets/resolver/iter_cycle_noh.rpl414
-rw-r--r--tests/deckard/sets/resolver/iter_dnsseclame_ds_ok.rpl369
-rw-r--r--tests/deckard/sets/resolver/iter_dnsseclame_ta_ok.rpl305
-rw-r--r--tests/deckard/sets/resolver/iter_domain_sale.rpl269
-rw-r--r--tests/deckard/sets/resolver/iter_domain_sale_nschange.rpl348
-rw-r--r--tests/deckard/sets/resolver/iter_donotq127.rpl196
-rw-r--r--tests/deckard/sets/resolver/iter_ds_locate_ns.rpl144
-rw-r--r--tests/deckard/sets/resolver/iter_ds_locate_ns_nosoa.rpl144
-rw-r--r--tests/deckard/sets/resolver/iter_escape_bailiwick.rpl218
-rw-r--r--tests/deckard/sets/resolver/iter_formerr.rpl83
-rw-r--r--tests/deckard/sets/resolver/iter_hint_lame.rpl160
-rw-r--r--tests/deckard/sets/resolver/iter_lame_aaaa.rpl178
-rw-r--r--tests/deckard/sets/resolver/iter_lame_noaa.rpl124
-rw-r--r--tests/deckard/sets/resolver/iter_lame_nosoa.rpl291
-rw-r--r--tests/deckard/sets/resolver/iter_lame_root.rpl33
-rw-r--r--tests/deckard/sets/resolver/iter_lamescrub.rpl150
-rw-r--r--tests/deckard/sets/resolver/iter_minim_a.rpl93
-rw-r--r--tests/deckard/sets/resolver/iter_minim_a_nxdomain.rpl104
-rw-r--r--tests/deckard/sets/resolver/iter_minim_nonempty.rpl132
-rw-r--r--tests/deckard/sets/resolver/iter_minim_ns.rpl126
-rw-r--r--tests/deckard/sets/resolver/iter_minmaxttl.rpl191
-rw-r--r--tests/deckard/sets/resolver/iter_mod.rpl217
-rw-r--r--tests/deckard/sets/resolver/iter_multiple_A.rpl170
-rw-r--r--tests/deckard/sets/resolver/iter_ns_badaa.rpl174
-rw-r--r--tests/deckard/sets/resolver/iter_ns_badglue.rpl238
-rw-r--r--tests/deckard/sets/resolver/iter_ns_badip.rpl261
-rw-r--r--tests/deckard/sets/resolver/iter_ns_noglue.rpl220
-rw-r--r--tests/deckard/sets/resolver/iter_ns_spoof.rpl274
-rw-r--r--tests/deckard/sets/resolver/iter_pc_a.rpl230
-rw-r--r--tests/deckard/sets/resolver/iter_pc_aaaa.rpl230
-rw-r--r--tests/deckard/sets/resolver/iter_pcdiff.rpl208
-rw-r--r--tests/deckard/sets/resolver/iter_pcdirect.rpl311
-rw-r--r--tests/deckard/sets/resolver/iter_pcname.rpl276
-rw-r--r--tests/deckard/sets/resolver/iter_pcnamech.rpl421
-rw-r--r--tests/deckard/sets/resolver/iter_pcnamechrec.rpl400
-rw-r--r--tests/deckard/sets/resolver/iter_pcnamerec.rpl274
-rw-r--r--tests/deckard/sets/resolver/iter_pcttl.rpl353
-rw-r--r--tests/deckard/sets/resolver/iter_reclame_one.rpl316
-rw-r--r--tests/deckard/sets/resolver/iter_reclame_two.rpl355
-rw-r--r--tests/deckard/sets/resolver/iter_recurse.rpl312
-rw-r--r--tests/deckard/sets/resolver/iter_refuse.rpl191
-rw-r--r--tests/deckard/sets/resolver/iter_req_qname.rpl120
-rw-r--r--tests/deckard/sets/resolver/iter_resolve.rpl219
-rw-r--r--tests/deckard/sets/resolver/iter_tcbit.rpl87
-rw-r--r--tests/deckard/sets/resolver/iter_timeouted_ns.rpl316
-rw-r--r--tests/deckard/sets/resolver/iter_unexpectedrrtype.rpl59
-rw-r--r--tests/deckard/sets/resolver/iter_validate.rpl209
-rw-r--r--tests/deckard/sets/resolver/iter_validate_child_zone_noaddr.rpl207
-rw-r--r--tests/deckard/sets/resolver/iter_validate_extradata.rpl212
-rw-r--r--tests/deckard/sets/resolver/iter_validate_nsec_nxdomain.rpl152
-rw-r--r--tests/deckard/sets/resolver/module_dns64.rpl204
-rw-r--r--tests/deckard/sets/resolver/module_hint_static.rpl43
-rw-r--r--tests/deckard/sets/resolver/module_policy_deny_all.rpl96
-rw-r--r--tests/deckard/sets/resolver/module_policy_deny_suff_comm.rpl148
-rw-r--r--tests/deckard/sets/resolver/module_policy_deny_suff_patt.rpl148
-rw-r--r--tests/deckard/sets/resolver/module_policy_drop.rpl24
-rw-r--r--tests/deckard/sets/resolver/module_policy_forward.rpl38
-rw-r--r--tests/deckard/sets/resolver/module_policy_pass_deny.rpl67
-rw-r--r--tests/deckard/sets/resolver/module_policy_rpz.rpl153
-rw-r--r--tests/deckard/sets/resolver/module_policy_tc.rpl24
-rw-r--r--tests/deckard/sets/resolver/module_renumber.rpl86
-rw-r--r--tests/deckard/sets/resolver/module_workarounds_disable_0x20.rpl81
-rw-r--r--tests/deckard/sets/resolver/nsec3_aggr_cache.rpl5280
-rw-r--r--tests/deckard/sets/resolver/nsec3_wildcard_no_data_response.rpl110
-rw-r--r--tests/deckard/sets/resolver/nsec_aggr_cache.rpl6355
-rw-r--r--tests/deckard/sets/resolver/nsec_name_error_response-part2.rpl227
-rw-r--r--tests/deckard/sets/resolver/nsec_name_error_response.rpl240
-rw-r--r--tests/deckard/sets/resolver/nsec_no_data_response.rpl201
-rw-r--r--tests/deckard/sets/resolver/nsec_ref_to_unsigned1.rpl196
-rw-r--r--tests/deckard/sets/resolver/nsec_ref_to_unsigned2.rpl197
-rw-r--r--tests/deckard/sets/resolver/nsec_ref_to_unsigned3.rpl197
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_answer_response.rpl418
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.key5
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.private13
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_answer_response/root.zone8
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_no_data_response-part2.rpl257
-rw-r--r--tests/deckard/sets/resolver/nsec_wildcard_no_data_response.rpl282
-rw-r--r--tests/deckard/sets/resolver/rfc5011/README5
-rwxr-xr-xtests/deckard/sets/resolver/rfc5011/dns2rpl.py182
-rw-r--r--tests/deckard/sets/resolver/rfc5011/empty.rpl20
-rwxr-xr-xtests/deckard/sets/resolver/rfc5011/genkeyszones.sh90
-rw-r--r--tests/deckard/sets/resolver/rfc5011/knot.root.conf26
-rw-r--r--tests/deckard/sets/resolver/rfc5011/unsigned.db8
-rw-r--r--tests/deckard/sets/resolver/val_ad_qtype_ds.rpl196
-rw-r--r--tests/deckard/sets/resolver/val_adbit.rpl172
-rw-r--r--tests/deckard/sets/resolver/val_adcopy.rpl164
-rw-r--r--tests/deckard/sets/resolver/val_anchor_nx_nosig.rpl218
-rw-r--r--tests/deckard/sets/resolver/val_ans_dsent.rpl246
-rw-r--r--tests/deckard/sets/resolver/val_ans_nx.rpl248
-rw-r--r--tests/deckard/sets/resolver/val_cname_loop1.rpl142
-rw-r--r--tests/deckard/sets/resolver/val_cname_loop1_3.rpl182
-rw-r--r--tests/deckard/sets/resolver/val_cname_loop3.rpl164
-rw-r--r--tests/deckard/sets/resolver/val_cname_new_signer.rpl239
-rw-r--r--tests/deckard/sets/resolver/val_cname_oob.rpl181
-rw-r--r--tests/deckard/sets/resolver/val_cname_to_unsigned.rpl202
-rw-r--r--tests/deckard/sets/resolver/val_cname_to_unsigned_fake_rrsig.rpl213
-rw-r--r--tests/deckard/sets/resolver/val_cname_trust_domains.rpl438
-rw-r--r--tests/deckard/sets/resolver/val_cnamenx_dblnsec.rpl178
-rw-r--r--tests/deckard/sets/resolver/val_cnameqtype.rpl230
-rw-r--r--tests/deckard/sets/resolver/val_deleg_nons.rpl271
-rw-r--r--tests/deckard/sets/resolver/val_ds_afterprime.rpl181
-rw-r--r--tests/deckard/sets/resolver/val_ds_cname.rpl204
-rw-r--r--tests/deckard/sets/resolver/val_ds_cnamesub.rpl277
-rw-r--r--tests/deckard/sets/resolver/val_faildnskey.rpl171
-rw-r--r--tests/deckard/sets/resolver/val_mal_wc.rpl151
-rw-r--r--tests/deckard/sets/resolver/val_minimal_anotherdomainsignature.rpl99
-rw-r--r--tests/deckard/sets/resolver/val_minimal_anotherrrtypesignature.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddnskeyalgorithm.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddnskeyflags.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddnskeyprotocol.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddsalgorithm.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddsdigest.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddsdigesttype.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_baddskeytag.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badpublickey.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsigalgorithm.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsigexpiration.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsiginception.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsiglabels.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsigsignature.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsigtag.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_badrrsigttl.rpl88
-rw-r--r--tests/deckard/sets/resolver/val_minimal_beforeinception.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_expiredsignature.rpl87
-rw-r--r--tests/deckard/sets/resolver/val_minimal_noerror.rpl89
-rw-r--r--tests/deckard/sets/resolver/val_negcache_ds.rpl215
-rw-r--r--tests/deckard/sets/resolver/val_noadwhennodo.rpl151
-rw-r--r--tests/deckard/sets/resolver/val_nodata_hasdata.rpl163
-rw-r--r--tests/deckard/sets/resolver/val_nodata_zonecut.rpl161
-rw-r--r--tests/deckard/sets/resolver/val_nodatawc_badce.rpl163
-rw-r--r--tests/deckard/sets/resolver/val_nokeyprime.rpl164
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b1_nameerror.rpl161
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b1_nameerror_noce.rpl145
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nonc.rpl147
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nowc.rpl152
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b21_nodataent.rpl116
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b21_nodataent_wr.rpl136
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b2_nodata.rpl117
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b2_nodata_nons.rpl142
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b3_optout.rpl206
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b3_optout_negcache.rpl209
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b3_optout_noce.rpl255
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b3_optout_nonc.rpl256
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b4_wild.rpl174
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b5_wcnodata.rpl155
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_noce.rpl165
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nonc.rpl165
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nowc.rpl165
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_cnametocnamewctoposwc.rpl242
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_entnodata_optout_badopt.rpl199
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_nods_badsig.rpl238
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_nods_soa.rpl254
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_noopt_ref.rpl230
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_optout_ad.rpl361
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_optout_ns_ad.rpl203
-rw-r--r--tests/deckard/sets/resolver/val_nsec3_optout_unsec_cache.rpl254
-rw-r--r--tests/deckard/sets/resolver/val_nx.rpl154
-rw-r--r--tests/deckard/sets/resolver/val_nx_nodeny.rpl164
-rw-r--r--tests/deckard/sets/resolver/val_nx_nowc.rpl164
-rw-r--r--tests/deckard/sets/resolver/val_pos_truncns.rpl150
-rw-r--r--tests/deckard/sets/resolver/val_positive_nosigs.rpl182
-rw-r--r--tests/deckard/sets/resolver/val_qds_oneanc.rpl222
-rw-r--r--tests/deckard/sets/resolver/val_qds_twoanc.rpl223
-rw-r--r--tests/deckard/sets/resolver/val_referral_nods.rpl205
-rw-r--r--tests/deckard/sets/resolver/val_root_ds.rpl86
-rw-r--r--tests/deckard/sets/resolver/val_rrsig.rpl169
-rw-r--r--tests/deckard/sets/resolver/val_secds.rpl213
-rw-r--r--tests/deckard/sets/resolver/val_secds_nosig.rpl233
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel.rpl586
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.key5
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.private13
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel/root.db61
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel_insecure.rpl376
-rw-r--r--tests/deckard/sets/resolver/val_ta_sentinel_nokey.rpl361
-rw-r--r--tests/deckard/sets/resolver/val_unalgo_ds.rpl202
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure.rpl161
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.key5
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.private13
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure/root_unknown_ds_algo_and_digest.db11
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test.db5
-rw-r--r--tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test2.db5
-rw-r--r--tests/deckard/sets/resolver/val_unsecds.rpl193
-rw-r--r--tests/deckard/sets/resolver/val_unsecds_negcache.rpl194
-rw-r--r--tests/deckard/sets/resolver/val_unsecds_qtypeds.rpl209
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos.rpl161
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi.rpl239
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.key5
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.private13
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi/dsset-.2
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi/root.zone10
-rw-r--r--tests/deckard/sets/resolver/val_wild_pos_multi/root.zone.signed114
-rw-r--r--tests/deckard/sets/resolver/world_cz_lidovky_www.rpl910
-rw-r--r--tests/deckard/sets/resolver/world_cz_rhybar.rpl294
-rw-r--r--tests/deckard/sets/resolver/world_cz_turris_api.rpl323
-rw-r--r--tests/deckard/sets/resolver/world_cz_vutbr_www.rpl296
-rw-r--r--tests/deckard/sets/resolver/world_mx_nic_www.rpl272
-rw-r--r--tests/deckard/sets/resolver/zone.rpz10
-rw-r--r--tests/deckard/setup.py36
-rw-r--r--tests/deckard/template/dnssec_getdns.j23
-rw-r--r--tests/deckard/template/getdns.j26
-rw-r--r--tests/deckard/template/hints_zone.j29
-rw-r--r--tests/deckard/template/knotd_master.j229
-rw-r--r--tests/deckard/template/knotd_slave.j228
-rw-r--r--tests/deckard/template/kresd.j2111
-rw-r--r--tests/deckard/template/pdns_dnssec.j25
-rw-r--r--tests/deckard/template/pdns_recursor.j2312
-rw-r--r--tests/deckard/template/unbound.j2780
-rw-r--r--tests/deckard/template/unbound_dnssec.j23
-rw-r--r--tests/deckard/tests/__init__.py0
-rw-r--r--tests/deckard/tests/test_deckard.py30
-rw-r--r--tests/deckard/tools/divide_tests.sh77
-rw-r--r--tests/deckard/tools/invalid_dsa.py83
-rw-r--r--tests/deckard/tools/parse.py21
-rwxr-xr-xtests/deckard/unbound_run.sh5
383 files changed, 94737 insertions, 0 deletions
diff --git a/tests/deckard/.gitignore b/tests/deckard/.gitignore
new file mode 100644
index 0000000..f8109bf
--- /dev/null
+++ b/tests/deckard/.gitignore
@@ -0,0 +1,20 @@
+*.swp
+/env.sh
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+.mypy_cache/
diff --git a/tests/deckard/.gitlab-ci.yml b/tests/deckard/.gitlab-ci.yml
new file mode 100644
index 0000000..b1ec808
--- /dev/null
+++ b/tests/deckard/.gitlab-ci.yml
@@ -0,0 +1,116 @@
+image: $CI_REGISTRY/knot/knot-resolver/ci/debian-stable:knot-2.7
+variables:
+ LC_ALL: C.UTF-8
+
+stages:
+ - test
+
+.test: &test
+ stage: test
+ tags:
+ - docker
+ - linux
+ - amd64
+
+test:augeas:
+ <<: *test
+ script:
+ - augparse pydnstest/deckard.aug
+
+test:flake8:
+ <<: *test
+ script:
+ - python3 -m flake8 --max-line-length=100 . && echo "OK, no flake8 errors detected"
+
+test:mypy:
+ <<: *test
+ script:
+ - ci/mypy-run.sh && echo "OK, no mypy error detected"
+
+test:pylint:
+ <<: *test
+ script:
+ - ci/pylint-run.sh
+
+test:rplint:
+ <<: *test
+ script:
+ - cp ci/common.sh /tmp
+ - cp ci/compare-rplint.sh /tmp
+ - /tmp/compare-rplint.sh
+
+test:unittests:
+ <<: *test
+ script:
+ - make check
+
+# changes in Deckard itself must not change result of tests
+test:comparative:kresd:
+ <<: *test
+ script:
+ # test kresd binary
+ - git clone --depth=1 https://gitlab.labs.nic.cz/knot/knot-resolver.git /tmp/kresd-local-build
+ - GIT_DIR=/tmp/kresd-local-build/.git git log -1
+ - ( cd /tmp/kresd-local-build ; git submodule update --init --recursive )
+ - PREFIX=/tmp/.local make -C /tmp/kresd-local-build -k all
+ - PREFIX=/tmp/.local make -C /tmp/kresd-local-build install
+ # compare results from latest Deckard with results from merge base
+ - cp ci/common.sh /tmp
+ - cp ci/compare-tests.sh /tmp
+ - cp ci/junit-compare.py /tmp
+ - LD_LIBRARY_PATH=/tmp/.local/lib PATH=/tmp/.local/sbin:$PATH /tmp/compare-tests.sh $(pwd)/kresd_run.sh
+ artifacts:
+ when: always
+ expire_in: '1 hour'
+ paths:
+ - modified_tests
+ - base.xml
+ - head.xml
+
+# Run all tests on the latest kresd version to ensure that we not push tests
+# which do not work on latest kresd. It would lead to breakage in kresd CI.
+test:latest:kresd:
+ <<: *test
+ script:
+ - git clone --depth=1 https://gitlab.labs.nic.cz/knot/knot-resolver.git kresd-local-build
+ - GIT_DIR=$(pwd)/kresd-local-build/.git git log -1
+ - ( cd kresd-local-build ; git submodule update --init --recursive )
+ - PREFIX=$(pwd)/.local make -C kresd-local-build -k all
+ - PREFIX=$(pwd)/.local make -C kresd-local-build install
+ - TMPDIR=$(pwd) LD_LIBRARY_PATH=$(pwd)/.local/lib PATH=$(pwd)/.local/sbin:$PATH ./kresd_run.sh -n $(nproc)
+ artifacts:
+ when: on_failure
+ expire_in: 1 week
+ paths:
+ - tmpdeckard*
+
+# sanity check that Unbound under Deckard still works
+# I've selected the only tests which are working
+# on kresd and Unbound 1.5.8 as well as 1.6.0
+test:sanity:unbound:
+ <<: *test
+ script:
+ - TMPDIR=$(pwd) ./unbound_run.sh -k sets/resolver/iter_hint_lame.rpl
+ - TMPDIR=$(pwd) ./unbound_run.sh -k sets/resolver/iter_lame_root.rpl
+ # these do not work with Unbound 1.5.8 which is in CI container
+ #- TESTS=sets/resolver/nsec_wildcard_answer_response.rpl ./unbound_run.sh
+ #- TESTS=sets/resolver/world_cz_lidovky_www.rpl ./unbound_run.sh
+ artifacts:
+ when: on_failure
+ expire_in: 1 week
+ paths:
+ - tmpdeckard*
+
+# sanity check that PowerDNS recursor under Deckard still works
+# I've selected couple tests which are working
+# on kresd and PowerDNS recursor 4.0.0~alpha2 as well as 4.0.4
+test:sanity:pdnsrecursor:
+ <<: *test
+ script:
+ - TMPDIR=$(pwd) ./pdns_run.sh -k sets/resolver/iter_recurse.rpl
+ - TMPDIR=$(pwd) ./pdns_run.sh -k sets/resolver/iter_tcbit.rpl
+ artifacts:
+ when: on_failure
+ expire_in: 1 week
+ paths:
+ - tmpdeckard*
diff --git a/tests/deckard/.gitmodules b/tests/deckard/.gitmodules
new file mode 100644
index 0000000..d503253
--- /dev/null
+++ b/tests/deckard/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "contrib/libfaketime"]
+ path = contrib/libfaketime
+ url = git://github.com/wolfcw/libfaketime.git
+[submodule "contrib/libswrap"]
+ path = contrib/libswrap
+ url = https://gitlab.labs.nic.cz/labs/socket_wrapper.git
diff --git a/tests/deckard/LICENSE b/tests/deckard/LICENSE
new file mode 100644
index 0000000..7f30d4f
--- /dev/null
+++ b/tests/deckard/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2016, CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+All rights reserved.
+
+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.
+
+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.
diff --git a/tests/deckard/Makefile b/tests/deckard/Makefile
new file mode 100644
index 0000000..675aa42
--- /dev/null
+++ b/tests/deckard/Makefile
@@ -0,0 +1,58 @@
+# Defaults
+PYTHON ?= python3
+LIBEXT := .so
+PLATFORM := $(shell uname -s)
+ifeq ($(PLATFORM),Darwin)
+ LIBEXT := .dylib
+endif
+
+# Dependencies
+include platform.mk
+libcwrap_DIR := contrib/libswrap
+libcwrap_cmake_DIR := $(libcwrap_DIR)/obj
+libcwrap=$(abspath $(libcwrap_cmake_DIR))/src/libsocket_wrapper$(LIBEXT).0
+ifeq ($(PLATFORM),Darwin)
+ libcwrap=$(abspath $(libcwrap_cmake_DIR))/src/libsocket_wrapper.0$(LIBEXT)
+endif
+libfaketime_DIR := contrib/libfaketime
+libfaketime := $(abspath $(libfaketime_DIR))/src/libfaketime$(LIBEXT).1
+
+# Platform-specific targets
+ifeq ($(PLATFORM),Darwin)
+ libfaketime := $(abspath $(libfaketime_DIR))/src/libfaketime.1$(LIBEXT)
+ preload_syms := DYLD_LIBRARY_PATH=$(DYLD_LIBRARY_PATH) DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES="$(libfaketime):$(libcwrap)"
+else
+ preload_syms := LD_PRELOAD="$(libfaketime):$(libcwrap)"
+endif
+
+
+# Targets
+all:
+ @echo "Deckard is now run using *run.sh scripts in its root directory."
+ @echo "To build the dependencies (libfaketime and libcwrap) run 'make depend'."
+ exit 1
+depend: $(libfaketime) $(libcwrap)
+ @echo "export DONT_FAKE_MONOTONIC=1" > env.sh
+ @echo "export $(preload_syms)" >> env.sh
+
+# Synchronize submodules
+submodules: .gitmodules
+ @git submodule update --init
+# indirection through submodules target is necessary
+# to prevent make from running "git submodule" commands in parallel
+$(libfaketime_DIR)/Makefile $(libcwrap_DIR)/CMakeLists.txt: submodules
+$(libfaketime): $(libfaketime_DIR)/Makefile
+ @CFLAGS="-O0 -g" $(MAKE) -s -C $(libfaketime_DIR)
+$(libcwrap_cmake_DIR):$(libcwrap_DIR)/CMakeLists.txt
+ @mkdir -p $(libcwrap_cmake_DIR)
+$(libcwrap_cmake_DIR)/Makefile: $(libcwrap_cmake_DIR)
+ @cd $(libcwrap_cmake_DIR); cmake ..
+$(libcwrap): $(libcwrap_cmake_DIR)/Makefile
+ @CFLAGS="-O0 -g" $(MAKE) -s -C $(libcwrap_cmake_DIR)
+
+
+.PHONY: submodules depend all
+
+check:
+ @echo Running unittests using pytest
+ ${PYTHON} -m pytest
diff --git a/tests/deckard/README.rst b/tests/deckard/README.rst
new file mode 100644
index 0000000..c24156a
--- /dev/null
+++ b/tests/deckard/README.rst
@@ -0,0 +1,98 @@
+DNS test harness (Deckard)
+==========================
+
+Deckard is a DNS software testing tool that creates a controlled network environment for reproducible tests.
+
+In essence, it works like this:
+
+- Deckard runs given binaries as subprocesses in an isolated network environment.
+- When binaries are up, Deckard sends scripted queries and checks replies.
+- When a binary attempts to contact another server, Deckard intercepts the communication and replies with scripted answer.
+- Deckard can simulate network issues, DNS environment changes, and fake time (for DNSSEC validation tests).
+
+No changes to real network setup are required because all network communications are redirected over UNIX sockets (and recorded to PCAP).
+
+Test cases are described by `scenarios <doc/scenario_guide.rst>`_ that contain:
+
+- A declarative description of the environment (e.g. what queries can the binary under test make and what Deckard should answer)
+- A sequence of queries (and expected answers), and other events (e.g. time jumps forward)
+
+
+Requirements
+------------
+
+Deckard requires following software to be installed:
+
+- Python >= 3.5
+- augeas_ - library for editing configuration files
+- dnspython_ - DNS library for Python
+- Jinja2_ - template engine for generating config files
+- PyYAML_ - YAML parser for Python
+- python-augeas_ - Python bindings for augeas API
+- pytest_ - testing framework for Python, used for running the test cases
+- pytest-xdist_ - module for pytest for distributed testing
+- custom C libraries (installed automatically, see below)
+
+For convenient use it is strongly recommended to have a C compiler, Git, and ``make`` available.
+First execution of ``make`` will automatically download and compile following libraries:
+
+- libfaketime_ - embedded because Deckard requires a rather recent version
+- `modified socket_wrapper`_ - custom modification of `original socket_wrapper`_ library (part of the cwrap_ tool set for creating an isolated networks)
+
+
+Compatibility
+-------------
+
+Works well on Linux, Mac OS X [#]_ and probably all BSDs. Tested with `Knot DNS Resolver`_, `Unbound`_, and `PowerDNS Recursor`_. It should work with other software as well as long as all functions used by the binary under test are supported by our `modified socket_wrapper`_.
+
+.. [#] Python from Homebrew must be used, as the built-in Python is protected by the CSR_ from OS X 10.11 and prevents library injection.
+
+
+Usage
+-----
+
+- `User guide <doc/user_guide.rst>`_ describes how to run tests on a binary.
+- `Scenario guide <doc/scenario_guide.rst>`_ describes how to write a new test.
+- `Devel guide <doc/devel_guide.rst>`_ contains some tips for Deckard developers.
+
+
+License
+-------
+
+See `LICENSE <LICENSE>`_ file.
+
+
+Acknowledgments
+---------------
+
+The test scenario design and a lot of tests were written by `NLnet Labs`_ for ``testbound`` suite used by `Unbound`_ (BSD licensed). We are grateful that ``testbound`` authors are `willing to discuss <https://unbound.nlnetlabs.nl/pipermail/unbound-users/2017-March/004699.html>`_ further Deckard development.
+
+The original test case format is described in the `header file replay.h <http://unbound.net/documentation/doxygen/replay_8h.html#a6f204646f02cc4debbaf8a9b3fdb59a7>`_ distributed with `Unbound`_.
+
+
+Contacting us
+-------------
+
+Please report problems to our GitLab: https://gitlab.labs.nic.cz/knot/deckard/issues
+
+If you have any comments feel free to send e-mail to knot-dns@labs.nic.cz! Do not get confused by the name, we are happy if you want to use Deckard with any software.
+
+Happy testing.
+
+
+.. _`augeas`: http://augeas.net/
+.. _`CSR`: http://apple.stackexchange.com/questions/193368/what-is-the-rootless-feature-in-el-capitan-really
+.. _`Jinja2`: http://jinja.pocoo.org/
+.. _`Knot DNS Resolver`: https://gitlab.labs.nic.cz/knot/resolver/blob/master/README.md
+.. _`NLnet Labs`: https://www.nlnetlabs.nl/
+.. _`PowerDNS Recursor`: https://doc.powerdns.com/md/recursor/
+.. _`PyYAML`: http://pyyaml.org/
+.. _`Unbound`: https://www.unbound.net/
+.. _`cwrap`: https://cwrap.org/
+.. _`dnspython`: http://www.dnspython.org/
+.. _`libfaketime`: https://github.com/wolfcw/libfaketime
+.. _`modified socket_wrapper`: https://gitlab.labs.nic.cz/labs/socket_wrapper
+.. _`original socket_wrapper`: https://cwrap.org/socket_wrapper.html
+.. _`python-augeas`: https://pypi.org/project/python-augeas/
+.. _`pytest`: https://pytest.org/
+.. _`pytest-xdist`: https://pypi.python.org/pypi/pytest-xdist
diff --git a/tests/deckard/ci/README.rst b/tests/deckard/ci/README.rst
new file mode 100644
index 0000000..39955f9
--- /dev/null
+++ b/tests/deckard/ci/README.rst
@@ -0,0 +1,4 @@
+Deckard CI
+==========
+
+For testing with Deckard in Docker use kresd ci image: registry.labs.nic.cz/knot/knot-resolver/ci:debian-stable
diff --git a/tests/deckard/ci/common.sh b/tests/deckard/ci/common.sh
new file mode 100644
index 0000000..5430e64
--- /dev/null
+++ b/tests/deckard/ci/common.sh
@@ -0,0 +1,17 @@
+set -o errexit -o nounset
+
+HEAD="$(git log -1 --format="%H" HEAD)"
+MERGEBASE="$(git merge-base origin/master "${HEAD}")"
+LOGDIR="$(pwd)"
+PYTHON=${PYTHON:-"python3"}
+CIDIR="$(dirname "${0}")"
+
+# workaround for Gitlab's missing support for absolute paths in artifacts:
+# https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1011
+declare -a LOGS
+LOGS[0]="" # avoid unbound variable error if user does not specify own logs
+function collect_logs {
+ set +o errexit
+ test -n "${LOGS[*]}" && cp "--target-directory=${LOGDIR}" ${LOGS[*]}
+}
+trap collect_logs EXIT
diff --git a/tests/deckard/ci/compare-rplint.sh b/tests/deckard/ci/compare-rplint.sh
new file mode 100755
index 0000000..0146dc9
--- /dev/null
+++ b/tests/deckard/ci/compare-rplint.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+set -o nounset -o xtrace -o errexit
+source "$(dirname "$(readlink -f "$0")")/common.sh"
+
+
+function find_new_tests {
+ : detect tests affected by current merge request
+ : store list of modified tests in ${NEW_TESTS_FILE}
+ git diff --name-only --diff-filter=AM ${MERGEBASE} ${HEAD} | fgrep .rpl > "${NEW_TESTS_FILE}" || : no new tests detected
+}
+
+NEW_TESTS_FILE="/tmp/new_tests"
+find_new_tests
+
+truncate -s0 /tmp/rplint_fails
+
+: run rplint of all new tests
+FAIL=0
+cat /tmp/new_tests
+for test in $(cat ${NEW_TESTS_FILE})
+do
+ ${PYTHON} -m rplint $test >> /tmp/rplint_fails || FAIL=1
+done
+
+: if even one of the test does not pass rplint, fail
+if [ "$FAIL" -eq 1 ]
+then
+ cat /tmp/rplint_fails
+ exit 1
+fi
+exit 0
diff --git a/tests/deckard/ci/compare-tests.sh b/tests/deckard/ci/compare-tests.sh
new file mode 100755
index 0000000..63d8c67
--- /dev/null
+++ b/tests/deckard/ci/compare-tests.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -o nounset -o xtrace -o errexit
+source "$(dirname "$0")/common.sh"
+TESTRUNNER="$1"
+: comparing results from test script "${TESTRUNNER}"
+
+# Run specified test runner on HEAD and again on merge base for master..HEAD
+# Fail if result of any test not modified between master..HEAD changed
+# (i.e. any change in Deckard should not change results of non-modified tests)
+
+function find_modified_tests {
+ : detect tests affected by current merge request
+ : store list of modified tests in ${MODIFIED_TESTS_FILE}
+ git diff --numstat "${MERGEBASE}..${HEAD}" | cut -f 3 | fgrep .rpl > "${MODIFIED_TESTS_FILE}" || : no modified tests detected
+}
+
+MODIFIED_TESTS_FILE="/tmp/modified_tests"
+find_modified_tests
+LOGS[0]="${MODIFIED_TESTS_FILE}"
+LOGS[1]="/tmp/base.xml"
+LOGS[2]="/tmp/head.xml"
+
+: get test results from version under test
+"${TESTRUNNER}" -n $(nproc) --junit-xml=/tmp/head.xml || : some tests on HEAD ${HEAD} failed
+
+: get test results from common ancestor with master branch
+git checkout --force --detach "${MERGEBASE}"
+git clean -xdf
+"${TESTRUNNER}" -n $(nproc) --junit-xml=/tmp/base.xml || : some tests on merge base ${MERGEBASE} failed
+"${CIDIR}/junit-compare.py" /tmp/head.xml /tmp/base.xml /tmp/modified_tests && echo "OK, no differences found"
diff --git a/tests/deckard/ci/junit-compare.py b/tests/deckard/ci/junit-compare.py
new file mode 100755
index 0000000..54ca71a
--- /dev/null
+++ b/tests/deckard/ci/junit-compare.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python3
+
+import sys
+
+import xml.etree.ElementTree as xml
+
+
+def parse_junit_xml(filename):
+ """
+ Transform junit XML file into set of tuples:
+ (test description, file name, test result)
+ """
+ results = set()
+ root = xml.parse(filename).getroot()
+ for case in root:
+ if case.find("failure") is not None: # Because empty XML elements are falsey
+ results.add((case.get("name"), case.get("name").split("'")[1], "FAILED"))
+ elif case.find("skipped") is not None:
+ results.add((case.get("name"), case.get("name").split("'")[1], "SKIPPED"))
+ else:
+ results.add((case.get("name"), case.get("name").split("'")[1], "PASSED"))
+
+ return results
+
+
+new = sys.argv[1]
+old = sys.argv[2]
+modified_tests = [line.strip() for line in open(sys.argv[3]).readlines()]
+
+test_diffs = parse_junit_xml(old) ^ parse_junit_xml(new)
+errorneous_rpls = [diff[1] for diff in test_diffs
+ if diff[1] not in modified_tests]
+if errorneous_rpls:
+ print('FAIL! Following tests changed their result without test modification:')
+ for rpl in sorted(set(errorneous_rpls)):
+ print(rpl)
+ sys.exit(1)
diff --git a/tests/deckard/ci/mypy-run.sh b/tests/deckard/ci/mypy-run.sh
new file mode 100755
index 0000000..d99e256
--- /dev/null
+++ b/tests/deckard/ci/mypy-run.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -o nounset -o errexit
+source "$(dirname "$0")/common.sh"
+
+PYFILES=$(find . \
+ -path ./.git -prune -o \
+ -path ./contrib -o \
+ -type d -exec test -e '{}/__init__.py' \; -print -prune -o \
+ -name '*.py' -print -o \
+ -type f -exec grep -qsm1 '^#!.*\bpython' '{}' \; -print)
+set -e
+
+${PYTHON} -m mypy --ignore-missing-imports ${PYFILES}
diff --git a/tests/deckard/ci/pylint-run.sh b/tests/deckard/ci/pylint-run.sh
new file mode 100755
index 0000000..2df40ef
--- /dev/null
+++ b/tests/deckard/ci/pylint-run.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -o nounset -o errexit
+source "$(dirname "$0")/common.sh"
+
+PYFILES=$(find . \
+ -path ./.git -prune -o \
+ -path ./contrib -o \
+ -type d -exec test -e '{}/__init__.py' \; -print -prune -o \
+ -name '*.py' -print -o \
+ -type f -exec grep -qsm1 '^#!.*\bpython' '{}' \; -print)
+
+${PYTHON} -m pylint -j 0 --rcfile pylintrc ${PYFILES}
diff --git a/tests/deckard/ci/runlocally.sh b/tests/deckard/ci/runlocally.sh
new file mode 100755
index 0000000..25bf0c9
--- /dev/null
+++ b/tests/deckard/ci/runlocally.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+set -o nounset -o errexit
+CIDIR="$(dirname "$0")"
+ORIGNAME="$(git symbolic-ref -q --short HEAD || git describe --all --always HEAD)"
+FAILURE_DETECTED="?"
+
+function checkout_back {
+ git checkout --force "${ORIGNAME}" || { echo "Warning: unable to checkout back!"; exit 5; }
+
+ test "${FAILURE_DETECTED}" "==" "0" && echo "All tests passed, good work!"
+ test "${FAILURE_DETECTED}" "!=" "0" && echo "Problem found, go fix it!"
+}
+
+STATUS=$(git status --untracked-files=normal --porcelain)
+test -n "${STATUS}" && echo "Working tree is dirty, commit your changes now." && exit 2
+
+# return back to whatever branch we were on the beginning
+# to avoid need for git checkout before fixing reported bugs
+trap checkout_back EXIT
+trap "{ FAILURE_DETECTED=1; }" ERR
+
+"${CIDIR}"/compare-rplint.sh
+checkout_back
+git clean -xdf
+
+"${CIDIR}"/compare-pylint.sh
+checkout_back
+git clean -xdf
+
+"${CIDIR}"/compare-pep8.sh
+checkout_back
+git clean -xdf
+
+"${CIDIR}"/compare-tests.sh "${CIDIR}/../kresd_run.sh"
+checkout_back
+git clean -xdf
+
+# at this point all the tests passed so we can clean up
+git clean -xdf
+FAILURE_DETECTED=0
+trap - ERR
diff --git a/tests/deckard/configs/getdns.yaml b/tests/deckard/configs/getdns.yaml
new file mode 100644
index 0000000..a5d1a2e
--- /dev/null
+++ b/tests/deckard/configs/getdns.yaml
@@ -0,0 +1,12 @@
+programs:
+- name: getdns
+ binary: getdns_query
+ additional:
+ - -C
+ - getdns.conf
+ templates:
+ - template/getdns.j2
+ - template/dnssec_getdns.j2
+ configs:
+ - getdns.conf
+ - getdns-root.key
diff --git a/tests/deckard/configs/knotd_master.yaml b/tests/deckard/configs/knotd_master.yaml
new file mode 100644
index 0000000..2e08b72
--- /dev/null
+++ b/tests/deckard/configs/knotd_master.yaml
@@ -0,0 +1,10 @@
+programs:
+- name: knotd
+ binary: knotd
+ additional:
+ - -c
+ - ./knotd.conf
+ templates:
+ - "template/knotd_master.j2"
+ configs:
+ - "knotd.conf"
diff --git a/tests/deckard/configs/knotd_slave.yaml b/tests/deckard/configs/knotd_slave.yaml
new file mode 100644
index 0000000..4655ded
--- /dev/null
+++ b/tests/deckard/configs/knotd_slave.yaml
@@ -0,0 +1,10 @@
+programs:
+- name: knotd
+ binary: knotd
+ additional:
+ - -c
+ - ./knotd.conf
+ templates:
+ - "template/knotd_slave.j2"
+ configs:
+ - "knotd.conf" \ No newline at end of file
diff --git a/tests/deckard/configs/kresd.yaml b/tests/deckard/configs/kresd.yaml
new file mode 100644
index 0000000..b36a232
--- /dev/null
+++ b/tests/deckard/configs/kresd.yaml
@@ -0,0 +1,10 @@
+programs:
+- name: kresd
+ binary: kresd
+ additional:
+ - -f
+ - "1"
+ templates:
+ - template/kresd.j2
+ configs:
+ - config
diff --git a/tests/deckard/configs/pdns.yaml b/tests/deckard/configs/pdns.yaml
new file mode 100644
index 0000000..c9a3d23
--- /dev/null
+++ b/tests/deckard/configs/pdns.yaml
@@ -0,0 +1,15 @@
+programs:
+- name: pdns
+ binary: pdns_recursor
+ additional:
+ - --config-dir=./
+ templates:
+ - template/pdns_recursor.j2
+ - template/hints_zone.j2
+ - template/pdns_dnssec.j2
+ configs:
+ - recursor.conf
+ - hints.pdns
+ - dnssec.lua
+ # SIGTERM leads to return code -15 instead of clean 0 so we have to ignore it
+ ignore_exit_code: true
diff --git a/tests/deckard/configs/unbound.yaml b/tests/deckard/configs/unbound.yaml
new file mode 100644
index 0000000..3c200db
--- /dev/null
+++ b/tests/deckard/configs/unbound.yaml
@@ -0,0 +1,13 @@
+programs:
+- name: unbound
+ binary: unbound
+ additional:
+ - -d
+ - -c
+ - unbound.conf
+ templates:
+ - template/unbound.j2
+ - template/hints_zone.j2
+ configs:
+ - unbound.conf
+ - hints.zone
diff --git a/tests/deckard/conftest.py b/tests/deckard/conftest.py
new file mode 100644
index 0000000..c9c5bb2
--- /dev/null
+++ b/tests/deckard/conftest.py
@@ -0,0 +1,156 @@
+from collections import namedtuple, OrderedDict
+import glob
+import logging
+import os
+import re
+import yaml
+
+import pytest
+
+
+Scenario = namedtuple("Scenario", ["path", "qmin", "config"])
+
+
+def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
+ """Make YaML load to OrderedDict.
+ This is done to ensure compability with Python versions prior to 3.6.
+ See docs.python.org/3.6/whatsnew/3.6.html#new-dict-implementation for more information.
+
+ repr(config) is a part of testcase's name in pytest.
+ We need to ensure that it is ordered in the same way.
+ See https://github.com/pytest-dev/pytest/issues/1075.
+ """
+ class OrderedLoader(Loader): # pylint: disable=too-many-ancestors
+ pass
+
+ def construct_mapping(loader, node):
+ loader.flatten_mapping(node)
+ return object_pairs_hook(loader.construct_pairs(node))
+
+ OrderedLoader.add_constructor(
+ yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
+ construct_mapping)
+
+ return yaml.load(stream, OrderedLoader)
+
+
+def config_sanity_check(config_dict, config_name):
+ """Checks if parsed configuration is valid"""
+ mandatory_keys = {'name', 'binary', 'templates', 'configs', 'additional'}
+ for cfg in config_dict['programs']:
+ missing_keys = mandatory_keys - set(cfg.keys())
+ assert not missing_keys, 'Mandatory fields in configuration are missing: %s' % missing_keys
+
+ # sanity check templates vs. configs
+ assert len(cfg['templates']) == len(cfg['configs']),\
+ ('Number of jinja2 template files is not equal '
+ 'to number of config files to be generated for '
+ 'program "%s" (%s), i.e. len(templates) != len(configs)'
+ % (cfg['name'], config_name))
+
+ for additional in cfg["additional"]:
+ assert isinstance(additional, str),\
+ "All additional arguments in yaml should be strings. (%s, %s)"\
+ % (cfg['name'], config_name)
+
+
+def get_qmin_config(path):
+ """Reads configuration from the *.rpl file and determines query-minimization setting."""
+ with open(path) as f:
+ for line in f:
+ if re.search(r"^CONFIG_END", line) or re.search(r"^SCENARIO_BEGIN", line):
+ return None
+ if re.search(r"^\s*query-minimization:\s*(on|yes)", line):
+ return True
+ if re.search(r"^\s*query-minimization:\s*(off|no)", line):
+ return False
+ return None
+
+
+def scenarios(paths, configs):
+ """Returns list of *.rpl files from given path and packs them with their minimization setting"""
+
+ assert len(paths) == len(configs),\
+ "Number of --config has to be equal to number of --scenarios arguments."
+
+ scenario_list = []
+
+ for path, config in zip(paths, configs):
+ config_dict = ordered_load(open(config), yaml.SafeLoader)
+ config_sanity_check(config_dict, config)
+
+ if os.path.isfile(path):
+ filelist = [path] # path to single file, accept it
+ else:
+ filelist = sorted(glob.glob(os.path.join(path, "*.rpl")))
+
+ if not filelist:
+ raise ValueError('no *.rpl files found in path "{}"'.format(path))
+
+ for file in filelist:
+ scenario_list.append(Scenario(file, get_qmin_config(file), config_dict))
+
+ return scenario_list
+
+
+def rpls(paths):
+ for path in paths:
+ if os.path.isfile(path):
+ filelist = [path] # path to single file, accept it
+ else:
+ filelist = sorted(glob.glob(os.path.join(path, "*.rpl")))
+
+ return filelist
+
+
+def pytest_addoption(parser):
+ parser.addoption("--config", action="append", help="path to Deckard configuration .yaml file")
+ parser.addoption("--scenarios", action="append", help="directory with .rpl files")
+ parser.addoption("--retries", action="store", help=("number of retries per"
+ "test when Deckard is under load"))
+
+
+def pytest_generate_tests(metafunc):
+ """This is pytest weirdness to parametrize the test over all the *.rpl files.
+ See https://docs.pytest.org/en/latest/parametrize.html#basic-pytest-generate-tests-example
+ for more info."""
+
+ if 'scenario' in metafunc.fixturenames:
+ if metafunc.config.option.config is None:
+ configs = []
+ else:
+ configs = metafunc.config.option.config
+
+ if metafunc.config.option.scenarios is None:
+ paths = ["sets/resolver"] * len(configs)
+ else:
+ paths = metafunc.config.option.scenarios
+
+ metafunc.parametrize("scenario", scenarios(paths, configs), ids=str)
+ if 'rpl_path' in metafunc.fixturenames:
+ paths = metafunc.config.option.scenarios
+ metafunc.parametrize("rpl_path", rpls(paths), ids=str)
+ if 'max_retries' in metafunc.fixturenames:
+ max_retries = metafunc.config.option.retries
+ if max_retries is None:
+ max_retries = 3
+ metafunc.parametrize("max_retries", [max_retries], ids=lambda id: "max-retries-"+str(id))
+
+
+def check_log_level_xdist(level):
+ if level < logging.ERROR:
+ pytest.exit("Advanced logging not available while running with xdist "
+ "(try ommiting -n option)")
+
+
+def pytest_configure(config):
+ # This means pytest-xdist is installed and enabled
+ if hasattr(config.option, "dist") and config.option.dist == "load":
+ log_level = config.option.log_level
+ if log_level is None:
+ return
+ try:
+ log_level = int(log_level)
+ except ValueError:
+ log_level = logging.getLevelName(log_level)
+ check_log_level_xdist(log_level)
diff --git a/tests/deckard/contrib/deckard.vim b/tests/deckard/contrib/deckard.vim
new file mode 100644
index 0000000..3ae687a
--- /dev/null
+++ b/tests/deckard/contrib/deckard.vim
@@ -0,0 +1,26 @@
+" Deckard syntax highlighting & folding
+"
+" Usage: Put following lines into ~/.vim/ftdetect/deckard.vim
+" au BufRead,BufNewFile *.rpl set filetype=deckard
+" au BufRead,BufNewFile *.stc set foldmethod=syntax
+
+syntax keyword Keyword MATCH STEP ADJUST MANDATORY RAW
+syntax keyword Structure CONFIG_END
+syntax keyword Function CHECK_ANSWER QUERY TIME_PASSES
+
+syntax region deckardEntry matchgroup=Structure start="ENTRY_BEGIN" end="ENTRY_END" fold transparent
+syntax region deckardRange matchgroup=Structure start="RANGE_BEGIN" end="RANGE_END" fold transparent
+syntax region deckardScenario matchgroup=Structure start="SCENARIO_BEGIN" end="SCENARIO_END" fold transparent
+
+syntax match deckardSection 'SECTION \+[^ ]\+'
+syntax match deckardReply 'REPLY.*'
+
+syntax match Comment ';.*$'
+
+hi def link deckardEntry Folded
+hi def link deckardRange Folded
+hi def link deckardScenario Folded
+hi def link deckardSection Special
+hi def link deckardReply String
+
+let b:current_syntax = 'deckard'
diff --git a/tests/deckard/contrib/libfaketime/.gitignore b/tests/deckard/contrib/libfaketime/.gitignore
new file mode 100644
index 0000000..d45f99a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/.gitignore
@@ -0,0 +1,9 @@
+*.o
+*.so.1
+timetest
+
+src/libfaketime.dylib.1
+src/libfaketime.1.dylib
+src/core
+src/faketime
+
diff --git a/tests/deckard/contrib/libfaketime/COPYING b/tests/deckard/contrib/libfaketime/COPYING
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/tests/deckard/contrib/libfaketime/Makefile b/tests/deckard/contrib/libfaketime/Makefile
new file mode 100644
index 0000000..d88e35a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/Makefile
@@ -0,0 +1,34 @@
+INSTALL ?= install
+
+UNAME=$(shell uname)
+SELECTOR:=$(shell if test "${UNAME}" = "Darwin" ; then echo "-f Makefile.OSX" ; fi)
+
+all:
+ $(MAKE) $(SELECTOR) -C src all
+
+test:
+ $(MAKE) $(SELECTOR) -C test all
+
+install:
+ $(MAKE) $(SELECTOR) -C src install
+ $(MAKE) $(SELECTOR) -C man install
+ $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/share/doc/faketime/"
+ $(INSTALL) -m0644 README "${DESTDIR}${PREFIX}/share/doc/faketime/README"
+ $(INSTALL) -m0644 NEWS "${DESTDIR}${PREFIX}/share/doc/faketime/NEWS"
+
+uninstall:
+ $(MAKE) $(SELECTOR) -C src uninstall
+ $(MAKE) $(SELECTOR) -C man uninstall
+ rm -f "${DESTDIR}${PREFIX}/share/doc/faketime/README"
+ rm -f "${DESTDIR}${PREFIX}/share/doc/faketime/NEWS"
+ rmdir "${DESTDIR}${PREFIX}/share/doc/faketime"
+
+clean:
+ $(MAKE) $(SELECTOR) -C src clean
+ $(MAKE) $(SELECTOR) -C test clean
+
+distclean:
+ $(MAKE) $(SELECTOR) -C src distclean
+ $(MAKE) $(SELECTOR) -C test distclean
+
+.PHONY: all test install uninstall clean distclean
diff --git a/tests/deckard/contrib/libfaketime/NEWS b/tests/deckard/contrib/libfaketime/NEWS
new file mode 100644
index 0000000..8836d80
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/NEWS
@@ -0,0 +1,134 @@
+Since 0.9.6:
+ - Julien Gilli added an option to disable monotonic time faking
+ - Azat Khuzhin added support for COARSE clocks
+ - Preliminary support for CLOCK_BOOTTIME (Linux)
+ - Fixed compilation on macOS (High) Sierra and various compiler warnings
+ - Support for select() call added by Hitoshi Harada (umitanuki)
+ - Updated documentation
+
+Since 0.9.5:
+ - fixed crashes that happened when other LD_PRELOAD libraries were used
+ - fixed passing through of return values when using the faketime wrapper
+ - fixed compile-time issues with CLOCK_MONOTONIC_RAW on some platforms
+ - rbalint added Filter commands: FAKETIME_ONLY_CMDS and
+ FAKETIME_SKIP_CMDS control which (sub-)processes libfaketime
+ is applied to.
+
+Since 0.9:
+ - ryandesign at MacPorts provided a Portfile for MacPorts and
+ fixed various build issues on OSX.
+ - Balint Reczey added support for nanosecond resolution, saving
+ timestamps to files, speeding up and slowing down per-process
+ timers, CLOCK_MONOTONIC and CLOCK_MONOTONIC_RAW, faketime
+ support for system calls such as sleep() and alarm().
+ - Applied a patch by Gerardo Malazdrewicz and Toni G to restore
+ compatibility with newer versions of glibc.
+ - Balint Reczey added an option to use the same global clock setting
+ for all libfaketime-spawned processes.
+ - Balint Reczey has rewritten the faketime wrapper shell script in C
+ and refactored libfaketime.
+ - Balint Reczey added support for advancing the time with each time-
+ related system call ("deterministic time").
+ - Added "timeprivacy" wrapper by adrelanos; it ensures that programs
+ are started with unique timestamps.
+ - Code and documentation cleanup by Tomi Ollila.
+ - Reworked Makefiles for more flexible installation, including fixes
+ by Lukas Fleischner, Daniel Kahm Gillmor, and Hugues Andreux.
+ - Fixed license issues as pointed out by Paul Wouters.
+ - Mac OS X support has been improved for OS X 10.7 and 10.8; due to
+ changes to the underlying libraries on OS X, libfaketime 0.9.5 will
+ no longer work with OS X < 10.6; use libfaketime 0.9(.1) for older
+ OS X installations.
+ - Don Fong has contributed a new framework for functional tests.
+ Petr Salinger ensured its compatibility with GNU/kFreeBSD.
+
+Since 0.8.2:
+ - Added support for "limited faking".
+ You can optionally specify when libfaketime starts to fake the
+ returned timestamps and when it shall stop doing so. For example,
+ a program can be started regularly, and after 5 minutes run-time
+ it will be sent two years into the future. Those limiting
+ start and stop times can be specified in seconds or as the
+ number of any time-related function calls within the program.
+ - Added a feature to spawn an external process after x seconds
+ or y time-related system calls. This can, for example, be used
+ to execute an arbitrary shell script x seconds after a program
+ has been started.
+
+Since 0.8.1:
+ - Added a MacOS port.
+ Thanks to Daria Phoebe Brashear!
+ - Added a functional test framework that aids in automatically
+ determining whether libfaketime works properly on the current
+ machine. Thanks to Don Fong!
+
+Since 0.8:
+ - Changed directory layout and Makefile structure.
+ Thanks to Lukas Fleischer!
+
+Since 0.7:
+ - Added support for fstatat() and fstatat64() which were introduced in
+ Linux kernel 2.6.16 and used in recent coreutils.
+ Thanks to Daniel Kahn Gillmor for the report!
+ This can be disabled by passing -DNO_ATFILE in the Makefile.
+ - Added a simple wrapper shell script and a man page for it. Makes it
+ easier to run commands under faked system times. It assumes that the
+ libraries will be copied to /usr/lib/faketime during installation,
+ please adjust this path if necessary. The "install" target in the
+ Makefile has been adapted accordingly.
+ - Added support for fractional time offsets, such as FAKETIME="+1,5h".
+ Please note that either , or . has to be used as a delimiter
+ depending on your locale. Thanks to Karl Chen!
+ - Added support for speeding the clock up or slowing it down. For
+ example, FAKETIME="+5d x2,0" will set the faked time 5 days into
+ the future and make the clock run twice as fast for the specified
+ program. Slowing it down can be done e.g. by using FAKETIME="+0 x0,5".
+ Again, the delimiter to use for the fraction depends on your locale.
+ Thanks to Karl Chen!
+
+Since 0.6:
+ Main version 0.7 contributions by David North, TDI:
+ - Added ability to 'start clock at' a specific time.
+ - Added pthread synchronization support
+ - Added a 2 second delay to timetest.c so one can observe if the
+ clock is relative or absolute
+ - Added test.sh example of 'start clock at'
+ - Added ability to disable the FAKE_STAT functionality at library-start
+ in the case that the library was compiled -DFAKE_STAT, and added another
+ test case for demonstrating this
+ - Repaired a bug w.r.t. strptime/mktime wherein 'isdst' was uninitialized
+ which led to pseudorandom +/- 1 hour results being returned in 'start at'
+ or absolute time modes
+
+ Other enhancements:
+ - Fixed missing interceptions to libc-internal functions and added notes
+ about a workaround for running Java programs with faked times in the
+ future (they worked properly, but often locked up at exiting). Thanks to
+ Jamie Cameron of Google for in-depth analysis and prototype solution!
+
+Since 0.5:
+ - Performance enhancements by means of caching the data read
+ e.g. from $HOME/.faketimerc for 10 seconds.
+ - Several file timestamp related system calls such as fstat() will be
+ intercepted now. See the README file on how to turn this off if you
+ do not need it. Thanks to Philipp Hachtmann!
+ - A system-wide /etc/faketimerc file will now be used if no FAKETIME
+ environment variable has been set and no $HOME/.faketimerc is present.
+ Thanks to David Burley, Jacob Moorman, and Wayne Davison of
+ SourceForge, Inc.!
+ - Added trivial Makefile targets clean/distclean/install
+ - Changed Makefile target test to run new test.sh script
+ - Added new test cases to timetest.c
+
+Since 0.4:
+ - Allow "y" for years of offset specification. Thanks to Bas ten Berge!
+
+Since 0.3:
+ - Support for FAKETIME_FMT environment variable. Thanks to Moreno Baricevic!
+
+Since 0.2:
+ - Intercept clock_gettime(). Thanks to Andreas Thienemann!
+
+Since 0.1:
+ - Fixed segfault when calling time(NULL). Thanks to Andres Ojamaa!
+ - Added additional sanity checks.
diff --git a/tests/deckard/contrib/libfaketime/README b/tests/deckard/contrib/libfaketime/README
new file mode 100644
index 0000000..248bc92
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/README
@@ -0,0 +1,534 @@
+libfaketime, version 0.9.7 (November 2017)
+==========================================
+
+
+Content of this file:
+---------------------
+
+1. Introduction
+2. Compatibility issues
+3. Installation
+4. Usage
+ a) Basics
+ b) Using absolute dates
+ c) Using 'start at' dates
+ d) Using offsets for relative dates
+ e) Advanced features and caveats
+ f) Faking the date and time system-wide
+ g) Using the "faketime" wrapper script
+ h) "Limiting" libfaketime based on elapsed time or number of calls
+ i) "Limiting" libfaketime per process
+ j) Spawning an external process
+ k) Saving timestamps to file, loading them from file
+5. License
+6. Contact
+
+
+1. Introduction
+---------------
+
+libfaketime intercepts various system calls that programs use to retrieve the
+current date and time. It then reports modified (faked) dates and times (as
+specified by you, the user) to these programs. This means you can modify the
+system time a program sees without having to change the time system-wide.
+
+libfaketime allows you to specify both absolute dates (e.g., 01/01/2004) and
+relative dates (e.g., 10 days ago).
+
+libfaketime might be used for various purposes, for example
+
+- deterministic build processes
+- debugging time-related issues, such as expired SSL certificates
+- testing software for year-2038 compliance
+
+libfaketime ships with a command line wrapper called "faketime" that makes it
+easier to use, but does not expose all of libfaketime's functionality. If your
+use case is not covered by the faketime command, make sure to look in this
+documentation whether it can be achieved by using libfaketime directly.
+
+
+2. Compatibility issues
+-----------------------
+
+- libfaketime is supposed to work on Linux and macOS.
+ Your mileage may vary; some other *NIXes have been reported to work as well.
+
+- libfaketime uses the library preload mechanism of your operating system's
+ linker (which is involved in starting programs) and thus cannot work with
+ statically linked binaries or binaries that have the setuid-flag set (e.g.,
+ suidroot programs like "ping" or "passwd"). Please see you system linker's
+ manpage for further details.
+
+- libfaketime supports the pthreads environment. A separate library is built
+ (libfaketimeMT.so.1), which contains the pthread synchronization calls. This
+ library also single-threads calls through the time() intercept because
+ several variables are statically cached by the library and could cause issues
+ when accessed without synchronization.
+
+ However, the performance penalty for this might be an issue for some
+ applications. If this is the case, you can try using an unsynchronized time()
+ intercept by removing the -DPTHREAD_SINGLETHREADED_TIME from the Makefile and
+ rebuilding libfaketimeMT.so.1
+
+* Java-/JVM-based applications work but you need to pass in an extra argument
+ (DONT_FAKE_MONOTONIC). See usage basics below for details. Without this
+ argument the java command usually hangs.
+
+* libfaketime will eventually be bypassed by applications that dynamically load
+ system libraries, such as librt, explicitly themselves instead of relying on
+ the linker to do so at application start time. libfaketime will not work with
+ those applications unless you can modify them.
+
+* Applications can explicitly be designed to prevent libfaketime from working,
+ e.g., by checking whether certain environment variables are set or whether
+ libfaketime-specific files are present.
+
+
+3. Installation
+---------------
+
+Running "make" compiles both library versions and a test program, which it then
+also executes.
+
+If the test works fine, you should copy the libfaketime libraries
+(libfaketime.so.1, and libfaketimeMT.so.1) to the place you want them in.
+Running "make install" will attempt to place them in /usr/local/lib/faketime
+and will install the wrapper shell script "faketime" in /usr/local/bin, both of
+which most likely will require root privileges. However, from a technical point
+of view, there is no necessity for a system-wide installation, so you can use
+libfaketime also on machines where you do not have root privileges. You may
+want to adjust the PREFIX variable in the Makefiles accordingly.
+
+By default, the Makefile compiles/links libfaketime for your default system
+architecture. If you need to build, e.g., 32-bit files on a 64-bit platform,
+please see the notes about CFLAGS and LDFLAGS in src/Makefile.
+
+Since version 0.6, system calls to file timestamps are also intercepted,
+thanks to a contribution by Philipp Hachtmann. This is especially useful in
+combination with relative time offsets as explained in section 4d) below, if a
+program writes and reads files whose timestamps also shall be faked. If you do
+not need this feature or if it confuses the application you want to use FTPL
+with, define the environment variable NO_FAKE_STAT, and the intercepted stat
+calls will be passed through unaltered.
+
+On macOS, it is necessary to compile differently, due to the different
+behavior dyld has. Use the Makefile.OSX file provided to compile
+libfaketime.1.dylib. Additionally, instead of using LD_PRELOAD,
+the variable DYLD_INSERT_LIBRARIES should be set to the path to
+libfaketime.1.dylib, and the variable DYLD_FORCE_FLAT_NAMESPACE should be
+set (to anything). macOS users should read README.OSX for additional
+details.
+
+
+4. Usage
+--------
+
+4a) Usage basics
+----------------
+
+Using libfaketime on a program of your choice consists of two steps:
+
+1. Making sure libfaketime gets loaded by the system's linker.
+2. Specify the faked time.
+
+As an example, we want the "date" command to report our faked time. To do so,
+we could use the following command line on Linux:
+
+user@host> date
+Tue Nov 23 12:01:05 CEST 2016
+
+user@host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" date
+Mon Nov 8 12:01:12 CEST 2016
+
+user@host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d"
+DONT_FAKE_MONOTONIC=1 java -version
+java version "1.8.0_111"
+Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
+Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
+
+The basic way of running any command/program with libfaketime enabled is to
+make sure the environment variable LD_PRELOAD contains the path and
+filename of the libfaketime library. This can either be done by setting it once
+beforehand:
+
+export LD_PRELOAD=/path/to/libfaketime.so.1
+(now run any command you want)
+
+Or it can be done by specifying it on the command line itself:
+
+LD_PRELOAD=/path/to/libfaketime.so.1 your_command_here
+
+(These examples are for the bash shell; how environment variables are set may
+vary on your system.)
+
+On Linux, library search paths can be set as part of the linker configuration.
+LD_PRELOAD then also works with relative paths. For example, when libfaketime.so.1
+is installed as /path/to/libfaketime.so.1, you can add /path/to to an appropriate
+linker configuration file, e.g., /etc/ld.so.conf.d/local.conf, and then run
+the "ldconfig" command. Afterwards, using LD_PRELOAD=libfaketime.so.1 suffices.
+
+However, also the faked time should be specified; otherwise, libfaketime will
+be loaded, but just report the real system time. There are three ways to
+specify the faked time:
+
+a) By setting the environment variable FAKETIME.
+b) By using the file given in the environment variable FAKETIME_TIMESTAMP_FILE
+c) By using the file .faketimerc in your home directory.
+d) By using the file /etc/faketimerc for a system-wide default.
+
+If you want to use b) c) or d), $HOME/.faketimerc or /etc/faketimerc consist of
+only one line of text with exactly the same content as the FAKETIME environment
+variable, which is described below. Note that /etc/faketimerc will only be used
+if there is no $HOME/.faketimerc and no FAKETIME_TIMESTAMP_FILE file exists.
+Also, the FAKETIME environment variable _always_ has priority over the files.
+
+
+4b) Using absolute dates
+------------------------
+
+The format that _must_ be used for _absolute_ dates is "YYYY-MM-DD hh:mm:ss".
+For example, the 24th of December, 2020, 8:30 PM would have to be specified as
+FAKETIME="2020-12-24 20:30:00".
+
+
+4c) Using 'start at' dates
+--------------------------
+
+(Thanks to a major contribution by David North, TDI in version 0.7)
+
+The format that _must_ be used for _start_at_ dates is "@YYYY-MM-DD hh:mm:ss".
+For example, the 24th of December, 2020, 8:30 PM would have to be specified as
+FAKETIME="@2020-12-24 20:30:00".
+
+The absolute dates described in 4b) simulate a STOPPED system clock at the
+specified absolute time. The 'start at' format allows a 'relative' clock
+operation as described below in section 4d), but using a 'start at' time
+instead of an offset time.
+
+
+4d) Using offsets for relative dates
+------------------------------------
+
+Relative date offsets can be positive or negative, thus what you put into
+FAKETIME _must_ either start with a + or a -, followed by a number, and
+optionally followed by a multiplier:
+
+- By default, the offset you specify is in seconds. Example:
+
+ export FAKETIME="-120" will set the faked time 2 minutes (120 seconds) behind
+ the real time.
+
+- The multipliers "m", "h", "d" and "y" can be used to specify the offset in
+ minutes, hours, days and years (365 days each), respectively. Examples:
+
+ export FAKETIME="-10m" sets the faked time 10 minutes behind the real time.
+ export FAKETIME="+14d" sets the faked time to 14 days in the future.
+
+You now should understand the complete example we've used before:
+
+LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" date
+
+This command line makes sure libfaketime gets loaded and sets the faked time to
+15 days in the past.
+
+Moreno Baricevic has contributed support for the FAKETIME_FMT environment
+variable, which allows you to optionally set the strptime() format:
+
+Some simple examples:
+LD_PRELOAD=./libfaketime.so.1 FAKETIME_FMT=%s FAKETIME="`date +%s -d'1 year ago'`" date
+LD_PRELOAD=./libfaketime.so.1 FAKETIME_FMT=%s FAKETIME="`stat -c %Y somefile`" date
+LD_PRELOAD=./libfaketime.so.1 FAKETIME_FMT=%c FAKETIME="`date`" date
+
+
+4e) Advanced features and caveats
+---------------------------------
+
+Advanced time specification options:
+------------------------------------
+
+Since version 0.8, thanks to a contribution by Karl Chen, fractions can be used
+in the specification of time offsets. For example,
+
+FAKETIME="+1,5h"
+
+is equivalent to FAKETIME="+90m". Please be aware that the fraction delimiter
+depends on your locale settings, so actually you might need to use
+
+FAKETIME="+1.5h"
+
+You should figure out the proper delimiter, e.g., by using libfaketime on
+a command like /bin/date where you immediately can verify whether it worked as
+expected.
+
+Also contributed by Karl Chen in v0.8 is the option to speed up or slow
+down the wall clock time for the program which is executed using libfaketime.
+For example,
+
+FAKETIME="+1y x2"
+
+will set the faked time one year into the future and will make the clock run
+twice as fast. Similarly,
+
+FAKETIME="+1y x0,5"
+
+will make the clock run only half as fast. As stated above, the fraction
+delimiter depends on your locale. Furthermore,
+
+FAKETIME="+1y i2,0"
+
+will make the clock step two seconds per each time(), etc. call, being
+completely independently of the system clock. It helps running programs
+with some determinism. In this single case all spawned processes will use
+the same global clock without restarting it at the start of each process.
+
+For testing, your should run a command like
+
+LD_PRELOAD=./libfaketime.so.1 FAKETIME="+1,5y x10,0" \
+/bin/bash -c 'while true; do echo $SECONDS ; sleep 1 ; done'
+
+For each second that the endless loop sleeps, the executed bash shell will
+think that 10 seconds have passed ($SECONDS is a bash-internal variable
+measuring the time since the shell was started).
+
+(Please note that replacing "echo $SECONDS" e.g. with a call to "/bin/date"
+will not give the expected result, since /bin/date will always be started as a
+new process for which also libfaketime will be re-initialized. It will show the
+correct offset (1.5 years in the future), but no speed-ups or slow-downs.)
+
+For applications that should use a different date & time each time they are
+run, consider using the included timeprivacy wrapper shellscript (contributed
+by adrelanos at riseup dot net).
+
+
+Caveats:
+--------
+
+Whenever possible, you should use relative offsets or 'start at' dates,
+and not use absolute dates.
+
+Why? Because the absolute date/time you set is fixed, i.e., if a program
+retrieves the current time, and retrieves the current time again 5 minutes
+later, it will still get the same result twice. This is likely to break
+programs which measure the time passing by (e.g., a mail program which checks
+for new mail every X minutes).
+
+Using relative offsets or 'start at' dates solves this problem.
+libfaketime then will always report the faked time based on the real
+current time and the offset you've specified.
+
+Please also note that your default specification of the fake time is cached for
+10 seconds in order to enhance the library's performance. Thus, if you change the
+content of $HOME/.faketimerc or /etc/faketimerc while a program is running, it
+may take up to 10 seconds before the new fake time is applied. If this is a
+problem in your scenario, you can change number of seconds before the file is read
+again with environment variable FAKETIME_CACHE_DURATION, or disable caching at all
+with FAKETIME_NO_CACHE=1. Remember that disabling the cache may negatively
+influence the performance.
+
+
+4f) Faking the date and time system-wide
+----------------------------------------
+
+David Burley of SourceForge, Inc. reported an interesting use case of applying
+libfaketime system-wide: Currently, all virtual machines running inside
+an OpenVZ host have the same system date and time. In order to use multiple
+sandboxes with different system dates, the libfaketime library can be put into
+/etc/ld.so.preload; it will then be applied to all commands and programs
+automatically. This is of course best used with a system-wide /etc/faketimerc
+file. Kudos to SourceForge, Inc. for providing the patch!
+
+Caveat: If you run a virtual machine, its real-time clock might be reset to the
+real world date & time when you reboot. Depending on your FAKETIME setting,
+this may lead to side effects, such as forced file system checks on each reboot.
+System-wide faked time may also lead to unexpected side effects with software
+auto-update tools, if the offset between real world time and faked system time
+is too large. If in doubt, set your system's date to the faked time and try out
+whether everything still works as expected before applying libfaketime
+system-wide.
+
+
+4g) Using the "faketime" wrapper
+--------------------------------
+
+As of version 0.8, libfaketime provides a command named "faketime", which is
+placed into /usr/bin by "make install". It spares the hassle of setting
+the LD_PRELOAD and FAKETIME environment variables manually, but only exposes
+a subset of libfaketime's functionality. On the other hand, it uses the date
+interpretation function by /bin/date in order to provide higher flexibility
+regarding the specification of the faked date and time. For example, you
+can use
+
+faketime 'last Friday 5 pm' /your/command/here
+
+Of course, also absolute dates can be used, such as in
+
+faketime '2018-12-24 08:15:42' /bin/date
+
+Thanks to Daniel Kahn Gillmor for providing these suggestions!
+
+Balint Reczey has rewritten the wrapper in 0.9.5 from a simple shell script
+to an efficient wrapper application.
+
+
+4h) "Limiting" libfaketime based on elapsed time or number of calls
+-------------------------------------------------------------------
+
+Starting with version 0.9, libfaketime can be configured to not be continuously
+active, but only during a certain time interval.
+
+For example, you might want to start a program with the real current time, but
+after 5 minutes of usage, you might want it to see a faked time, e.g., a year
+in the future.
+
+Dynamic changes to the faked time are alternatively possible by
+
+- changing the FAKETIME environment variable at run-time; this is the preferred
+ way if you use libfaketime for debugging and testing as a programmer, as it
+ gives you the most direct control of libfaketime without any performance
+ penalties.
+
+- not using the FAKETIME environment variable, but specifying the fake time in
+ a file (such as ~/.faketimerc). You can change the content of this file at
+ run-time. This works best with caching disabled, but comes at a performance
+ cost because this file has to be read and evaluated each time.
+
+The feature described here works based on two pairs of environment variables,
+
+ FAKETIME_START_AFTER_SECONDS and FAKETIME_STOP_AFTER_SECONDS, and
+ FAKETIME_START_AFTER_NUMCALLS and FAKETIME_STOP_AFTER_NUMCALLS
+
+The default value for each of these environment variables is -1, which means
+"ignore this value".
+
+If you want libfaketime to be only active during the run-time minutes 2 to 5
+of your application, you would set
+
+ FAKETIME_START_AFTER_SECONDS=60
+ FAKETIME_STOP_AFTER_SECONDS=300
+
+This means that your application will work with the real time from start (second
+0) up to second 60. It will then see a faked time from run-time seconds 60 to
+300 (minutes 2, 3, 4, and 5). After run-time second 600, it will again see the
+real (not-faked) time.
+
+This approach is not as flexible as changing the FAKETIME environment variable
+during runtime, but may be easier to use, works on a per-program (and not a
+per-user or system-wide) scope, and has only a minor performance overhead.
+
+Using the other pair of environment variables, you can limit the activity time
+of libfaketime not based on wall-clock seconds, but on the number of
+time-related function calls the started program performs. This alternative is
+probably only suitable for programmers who either know the code of the program
+in order to determine useful start/stop values or want to perform fuzzing
+tests.
+
+Both pairs of environment variables can be combined to further restrict
+libfaketime activity, although this is only useful in very few scenarios.
+
+Limiting libfaketime activity in this way is not recommended in general. Many
+programs will break when they are subject to sudden changes in time, especially
+if they are started using the current (real) time and are then sent back into
+the past after, e.g., 5 minutes. For example, they may appear to be frozen or
+stuck because they are waiting until a certain point in time that, however, is
+never reached due to the delayed libfaketime activity. Avoid using this
+functionality unless you are sure you really need it and know what you are
+doing.
+
+
+4i) "Limiting" libfaketime per process
+--------------------------------------
+
+faketime can be instructed to fake time related calls only for selected
+commands or to fake time for each command except for a certain subset of
+commands.
+
+The environment variables are FAKETIME_ONLY_CMDS and FAKETIME_SKIP_CMDS
+respectively.
+
+Example:
+ FAKETIME_ONLY_CMDS=javadoc faketime '2008-12-24 08:15:42' make
+will run the "make" command but the time faking will only be applied
+to javadoc processes.
+
+Multiple commands are separated by commas.
+
+Example:
+ FAKETIME_SKIP_CMDS="javadoc,ctags" faketime '2008-12-24 08:15:42' make
+will run the "make" command and apply time faking for everything "make"
+does except for javadoc and ctags processes.
+
+FAKETIME_ONLY_CMDS and FAKETIME_SKIP_CMDS are mutually exclusive, i.e.,
+you cannot set them both at the same time. faketime will terminate with
+an error message if both environment variables are set.
+
+
+4j) Spawning an external process
+--------------------------------
+
+From version 0.9 on, libfaketime can execute a shell command once after a) an
+arbitrary number of seconds has passed or b) a number of time-related system
+calls has been made by the program since it started. This has two limitations
+one needs to be aware of:
+
+* Spawning the external process happens during a time-related system call
+ of the original program. If you want the external process to be started
+ 5 seconds after program start, but this program does not make any time-
+ related system calls before run-time second 8, the start of your external
+ process will be delayed until run-time second 8.
+
+* The original program is blocked until the external process is finished,
+ because the intercepting time-related system call will not return earlier. If
+ you need to start a long-running external process, make sure it forks into the
+ background.
+
+Spawning the external process is controlled using three environment variables:
+FAKETIME_SPAWN_TARGET, FAKETIME_SPAWN_SECONDS, FAKETIME_SPAWN_NUMCALLS.
+
+Example (using bash on Linux):
+
+(... usual libfaketime setup here, setting LD_PRELOAD and FAKETIME ...)
+export FAKETIME_SPAWN_TARGET="/bin/echo 'Hello world'"
+export FAKETIME_SPAWN_SECONDS=5
+/opt/local/bin/myprogram
+
+This will run the "echo" command with the given parameter during the first
+time-related system function call that "myprogram" performs after running for 5
+seconds.
+
+
+4k) Saving timestamps to file, loading them from file
+-----------------------------------------------------
+
+faketime can save faked timestamps to a file specified by FAKETIME_SAVE_FILE
+environment variable. It can also use the file specified by FAKETIME_LOAD_FILE
+to replay timestamps from it. After consuming the whole file, libfaketime
+returns to using the rule set in FAKETIME variable, but the timestamp processes
+will start counting from will be the last timestamp in the file.
+
+The file stores each timestamp in a stream of saved_timestamp structs
+without any metadata or padding:
+
+/* Storage format for timestamps written to file. Big endian. */
+struct saved_timestamp {
+ int64_t sec;
+ uint64_t nsec;
+};
+
+faketime needs to be run using the faketime wrapper to use these files. This
+functionality has been added by Balint Reczey in v0.9.5.
+
+
+5. License
+----------
+
+libfaketime has been released under the GNU General Public License, GPL.
+Please see the included COPYING file.
+
+
+6. Contact
+-----------
+
+Bug reports, feature suggestions, success reports, and patches/pull
+requests are highly appreciated:
+
+ https://github.com/wolfcw/libfaketime
diff --git a/tests/deckard/contrib/libfaketime/README.OSX b/tests/deckard/contrib/libfaketime/README.OSX
new file mode 100644
index 0000000..7f17a63
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/README.OSX
@@ -0,0 +1,144 @@
+README file for libfaketime on macOS
+====================================
+
+Support for macOS has meanwhile matured and many command line and
+GUI applications will run stable.
+
+Developments and tests are done on High Sierra currently.
+Use libfaketime 0.9.6 or earlier on OS X (i.e., before Sierra).
+
+Version 0.9.5 and higher no longer works with OSX <= 10.6 due to
+changes in the underlying system libraries. If you need libfaketime
+on OSX <= 10.6, please use libfaketime version 0.9.
+
+
+Installing and using libfaketime on OS X is slightly different than
+on Linux. Please make sure to read the README file for general
+setup and usage, and refer to this file only about OS X specifics.
+
+
+1) Installing libfaketime on macOS
+----------------------------------
+
+If you use MacPorts, libfaketime can be installed on the command line
+as follows:
+
+ sudo port install libfaketime
+
+Or, if you use Fink, install using:
+
+ fink install libfaketime
+
+Or, if you use Homebrew, install using:
+
+ brew install libfaketime
+
+Otherwise, you have to compile and install libfaketime manually; this
+will require a working installation of Xcode and its command line tools
+on your machine.
+
+You can compile libfaketime by running the command
+
+ make
+
+in libfaketime's top-level directory.
+
+The resulting library will be named libfaketime.1.dylib ; to check
+whether it works properly, run the test suite and verify whether its
+output is correct:
+
+ cd test
+ make -f Makefile.OSX
+
+
+2) Using libfaketime from the command line on macOS
+---------------------------------------------------
+
+You will need to set three environment variables. In a Terminal.app
+or iTerm2 session, the following commands can be used:
+
+export DYLD_FORCE_FLAT_NAMESPACE=1
+export DYLD_INSERT_LIBRARIES=/path/to/libfaketime.1.dylib
+export FAKETIME="your favorite faketime-spec here"
+
+Please refer to the general README file concerning the format
+of the FAKETIME environment variable value and other environment
+variables that are related to it.
+
+The "faketime" wrapper application has been adapted to macOS;
+it offers the same limited libfaketime functionality as on Linux
+in a simple-to-use manner without the need to manually set
+those environment variables. Run "faketime" without parameters
+for help and use "man faketime" for details.
+
+
+3) Integrating libfaketime with applications
+--------------------------------------------
+
+Given the limited number of system calls libfaketime intercepts,
+it may not work too well with specific GUI applications on OS X.
+This can result in crashes after a seemingly random time, or an
+application will not or at least not always see the faked time,
+and so on.
+
+A safe way to try out whether a specific application works fine
+with libfaketime is to start it from the command line. Perform
+the steps outlined above and run the application by issuing the
+following command:
+
+/Applications/ApplicationName.app/Contents/MacOS/ApplicationName
+
+(Make sure to replace "ApplicationName" twice in that command with
+the name of your actual application.)
+
+If it works fine, you can configure the application to permanently
+run with libfaketime by editing its Info.plist file. Add the
+LSEnvironment key unless it is already there and add a dictionary
+with the three keys like this:
+
+ <key>LSEnvironment</key>
+ <dict>
+ <key>DYLD_FORCE_FLAT_NAMESPACE</key>
+ <string>1</string>
+ <key>DYLD_INSERT_LIBRARIES</key>
+ <string>/path/to/libfaketime.1.dylib</string>
+ <key>FAKETIME</key>
+ <string>value of FAKETIME here</string>
+ </dict>
+
+(If the application is installed in /Applications instead of in
+$HOME/Applications, you eventually will need root privileges. If
+the application's Info.plist is not in XML, but in binary format,
+use appropriate editing or conversion tools.)
+
+Afterwards, you will probably need to run
+
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/ApplicationName.app
+
+to make sure the change to Info.plist does not go unnoticed.
+
+Please note that modifications to Info.plist will be lost when the
+application is updated, so this process needs to be repeated after
+such updates, including own new builds when using Xcode.
+
+Please feel free to report non-working applications on the Github
+libfaketime issues website. This may help us to identify further
+time-related system calls that need to be intercepted on macOS.
+
+ https://github.com/wolfcw/libfaketime/issues
+
+Important: When reporting non-working applications, please make
+sure that your issue is not related to SIP (system integrity
+protection). For example, on a SIP-enabled, default macOS installation,
+libfaketime will not work for programs like /bin/bash because
+the path /bin is SIP-protected. Copy your application to a
+non-SIP-protected path, and if libfaketime still does not work,
+feel free to report it.
+
+
+4) Notes for developers of macOS applications
+---------------------------------------------
+
+The environment variable FAKETIME can be changed at application run-time
+and always takes precedence over other user-controlled settings. It can
+be re-set to 0 (zero) to work around potential incompatibilities.
diff --git a/tests/deckard/contrib/libfaketime/README.developers b/tests/deckard/contrib/libfaketime/README.developers
new file mode 100644
index 0000000..b8df57f
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/README.developers
@@ -0,0 +1,106 @@
+This file contains information for libfaketime developers and contributors.
+
+
+GENERAL
+=======
+
+Starting with libfaketime v0.9.5, development and issue handling is
+completely done via Github:
+
+ https://github.com/wolfcw/libfaketime
+
+- Official releases are tagged.
+- Code contributions and bugfixes are merged into the "development" branch,
+ which is considered unstable and may contain code that is not yet fully
+ tested.
+- The "master" branch is updated with tested code only; it is ensured that
+ it compiles and works cleanly at least on current Linux and OS X systems.
+
+Code contributions are highly welcome, preferably via pull requests on Github.
+
+
+CODE STYLE
+==========
+
+Please try to stick to the following code formatting style guidelines:
+
+- No tabs, only spaces for indentation.
+- Avoid trailing whitespace.
+- Indentation is 2 spaces for each level.
+- Opening and closing curly brackets have to be on lines of their own.
+- Use under_score_names for function and variable names; avoid using camelCase.
+- // and /*...*/ style comments may and shall be used.
+
+Example:
+
+/* This function will do nothing */
+void do_nothing(int how_often)
+{
+ int counter;
+ for (counter = 0; counter < how_often; counter++)
+ {
+ counter = counter; // our do-nothing algorithm
+ }
+}
+
+- Use -DDEBUG and #ifdef DEBUG for development and testing. Avoid printing
+ to stdout or stderr outside "#ifdef DEBUG"; if it is necessary to inform
+ the user a run-time, prefix your output with "faketime" or make otherwise
+ sure that the user knows where the message is coming from.
+
+- If you add new functions to libfaketime.c, try placing them somewhere
+ where they fit will: Usually, functions are grouped by functionality
+ (e.g., all functions related to faking file timestamps). If that's not
+ possible, group them by contributor, or document your placement strategy
+ in the commit message.
+
+
+DEVELOPMENT, BUILDING, AND TESTING
+==================================
+
+- Don't break existing behaviour. Backward compatibility matters (unless
+ the modification fixes bugs :-)).
+
+- Add tests for new features. Extend test/timetest.c appropriately and
+ try to use the functional testing framework wherever possible.
+
+- Compiler and linker warnings are treated as errors and not acceptable.
+
+- If you cannot test the code on both Linux and OS X yourself, please
+ let us know and consider wrapping your code in #ifdef / #ifndef __APPLE__
+ statements.
+
+
+DOCUMENTATION
+=============
+
+For anything more than small bugfixes, please update the user documentation
+and credits appropriately:
+
+- The NEWS file should mention the change and your credits.
+- The README and README.OSX files should be updated whenever functionality
+ is added or modified.
+- The manpage man/faketime.1 should be updated when the wrapper application
+ is modified.
+
+For credits, please either mention your real name, your Github username, or
+your email address.
+
+In your own interest, please be verbose on user documentation and comments
+in the source code. Users will not know about new features unless they are
+documented. Other authors and maintainers will need to understand your code
+easily.
+
+
+RELEASES
+========
+
+Official new releases are created whenever a significant amount of changes
+(bugfixes or new functionality) has piled up; on average, there is one new
+official release per year. Users who need to stick to the bleeding edge
+are supposed to use the current state of the "master" branch at any time.
+
+libfaketime maintainers for several Linux distributions are informed about
+release candidates and new releases by email. Contact wolfcw on Github if
+you are interested in receiving notifications, or use Github functionality
+to get informed about updates.
diff --git a/tests/deckard/contrib/libfaketime/TODO b/tests/deckard/contrib/libfaketime/TODO
new file mode 100644
index 0000000..b8c801c
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/TODO
@@ -0,0 +1,9 @@
+Open issues / next steps for libfaketime development
+
+- add more functional tests that check more than the basic functionality
+- use the testing framework to also implement unit tests
+- fake timer_create and friends
+- work around thread local storage issue, e.g., by using pthreads
+- add autoconf/automake support to get rid of separate Makefile.OSX
+- improve pthread support
+
diff --git a/tests/deckard/contrib/libfaketime/man/Makefile b/tests/deckard/contrib/libfaketime/man/Makefile
new file mode 100644
index 0000000..807c157
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/man/Makefile
@@ -0,0 +1,14 @@
+INSTALL ?= install
+
+PREFIX ?= /usr/local
+
+all:
+
+install:
+ $(INSTALL) -Dm0644 faketime.1 "${DESTDIR}${PREFIX}/share/man/man1/faketime.1"
+ gzip -f "${DESTDIR}${PREFIX}/share/man/man1/faketime.1"
+
+uninstall:
+ rm -f "${DESTDIR}${PREFIX}/share/man/man1/faketime.1.gz"
+
+.PHONY: all install uninstall
diff --git a/tests/deckard/contrib/libfaketime/man/Makefile.OSX b/tests/deckard/contrib/libfaketime/man/Makefile.OSX
new file mode 100644
index 0000000..5451acd
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/man/Makefile.OSX
@@ -0,0 +1,15 @@
+INSTALL ?= install
+
+PREFIX ?= /usr/local
+
+all:
+
+install:
+ $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/share/man/man1"
+ $(INSTALL) -m0644 faketime.1 "${DESTDIR}${PREFIX}/share/man/man1/faketime.1"
+ gzip -f "${DESTDIR}${PREFIX}/share/man/man1/faketime.1"
+
+uninstall:
+ rm -f "${DESTDIR}${PREFIX}/share/man/man1/faketime.1.gz"
+
+.PHONY: all install uninstall
diff --git a/tests/deckard/contrib/libfaketime/man/faketime.1 b/tests/deckard/contrib/libfaketime/man/faketime.1
new file mode 100644
index 0000000..89c279d
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/man/faketime.1
@@ -0,0 +1,82 @@
+.TH FAKETIME "1" "November 2017" "faketime 0.9.7" wolfcw
+.SH NAME
+faketime \- manipulate the system time for a given command
+.SH SYNOPSIS
+.B faketime
+\fI[options] timestamp program [arguments...]\fR
+.SH DESCRIPTION
+.\" \fIfaketime\fR will trick the given program into seeing the specified timestamp as its starting date and time.
+.PP
+The given command will be tricked into believing that the current system time is the one specified in the timestamp. Filesystem timestamps will also be
+reported relative to this timestamp. The wall clock will continue to run from this date and time unless specified otherwise (see advanced options).
+Actually, faketime is a simple wrapper for libfaketime, which uses the LD_PRELOAD mechanism to load a small library which intercepts system calls to
+functions such as \fItime(2)\fR and \fIfstat(2)\fR. This wrapper exposes only a subset of libfaketime's functionality; please refer to the README file
+that came with faketime for more details and advanced options, or have a look at http://github.com/wolfcw/libfaketime
+.SH OPTIONS
+.TP
+\fB\-\-help\fR
+show usage information and quit.
+.TP
+\fB\-\-version\fR
+show version information and quit.
+.TP
+\fB\-m\fR
+use the multi-threading variant of libfaketime.
+.TP
+\fB\-f\fR
+use the advanced timestamp specification format.
+.TP
+\fB\--exclude-monotonic\fR
+Do not fake time when the program makes a call to clock_gettime with a CLOCK_MONOTONIC clock.
+
+.SH EXAMPLES
+.nf
+faketime 'last Friday 5 pm' /bin/date
+faketime '2008-12-24 08:15:42' /bin/date
+faketime -f '+2,5y x10,0' /bin/bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'
+faketime -f '+2,5y x0,50' /bin/bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'
+faketime -f '+2,5y i2,0' /bin/bash -c 'while true; do date ; sleep 1 ; done'
+In this single case all spawned processes will use the same global clock without restarting it at the start of each process.
+
+(Please note that it depends on your locale settings whether . or , has to be used for fractional offsets)
+.fi
+.SH ADVANCED TIMESTAMP FORMAT
+The simple timestamp format used by default applies the \fB/bin/date -d\fR command to parse user-friendly specifications such as 'last friday'. When using
+the faketime option \fB\-f\fR, the timestamp specified on the command line is directly passed to libfaketime, which enables a couple of additional features
+such as speeding the clock up or slowing it down for the target program. It is strongly recommended that you have a look at the libfaketime documentation. Summary:
+.TP
+Freeze clock at absolute timestamp: \fB"YYYY-MM-DD hh:mm:ss"\fR
+If you want to specify an absolute point in time, exactly this format must be used. Please note that freezing the clock is usually not what you want and may break the application. Only use if you know what you're doing!
+.TP
+Relative time offset: \fB"[+/-]123[m/h/d/y]\fR, e.g. "+60m", "+2y"
+This is the most often used format and specifies the faked time relatively to the current real time. The first character of the format string \fBmust\fR be a + or a -. The numeric value by default represents seconds, but the modifiers m, h, d, and y can be used to specify minutes, hours, days, or years, respectively. For example, "-2y" means "two years ago". Fractional time offsets can be used, e.g. "+2,5y", which means "two and a half years in the future". Please note that the fraction delimiter depends on your locale settings, so if "+2,5y" does not work, you might want to try "+2.5y".
+.TP
+Start-at timestamps: \fB"@YYYY-MM-DD hh:mm:ss"\fR
+The wall clock will start counting at the given timestamp for the program. This can be used for specifying absolute timestamps without freezing the clock.
+.SH ADVANCED USAGE
+When using relative time offsets or start-at timestamps (see ADVANCED TIMESTAMP FORMAT above and option \fB\-f\fR), the clock speed can be adjusted, i.e. time may run faster or slower for the executed program. For example, \fB"+5y x10"\fR will set the faked time 5 years into the future and make the time pass 10 times as fast (one real second equals 10 seconds measured by the program). Similarly, the flow of time can be slowed, e.g. using \fB"-7d x0,2"\fR, which will set the faked time 7 days in the past and set the clock speed to 20 percent, i.e. it takes five real world seconds for one second measured by the program. Again, depending on your locale, either "x2.0" or "x2,0" may be required regarding the delimiter. You can also make faketime to advance the reported time by a preset interval upon each time() call independently from the system's time using \fB"-7d i2,0"\fR, where
+\fB"i"\fR is followed by the increase interval in seconds.
+.PP
+Faking times for multiple programs or even system-wide can be simplified by using ~/.faketimerc files and /etc/faketimerc. Please refer to the README that came with faketime for warnings and details.
+.PP
+Faking of filesystem timestamps may be disabled by setting the NO_FAKE_STAT environment variable to a non-empty value.
+.SH AUTHOR
+Please see the README and NEWS files for contributors.
+.SH BUGS
+Due to limitations of the LD_PRELOAD mechanism, faketime will not work with suidroot and statically linked programs.
+While timestamps and time offsets will work for child processes, speeding the clock up or slowing it down might not
+work for child processes spawned by the executed program as expected; a new instance of libfaketime is used for each
+child process, which means that the libfaketime start time, which is used in speed adjustments, will also be
+re-initialized. Some programs may dynamically load system libraries, such as librt, at run-time and therefore bypass libfaketime. You may report programs that do not work with libfaketime, but only if they are available as open source.
+.SH "REPORTING BUGS"
+Please use https://github.com/wolfcw/libfaketime/issues
+.SH COPYRIGHT
+Copyright \(co 2003-2013 by the libfaketime authors.
+.PP
+There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. You may redistribute copies of faketime under the
+terms of the GNU General Public License.
+.br
+For more information about these matters, see the file named COPYING.
+.SH "SEE ALSO"
+ld.so(1), time(2), fstat(2)
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Arch/PKGBUILD-32bit.txt b/tests/deckard/contrib/libfaketime/packaging/Linux/Arch/PKGBUILD-32bit.txt
new file mode 100644
index 0000000..a87dc35
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Arch/PKGBUILD-32bit.txt
@@ -0,0 +1,25 @@
+# Maintainer: Robert Orzanna <orschiro@gmail.com>
+
+_pkgbasename=libfaketime
+pkgname=lib32-$_pkgbasename
+pkgver=0.9.5
+pkgrel=1
+pkgdesc='Report fake dates and times to programs without having to change the system-wide time.'
+arch=('x86_64')
+url='http://www.code-wizards.com/projects/libfaketime/'
+license=('GPL2')
+source=("http://www.code-wizards.com/projects/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.gz"
+ 'lib32.patch')
+md5sums=('89b5c71e6c6a93b1c6feba374ac37719'
+ '0a01f842df4c8acbd2b081be046e8d67')
+
+build() {
+ cd "${_pkgbasename}-${pkgver}"
+ patch -p1 -i ../lib32.patch
+ make
+}
+
+package() {
+ cd "${_pkgbasename}-${pkgver}"
+ make PREFIX=/usr DESTDIR="${pkgdir}" install
+} \ No newline at end of file
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/avoid-spurious-lrt.patch b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/avoid-spurious-lrt.patch
new file mode 100644
index 0000000..c2f3f3f
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/avoid-spurious-lrt.patch
@@ -0,0 +1,30 @@
+Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+
+On i386 systems, for some reason if i do not clean up this extra -lrt, i get the following error:
+
+ [...]
+make[1]: Entering directory `/home/dkg/src/faketime/faketime/src'
+cc -o libfaketime.o -c -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -std=gnu99 -Wall -Wextra -Werror -DFAKE_STAT -DFAKE_SLEEP -DFAKE_TIMERS -DFAKE_INTERNAL_CALLS -fPIC -DPREFIX='"'/usr/local'"' -DLIBDIRNAME='"'/lib/faketime'"' -DMULTI_ARCH libfaketime.c
+cc -o libfaketime.so.1 -Wl,-soname,libfaketime.so.1 -Wl,-z,relro -Wl,--version-script=libfaketime.map -lrt -shared libfaketime.o -ldl -lm -lpthread -lrt
+libfaketime.o: In function `ft_cleanup':
+/home/dkg/src/faketime/faketime/src/libfaketime.c:1277: multiple definition of `timer_gettime'
+/home/dkg/src/faketime/faketime/src/libfaketime.c:1277: multiple definition of `timer_settime'
+collect2: error: ld returned 1 exit status
+make[1]: *** [libfaketime.so.1] Error 1
+ [...]
+
+I confess i don't really understand why removing this would fix
+things, but i also don't see the need to have multiple attempts to
+link to librt.
+
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -69,7 +69,7 @@
+
+ CFLAGS += -std=gnu99 -Wall -Wextra -Werror -DFAKE_STAT -DFAKE_SLEEP -DFAKE_TIMERS -DFAKE_INTERNAL_CALLS -fPIC -DPREFIX='"'$(PREFIX)'"' -DLIBDIRNAME='"'$(LIBDIRNAME)'"'
+ LIB_LDFLAGS += -shared
+-LDFLAGS += -Wl,--version-script=libfaketime.map -lrt
++LDFLAGS += -Wl,--version-script=libfaketime.map
+ LDADD += -ldl -lm -lpthread -lrt
+
+ SRC = libfaketime.c
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/control b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/control
new file mode 100644
index 0000000..e8291a8
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/control
@@ -0,0 +1,40 @@
+Source: faketime
+Section: utils
+Priority: extra
+Maintainer: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Build-Depends:
+ debhelper (>= 9),
+ dh-exec (>= 0.3)
+Standards-Version: 3.9.4
+Homepage: http://www.code-wizards.com/projects/libfaketime/
+Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/faketime.git
+Vcs-Git: git://anonscm.debian.org/collab-maint/faketime.git
+
+Package: faketime
+Architecture: any
+Pre-Depends: multiarch-support
+Depends: ${shlibs:Depends}, ${misc:Depends}, libfaketime (= ${binary:Version})
+Multi-Arch: foreign
+Description: report faked system time to programs
+ The Fake Time Preload Library (FTPL, a.k.a. libfaketime) intercepts
+ various system calls which programs use to retrieve the current date
+ and time. It can then report faked dates and times (as specified by
+ you, the user) to these programs. This means you can modify the
+ system time a program sees without having to change the time
+ system-wide. FTPL allows you to specify both absolute dates (e.g.,
+ 2004-01-01) and relative dates (e.g., 10 days ago).
+
+Package: libfaketime
+Architecture: any
+Pre-Depends: multiarch-support
+Multi-Arch: same
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: report faked system time to programs
+ The Fake Time Preload Library (FTPL, a.k.a. libfaketime) intercepts
+ various system calls which programs use to retrieve the current date
+ and time. It can then report faked dates and times (as specified by
+ you, the user) to these programs. This means you can modify the
+ system time a program sees without having to change the time
+ system-wide. FTPL allows you to specify both absolute dates (e.g.,
+ 2004-01-01) and relative dates (e.g., 10 days ago).
+
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/fix-infinite-recursion-on-real_clock_gettime.patch b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/fix-infinite-recursion-on-real_clock_gettime.patch
new file mode 100644
index 0000000..2fd64f5
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/fix-infinite-recursion-on-real_clock_gettime.patch
@@ -0,0 +1,29 @@
+From: Gerardo Malazdrewicz <gerardo@malazdrewicz.com.ar>
+To: 699559@bugs.debian.org
+Subject: Avoiding loop (very dirty patch)
+Date: Tue, 26 Mar 2013 01:18:05 +0100
+
+[Message part 1 (text/plain, inline)]
+
+Attached patch works for me, but it is very very dirty.
+
+Possibly side effects.
+
+Alternative seems to be to protect the call to real_clock_gettime so it is
+executed just once (to validate the parameters). Subsequent calls are not
+needed (parameters have been validated).
+
+Thanks,
+ Gerardo
+
+--- a/src/libfaketime.c
++++ b/src/libfaketime.c
+@@ -1380,7 +1380,7 @@ void __attribute__ ((constructor)) ftpl_init(void)
+ real_clock_get_time = dlsym(RTLD_NEXT, "clock_get_time");
+ real_clock_gettime = apple_clock_gettime;
+ #else
+- real_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime");
++ real_clock_gettime = dlsym(RTLD_NEXT, "__clock_gettime");
+ #ifdef FAKE_TIMERS
+ real_timer_settime_22 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.2");
+ real_timer_settime_233 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.3.3");
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/libfaketime.install b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/libfaketime.install
new file mode 100755
index 0000000..0c2fb6b
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/libfaketime.install
@@ -0,0 +1,3 @@
+#!/usr/bin/dh-exec
+src/libfaketime.so.1 usr/lib/${DEB_HOST_MULTIARCH}/faketime/
+src/libfaketimeMT.so.1 usr/lib/${DEB_HOST_MULTIARCH}/faketime/
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/rules b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/rules
new file mode 100755
index 0000000..cf3813a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Debian/rules
@@ -0,0 +1,17 @@
+#!/usr/bin/make -f
+
+# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+# Date: Tue, 26 Aug 2008 14:24:50 -0400
+
+export DEB_CFLAGS_MAINT_APPEND=-DMULTI_ARCH
+
+# make sure dh_makeshlibs does not modify post{inst,rm} scripts:
+# (avoids lintian's postinst-has-useless-call-to-ldconfig)
+override_dh_makeshlibs:
+ dh_makeshlibs --noscripts
+
+override_dh_installchangelogs:
+ dh_installchangelogs NEWS
+
+%:
+ PREFIX=/usr dh $@
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime-fix-infinite-recursion-on-real_clock_gettime.patch b/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime-fix-infinite-recursion-on-real_clock_gettime.patch
new file mode 100644
index 0000000..9d81e5e
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime-fix-infinite-recursion-on-real_clock_gettime.patch
@@ -0,0 +1,13 @@
+diff --git a/src/libfaketime.c b/src/libfaketime.c
+index 3ec372b..f70283b 100644
+--- a/src/libfaketime.c
++++ b/src/libfaketime.c
+@@ -1380,7 +1380,7 @@ void __attribute__ ((constructor)) ftpl_init(void)
+ real_clock_get_time = dlsym(RTLD_NEXT, "clock_get_time");
+ real_clock_gettime = apple_clock_gettime;
+ #else
+- real_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime");
++ real_clock_gettime = dlsym(RTLD_NEXT, "__clock_gettime");
+ #ifdef FAKE_TIMERS
+ real_timer_settime_22 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.2");
+ real_timer_settime_233 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.3.3");
diff --git a/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime.spec.txt b/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime.spec.txt
new file mode 100644
index 0000000..48f3305
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/Linux/Redhat/libfaketime.spec.txt
@@ -0,0 +1,55 @@
+Summary: Manipulate system time per process for testing purposes
+Name: libfaketime
+Version: 0.9.5
+Release: 4%{?dist}
+License: GPLv2+
+Url: http://www.code-wizards.com/projects/%{name}/
+Source: http://www.code-wizards.com/projects/%{name}/%{name}-%{version}.tar.gz
+Group: System Environment/Libraries
+Patch1: libfaketime-0.9.5-fix-infinite-recursion-on-real_clock_gettime.patch
+
+%description
+libfaketime intercepts various system calls which programs use to
+retrieve the current date and time. It can then report faked dates and
+times (as specified by you, the user) to these programs. This means you
+can modify the system time a program sees without having to change the
+time system- wide.
+
+%prep
+%setup -q
+%patch1 -p1
+# work around from upstream for autodetecting glibc version bug on i686
+sed -i -e 's/__asm__(".symver timer_gettime_22/\/\/__asm__(".symver timer_gettime_22/' src/libfaketime.c
+sed -i -e 's/__asm__(".symver timer_settime_22/\/\/__asm__(".symver timer_settime_22/' src/libfaketime.c
+
+
+%build
+cd src ; CFLAGS="$RPM_OPT_FLAGS -Wno-strict-aliasing" make %{?_smp_mflags} \
+ PREFIX="%{_prefix}" LIBDIRNAME="/%{_lib}/faketime" all
+
+%check
+make %{?_smp_mflags} -C test all
+
+%install
+make PREFIX="%{_prefix}" DESTDIR=%{buildroot} LIBDIRNAME="/%{_lib}/faketime" install
+rm -r %{buildroot}/%{_docdir}/faketime
+
+%files
+%{_bindir}/faketime
+%{_libdir}/faketime/libfaketime*so.*
+%doc README COPYING NEWS README README.developers
+%{_mandir}/man1/*
+
+%changelog
+* Tue Oct 15 2013 Paul Wouters <pwouters@redhat.com> - 0.9.5-4
+- Infinite recursion patch is still needed, make test causes
+ segfaults otherwise.
+
+* Mon Oct 14 2013 Paul Wouters <pwouters@redhat.com> - 0.9.5-3
+- Work around from upstream for autodetecting glibc version bug on i686
+
+* Mon Oct 14 2013 Paul Wouters <pwouters@redhat.com> - 0.9.5-2
+- Remove use of ifarch for _lib macro for multilib
+
+* Sun Oct 13 2013 Paul Wouters <pwouters@redhat.com> - 0.9.5-1
+- Initial package
diff --git a/tests/deckard/contrib/libfaketime/packaging/OSX/Fink/libfaketime.info b/tests/deckard/contrib/libfaketime/packaging/OSX/Fink/libfaketime.info
new file mode 100644
index 0000000..9f1b3ba
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/OSX/Fink/libfaketime.info
@@ -0,0 +1,53 @@
+Package: libfaketime
+Version: 0.9.7
+Revision: 1
+
+Source: http://www.code-wizards.com/projects/%n/%n-%v.tar.gz
+Source-MD5: 8617e2c6caf0977b3ce9a271f867302c
+
+Maintainer: Wolfgang Hommel <wolf@fink.code-wizards.com>
+HomePage: https://github.com/wolfcw/libfaketime
+License: GPL
+
+Description: Modify system time for single applications
+
+DescDetail: <<
+libfaketime is a library that is dynamically linked to applications
+or system commands at run-time by using the DYLD_INSERT_LIBRARIES
+mechanism. It then intercepts various system calls, which programs
+use to retrieve the current date and time. libfaketime can then
+report faked dates and times to these programs. This means you can
+modify the system time a program uses without having to change the
+date and time system-wide.
+<<
+
+DescUsage: <<
+libfaketime includes a simple wrapper called faketime. Run the
+command faketime without any parameters for usage information.
+For information on how to use libfaketime without the wrapper
+and access its full raw functionality, please see
+%p/share/doc/libfaketime/README*
+<<
+
+BuildDepends: fink (>= 0.28)
+Distribution: 10.7, 10.8, 10.9, 10.10, 10.11, 10.12
+
+CompileScript: <<
+#! /bin/sh -ev
+make -f Makefile.OSX -C src PREFIX=%{p}
+<<
+
+InfoTest: <<
+ TestScript: make -f Makefile.OSX test || exit 2
+<<
+
+InstallScript: <<
+#! /bin/sh -ev
+make -f Makefile.OSX -C src install PREFIX=%{i}
+<<
+
+DocFiles: COPYING README README.OSX
+
+Shlibs: <<
+ !%p/lib/faketime/%N.1.dylib
+<<
diff --git a/tests/deckard/contrib/libfaketime/packaging/OSX/Homebrew/libfaketime.rb b/tests/deckard/contrib/libfaketime/packaging/OSX/Homebrew/libfaketime.rb
new file mode 100644
index 0000000..8d92b76
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/OSX/Homebrew/libfaketime.rb
@@ -0,0 +1,21 @@
+require 'formula'
+
+class Libfaketime < Formula
+ homepage 'https://github.com/wolfcw/libfaketime'
+ url 'https://github.com/wolfcw/libfaketime/archive/v0.9.7.tar.gz'
+ sha1 'eb1cbacf548aefa36214bea1345f35b8763027a1'
+
+ depends_on :macos => :sierra
+
+ fails_with :llvm do
+ build 2336
+ cause 'No thread local storage support'
+ end
+
+ def install
+ system "make", "-C", "src", "-f", "Makefile.OSX", "PREFIX=#{prefix}"
+ bin.install 'src/faketime'
+ (lib/'faketime').install 'src/libfaketime.1.dylib'
+ man1.install 'man/faketime.1'
+ end
+end
diff --git a/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/Portfile b/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/Portfile
new file mode 100644
index 0000000..d4104ad
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/Portfile
@@ -0,0 +1,45 @@
+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
+# $Id: Portfile 112093 2013-10-11 19:57:13Z ryandesign@macports.org $
+
+PortSystem 1.0
+PortGroup github 1.0
+
+github.setup wolfcw libfaketime 0.9.7 v
+
+checksums rmd160 8874d43bb212976d929c3007db0cf978311b3596 \
+ sha256 4d65f368b2d53ee2f93a25d5e9541ce27357f2b95e5e5afff210e0805042811e
+
+categories sysutils
+platforms darwin
+maintainers code-wizards.com:wolf openmaintainer
+license GPL-2
+
+description libfaketime modifies the system time for a single application
+
+long_description libfaketime intercepts various system calls that applications use to \
+ retrieve the current date and time. It can then report user-specified \
+ faked dates and times to these applications. This allows us to modify \
+ the system time an application sees without having to change the time \
+ system-wide. The faketime wrapper can be used from command line. \
+ Check the documentation on how to integrate into installed applications.
+
+patchfiles patch-test-Makefile.OSX.diff
+
+use_configure no
+
+variant universal {}
+
+compiler.blacklist *cc* *dragonegg*
+
+build.args -f Makefile.OSX
+build.env CC="${configure.cc}" \
+ CFLAGS="[get_canonical_archflags cc]" \
+ LDFLAGS="[get_canonical_archflags ld]" \
+ PREFIX=${prefix}
+
+test.run yes
+test.args ${build.args}
+eval test.env ${build.env}
+
+destroot.args ${build.args}
+eval destroot.env ${build.env}
diff --git a/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/patch-test-Makefile.OSX.diff b/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/patch-test-Makefile.OSX.diff
new file mode 100644
index 0000000..f60968a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/OSX/MacPorts/patch-test-Makefile.OSX.diff
@@ -0,0 +1,12 @@
+--- test/Makefile.OSX.orig 2013-10-11 09:42:38.000000000 -0500
++++ test/Makefile.OSX 2013-10-11 14:46:11.000000000 -0500
+@@ -1,7 +1,6 @@
+-CC = gcc
++CC ?= clang
+
+-CFLAGS = -std=gnu99 -Wall -DFAKE_STAT
+-LDFLAGS =
++CFLAGS += -std=gnu99 -Wall -DFAKE_STAT
+
+ SRC = timetest.c
+ OBJ = ${SRC:.c=.o}
diff --git a/tests/deckard/contrib/libfaketime/packaging/OSX/README b/tests/deckard/contrib/libfaketime/packaging/OSX/README
new file mode 100644
index 0000000..03b43fa
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/OSX/README
@@ -0,0 +1,65 @@
+# Packaging for OS X
+
+Several software tools assist with the installation of open source software
+on OS X. The authors of libfaketime maintain the libfaketime build spec files
+for MacPorts, Homebrew, and Fink.
+
+
+## MacPorts
+
+Installing libfaketime via MacPorts is based on the provided Portfile, which
+has been included in the official MacPorts distribution since October, 2013.
+Users therefore can use "sudo port install libfaketime" as installation
+command.
+
+Some libfaketime Portfile caveats:
+
+- Github-based source file distribution
+- Non-clang-compilers need to be blacklisted
+- MacPorts folks have requested to avoid a platform-specific Makefile.OSX in
+ the future
+
+Portfile submission is documented in https://www.macports.org/guide/#project.contributing
+and handled via a ticketing system:
+
+- https://trac.macports.org/ticket/40662
+- https://trac.macports.org/ticket/40748
+
+
+## Homebrew
+
+The libfaketime 'formula' for Homebrew is available since November, 2013.
+Homebrew users can use 'brew install libfaketime' as installation command.
+
+Some libfaketime formula caveats:
+
+- "depends_on :macos => :lion" must be set for libfaketime >=0.9.5
+- :llvm builds <= 2336 must be blacklisted because libfaketime =0.9.5
+ requires a compiler with thread local storage support.
+
+Formula submission is handled via pull request on Github following the
+"one formula per commit, one commit per formula" rule, which necessitates
+squashing commits and forced pushes when applying fixes. Style issues
+complementary to the documentation have been discussed in
+
+ https://github.com/mxcl/homebrew/pull/23245
+
+
+## Fink
+
+A libfaketime.info file is included in the Fink 10.7 tree since October,
+2013, and installed using
+
+ fink install libfaketime
+
+Some libfaketime fink info file caveats:
+
+- The dynamic library must be declared as private Shlib; this also necessitates
+ BuildDepends: fink (>= 0.28)
+- "Distribution: 10.7, 10.8, 10.9" is required because libfaketime >=0.9.5 does
+ not work on OS X 10.6 or before anymore.
+- When compiling, PREFIX=%{p} needs to be used because this path is hardcoded
+ into the wrapper. However, "make install" needs to deploy into PREFIX=%{i} to
+ make packaging work.
+
+Submission is via https://sourceforge.net/p/fink/package-submissions/
diff --git a/tests/deckard/contrib/libfaketime/packaging/README b/tests/deckard/contrib/libfaketime/packaging/README
new file mode 100644
index 0000000..7dc6152
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/packaging/README
@@ -0,0 +1,14 @@
+# libfaketime packaging
+
+Not everyone feels comfortable with installing tools and libraries manually
+by downloading and building them from source. Luckily enough, voluntary
+maintainers prepare new libfaketime releases for various platforms and make
+them available as binary packages or otherwise automatically installable
+software.
+
+In this directory, we collect build specification files for the platforms
+that we are aware of being actively supported. They help us to analyze
+build issues, create awareness for platform-specific patches that had to
+be applied and might be merged with our code, and provide the contact
+information for future "early release warnings".
+
diff --git a/tests/deckard/contrib/libfaketime/src/Makefile b/tests/deckard/contrib/libfaketime/src/Makefile
new file mode 100644
index 0000000..e2f047a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/Makefile
@@ -0,0 +1,118 @@
+#
+# Notes:
+#
+# * Compilation Defines:
+#
+# FAKE_STAT
+# - Enables time faking also for files' timestamps.
+#
+# NO_ATFILE
+# - Disables support for the fstatat() group of functions
+#
+# PTHREAD_SINGLETHREADED_TIME
+# - Define this if you want to single-thread time() ... there ARE
+# possible caching side-effects in a multithreaded environment
+# without this, but the performance impact may require you to
+# try it unsynchronized.
+#
+# FAKE_INTERNAL_CALLS
+# - Also intercept libc internal __functions, e.g. not just time(),
+# but also __time(). Enhances compatibility with applications
+# that make use of low-level system calls, such as Java Virtual
+# Machines.
+#
+# FAKE_SLEEP
+# - Also intercept sleep(), nanosleep(), usleep(), alarm(), [p]poll()
+#
+# FAKE_TIMERS
+# - Also intercept timer_settime() and timer_gettime()
+#
+# FAKE_PTHREAD
+# - Intercept pthread_cond_timedwait
+#
+# MULTI_ARCH
+# - If MULTI_ARCH is set, the faketime wrapper program will put a literal
+# $LIB into the LD_PRELOAD environment variable it creates, which makes
+# ld automatically choose the correct library version to use for the
+# target binary. Use for Linux platforms with Multi-Arch support only!
+#
+# * Compilation addition: second libMT target added for building the pthread-
+# enabled library as a separate library
+#
+# * Compilation switch change: previous versions compiled using '-nostartfiles'
+# This is no longer the case since there is a 'startup' constructor for the library
+# which is used to activate the start-at times when specified. This also initializes
+# the dynamic disabling of the FAKE_STAT calls.
+#
+# By default, libfaketime will be compiled for your system's default architecture.
+# To build 32-bit libraries and binaries, add -m32 to CFLAGS and LDFLAGS.
+#
+# Change PREFIX to where you want libfaketime (libraries and wrapper binary) installed.
+# LIBDIRNAME is relative to PREFIX. The default is to install into $PREFIX/lib/faketime,
+# but you can set LIBDIRNAME to, e.g., /lib64 if you want to install it elsewhere.
+# LIBDIRNAME has been introduced to support MultiLib systems. Please do not change the
+# default value on MultiArch systems.
+#
+# For testing in the current directory without installation, try make PREFIX= LIBDIRNAME='.'
+
+CC ?= gcc
+INSTALL ?= install
+
+PREFIX ?= /usr/local
+LIBDIRNAME ?= /lib/faketime
+PLATFORM ?=$(shell uname)
+
+CFLAGS += -std=gnu99 -Wall -Wextra -Werror -Wno-nonnull-compare -DFAKE_PTHREAD -DFAKE_STAT -DFAKE_SLEEP -DFAKE_TIMERS -DFAKE_INTERNAL_CALLS -fPIC -DPREFIX='"'$(PREFIX)'"' -DLIBDIRNAME='"'$(LIBDIRNAME)'"'
+ifeq ($(PLATFORM),SunOS)
+CFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
+endif
+
+LIB_LDFLAGS += -shared
+
+LDFLAGS += -lpthread
+ifneq ($(PLATFORM),SunOS)
+LDFLAGS += -Wl,--version-script=libfaketime.map
+endif
+
+LDADD += -ldl -lm -lrt
+BIN_LDFLAGS += -lrt
+
+SRC = libfaketime.c
+LIBS_OBJ = libfaketime.o libfaketimeMT.o
+BINS = faketime
+
+SONAME = 1
+LIBS = libfaketime.so.${SONAME} libfaketimeMT.so.${SONAME}
+
+all: ${LIBS} ${BINS}
+
+libfaketimeMT.o: EXTRA_FLAGS := -DPTHREAD_SINGLETHREADED_TIME
+
+${LIBS_OBJ}: libfaketime.c
+ ${CC} -o $@ -c ${CFLAGS} ${CPPFLAGS} ${EXTRA_FLAGS} $<
+
+%.so.${SONAME}: %.o libfaketime.map
+ ${CC} -o $@ -Wl,-soname,$@ ${LDFLAGS} ${LIB_LDFLAGS} $< ${LDADD}
+
+${BINS}: faketime.c
+ ${CC} -o $@ ${CFLAGS} ${CPPFLAGS} ${EXTRA_FLAGS} $< ${LDFLAGS} ${BIN_LDFLAGS}
+
+clean:
+ @rm -f ${LIBS_OBJ} ${LIBS} ${BINS}
+
+distclean: clean
+ @echo
+
+install: ${LIBS} ${BINS}
+ @echo
+ @echo "Copying the faketime libraries to ${DESTDIR}${PREFIX}${LIBDIRNAME} and the faketime wrapper script to ${DESTDIR}${PREFIX}/bin ..."
+ $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}${LIBDIRNAME}/"
+ $(INSTALL) -m0644 ${LIBS} "${DESTDIR}${PREFIX}${LIBDIRNAME}/"
+ $(INSTALL) -Dm0755 faketime "${DESTDIR}${PREFIX}/bin/faketime"
+
+uninstall:
+ for f in ${LIBS}; do rm -f "${DESTDIR}${PREFIX}${LIBDIRNAME}/$$f"; done
+ rmdir "${DESTDIR}${PREFIX}${LIBDIRNAME}"
+ rm -f "${DESTDIR}${PREFIX}/bin/faketime"
+
+.PHONY: all clean distclean install uninstall
diff --git a/tests/deckard/contrib/libfaketime/src/Makefile.OSX b/tests/deckard/contrib/libfaketime/src/Makefile.OSX
new file mode 100644
index 0000000..683ad04
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/Makefile.OSX
@@ -0,0 +1,75 @@
+#
+# Notes:
+#
+# * Compilation Defines:
+#
+# FAKE_STAT
+# - Enables time faking also for files' timestamps.
+#
+# NO_ATFILE
+# - Disables support for the fstatat() group of functions
+#
+# PTHREAD
+# - Define this to enable multithreading support.
+#
+# PTHREAD_SINGLETHREADED_TIME
+# - Define this if you want to single-thread time() ... there ARE
+# possible caching side-effects in a multithreaded environment
+# without this, but the performance impact may require you to
+# try it unsynchronized.
+#
+# FAKE_SLEEP
+# - Also intercept sleep(), nanosleep(), usleep(), alarm(), [p]poll()
+#
+# * Compilation addition: second libMT target added for building the pthread-
+# enabled library as a separate library
+#
+# * Compilation switch change: previous versions compiled using '-nostartfiles'
+# This is no longer the case since there is a 'startup' constructor for the library
+# which is used to activate the start-at times when specified. This also initializes
+# the dynamic disabling of the FAKE_STAT calls.
+#
+# By default, libfaketime will be compiled for your system's default architecture.
+# To build for a different architecture, add -arch flags to CFLAGS and LDFLAGS.
+#
+# default to clang to support thread local variables
+CC ?= clang
+INSTALL ?= install
+
+PREFIX ?= /usr/local
+
+CFLAGS += -DFAKE_SLEEP -DFAKE_INTERNAL_CALLS -DPREFIX='"'${PREFIX}'"'
+LIB_LDFLAGS += -dynamiclib -current_version 0.9.7 -compatibility_version 0.7
+
+SONAME = 1
+LIBS = libfaketime.${SONAME}.dylib
+BINS = faketime
+
+all: ${LIBS} ${BINS}
+
+libfaketime.${SONAME}.dylib: libfaketime.c
+ ${CC} -o $@ ${CFLAGS} ${LDFLAGS} ${LIB_LDFLAGS} -install_name ${PREFIX}/lib/faketime/$@ $<
+
+faketime: faketime.c
+ ${CC} -o $@ ${CFLAGS} ${LDFLAGS} $<
+
+clean:
+ @rm -f ${OBJ} ${LIBS} ${BINS}
+
+distclean: clean
+ @echo
+
+install: ${LIBS} ${BINS}
+ @echo
+ @echo "Copying the faketime libraries to ${DESTDIR}${PREFIX}/lib/faketime and the faketime wrapper script to ${DESTDIR}${PREFIX}/bin ..."
+ $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/lib/faketime/"
+ $(INSTALL) -m0644 ${LIBS} "${DESTDIR}${PREFIX}/lib/faketime/"
+ $(INSTALL) -dm0755 "${DESTDIR}${PREFIX}/bin"
+ $(INSTALL) -m0755 faketime "${DESTDIR}${PREFIX}/bin/faketime"
+
+uninstall:
+ for f in ${LIBS}; do rm -f "${DESTDIR}${PREFIX}/lib/faketime/$$f"; done
+ rmdir "${DESTDIR}${PREFIX}/lib/faketime"
+ rm -f "${DESTDIR}${PREFIX}/bin/faketime"
+
+.PHONY: all clean distclean install uninstall
diff --git a/tests/deckard/contrib/libfaketime/src/faketime.c b/tests/deckard/contrib/libfaketime/src/faketime.c
new file mode 100644
index 0000000..037d749
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/faketime.c
@@ -0,0 +1,385 @@
+/*
+ * libfaketime wrapper command
+ *
+ * This file is part of libfaketime, version 0.9.7
+ *
+ * libfaketime is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License v2 as published by the
+ * Free Software Foundation.
+ *
+ * libfaketime is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License v2 along
+ * with the libfaketime; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Converted from shell script by Balint Reczey with the following credits
+ * and comments:
+ *
+ * Thanks to Daniel Kahn Gillmor for improvement suggestions.
+
+ * This wrapper exposes only a small subset of the libfaketime functionality.
+ * Please see libfaketime's README file and man page for more details.
+
+ * Acknowledgment: Parts of the functionality of this wrapper have been
+ * inspired by Matthias Urlichs' datefudge 1.14.
+
+ * Compile time configuration: Path where the libfaketime libraries can be found
+ * on Linux/UNIX
+ *
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+#include <time.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/mman.h>
+#include <semaphore.h>
+
+#include "faketime_common.h"
+
+const char version[] = "0.9.7";
+
+#ifdef __APPLE__
+static const char *date_cmd = "gdate";
+#else
+static const char *date_cmd = "date";
+#endif
+
+#define PATH_BUFSIZE 4096
+
+/* semaphore and shared memory names */
+char sem_name[PATH_BUFSIZE] = {0}, shm_name[PATH_BUFSIZE] = {0};
+
+void usage(const char *name)
+{
+ printf("\n"
+ "Usage: %s [switches] <timestamp> <program with arguments>\n"
+ "\n"
+ "This will run the specified 'program' with the given 'arguments'.\n"
+ "The program will be tricked into seeing the given 'timestamp' as its starting date and time.\n"
+ "The clock will continue to run from this timestamp. Please see the manpage (man faketime)\n"
+ "for advanced options, such as stopping the wall clock and make it run faster or slower.\n"
+ "\n"
+ "The optional switches are:\n"
+ " -m : Use the multi-threaded version of libfaketime\n"
+ " -f : Use the advanced timestamp specification format (see manpage)\n"
+ " --exclude-monotonic : Prevent monotonic clock from drifting (not the raw monotonic one)\n"
+ "\n"
+ "Examples:\n"
+ "%s 'last friday 5 pm' /bin/date\n"
+ "%s '2008-12-24 08:15:42' /bin/date\n"
+ "%s -f '+2,5y x10,0' /bin/bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'\n"
+ "%s -f '+2,5y x0,50' /bin/bash -c 'date; while true; do echo $SECONDS ; sleep 1 ; done'\n"
+ "%s -f '+2,5y i2,0' /bin/bash -c 'date; while true; do date; sleep 1 ; done'\n"
+ "In this single case all spawned processes will use the same global clock\n"
+ "without restarting it at the start of each process.\n\n"
+ "(Please note that it depends on your locale settings whether . or , has to be used for fractions)\n"
+ "\n", name, name, name, name, name, name);
+}
+
+/** Clean up shared objects */
+static void cleanup_shobjs()
+{
+ if (-1 == sem_unlink(sem_name))
+ {
+ perror("sem_unlink");
+ }
+ if (-1 == shm_unlink(shm_name))
+ {
+ perror("shm_unlink");
+ }
+}
+
+int main (int argc, char **argv)
+{
+ pid_t child_pid;
+ int curr_opt = 1;
+ bool use_mt = false, use_direct = false;
+ long offset;
+
+ while(curr_opt < argc)
+ {
+ if (0 == strcmp(argv[curr_opt], "-m"))
+ {
+ use_mt = true;
+ curr_opt++;
+ continue;
+ }
+ else if (0 == strcmp(argv[curr_opt], "-f"))
+ {
+ use_direct = true;
+ curr_opt++;
+ continue;
+ }
+ else if (0 == strcmp(argv[curr_opt], "--exclude-monotonic"))
+ {
+ setenv("DONT_FAKE_MONOTONIC", "1", true);
+ curr_opt++;
+ continue;
+ }
+ else if ((0 == strcmp(argv[curr_opt], "-v")) ||
+ (0 == strcmp(argv[curr_opt], "--version")))
+ {
+ printf("\n%s: Version %s\n"
+ "For usage information please use '%s --help'.\n",
+ argv[0], version, argv[0]);
+ exit(EXIT_SUCCESS);
+ }
+ else if ((0 == strcmp(argv[curr_opt], "-h")) ||
+ (0 == strcmp(argv[curr_opt], "-?")) ||
+ (0 == strcmp(argv[curr_opt], "--help")))
+ {
+ usage(argv[0]);
+ exit(EXIT_SUCCESS);
+ }
+ else
+ {
+ /* we parsed all options */
+ break;
+ }
+ }
+
+ /* we need at least a timestamp string and a command to run */
+ if (argc - curr_opt < 2)
+ {
+ usage(argv[0]);
+ exit(EXIT_FAILURE);
+ }
+
+ if (!use_direct)
+ {
+ // TODO get seconds
+ int pfds[2];
+ (void) (pipe(pfds) + 1);
+ int ret = EXIT_SUCCESS;
+
+ if (0 == (child_pid = fork()))
+ {
+ close(1); /* close normal stdout */
+ (void) (dup(pfds[1]) + 1); /* make stdout same as pfds[1] */
+ close(pfds[0]); /* we don't need this */
+ if (EXIT_SUCCESS != execlp(date_cmd, date_cmd, "-d", argv[curr_opt], "+%s",(char *) NULL))
+ {
+ perror("Running (g)date failed");
+ exit(EXIT_FAILURE);
+ }
+ }
+ else
+ {
+ char buf[256] = {0}; /* e will have way less than 256 digits */
+ close(pfds[1]); /* we won't write to this */
+ (void) (read(pfds[0], buf, 256) + 1);
+ waitpid(child_pid, &ret, 0);
+ if (ret != EXIT_SUCCESS)
+ {
+ printf("Error: Timestamp to fake not recognized, please re-try with a "
+ "different timestamp.\n");
+ exit(EXIT_FAILURE);
+ }
+ offset = atol(buf) - time(NULL);
+ ret = snprintf(buf, sizeof(buf), "%s%ld", (offset >= 0)?"+":"", offset);
+ setenv("FAKETIME", buf, true);
+ close(pfds[0]); /* finished reading */
+ }
+ }
+ else
+ {
+ /* simply pass format string along */
+ setenv("FAKETIME", argv[curr_opt], true);
+ }
+ int keepalive_fds[2];
+ (void) (pipe(keepalive_fds) + 1);
+
+ /* we just consumed the timestamp option */
+ curr_opt++;
+
+ {
+ /* create semaphores and shared memory */
+ int shm_fd;
+ sem_t *sem;
+ struct ft_shared_s *ft_shared;
+ char shared_objs[PATH_BUFSIZE * 2 + 1];
+
+ /*
+ * Casting of getpid() return value to long needed to make GCC on SmartOS
+ * happy, since getpid's return value's type on SmartOS is long. Since
+ * getpid's return value's type is int on most other systems, and that
+ * sizeof(long) always >= sizeof(int), this works on all platforms without
+ * the need for crazy #ifdefs.
+ */
+ snprintf(sem_name, PATH_BUFSIZE -1 ,"/faketime_sem_%ld", (long)getpid());
+ snprintf(shm_name, PATH_BUFSIZE -1 ,"/faketime_shm_%ld", (long)getpid());
+
+ if (SEM_FAILED == (sem = sem_open(sem_name, O_CREAT|O_EXCL, S_IWUSR|S_IRUSR, 1)))
+ {
+ perror("sem_open");
+ exit(EXIT_FAILURE);
+ }
+
+ /* create shm */
+ if (-1 == (shm_fd = shm_open(shm_name, O_CREAT|O_EXCL|O_RDWR, S_IWUSR|S_IRUSR)))
+ {
+ perror("shm_open");
+ if (-1 == sem_unlink(argv[2]))
+ {
+ perror("sem_unlink");
+ }
+ exit(EXIT_FAILURE);
+ }
+
+ /* set shm size */
+ if (-1 == ftruncate(shm_fd, sizeof(uint64_t)))
+ {
+ perror("ftruncate");
+ cleanup_shobjs();
+ exit(EXIT_FAILURE);
+ }
+
+ /* map shm */
+ if (MAP_FAILED == (ft_shared = mmap(NULL, sizeof(struct ft_shared_s), PROT_READ|PROT_WRITE,
+ MAP_SHARED, shm_fd, 0)))
+ {
+ perror("mmap");
+ cleanup_shobjs();
+ exit(EXIT_FAILURE);
+ }
+
+ if (sem_wait(sem) == -1)
+ {
+ perror("sem_wait");
+ cleanup_shobjs();
+ exit(EXIT_FAILURE);
+ }
+
+ /* init elapsed time ticks to zero */
+ ft_shared->ticks = 0;
+ ft_shared->file_idx = 0;
+ ft_shared->start_time.real.tv_sec = 0;
+ ft_shared->start_time.real.tv_nsec = -1;
+ ft_shared->start_time.mon.tv_sec = 0;
+ ft_shared->start_time.mon.tv_nsec = -1;
+ ft_shared->start_time.mon_raw.tv_sec = 0;
+ ft_shared->start_time.mon_raw.tv_nsec = -1;
+
+ if (-1 == munmap(ft_shared, (sizeof(struct ft_shared_s))))
+ {
+ perror("munmap");
+ cleanup_shobjs();
+ exit(EXIT_FAILURE);
+ }
+
+ if (sem_post(sem) == -1)
+ {
+ perror("semop");
+ cleanup_shobjs();
+ exit(EXIT_FAILURE);
+ }
+
+ snprintf(shared_objs, sizeof(shared_objs), "%s %s", sem_name, shm_name);
+ setenv("FAKETIME_SHARED", shared_objs, true);
+ sem_close(sem);
+ }
+
+ {
+ char *ftpl_path;
+#ifdef __APPLE__
+ ftpl_path = PREFIX "/libfaketime.1.dylib";
+ FILE *check;
+ check = fopen(ftpl_path, "ro");
+ if (check == NULL)
+ {
+ ftpl_path = PREFIX "/lib/faketime/libfaketime.1.dylib";
+ }
+ else
+ {
+ fclose(check);
+ }
+ setenv("DYLD_INSERT_LIBRARIES", ftpl_path, true);
+ setenv("DYLD_FORCE_FLAT_NAMESPACE", "1", true);
+#else
+ {
+ char *ld_preload_new, *ld_preload = getenv("LD_PRELOAD");
+ size_t len;
+ if (use_mt)
+ {
+ /*
+ * on MultiArch platforms, such as Debian, we put a literal $LIB into LD_PRELOAD.
+ */
+#ifndef MULTI_ARCH
+ ftpl_path = PREFIX LIBDIRNAME "/libfaketimeMT.so.1";
+#else
+ ftpl_path = PREFIX "/$LIB/faketime/libfaketimeMT.so.1";
+#endif
+ }
+ else
+ {
+#ifndef MULTI_ARCH
+ ftpl_path = PREFIX LIBDIRNAME "/libfaketime.so.1";
+#else
+ ftpl_path = PREFIX "/$LIB/faketime/libfaketime.so.1";
+#endif
+ }
+ len = ((ld_preload)?strlen(ld_preload) + 1: 0) + 1 + strlen(ftpl_path);
+ ld_preload_new = malloc(len);
+ snprintf(ld_preload_new, len ,"%s%s%s", (ld_preload)?ld_preload:"",
+ (ld_preload)?":":"", ftpl_path);
+ setenv("LD_PRELOAD", ld_preload_new, true);
+ free(ld_preload_new);
+ }
+#endif
+ }
+
+ /* run command and clean up shared objects */
+ if (0 == (child_pid = fork()))
+ {
+ close(keepalive_fds[0]); /* only parent needs to read this */
+ if (EXIT_SUCCESS != execvp(argv[curr_opt], &argv[curr_opt]))
+ {
+ perror("Running specified command failed");
+ exit(EXIT_FAILURE);
+ }
+ }
+ else
+ {
+ int ret;
+ char buf;
+ close(keepalive_fds[1]); /* only children need keep this open */
+ waitpid(child_pid, &ret, 0);
+ (void) (read(keepalive_fds[0], &buf, 1) + 1); /* reads 0B when all children exit */
+ cleanup_shobjs();
+ if (WIFSIGNALED(ret))
+ {
+ fprintf(stderr, "Caught %s\n", strsignal(WTERMSIG(ret)));
+ exit(EXIT_FAILURE);
+ }
+ exit(WEXITSTATUS(ret));
+ }
+
+ return EXIT_SUCCESS;
+}
+
+/*
+ * Editor modelines
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
+
+/* eof */
diff --git a/tests/deckard/contrib/libfaketime/src/faketime_common.h b/tests/deckard/contrib/libfaketime/src/faketime_common.h
new file mode 100644
index 0000000..9fda6a7
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/faketime_common.h
@@ -0,0 +1,61 @@
+/*
+ * Faketime's common definitions
+ *
+ * Copyright 2013 Balint Reczey <balint@balintreczey.hu>
+ *
+ * This file is part of the libfaketime.
+ *
+ * libfaketime is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License v2 as published by the Free
+ * Software Foundation.
+ *
+ * libfaketime is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License v2 along
+ * with libfaketime; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef FAKETIME_COMMON_H
+#define FAKETIME_COMMON_H
+
+#include <stdint.h>
+
+struct system_time_s
+{
+ /* System time according to CLOCK_REALTIME */
+ struct timespec real;
+ /* System time according to CLOCK_MONOTONIC */
+ struct timespec mon;
+ /* System time according to CLOCK_MONOTONIC_RAW */
+ struct timespec mon_raw;
+#ifdef CLOCK_BOOTTIME
+ /* System time according to CLOCK_BOOTTIME */
+ struct timespec boot;
+#endif
+};
+
+/* Data shared among faketime-spawned processes */
+struct ft_shared_s
+{
+ /*
+ * When advancing time linearly with each time(), etc. call, the calls are
+ * counted here */
+ uint64_t ticks;
+ /* Index of timstamp to be loaded from file */
+ uint64_t file_idx;
+ /* System time Faketime started at */
+ struct system_time_s start_time;
+};
+
+/* These are all needed in order to properly build on OSX */
+#ifdef __APPLE__
+#include <mach/clock.h>
+#include <mach/mach_host.h>
+#include <mach/mach_port.h>
+#endif
+
+#endif
diff --git a/tests/deckard/contrib/libfaketime/src/libfaketime.c b/tests/deckard/contrib/libfaketime/src/libfaketime.c
new file mode 100644
index 0000000..5823701
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/libfaketime.c
@@ -0,0 +1,2646 @@
+/*
+ * This file is part of libfaketime, version 0.9.7
+ *
+ * libfaketime is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License v2 as published by the
+ * Free Software Foundation.
+ *
+ * libfaketime is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License v2 along
+ * with the libfaketime; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*
+ * =======================================================================
+ * Global settings, includes, and macros === HEAD
+ * =======================================================================
+ */
+
+#define _GNU_SOURCE /* required to get RTLD_NEXT defined */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <time.h>
+#include <math.h>
+#include <errno.h>
+#include <string.h>
+#include <semaphore.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <limits.h>
+
+#include "uthash.h"
+
+#include "time_ops.h"
+#include "faketime_common.h"
+
+
+/* pthread-handling contributed by David North, TDI in version 0.7 */
+#if defined PTHREAD_SINGLETHREADED_TIME || defined FAKE_PTHREAD
+#include <pthread.h>
+#endif
+
+#include <sys/timeb.h>
+#include <dlfcn.h>
+
+#define BUFFERLEN 256
+
+#ifndef __APPLE__
+extern char *__progname;
+#ifdef __sun
+#include "sunos_endian.h"
+#else
+#include <endian.h>
+#endif
+#else
+/* endianness related macros */
+#ifndef OSSwapHostToBigInt64
+#define OSSwapHostToBigInt64(x) ((uint64_t)(x))
+#endif
+#define htobe64(x) OSSwapHostToBigInt64(x)
+#ifndef OSSwapHostToLittleInt64
+#define OSSwapHostToLittleInt64(x) OSSwapInt64(x)
+#endif
+#define htole64(x) OSSwapHostToLittleInt64(x)
+#ifndef OSSwapBigToHostInt64
+#define OSSwapBigToHostInt64(x) ((uint64_t)(x))
+#endif
+#define be64toh(x) OSSwapBigToHostInt64(x)
+#ifndef OSSwapLittleToHostInt64
+#define OSSwapLittleToHostInt64(x) OSSwapInt64(x)
+#endif
+#define le64toh(x) OSSwapLittleToHostInt64(x)
+
+/* clock_gettime() and related clock definitions are missing on __APPLE__ */
+#ifndef CLOCK_REALTIME
+/* from GNU C Library time.h */
+/* Identifier for system-wide realtime clock. ( == 1) */
+#define CLOCK_REALTIME CALENDAR_CLOCK
+/* Monotonic system-wide clock. (== 0) */
+#define CLOCK_MONOTONIC SYSTEM_CLOCK
+/* High-resolution timer from the CPU. */
+#define CLOCK_PROCESS_CPUTIME_ID 2
+/* Thread-specific CPU-time clock. */
+#define CLOCK_THREAD_CPUTIME_ID 3
+/* Monotonic system-wide clock, not adjusted for frequency scaling. */
+#define CLOCK_MONOTONIC_RAW 4
+typedef int clockid_t;
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+#endif
+
+/* some systems lack raw clock */
+#ifndef CLOCK_MONOTONIC_RAW
+#define CLOCK_MONOTONIC_RAW (CLOCK_MONOTONIC + 1)
+#endif
+
+/*
+ * Per thread variable, which we turn on inside real_* calls to avoid modifying
+ * time multiple times of for the whole process to prevent faking time
+ */
+static __thread bool dont_fake = false;
+
+/* Wrapper for function calls, which we want to return system time */
+#define DONT_FAKE_TIME(call) \
+ { \
+ bool dont_fake_orig = dont_fake; \
+ if (!dont_fake) \
+ { \
+ dont_fake = true; \
+ } \
+ call; \
+ dont_fake = dont_fake_orig; \
+ } while (0)
+
+/* pointers to real (not faked) functions */
+static int (*real_stat) (int, const char *, struct stat *);
+static int (*real_fstat) (int, int, struct stat *);
+static int (*real_fstatat) (int, int, const char *, struct stat *, int);
+static int (*real_lstat) (int, const char *, struct stat *);
+static int (*real_stat64) (int, const char *, struct stat64 *);
+static int (*real_fstat64) (int, int , struct stat64 *);
+static int (*real_fstatat64) (int, int , const char *, struct stat64 *, int);
+static int (*real_lstat64) (int, const char *, struct stat64 *);
+static time_t (*real_time) (time_t *);
+static int (*real_ftime) (struct timeb *);
+static int (*real_gettimeofday) (struct timeval *, void *);
+static int (*real_clock_gettime) (clockid_t clk_id, struct timespec *tp);
+#ifdef FAKE_INTERNAL_CALLS
+static int (*real___ftime) (struct timeb *);
+static int (*real___gettimeofday) (struct timeval *, void *);
+static int (*real___clock_gettime) (clockid_t clk_id, struct timespec *tp);
+#endif
+#ifdef FAKE_PTHREAD
+static int (*real_pthread_cond_timedwait_225) (pthread_cond_t *, pthread_mutex_t*, struct timespec *);
+static int (*real_pthread_cond_timedwait_232) (pthread_cond_t *, pthread_mutex_t*, struct timespec *);
+static int (*real_pthread_cond_init_232) (pthread_cond_t *restrict, const pthread_condattr_t *restrict);
+static int (*real_pthread_cond_destroy_232) (pthread_cond_t *);
+#endif
+
+#ifndef __APPLEOSX__
+#ifdef FAKE_TIMERS
+static int (*real_timer_settime_22) (int timerid, int flags, const struct itimerspec *new_value,
+ struct itimerspec * old_value);
+static int (*real_timer_settime_233) (timer_t timerid, int flags,
+ const struct itimerspec *new_value,
+ struct itimerspec * old_value);
+static int (*real_timer_gettime_22) (int timerid,
+ struct itimerspec *curr_value);
+static int (*real_timer_gettime_233) (timer_t timerid,
+ struct itimerspec *curr_value);
+#endif
+#endif
+#ifdef FAKE_SLEEP
+static int (*real_nanosleep) (const struct timespec *req, struct timespec *rem);
+static int (*real_usleep) (useconds_t usec);
+static unsigned int (*real_sleep) (unsigned int seconds);
+static unsigned int (*real_alarm) (unsigned int seconds);
+static int (*real_poll) (struct pollfd *, nfds_t, int);
+static int (*real_ppoll) (struct pollfd *, nfds_t, const struct timespec *, const sigset_t *);
+static int (*real_select) (int nfds, fd_set *restrict readfds,
+ fd_set *restrict writefds,
+ fd_set *restrict errorfds,
+ struct timeval *restrict timeout);
+static int (*real_sem_timedwait) (sem_t*, const struct timespec*);
+#endif
+#ifdef __APPLEOSX__
+static int (*real_clock_get_time) (clock_serv_t clock_serv, mach_timespec_t *cur_timeclockid_t);
+static int apple_clock_gettime (clockid_t clk_id, struct timespec *tp);
+static clock_serv_t clock_serv_real;
+#endif
+
+static int initialized = 0;
+
+/* prototypes */
+static int fake_gettimeofday(struct timeval *tv);
+static int fake_clock_gettime(clockid_t clk_id, struct timespec *tp);
+
+/** Semaphore protecting shared data */
+static sem_t *shared_sem = NULL;
+
+/** Data shared among faketime-spawned processes */
+static struct ft_shared_s *ft_shared = NULL;
+
+/** Storage format for timestamps written to file. Big endian.*/
+struct saved_timestamp
+{
+ int64_t sec;
+ uint64_t nsec;
+};
+
+static inline void timespec_from_saved (struct timespec *tp,
+ struct saved_timestamp *saved)
+{
+ /* read as big endian */
+ tp->tv_sec = be64toh(saved->sec);
+ tp->tv_nsec = be64toh(saved->nsec);
+}
+
+/** Saved timestamps */
+static struct saved_timestamp *stss = NULL;
+static size_t infile_size;
+static bool infile_set = false;
+
+/** File fd to save timestamps to */
+static int outfile = -1;
+
+static bool limited_faking = false;
+static long callcounter = 0;
+static long ft_start_after_secs = -1;
+static long ft_stop_after_secs = -1;
+static long ft_start_after_ncalls = -1;
+static long ft_stop_after_ncalls = -1;
+
+static bool spawnsupport = false;
+static int spawned = 0;
+static char ft_spawn_target[1024];
+static long ft_spawn_secs = -1;
+static long ft_spawn_ncalls = -1;
+
+static int fake_monotonic_clock = 1;
+static int cache_enabled = 1;
+static int cache_duration = 10; /* cache fake time input for 10 seconds */
+
+/*
+ * Static timespec to store our startup time, followed by a load-time library
+ * initialization declaration.
+ */
+#ifndef CLOCK_BOOTTIME
+static struct system_time_s ftpl_starttime = {{0, -1}, {0, -1}, {0, -1}};
+#else
+static struct system_time_s ftpl_starttime = {{0, -1}, {0, -1}, {0, -1}, {0, -1}};
+#endif
+
+static char user_faked_time_fmt[BUFSIZ] = {0};
+
+/* User supplied base time to fake */
+static struct timespec user_faked_time_timespec = {0, -1};
+/* User supplied base time is set */
+static bool user_faked_time_set = false;
+static char user_faked_time_saved[BUFFERLEN] = {0};
+
+/* Fractional user offset provided through FAKETIME env. var.*/
+static struct timespec user_offset = {0, -1};
+/* Speed up or slow down clock */
+static double user_rate = 1.0;
+static bool user_rate_set = false;
+static struct timespec user_per_tick_inc = {0, -1};
+static bool user_per_tick_inc_set = false;
+
+enum ft_mode_t {FT_FREEZE, FT_START_AT, FT_NOOP} ft_mode = FT_FREEZE;
+
+/* Time to fake is not provided through FAKETIME env. var. */
+static bool parse_config_file = true;
+
+static void ft_cleanup (void) __attribute__ ((destructor));
+static void ftpl_init (void) __attribute__ ((constructor));
+
+
+/*
+ * =======================================================================
+ * Shared memory related functions === SHM
+ * =======================================================================
+ */
+
+static void ft_shm_init (void)
+{
+ int ticks_shm_fd;
+ char sem_name[256], shm_name[256], *ft_shared_env = getenv("FAKETIME_SHARED");
+
+ if (ft_shared_env != NULL)
+ {
+ if (sscanf(ft_shared_env, "%255s %255s", sem_name, shm_name) < 2)
+ {
+ printf("Error parsing semaphore name and shared memory id from string: %s", ft_shared_env);
+ exit(1);
+ }
+
+ if (SEM_FAILED == (shared_sem = sem_open(sem_name, 0)))
+ {
+ perror("sem_open");
+ exit(1);
+ }
+
+ if (-1 == (ticks_shm_fd = shm_open(shm_name, O_CREAT|O_RDWR, S_IWUSR|S_IRUSR)))
+ {
+ perror("shm_open");
+ exit(1);
+ }
+
+ if (MAP_FAILED == (ft_shared = mmap(NULL, sizeof(struct ft_shared_s), PROT_READ|PROT_WRITE,
+ MAP_SHARED, ticks_shm_fd, 0)))
+ {
+ perror("mmap");
+ exit(1);
+ }
+ }
+}
+
+static void ft_cleanup (void)
+{
+ /* detach from shared memory */
+ if (ft_shared != NULL)
+ {
+ munmap(ft_shared, sizeof(uint64_t));
+ }
+ if (stss != NULL)
+ {
+ munmap(stss, infile_size);
+ }
+ if (shared_sem != NULL)
+ {
+ sem_close(shared_sem);
+ }
+}
+
+
+/*
+ * =======================================================================
+ * Internal time retrieval === INTTIME
+ * =======================================================================
+ */
+
+/* Get system time from system for all clocks */
+static void system_time_from_system (struct system_time_s * systime)
+{
+#ifdef __APPLEOSX__
+ /* from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x */
+ clock_serv_t cclock;
+ mach_timespec_t mts;
+ host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &clock_serv_real);
+ (*real_clock_get_time)(clock_serv_real, &mts);
+ systime->real.tv_sec = mts.tv_sec;
+ systime->real.tv_nsec = mts.tv_nsec;
+ host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
+ (*real_clock_get_time)(cclock, &mts);
+ mach_port_deallocate(mach_task_self(), cclock);
+ systime->mon.tv_sec = mts.tv_sec;
+ systime->mon.tv_nsec = mts.tv_nsec;
+ systime->mon_raw.tv_sec = mts.tv_sec;
+ systime->mon_raw.tv_nsec = mts.tv_nsec;
+#else
+ DONT_FAKE_TIME((*real_clock_gettime)(CLOCK_REALTIME, &systime->real))
+ ;
+ DONT_FAKE_TIME((*real_clock_gettime)(CLOCK_MONOTONIC, &systime->mon))
+ ;
+ DONT_FAKE_TIME((*real_clock_gettime)(CLOCK_MONOTONIC_RAW, &systime->mon_raw))
+ ;
+#ifdef CLOCK_BOOTTIME
+ DONT_FAKE_TIME((*real_clock_gettime)(CLOCK_BOOTTIME, &systime->boot))
+ ;
+#endif
+#endif
+}
+
+static void next_time(struct timespec *tp, struct timespec *ticklen)
+{
+ if (shared_sem != NULL)
+ {
+ struct timespec inc;
+ /* lock */
+ if (sem_wait(shared_sem) == -1)
+ {
+ perror("sem_wait");
+ exit(1);
+ }
+ /* calculate and update elapsed time */
+ timespecmul(ticklen, ft_shared->ticks, &inc);
+ timespecadd(&user_faked_time_timespec, &inc, tp);
+ (ft_shared->ticks)++;
+ /* unlock */
+ if (sem_post(shared_sem) == -1)
+ {
+ perror("sem_post");
+ exit(1);
+ }
+ }
+}
+
+
+/*
+ * =======================================================================
+ * Saving & loading time === SAVE
+ * =======================================================================
+ */
+
+static void save_time(struct timespec *tp)
+{
+ if ((shared_sem != NULL) && (outfile != -1))
+ {
+ struct saved_timestamp time_write;
+ ssize_t written;
+ size_t n = 0;
+
+ time_write.sec = htobe64(tp->tv_sec);
+ time_write.nsec = htobe64(tp->tv_nsec);
+
+ /* lock */
+ if (sem_wait(shared_sem) == -1)
+ {
+ perror("sem_wait");
+ exit(1);
+ }
+
+ lseek(outfile, 0, SEEK_END);
+ do
+ {
+ written = write(outfile, &(((char*)&time_write)[n]), sizeof(time_write) - n);
+ }
+ while (((written == -1) && (errno == EINTR)) ||
+ (sizeof(time_write) < (n += written)));
+
+ if ((written == -1) || (n < sizeof(time_write)))
+ {
+ perror("Saving timestamp to file failed");
+ }
+
+ /* unlock */
+ if (sem_post(shared_sem) == -1)
+ {
+ perror("sem_post");
+ exit(1);
+ }
+ }
+}
+
+/*
+ * Provide faked time from file.
+ * @return time is set from filen
+ */
+static bool load_time(struct timespec *tp)
+{
+ bool ret = false;
+ if ((shared_sem != NULL) && (infile_set))
+ {
+ /* lock */
+ if (sem_wait(shared_sem) == -1)
+ {
+ perror("sem_wait");
+ exit(1);
+ }
+
+ if ((sizeof(stss[0]) * (ft_shared->file_idx + 1)) > infile_size)
+ {
+ /* we are out of timstamps to replay, return to faking time by rules
+ * using last timestamp from file as the user provided timestamp */
+ timespec_from_saved(&user_faked_time_timespec, &stss[(infile_size / sizeof(stss[0])) - 1 ]);
+
+ if (ft_shared->ticks == 0)
+ {
+ /* we set shared memory to stop using infile */
+ ft_shared->ticks = 1;
+ system_time_from_system(&ftpl_starttime);
+ ft_shared->start_time = ftpl_starttime;
+ }
+ else
+ {
+ ftpl_starttime = ft_shared->start_time;
+ }
+
+ munmap(stss, infile_size);
+ infile_set = false;
+ }
+ else
+ {
+ timespec_from_saved(tp, &stss[ft_shared->file_idx]);
+ ft_shared->file_idx++;
+ ret = true;
+ }
+
+ /* unlock */
+ if (sem_post(shared_sem) == -1)
+ {
+ perror("sem_post");
+ exit(1);
+ }
+ }
+ return ret;
+}
+
+
+/*
+ * =======================================================================
+ * Faked system functions: file related === FAKE(FILE)
+ * =======================================================================
+ */
+
+#ifdef FAKE_STAT
+
+#ifndef NO_ATFILE
+#ifndef _ATFILE_SOURCE
+#define _ATFILE_SOURCE
+#endif
+#include <fcntl.h> /* Definition of AT_* constants */
+#endif
+
+#include <sys/stat.h>
+
+static int fake_stat_disabled = 0;
+
+#define FAKE_STRUCT_STAT_TIME(which) { \
+ struct timespec t = {buf->st_##which##time, \
+ buf->st_##which##timensec}; \
+ fake_clock_gettime(CLOCK_REALTIME, &t); \
+ buf->st_##which##time = t.tv_sec; \
+ buf->st_##which##timensec = t.tv_nsec; \
+ } while (0)
+
+static inline void fake_statbuf (struct stat *buf) {
+#ifndef st_atime
+ FAKE_STRUCT_STAT_TIME(c);
+ FAKE_STRUCT_STAT_TIME(a);
+ FAKE_STRUCT_STAT_TIME(m);
+#else
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_ctim);
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_atim);
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_mtim);
+#endif
+}
+
+static inline void fake_stat64buf (struct stat64 *buf) {
+#ifndef st_atime
+ FAKE_STRUCT_STAT_TIME(c);
+ FAKE_STRUCT_STAT_TIME(a);
+ FAKE_STRUCT_STAT_TIME(m);
+#else
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_ctim);
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_atim);
+ fake_clock_gettime(CLOCK_REALTIME, &buf->st_mtim);
+#endif
+}
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __xstat (int ver, const char *path, struct stat *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_stat)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original stat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_stat(ver, path, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_statbuf(buf);
+ }
+ }
+
+ return result;
+}
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __fxstat (int ver, int fildes, struct stat *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_fstat)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original fstat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_fstat(ver, fildes, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_statbuf(buf);
+ }
+ }
+ return result;
+}
+
+/* Added in v0.8 as suggested by Daniel Kahn Gillmor */
+#ifndef NO_ATFILE
+int __fxstatat(int ver, int fildes, const char *filename, struct stat *buf, int flag)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_fstatat)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original fstatat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_fstatat(ver, fildes, filename, buf, flag));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_statbuf(buf);
+ }
+ }
+ return result;
+}
+#endif
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __lxstat (int ver, const char *path, struct stat *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_lstat)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original lstat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_lstat(ver, path, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_statbuf(buf);
+ }
+ }
+ return result;
+}
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __xstat64 (int ver, const char *path, struct stat64 *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_stat64)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original stat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_stat64(ver, path, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_stat64buf(buf);
+ }
+ }
+ return result;
+}
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __fxstat64 (int ver, int fildes, struct stat64 *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_fstat64)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original fstat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_fstat64(ver, fildes, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_stat64buf(buf);
+ }
+ }
+ return result;
+}
+
+/* Added in v0.8 as suggested by Daniel Kahn Gillmor */
+#ifndef NO_ATFILE
+int __fxstatat64 (int ver, int fildes, const char *filename, struct stat64 *buf, int flag)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_fstatat64)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original fstatat64() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_fstatat64(ver, fildes, filename, buf, flag));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_stat64buf(buf);
+ }
+ }
+ return result;
+}
+#endif
+
+/* Contributed by Philipp Hachtmann in version 0.6 */
+int __lxstat64 (int ver, const char *path, struct stat64 *buf)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (NULL == real_lstat64)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original lstat() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ int result;
+ DONT_FAKE_TIME(result = real_lstat64(ver, path, buf));
+ if (result == -1)
+ {
+ return -1;
+ }
+
+ if (buf != NULL)
+ {
+ if (!fake_stat_disabled)
+ {
+ fake_stat64buf(buf);
+ }
+ }
+ return result;
+}
+#endif
+
+/*
+ * =======================================================================
+ * Faked system functions: sleep/alarm/poll/timer related === FAKE(SLEEP)
+ * =======================================================================
+ * Contributed by Balint Reczey in v0.9.5
+ */
+
+#ifdef FAKE_SLEEP
+/*
+ * Faked nanosleep()
+ */
+int nanosleep(const struct timespec *req, struct timespec *rem)
+{
+ int result;
+ struct timespec real_req;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_nanosleep == NULL)
+ {
+ return -1;
+ }
+ if (req != NULL)
+ {
+ if (user_rate_set && !dont_fake)
+ {
+ timespecmul(req, 1.0 / user_rate, &real_req);
+ }
+ else
+ {
+ real_req = *req;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+
+ DONT_FAKE_TIME(result = (*real_nanosleep)(&real_req, rem));
+ if (result == -1)
+ {
+ return result;
+ }
+
+ /* fake returned parts */
+ if ((rem != NULL) && ((rem->tv_sec != 0) || (rem->tv_nsec != 0)))
+ {
+ if (user_rate_set && !dont_fake)
+ {
+ timespecmul(rem, user_rate, rem);
+ }
+ }
+ /* return the result to the caller */
+ return result;
+}
+
+/*
+ * Faked usleep()
+ */
+int usleep(useconds_t usec)
+{
+ int result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (user_rate_set && !dont_fake)
+ {
+ struct timespec real_req;
+
+ if (real_nanosleep == NULL)
+ {
+ /* fall back to usleep() */
+ if (real_usleep == NULL)
+ {
+ return -1;
+ }
+ DONT_FAKE_TIME(result = (*real_usleep)((1.0 / user_rate) * usec));
+ return result;
+ }
+
+ real_req.tv_sec = usec / 1000000;
+ real_req.tv_nsec = (usec % 1000000) * 1000;
+ timespecmul(&real_req, 1.0 / user_rate, &real_req);
+ DONT_FAKE_TIME(result = (*real_nanosleep)(&real_req, NULL));
+ }
+ else
+ {
+ DONT_FAKE_TIME(result = (*real_usleep)(usec));
+ }
+ return result;
+}
+
+/*
+ * Faked sleep()
+ */
+unsigned int sleep(unsigned int seconds)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (user_rate_set && !dont_fake)
+ {
+ if (real_nanosleep == NULL)
+ {
+ /* fall back to sleep */
+ unsigned int ret;
+ if (real_sleep == NULL)
+ {
+ return 0;
+ }
+ DONT_FAKE_TIME(ret = (*real_sleep)((1.0 / user_rate) * seconds));
+ return (user_rate_set && !dont_fake)?(user_rate * ret):ret;
+ }
+ else
+ {
+ int result;
+ struct timespec real_req = {seconds, 0}, rem;
+ timespecmul(&real_req, 1.0 / user_rate, &real_req);
+ DONT_FAKE_TIME(result = (*real_nanosleep)(&real_req, &rem));
+ if (result == -1)
+ {
+ return 0;
+ }
+
+ /* fake returned parts */
+ if ((rem.tv_sec != 0) || (rem.tv_nsec != 0))
+ {
+ timespecmul(&rem, user_rate, &rem);
+ }
+ /* return the result to the caller */
+ return rem.tv_sec;
+ }
+ }
+ else
+ {
+ /* no need to fake anything */
+ unsigned int ret;
+ DONT_FAKE_TIME(ret = (*real_sleep)(seconds));
+ return ret;
+ }
+}
+
+/*
+ * Faked alarm()
+ * @note due to rounding alarm(2) with faketime -f '+0 x7' won't wait 2/7
+ * wall clock seconds but 0 seconds
+ */
+unsigned int alarm(unsigned int seconds)
+{
+ unsigned int ret;
+ unsigned int seconds_real = (user_rate_set && !dont_fake)?((1.0 / user_rate) * seconds):seconds;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_alarm == NULL)
+ {
+ return -1;
+ }
+
+ DONT_FAKE_TIME(ret = (*real_alarm)(seconds_real));
+ return (user_rate_set && !dont_fake)?(user_rate * ret):ret;
+}
+
+/*
+ * Faked ppoll()
+ */
+int ppoll(struct pollfd *fds, nfds_t nfds,
+ const struct timespec *timeout_ts, const sigset_t *sigmask)
+{
+ struct timespec real_timeout, *real_timeout_pt;
+ int ret;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_ppoll == NULL)
+ {
+ return -1;
+ }
+ if (timeout_ts != NULL)
+ {
+ if (user_rate_set && !dont_fake && (timeout_ts->tv_sec > 0))
+ {
+ timespecmul(timeout_ts, 1.0 / user_rate, &real_timeout);
+ real_timeout_pt = &real_timeout;
+ }
+ else
+ {
+ /* cast away constness */
+ real_timeout_pt = (struct timespec *)timeout_ts;
+ }
+ }
+ else
+ {
+ real_timeout_pt = NULL;
+ }
+
+ DONT_FAKE_TIME(ret = (*real_ppoll)(fds, nfds, real_timeout_pt, sigmask));
+ return ret;
+}
+
+/*
+ * Faked poll()
+ */
+int poll(struct pollfd *fds, nfds_t nfds, int timeout)
+{
+ int ret, timeout_real = (user_rate_set && !dont_fake && (timeout > 0))?(timeout / user_rate):timeout;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_poll == NULL)
+ {
+ return -1;
+ }
+
+ DONT_FAKE_TIME(ret = (*real_poll)(fds, nfds, timeout_real));
+ return ret;
+}
+
+/*
+ * Faked select()
+ */
+int select(int nfds, fd_set *readfds,
+ fd_set *writefds,
+ fd_set *errorfds,
+ struct timeval *timeout)
+{
+ int ret;
+ struct timeval timeout_real;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+
+ if (real_select == NULL)
+ {
+ return -1;
+ }
+
+ if (timeout != NULL)
+ {
+ if (user_rate_set && !dont_fake && (timeout->tv_sec > 0 || timeout->tv_usec > 0))
+ {
+ struct timespec ts;
+
+ ts.tv_sec = timeout->tv_sec;
+ ts.tv_nsec = timeout->tv_usec * 1000;
+
+ timespecmul(&ts, 1.0 / user_rate, &ts);
+
+ timeout_real.tv_sec = ts.tv_sec;
+ timeout_real.tv_usec = ts.tv_nsec / 1000;
+ }
+ else
+ {
+ timeout_real.tv_sec = timeout->tv_sec;
+ timeout_real.tv_usec = timeout->tv_usec;
+ }
+ }
+
+ DONT_FAKE_TIME(ret = (*real_select)(nfds, readfds, writefds, errorfds, timeout == NULL ? timeout : &timeout_real));
+ return ret;
+}
+
+int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout)
+{
+ int result;
+ struct timespec real_abs_timeout, *real_abs_timeout_pt;
+
+ /* sanity check */
+ if (abs_timeout == NULL)
+ {
+ return -1;
+ }
+
+ if (NULL == real_sem_timedwait)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original sem_timedwait() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ if (!dont_fake)
+ {
+ struct timespec tdiff, timeadj;
+
+ timespecsub(abs_timeout, &user_faked_time_timespec, &tdiff);
+
+ if (user_rate_set)
+ {
+ timespecmul(&tdiff, user_rate, &timeadj);
+ }
+ else
+ {
+ timeadj = tdiff;
+ }
+ timespecadd(&ftpl_starttime.real, &timeadj, &real_abs_timeout);
+ real_abs_timeout_pt = &real_abs_timeout;
+ }
+ else
+ {
+ /* cast away constness */
+ real_abs_timeout_pt = (struct timespec *)abs_timeout;
+ }
+
+ DONT_FAKE_TIME(result = (*real_sem_timedwait)(sem, real_abs_timeout_pt));
+ return result;
+}
+#endif
+
+#ifndef __APPLE__
+#ifdef FAKE_TIMERS
+
+/* timer related functions and structures */
+typedef union {
+ int int_member;
+ timer_t timer_t_member;
+} timer_t_or_int;
+
+/*
+ * Faketime's function implementation's compatibility mode
+ */
+typedef enum {FT_COMPAT_GLIBC_2_2, FT_COMPAT_GLIBC_2_3_3} ft_lib_compat_timer;
+
+
+/*
+ * Faked timer_settime()
+ * Does not affect timer speed when stepping clock with each time() call.
+ */
+static int
+timer_settime_common(timer_t_or_int timerid, int flags,
+ const struct itimerspec *new_value,
+ struct itimerspec *old_value, ft_lib_compat_timer compat)
+{
+ int result;
+ struct itimerspec new_real;
+ struct itimerspec *new_real_pt = &new_real;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (new_value == NULL)
+ {
+ new_real_pt = NULL;
+ }
+ else if (dont_fake)
+ {
+ /* cast away constness*/
+ new_real_pt = (struct itimerspec *)new_value;
+ }
+ else
+ {
+ /* set it_value */
+ if ((new_value->it_value.tv_sec != 0) ||
+ (new_value->it_value.tv_nsec != 0))
+ {
+ if (flags & TIMER_ABSTIME)
+ {
+ struct timespec tdiff, timeadj;
+ timespecsub(&new_value->it_value, &user_faked_time_timespec, &timeadj);
+ if (user_rate_set)
+ {
+ timespecmul(&timeadj, 1.0/user_rate, &tdiff);
+ }
+ else
+ {
+ tdiff = timeadj;
+ }
+ /* only CLOCK_REALTIME is handled */
+ timespecadd(&ftpl_starttime.real, &tdiff, &new_real.it_value);
+ }
+ else
+ {
+ if (user_rate_set)
+ {
+ timespecmul(&new_value->it_value, 1.0/user_rate, &new_real.it_value);
+ }
+ else
+ {
+ new_real.it_value = new_value->it_value;
+ }
+ }
+ }
+ else
+ {
+ new_real.it_value = new_value->it_value;
+ }
+ /* set it_interval */
+ if (user_rate_set && ((new_value->it_interval.tv_sec != 0) ||
+ (new_value->it_interval.tv_nsec != 0)))
+ {
+ timespecmul(&new_value->it_interval, 1.0/user_rate, &new_real.it_interval);
+ }
+ else
+ {
+ new_real.it_interval = new_value->it_interval;
+ }
+ }
+
+ switch (compat)
+ {
+ case FT_COMPAT_GLIBC_2_2:
+ DONT_FAKE_TIME(result = (*real_timer_settime_22)(timerid.int_member, flags,
+ new_real_pt, old_value));
+ break;
+ case FT_COMPAT_GLIBC_2_3_3:
+ DONT_FAKE_TIME(result = (*real_timer_settime_233)(timerid.timer_t_member,
+ flags, new_real_pt, old_value));
+ break;
+ default:
+ result = -1;
+ break;
+ }
+
+ if (result == -1)
+ {
+ return result;
+ }
+
+ /* fake returned parts */
+ if ((old_value != NULL) && !dont_fake)
+ {
+ if ((old_value->it_value.tv_sec != 0) ||
+ (old_value->it_value.tv_nsec != 0))
+ {
+ result = fake_clock_gettime(CLOCK_REALTIME, &old_value->it_value);
+ }
+ if (user_rate_set && ((old_value->it_interval.tv_sec != 0) ||
+ (old_value->it_interval.tv_nsec != 0)))
+ {
+ timespecmul(&old_value->it_interval, user_rate, &old_value->it_interval);
+ }
+ }
+
+ /* return the result to the caller */
+ return result;
+}
+
+/*
+ * Faked timer_settime() compatible with implementation in GLIBC 2.2
+ */
+int timer_settime_22(int timerid, int flags,
+ const struct itimerspec *new_value,
+ struct itimerspec *old_value)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_timer_settime_22 == NULL)
+ {
+ return -1;
+ }
+ else
+ {
+ return (timer_settime_common((timer_t_or_int)timerid, flags, new_value, old_value,
+ FT_COMPAT_GLIBC_2_2));
+ }
+}
+
+/*
+ * Faked timer_settime() compatible with implementation in GLIBC 2.3.3
+ */
+int timer_settime_233(timer_t timerid, int flags,
+ const struct itimerspec *new_value,
+ struct itimerspec *old_value)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_timer_settime_233 == NULL)
+ {
+ return -1;
+ }
+ else
+ {
+ return (timer_settime_common((timer_t_or_int)timerid, flags, new_value, old_value,
+ FT_COMPAT_GLIBC_2_3_3));
+ }
+}
+
+/*
+ * Faked timer_gettime()
+ * Does not affect timer speed when stepping clock with each time() call.
+ */
+int timer_gettime_common(timer_t_or_int timerid, struct itimerspec *curr_value, ft_lib_compat_timer compat)
+{
+ int result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_timer_gettime_233 == NULL)
+ {
+ return -1;
+ }
+
+ switch (compat)
+ {
+ case FT_COMPAT_GLIBC_2_2:
+ DONT_FAKE_TIME(result = (*real_timer_gettime_22)(timerid.int_member, curr_value));
+ break;
+ case FT_COMPAT_GLIBC_2_3_3:
+ DONT_FAKE_TIME(result = (*real_timer_gettime_233)(timerid.timer_t_member, curr_value));
+ break;
+ default:
+ result = -1;
+ break;
+ }
+
+ if (result == -1)
+ {
+ return result;
+ }
+
+ /* fake returned parts */
+ if (curr_value != NULL)
+ {
+ if (user_rate_set && !dont_fake)
+ {
+ timespecmul(&curr_value->it_interval, user_rate, &curr_value->it_interval);
+ timespecmul(&curr_value->it_value, user_rate, &curr_value->it_value);
+ }
+ }
+ /* return the result to the caller */
+ return result;
+}
+
+/*
+ * Faked timer_gettime() compatible with implementation in GLIBC 2.2
+ */
+int timer_gettime_22(timer_t timerid, struct itimerspec *curr_value)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_timer_gettime_22 == NULL)
+ {
+ return -1;
+ }
+ else
+ {
+ return (timer_gettime_common((timer_t_or_int)timerid, curr_value,
+ FT_COMPAT_GLIBC_2_2));
+ }
+}
+
+/*
+ * Faked timer_gettime() compatible with implementation in GLIBC 2.3.3
+ */
+int timer_gettime_233(timer_t timerid, struct itimerspec *curr_value)
+{
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ if (real_timer_gettime_233 == NULL)
+ {
+ return -1;
+ }
+ else
+ {
+ return (timer_gettime_common((timer_t_or_int)timerid, curr_value,
+ FT_COMPAT_GLIBC_2_3_3));
+ }
+}
+
+__asm__(".symver timer_gettime_22, timer_gettime@GLIBC_2.2");
+__asm__(".symver timer_gettime_233, timer_gettime@@GLIBC_2.3.3");
+__asm__(".symver timer_settime_22, timer_settime@GLIBC_2.2");
+__asm__(".symver timer_settime_233, timer_settime@@GLIBC_2.3.3");
+
+#endif
+#endif
+
+
+/*
+ * =======================================================================
+ * Faked system functions: basic time functions === FAKE(TIME)
+ * =======================================================================
+ */
+
+/*
+ * time() implementation using clock_gettime()
+ * @note Does not check for EFAULT, see man 2 time
+ */
+time_t time(time_t *time_tptr)
+{
+ struct timespec tp;
+ time_t result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(CLOCK_REALTIME, &tp));
+ if (result == -1) return -1;
+
+ /* pass the real current time to our faking version, overwriting it */
+ (void)fake_clock_gettime(CLOCK_REALTIME, &tp);
+
+ if (time_tptr != NULL)
+ {
+ *time_tptr = tp.tv_sec;
+ }
+ return tp.tv_sec;
+}
+
+int ftime(struct timeb *tb)
+{
+ struct timespec tp;
+ int result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ /* sanity check */
+ if (tb == NULL)
+ return 0; /* ftime() always returns 0, see manpage */
+
+ /* Check whether we've got a pointer to the real ftime() function yet */
+ if (NULL == real_ftime)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original ftime() not found.\n");
+#endif
+ return 0; /* propagate error to caller */
+ }
+
+ /* initialize our TZ result with the real current time */
+ DONT_FAKE_TIME(result = (*real_ftime)(tb));
+ if (result == -1)
+ {
+ return result;
+ }
+
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(CLOCK_REALTIME, &tp));
+ if (result == -1) return -1;
+
+ /* pass the real current time to our faking version, overwriting it */
+ (void)fake_clock_gettime(CLOCK_REALTIME, &tp);
+
+ tb->time = tp.tv_sec;
+ tb->millitm = tp.tv_nsec / 1000000;
+
+ /* return the result to the caller */
+ return result; /* will always be 0 (see manpage) */
+}
+
+int gettimeofday(struct timeval *tv, void *tz)
+{
+ int result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ /* sanity check */
+ if (tv == NULL)
+ {
+ return -1;
+ }
+
+ /* Check whether we've got a pointer to the real ftime() function yet */
+ if (NULL == real_gettimeofday)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original gettimeofday() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ /* initialize our result with the real current time */
+ DONT_FAKE_TIME(result = (*real_gettimeofday)(tv, tz));
+ if (result == -1) return result; /* original function failed */
+
+ /* pass the real current time to our faking version, overwriting it */
+ result = fake_gettimeofday(tv);
+
+ /* return the result to the caller */
+ return result;
+}
+
+int clock_gettime(clockid_t clk_id, struct timespec *tp)
+{
+ int result;
+
+ if (!initialized)
+ {
+ ftpl_init();
+ }
+ /* sanity check */
+ if (tp == NULL)
+ {
+ return -1;
+ }
+
+ if (NULL == real_clock_gettime)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original clock_gettime() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ /* initialize our result with the real current time */
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(clk_id, tp));
+ if (result == -1) return result; /* original function failed */
+
+ /* pass the real current time to our faking version, overwriting it */
+ if (fake_monotonic_clock || (clk_id != CLOCK_MONOTONIC && clk_id != CLOCK_MONOTONIC_RAW
+#ifdef CLOCK_MONOTONIC_COARSE
+ && clk_id != CLOCK_MONOTONIC_COARSE
+#endif
+#ifdef CLOCK_BOOTTIME
+ && clk_id != CLOCK_BOOTTIME
+#endif
+ ))
+ {
+ result = fake_clock_gettime(clk_id, tp);
+ }
+
+ /* return the result to the caller */
+ return result;
+}
+
+
+/*
+ * =======================================================================
+ * Parsing the user's faketime requests === PARSE
+ * =======================================================================
+ */
+
+static void parse_ft_string(const char *user_faked_time)
+{
+ struct tm user_faked_time_tm;
+ char * tmp_time_fmt;
+
+ if (!strncmp(user_faked_time, user_faked_time_saved, BUFFERLEN))
+ {
+ /* No change */
+ return;
+ }
+
+ /* check whether the user gave us an absolute time to fake */
+ switch (user_faked_time[0])
+ {
+
+ default: /* Try and interpret this as a specified time */
+ if (ft_mode != FT_NOOP) ft_mode = FT_FREEZE;
+ user_faked_time_tm.tm_isdst = -1;
+ if (NULL != strptime(user_faked_time, user_faked_time_fmt, &user_faked_time_tm))
+ {
+ user_faked_time_timespec.tv_sec = mktime(&user_faked_time_tm);
+ user_faked_time_timespec.tv_nsec = 0;
+ user_faked_time_set = true;
+ }
+ else
+ {
+ perror("Failed to parse FAKETIME timestamp");
+ fprintf(stderr, "Please check specification %s with format %s\n", user_faked_time, user_faked_time_fmt);
+ exit(EXIT_FAILURE);
+ }
+ break;
+
+ case '+':
+ case '-': /* User-specified offset */
+ if (ft_mode != FT_NOOP) ft_mode = FT_START_AT;
+ /* fractional time offsets contributed by Karl Chen in v0.8 */
+ double frac_offset = atof(user_faked_time);
+
+ /* offset is in seconds by default, but the string may contain
+ * multipliers...
+ */
+ if (strchr(user_faked_time, 'm') != NULL) frac_offset *= 60;
+ else if (strchr(user_faked_time, 'h') != NULL) frac_offset *= 60 * 60;
+ else if (strchr(user_faked_time, 'd') != NULL) frac_offset *= 60 * 60 * 24;
+ else if (strchr(user_faked_time, 'y') != NULL) frac_offset *= 60 * 60 * 24 * 365;
+
+ user_offset.tv_sec = floor(frac_offset);
+ user_offset.tv_nsec = (frac_offset - user_offset.tv_sec) * SEC_TO_nSEC;
+ timespecadd(&ftpl_starttime.real, &user_offset, &user_faked_time_timespec);
+ goto parse_modifiers;
+ break;
+
+ /* Contributed by David North, TDI in version 0.7 */
+ case '@': /* Specific time, but clock along relative to that starttime */
+ ft_mode = FT_START_AT;
+ user_faked_time_tm.tm_isdst = -1;
+ (void) strptime(&user_faked_time[1], user_faked_time_fmt, &user_faked_time_tm);
+
+ user_faked_time_timespec.tv_sec = mktime(&user_faked_time_tm);
+ user_faked_time_timespec.tv_nsec = 0;
+
+ /* Reset starttime */
+ system_time_from_system(&ftpl_starttime);
+ goto parse_modifiers;
+ break;
+
+ case 'i':
+ case 'x': /* Only modifiers are passed, don't fall back to strptime */
+parse_modifiers:
+ /* Speed-up / slow-down contributed by Karl Chen in v0.8 */
+ if (strchr(user_faked_time, 'x') != NULL)
+ {
+ user_rate = atof(strchr(user_faked_time, 'x')+1);
+ user_rate_set = true;
+ }
+ else if (NULL != (tmp_time_fmt = strchr(user_faked_time, 'i')))
+ {
+ double tick_inc = atof(tmp_time_fmt + 1);
+ /* increment time with every time() call*/
+ user_per_tick_inc.tv_sec = floor(tick_inc);
+ user_per_tick_inc.tv_nsec = (tick_inc - user_per_tick_inc.tv_sec) * SEC_TO_nSEC ;
+ user_per_tick_inc_set = true;
+ }
+ break;
+ } // end of switch
+
+ strncpy(user_faked_time_saved, user_faked_time, BUFFERLEN-1);
+ user_faked_time_saved[BUFFERLEN-1] = 0;
+#ifdef DEBUG
+ fprintf(stderr, "new FAKETIME: %s\n", user_faked_time_saved);
+#endif
+}
+
+
+/*
+ * =======================================================================
+ * Initialization === INIT
+ * =======================================================================
+ */
+
+static void ftpl_init(void)
+{
+ char *tmp_env;
+ bool dont_fake_final;
+
+#ifdef __APPLE__
+ const char *progname = getprogname();
+#else
+ const char *progname = __progname;
+#endif
+
+ /* Look up all real_* functions. NULL will mark missing ones. */
+ real_stat = dlsym(RTLD_NEXT, "__xstat");
+ real_fstat = dlsym(RTLD_NEXT, "__fxstat");
+ real_fstatat = dlsym(RTLD_NEXT, "__fxstatat");
+ real_lstat = dlsym(RTLD_NEXT, "__lxstat");
+ real_stat64 = dlsym(RTLD_NEXT,"__xstat64");
+ real_fstat64 = dlsym(RTLD_NEXT, "__fxstat64");
+ real_fstatat64 = dlsym(RTLD_NEXT, "__fxstatat64");
+ real_lstat64 = dlsym(RTLD_NEXT, "__lxstat64");
+ real_time = dlsym(RTLD_NEXT, "time");
+ real_ftime = dlsym(RTLD_NEXT, "ftime");
+#if defined(__alpha__) && defined(__GLIBC__)
+ real_gettimeofday = dlvsym(RTLD_NEXT, "gettimeofday", "GLIBC_2.1");
+#else
+ real_gettimeofday = dlsym(RTLD_NEXT, "gettimeofday");
+#endif
+#ifdef FAKE_SLEEP
+ real_nanosleep = dlsym(RTLD_NEXT, "nanosleep");
+ real_usleep = dlsym(RTLD_NEXT, "usleep");
+ real_sleep = dlsym(RTLD_NEXT, "sleep");
+ real_alarm = dlsym(RTLD_NEXT, "alarm");
+ real_poll = dlsym(RTLD_NEXT, "poll");
+ real_ppoll = dlsym(RTLD_NEXT, "ppoll");
+ real_select = dlsym(RTLD_NEXT, "select");
+ real_sem_timedwait = dlsym(RTLD_NEXT, "sem_timedwait");
+#endif
+#ifdef FAKE_INTERNAL_CALLS
+ real___ftime = dlsym(RTLD_NEXT, "__ftime");
+# if defined(__alpha__) && defined(__GLIBC__)
+ real___gettimeofday = dlvsym(RTLD_NEXT, "__gettimeofday", "GLIBC_2.1");
+# else
+ real___gettimeofday = dlsym(RTLD_NEXT, "__gettimeofday");
+# endif
+ real___clock_gettime = dlsym(RTLD_NEXT, "__clock_gettime");
+#endif
+#ifdef FAKE_PTHREAD
+
+#ifdef __GLIBC__
+ real_pthread_cond_timedwait_225 = dlvsym(RTLD_NEXT, "pthread_cond_timedwait", "GLIBC_2.2.5");
+
+ real_pthread_cond_timedwait_232 = dlvsym(RTLD_NEXT, "pthread_cond_timedwait", "GLIBC_2.3.2");
+ real_pthread_cond_init_232 = dlvsym(RTLD_NEXT, "pthread_cond_init", "GLIBC_2.3.2");
+ real_pthread_cond_destroy_232 = dlvsym(RTLD_NEXT, "pthread_cond_destroy", "GLIBC_2.3.2");
+#endif
+
+ if (NULL == real_pthread_cond_timedwait_232)
+ {
+ real_pthread_cond_timedwait_232 = dlsym(RTLD_NEXT, "pthread_cond_timedwait");
+ }
+ if (NULL == real_pthread_cond_init_232)
+ {
+ real_pthread_cond_init_232 = dlsym(RTLD_NEXT, "pthread_cond_init");
+ }
+ if (NULL == real_pthread_cond_destroy_232)
+ {
+ real_pthread_cond_destroy_232 = dlsym(RTLD_NEXT, "pthread_cond_destroy");
+ }
+#endif
+#ifdef __APPLEOSX__
+ real_clock_get_time = dlsym(RTLD_NEXT, "clock_get_time");
+ real_clock_gettime = apple_clock_gettime;
+#else
+ real_clock_gettime = dlsym(RTLD_NEXT, "__clock_gettime");
+ if (NULL == real_clock_gettime)
+ {
+ real_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime");
+ }
+#ifdef FAKE_TIMERS
+#if defined(__sun)
+ real_timer_gettime_233 = dlsym(RTLD_NEXT, "timer_gettime");
+ real_timer_settime_233 = dlsym(RTLD_NEXT, "timer_settime");
+#else
+#ifdef __GLIBC__
+ real_timer_settime_22 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.2");
+ real_timer_settime_233 = dlvsym(RTLD_NEXT, "timer_settime","GLIBC_2.3.3");
+#endif
+ if (NULL == real_timer_settime_233)
+ {
+ real_timer_settime_233 = dlsym(RTLD_NEXT, "timer_settime");
+ }
+#ifdef __GLIBC__
+ real_timer_gettime_22 = dlvsym(RTLD_NEXT, "timer_gettime","GLIBC_2.2");
+ real_timer_gettime_233 = dlvsym(RTLD_NEXT, "timer_gettime","GLIBC_2.3.3");
+#endif
+ if (NULL == real_timer_gettime_233)
+ {
+ real_timer_gettime_233 = dlsym(RTLD_NEXT, "timer_gettime");
+ }
+#endif
+#endif
+#endif
+
+ dont_fake = true; // Do not fake times during initialization
+ dont_fake_final = false;
+ initialized = 1;
+
+ ft_shm_init();
+#ifdef FAKE_STAT
+ if (getenv("NO_FAKE_STAT")!=NULL)
+ {
+ fake_stat_disabled = 1; //Note that this is NOT re-checked
+ }
+#endif
+
+ if ((tmp_env = getenv("FAKETIME_CACHE_DURATION")) != NULL)
+ {
+ cache_duration = atoi(tmp_env);
+ }
+ if ((tmp_env = getenv("FAKETIME_NO_CACHE")) != NULL)
+ {
+ if (0 == strcmp(tmp_env, "1"))
+ {
+ cache_enabled = 0;
+ }
+ }
+ if ((tmp_env = getenv("DONT_FAKE_MONOTONIC")) != NULL)
+ {
+ if (0 == strcmp(tmp_env, "1"))
+ {
+ fake_monotonic_clock = 0;
+ }
+ }
+ /* Check whether we actually should be faking the returned timestamp. */
+
+ /* We can prevent faking time for specified commands */
+ if ((tmp_env = getenv("FAKETIME_SKIP_CMDS")) != NULL)
+ {
+ char *skip_cmd, *saveptr, *tmpvar;
+ /* Don't mess with the env variable directly. */
+ tmpvar = strdup(tmp_env);
+ if (tmpvar != NULL)
+ {
+ skip_cmd = strtok_r(tmpvar, ",", &saveptr);
+ while (skip_cmd != NULL)
+ {
+ if (0 == strcmp(progname, skip_cmd))
+ {
+ ft_mode = FT_NOOP;
+ dont_fake_final = true;
+ break;
+ }
+ skip_cmd = strtok_r(NULL, ",", &saveptr);
+ }
+ free(tmpvar);
+ tmpvar = NULL;
+ }
+ else
+ {
+ fprintf(stderr, "Error: Could not copy the environment variable value.\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ /* We can limit faking time to specified commands */
+ if ((tmp_env = getenv("FAKETIME_ONLY_CMDS")) != NULL)
+ {
+ char *only_cmd, *saveptr, *tmpvar;
+ bool cmd_matched = false;
+
+ if (getenv("FAKETIME_SKIP_CMDS") != NULL)
+ {
+ fprintf(stderr, "Error: Both FAKETIME_SKIP_CMDS and FAKETIME_ONLY_CMDS can't be set.\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Don't mess with the env variable directly. */
+ tmpvar = strdup(tmp_env);
+ if (tmpvar != NULL) {
+ only_cmd = strtok_r(tmpvar, ",", &saveptr);
+ while (only_cmd != NULL)
+ {
+ if (0 == strcmp(progname, only_cmd))
+ {
+ cmd_matched = true;
+ break;
+ }
+ only_cmd = strtok_r(NULL, ",", &saveptr);
+ }
+
+ if (!cmd_matched)
+ {
+ ft_mode = FT_NOOP;
+ dont_fake_final = true;
+ }
+ free(tmpvar);
+ } else {
+ fprintf(stderr, "Error: Could not copy the environment variable value.\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if ((tmp_env = getenv("FAKETIME_START_AFTER_SECONDS")) != NULL)
+ {
+ ft_start_after_secs = atol(tmp_env);
+ limited_faking = true;
+ }
+ if ((tmp_env = getenv("FAKETIME_STOP_AFTER_SECONDS")) != NULL)
+ {
+ ft_stop_after_secs = atol(tmp_env);
+ limited_faking = true;
+ }
+ if ((tmp_env = getenv("FAKETIME_START_AFTER_NUMCALLS")) != NULL)
+ {
+ ft_start_after_ncalls = atol(tmp_env);
+ limited_faking = true;
+ }
+ if ((tmp_env = getenv("FAKETIME_STOP_AFTER_NUMCALLS")) != NULL)
+ {
+ ft_stop_after_ncalls = atol(tmp_env);
+ limited_faking = true;
+ }
+
+ /* check whether we should spawn an external command */
+ if ((tmp_env = getenv("FAKETIME_SPAWN_TARGET")) != NULL)
+ {
+ spawnsupport = true;
+ (void) strncpy(ft_spawn_target, getenv("FAKETIME_SPAWN_TARGET"), sizeof(ft_spawn_target) - 1);
+ ft_spawn_target[sizeof(ft_spawn_target) - 1] = 0;
+ if ((tmp_env = getenv("FAKETIME_SPAWN_SECONDS")) != NULL)
+ {
+ ft_spawn_secs = atol(tmp_env);
+ }
+ if ((tmp_env = getenv("FAKETIME_SPAWN_NUMCALLS")) != NULL)
+ {
+ ft_spawn_ncalls = atol(tmp_env);
+ }
+ }
+
+ if ((tmp_env = getenv("FAKETIME_SAVE_FILE")) != NULL)
+ {
+ if (-1 == (outfile = open(tmp_env, O_RDWR | O_APPEND | O_CLOEXEC | O_CREAT,
+ S_IWUSR | S_IRUSR)))
+ {
+ perror("Opening file for saving timestamps failed");
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ /* load file only if reading timstamps from it is not finished yet */
+ if ((tmp_env = getenv("FAKETIME_LOAD_FILE")) != NULL)
+ {
+ int infile = -1;
+ struct stat sb;
+ if (-1 == (infile = open(tmp_env, O_RDONLY|O_CLOEXEC)))
+ {
+ perror("Opening file for loading timestamps failed");
+ exit(EXIT_FAILURE);
+ }
+
+ fstat(infile, &sb);
+ if (sizeof(stss[0]) > (infile_size = sb.st_size))
+ {
+ printf("There are no timestamps in the provided file to load timestamps from");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((infile_size % sizeof(stss[0])) != 0)
+ {
+ printf("File size is not multiple of timestamp size. It is probably damaged.");
+ exit(EXIT_FAILURE);
+ }
+
+ stss = mmap(NULL, infile_size, PROT_READ, MAP_SHARED, infile, 0);
+ if (stss == MAP_FAILED)
+ {
+ perror("Mapping file for loading timestamps failed");
+ exit(EXIT_FAILURE);
+ }
+ infile_set = true;
+ }
+
+ tmp_env = getenv("FAKETIME_FMT");
+ if (tmp_env == NULL)
+ {
+ strcpy(user_faked_time_fmt, "%Y-%m-%d %T");
+ }
+ else
+ {
+ strncpy(user_faked_time_fmt, tmp_env, BUFSIZ - 1);
+ user_faked_time_fmt[BUFSIZ - 1] = 0;
+ }
+
+ if (shared_sem != 0)
+ {
+ if (sem_wait(shared_sem) == -1)
+ {
+ perror("sem_wait");
+ exit(1);
+ }
+ if (ft_shared->start_time.real.tv_nsec == -1)
+ {
+ /* set up global start time */
+ system_time_from_system(&ftpl_starttime);
+ ft_shared->start_time = ftpl_starttime;
+ }
+ else
+ {
+ /** get preset start time */
+ ftpl_starttime = ft_shared->start_time;
+ }
+ if (sem_post(shared_sem) == -1)
+ {
+ perror("sem_post");
+ exit(1);
+ }
+ }
+ else
+ {
+ system_time_from_system(&ftpl_starttime);
+ }
+ /* fake time supplied as environment variable? */
+ if (NULL != (tmp_env = getenv("FAKETIME")))
+ {
+ parse_config_file = false;
+ parse_ft_string(tmp_env);
+ }
+
+ dont_fake = dont_fake_final;
+}
+
+
+/*
+ * =======================================================================
+ * Helper functions === HELPER
+ * =======================================================================
+ */
+
+static void remove_trailing_eols(char *line)
+{
+ char *endp = line + strlen(line);
+ /*
+ * erase the last char if it's a newline
+ * or carriage return, and back up.
+ * keep doing this, but don't back up
+ * past the beginning of the string.
+ */
+# define is_eolchar(c) ((c) == '\n' || (c) == '\r')
+ while (endp > line && is_eolchar(endp[-1]))
+ {
+ *--endp = '\0';
+ }
+}
+
+
+/*
+ * =======================================================================
+ * Implementation of faked functions === FAKE(FAKE)
+ * =======================================================================
+ */
+
+#ifdef PTHREAD_SINGLETHREADED_TIME
+static void pthread_cleanup_mutex_lock(void *data)
+{
+ pthread_mutex_t *mutex = data;
+ pthread_mutex_unlock(mutex);
+}
+#endif
+
+int fake_clock_gettime(clockid_t clk_id, struct timespec *tp)
+{
+ /* variables used for caching, introduced in version 0.6 */
+ static time_t last_data_fetch = 0; /* not fetched previously at first call */
+ static int cache_expired = 1; /* considered expired at first call */
+
+ if (dont_fake) return 0;
+ /* Per process timers are only sped up or slowed down */
+ if ((clk_id == CLOCK_PROCESS_CPUTIME_ID ) || (clk_id == CLOCK_THREAD_CPUTIME_ID))
+ {
+ if (user_rate_set)
+ {
+ timespecmul(tp, user_rate, tp);
+ }
+ return 0;
+ }
+
+ /* Sanity check by Karl Chan since v0.8 */
+ if (tp == NULL) return -1;
+
+#ifdef PTHREAD_SINGLETHREADED_TIME
+ static pthread_mutex_t time_mutex=PTHREAD_MUTEX_INITIALIZER;
+ pthread_mutex_lock(&time_mutex);
+ pthread_cleanup_push(pthread_cleanup_mutex_lock, &time_mutex);
+#endif
+
+ if ((limited_faking &&
+ ((ft_start_after_ncalls != -1) || (ft_stop_after_ncalls != -1))) ||
+ (spawnsupport && ft_spawn_ncalls))
+ {
+ if (callcounter < LONG_MAX) callcounter++;
+ }
+
+ if (limited_faking || spawnsupport)
+ {
+ struct timespec tmp_ts;
+ /* For debugging, output #seconds and #calls */
+ switch (clk_id)
+ {
+ case CLOCK_REALTIME:
+#ifdef CLOCK_REALTIME_COARSE
+ case CLOCK_REALTIME_COARSE:
+#endif
+ timespecsub(tp, &ftpl_starttime.real, &tmp_ts);
+ break;
+ case CLOCK_MONOTONIC:
+#ifdef CLOCK_MONOTONIC_COARSE
+ case CLOCK_MONOTONIC_COARSE:
+#endif
+ timespecsub(tp, &ftpl_starttime.mon, &tmp_ts);
+ break;
+ case CLOCK_MONOTONIC_RAW:
+ timespecsub(tp, &ftpl_starttime.mon_raw, &tmp_ts);
+ break;
+#ifdef CLOCK_BOOTTIME
+ case CLOCK_BOOTTIME:
+ timespecsub(tp, &ftpl_starttime.boot, &tmp_ts);
+ break;
+#endif
+ default:
+ timespecsub(tp, &ftpl_starttime.real, &tmp_ts);
+ break;
+ }
+
+ if (limited_faking)
+ {
+ /* Check whether we actually should be faking the returned timestamp. */
+ /* fprintf(stderr, "(libfaketime limits -> runtime: %lu, callcounter: %lu\n", (*time_tptr - ftpl_starttime), callcounter); */
+ if ((ft_start_after_secs != -1) && (tmp_ts.tv_sec < ft_start_after_secs)) return 0;
+ if ((ft_stop_after_secs != -1) && (tmp_ts.tv_sec >= ft_stop_after_secs)) return 0;
+ if ((ft_start_after_ncalls != -1) && (callcounter < ft_start_after_ncalls)) return 0;
+ if ((ft_stop_after_ncalls != -1) && (callcounter >= ft_stop_after_ncalls)) return 0;
+ /* fprintf(stderr, "(libfaketime limits -> runtime: %lu, callcounter: %lu continues\n", (*time_tptr - ftpl_starttime), callcounter); */
+ }
+
+ if (spawnsupport)
+ {
+ /* check whether we should spawn an external command */
+ if (spawned == 0)
+ { /* exec external command once only */
+ if (((tmp_ts.tv_sec == ft_spawn_secs) || (callcounter == ft_spawn_ncalls)) && (spawned == 0))
+ {
+ spawned = 1;
+ (void) (system(ft_spawn_target) + 1);
+ }
+ }
+ }
+ }
+
+ if (last_data_fetch > 0)
+ {
+ if ((tp->tv_sec - last_data_fetch) > cache_duration)
+ {
+ cache_expired = 1;
+ }
+ else
+ {
+ cache_expired = 0;
+ }
+ }
+
+ if (cache_enabled == 0)
+ {
+ cache_expired = 1;
+ }
+
+ if (cache_expired == 1)
+ {
+ static char user_faked_time[BUFFERLEN]; /* changed to static for caching in v0.6 */
+ /* initialize with default or env. variable */
+ char *tmp_env;
+
+ /* Can be enabled for testing ...
+ fprintf(stderr, "***************++ Cache expired ++**************\n");
+ */
+
+ if (NULL != (tmp_env = getenv("FAKETIME")))
+ {
+ strncpy(user_faked_time, tmp_env, BUFFERLEN - 1);
+ user_faked_time[BUFFERLEN - 1] = 0;
+ }
+ else
+ {
+ snprintf(user_faked_time, BUFFERLEN, "+0");
+ }
+
+ last_data_fetch = tp->tv_sec;
+ /* fake time supplied as environment variable? */
+ if (parse_config_file)
+ {
+ char custom_filename[BUFSIZ];
+ char filename[BUFSIZ];
+ FILE *faketimerc;
+ /* check whether there's a .faketimerc in the user's home directory, or
+ * a system-wide /etc/faketimerc present.
+ * The /etc/faketimerc handling has been contributed by David Burley,
+ * Jacob Moorman, and Wayne Davison of SourceForge, Inc. in version 0.6 */
+ (void) snprintf(custom_filename, BUFSIZ, "%s", getenv("FAKETIME_TIMESTAMP_FILE"));
+ (void) snprintf(filename, BUFSIZ, "%s/.faketimerc", getenv("HOME"));
+ if ((faketimerc = fopen(custom_filename, "rt")) != NULL ||
+ (faketimerc = fopen(filename, "rt")) != NULL ||
+ (faketimerc = fopen("/etc/faketimerc", "rt")) != NULL)
+ {
+ char line[BUFFERLEN];
+ while(fgets(line, BUFFERLEN, faketimerc) != NULL)
+ {
+ if ((strlen(line) > 1) && (line[0] != ' ') &&
+ (line[0] != '#') && (line[0] != ';'))
+ {
+ remove_trailing_eols(line);
+ strncpy(user_faked_time, line, BUFFERLEN-1);
+ user_faked_time[BUFFERLEN-1] = 0;
+ break;
+ }
+ }
+ fclose(faketimerc);
+ }
+ } /* read fake time from file */
+ parse_ft_string(user_faked_time);
+ } /* cache had expired */
+
+ if (infile_set)
+ {
+ if (load_time(tp))
+ {
+ return 0;
+ }
+ }
+
+ /* check whether the user gave us an absolute time to fake */
+ switch (ft_mode)
+ {
+ case FT_FREEZE: /* a specified time */
+ if (user_faked_time_set)
+ {
+ *tp = user_faked_time_timespec;
+ }
+ break;
+
+ case FT_START_AT: /* User-specified offset */
+ if (user_per_tick_inc_set)
+ {
+ /* increment time with every time() call*/
+ next_time(tp, &user_per_tick_inc);
+ }
+ else
+ {
+ /* Speed-up / slow-down contributed by Karl Chen in v0.8 */
+ struct timespec tdiff, timeadj;
+ switch (clk_id)
+ {
+ case CLOCK_REALTIME:
+#ifdef CLOCK_REALTIME_COARSE
+ case CLOCK_REALTIME_COARSE:
+#endif
+ timespecsub(tp, &ftpl_starttime.real, &tdiff);
+ break;
+ case CLOCK_MONOTONIC:
+#ifdef CLOCK_MONOTONIC_COARSE
+ case CLOCK_MONOTONIC_COARSE:
+#endif
+ timespecsub(tp, &ftpl_starttime.mon, &tdiff);
+ break;
+ case CLOCK_MONOTONIC_RAW:
+ timespecsub(tp, &ftpl_starttime.mon_raw, &tdiff);
+ break;
+#ifdef CLOCK_BOOTTIME
+ case CLOCK_BOOTTIME:
+ timespecsub(tp, &ftpl_starttime.boot, &tdiff);
+ break;
+#endif
+ default:
+ timespecsub(tp, &ftpl_starttime.real, &tdiff);
+ break;
+ } // end of switch (clk_id)
+ if (user_rate_set)
+ {
+ timespecmul(&tdiff, user_rate, &timeadj);
+ }
+ else
+ {
+ timeadj = tdiff;
+ }
+ timespecadd(&user_faked_time_timespec, &timeadj, tp);
+ }
+ break;
+
+ default:
+ return -1;
+ } // end of switch(ft_mode)
+
+#ifdef PTHREAD_SINGLETHREADED_TIME
+ pthread_cleanup_pop(1);
+#endif
+ save_time(tp);
+ return 0;
+}
+
+int fake_gettimeofday(struct timeval *tv)
+{
+ struct timespec ts;
+ int ret;
+ ts.tv_sec = tv->tv_sec;
+ ts.tv_nsec = tv->tv_usec * 1000 + ftpl_starttime.real.tv_nsec % 1000;
+
+ ret = fake_clock_gettime(CLOCK_REALTIME, &ts);
+ tv->tv_sec = ts.tv_sec;
+ tv->tv_usec =ts.tv_nsec / 1000;
+
+ return ret;
+}
+
+
+/*
+ * =======================================================================
+ * Faked system functions: Apple Mac OS X specific === FAKE(OSX)
+ * =======================================================================
+ */
+
+#ifdef __APPLEOSX__
+/*
+ * clock_gettime implementation for __APPLE__
+ * @note It always behave like being called with CLOCK_REALTIME.
+ */
+static int apple_clock_gettime(clockid_t clk_id, struct timespec *tp)
+{
+ int result;
+ mach_timespec_t cur_timeclockid_t;
+ (void) clk_id; /* unused */
+
+ if (NULL == real_clock_get_time)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original clock_get_time() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ DONT_FAKE_TIME(result = (*real_clock_get_time)(clock_serv_real, &cur_timeclockid_t));
+ tp->tv_sec = cur_timeclockid_t.tv_sec;
+ tp->tv_nsec = cur_timeclockid_t.tv_nsec;
+ return result;
+}
+
+int clock_get_time(clock_serv_t clock_serv, mach_timespec_t *cur_timeclockid_t)
+{
+ int result;
+ struct timespec ts;
+
+ /*
+ * Initialize our result with the real current time from CALENDAR_CLOCK.
+ * This is a bit of cheating, but we don't keep track of obtained clock
+ * services.
+ */
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(CLOCK_REALTIME, &ts));
+ if (result == -1) return result; /* original function failed */
+
+ /* pass the real current time to our faking version, overwriting it */
+ result = fake_clock_gettime(CLOCK_REALTIME, &ts);
+ cur_timeclockid_t->tv_sec = ts.tv_sec;
+ cur_timeclockid_t->tv_nsec = ts.tv_nsec;
+
+ /* return the result to the caller */
+ return result;
+}
+#endif
+
+
+/*
+ * =======================================================================
+ * Faked system-internal functions === FAKE(INT)
+ * =======================================================================
+ */
+
+#ifdef FAKE_INTERNAL_CALLS
+int __gettimeofday(struct timeval *tv, void *tz)
+{
+ int result;
+
+ /* sanity check */
+ if (tv == NULL)
+ {
+ return -1;
+ }
+
+ /* Check whether we've got a pointer to the real ftime() function yet */
+ if (NULL == real___gettimeofday)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original __gettimeofday() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ /* initialize our result with the real current time */
+ DONT_FAKE_TIME(result = (*real___gettimeofday)(tv, tz));
+ if (result == -1) return result; /* original function failed */
+
+ /* pass the real current time to our faking version, overwriting it */
+ result = fake_gettimeofday(tv);
+
+ /* return the result to the caller */
+ return result;
+}
+
+int __clock_gettime(clockid_t clk_id, struct timespec *tp)
+{
+ int result;
+
+ /* sanity check */
+ if (tp == NULL)
+ {
+ return -1;
+ }
+
+ if (NULL == real___clock_gettime)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original __clock_gettime() not found.\n");
+#endif
+ return -1; /* propagate error to caller */
+ }
+
+ /* initialize our result with the real current time */
+ DONT_FAKE_TIME(result = (*real___clock_gettime)(clk_id, tp));
+ if (result == -1) return result; /* original function failed */
+
+ /* pass the real current time to our faking version, overwriting it */
+ if (fake_monotonic_clock || (clk_id != CLOCK_MONOTONIC && clk_id != CLOCK_MONOTONIC_RAW
+#ifdef CLOCK_MONOTONIC_COARSE
+ && clk_id != CLOCK_MONOTONIC_COARSE
+#endif
+#ifdef CLOCK_BOOTTIME
+ && clk_id != CLOCK_BOOTTIME
+#endif
+ ))
+
+ {
+ result = fake_clock_gettime(clk_id, tp);
+ }
+
+ /* return the result to the caller */
+ return result;
+}
+
+time_t __time(time_t *time_tptr)
+{
+ struct timespec tp;
+ time_t result;
+
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(CLOCK_REALTIME, &tp));
+ if (result == -1) return -1;
+
+ /* pass the real current time to our faking version, overwriting it */
+ (void)fake_clock_gettime(CLOCK_REALTIME, &tp);
+
+ if (time_tptr != NULL)
+ {
+ *time_tptr = tp.tv_sec;
+ }
+ return tp.tv_sec;
+}
+
+int __ftime(struct timeb *tb)
+{
+ struct timespec tp;
+ int result;
+
+ /* sanity check */
+ if (tb == NULL)
+ return 0; /* ftime() always returns 0, see manpage */
+
+ /* Check whether we've got a pointer to the real ftime() function yet */
+ if (NULL == real___ftime)
+ { /* dlsym() failed */
+#ifdef DEBUG
+ (void) fprintf(stderr, "faketime problem: original ftime() not found.\n");
+#endif
+ return 0; /* propagate error to caller */
+ }
+
+ /* initialize our TZ result with the real current time */
+ DONT_FAKE_TIME(result = (*real___ftime)(tb));
+ if (result == -1)
+ {
+ return result;
+ }
+
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(CLOCK_REALTIME, &tp));
+ if (result == -1) return -1;
+
+ /* pass the real current time to our faking version, overwriting it */
+ (void)fake_clock_gettime(CLOCK_REALTIME, &tp);
+
+ tb->time = tp.tv_sec;
+ tb->millitm = tp.tv_nsec / 1000000;
+
+ /* return the result to the caller */
+ return result; /* will always be 0 (see manpage) */
+}
+
+#endif
+
+/*
+ * =======================================================================
+ * Faked pthread_cond_timedwait === FAKE(pthread)
+ * =======================================================================
+ */
+
+/* pthread_cond_timedwait
+
+ The specified absolute time in pthread_cond_timedwait is directly
+ passed to the kernel via the futex syscall. The kernel, however,
+ does not know about the fake time. In 99.9% of cases, the time
+ until this function should wait is calculated by an application
+ relatively to the current time, which has been faked in the
+ application. Hence, we should convert the waiting time back to real
+ time.
+
+ pthread_cond_timedwait in GLIBC_2_2_5 only supports
+ CLOCK_REALTIME. Since the init and destroy functions are not
+ redefined for GLIBC_2_2_5, a corresponding cond will never be
+ added to monotonic_conds and hence the correct branch will
+ always be taken.
+*/
+
+
+#ifdef FAKE_PTHREAD
+
+typedef enum {FT_COMPAT_GLIBC_2_2_5, FT_COMPAT_GLIBC_2_3_2} ft_lib_compat_pthread;
+
+struct pthread_cond_monotonic {
+ pthread_cond_t *ptr;
+ UT_hash_handle hh;
+};
+
+static struct pthread_cond_monotonic *monotonic_conds = NULL;
+
+int pthread_cond_init_232(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr)
+{
+ clockid_t clock_id;
+ int result;
+
+ result = real_pthread_cond_init_232(cond, attr);
+
+ if (result != 0 || attr == NULL)
+ return result;
+
+ pthread_condattr_getclock(attr, &clock_id);
+
+ if (clock_id == CLOCK_MONOTONIC) {
+ struct pthread_cond_monotonic *e = (struct pthread_cond_monotonic*)malloc(sizeof(struct pthread_cond_monotonic));
+ e->ptr = cond;
+ HASH_ADD_PTR(monotonic_conds, ptr, e);
+ }
+
+ return result;
+}
+
+int pthread_cond_destroy_232(pthread_cond_t *cond)
+{
+ struct pthread_cond_monotonic* e;
+ HASH_FIND_PTR(monotonic_conds, &cond, e);
+ if (e) {
+ HASH_DEL(monotonic_conds, e);
+ free(e);
+ }
+
+ return real_pthread_cond_destroy_232(cond);
+}
+
+int pthread_cond_timedwait_common(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime, ft_lib_compat_pthread compat)
+{
+ struct timespec tp, tdiff_actual, realtime, faketime;
+ struct timespec *tf = NULL;
+ struct pthread_cond_monotonic* e;
+ char *tmp_env;
+ int wait_ms;
+ clockid_t clk_id;
+ int result = 0;
+
+ if (abstime != NULL)
+ {
+ HASH_FIND_PTR(monotonic_conds, &cond, e);
+ if (e != NULL)
+ clk_id = CLOCK_MONOTONIC;
+ else
+ clk_id = CLOCK_REALTIME;
+
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(clk_id, &realtime));
+ if (result == -1)
+ {
+ return EINVAL;
+ }
+ faketime = realtime;
+ (void)fake_clock_gettime(clk_id, &faketime);
+
+ if ((tmp_env = getenv("FAKETIME_WAIT_MS")) != NULL)
+ {
+ wait_ms = atol(tmp_env);
+ DONT_FAKE_TIME(result = (*real_clock_gettime)(clk_id, &realtime));
+ if (result == -1)
+ {
+ return EINVAL;
+ }
+
+ tdiff_actual.tv_sec = wait_ms / 1000;
+ tdiff_actual.tv_nsec = (wait_ms % 1000) * 1000000;
+ timespecadd(&realtime, &tdiff_actual, &tp);
+
+ tf = &tp;
+ }
+ else
+ {
+ timespecsub(abstime, &faketime, &tp);
+ if (user_rate_set)
+ {
+ timespecmul(&tp, 1.0 / user_rate, &tdiff_actual);
+ }
+ else
+ {
+ tdiff_actual = tp;
+ }
+ }
+
+ /* For CLOCK_MONOTONIC, pthread_cond_timedwait uses clock_gettime
+ internally to calculate the appropriate duration for the
+ waiting time. This already uses the faked functions, hence, the
+ fake time needs to be passed to pthread_cond_timedwait for
+ CLOCK_MONOTONIC. */
+ if(clk_id == CLOCK_MONOTONIC)
+ timespecadd(&faketime, &tdiff_actual, &tp);
+ else
+ timespecadd(&realtime, &tdiff_actual, &tp);
+
+ tf = &tp;
+ }
+
+ switch (compat) {
+ case FT_COMPAT_GLIBC_2_3_2:
+ result = real_pthread_cond_timedwait_232(cond, mutex, tf);
+ break;
+ case FT_COMPAT_GLIBC_2_2_5:
+ result = real_pthread_cond_timedwait_225(cond, mutex, tf);
+ break;
+ }
+ return result;
+}
+
+int pthread_cond_timedwait_225(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
+{
+ return pthread_cond_timedwait_common(cond, mutex, abstime, FT_COMPAT_GLIBC_2_2_5);
+}
+
+int pthread_cond_timedwait_232(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
+{
+ return pthread_cond_timedwait_common(cond, mutex, abstime, FT_COMPAT_GLIBC_2_3_2);
+}
+
+__asm__(".symver pthread_cond_timedwait_225, pthread_cond_timedwait@GLIBC_2.2.5");
+__asm__(".symver pthread_cond_timedwait_232, pthread_cond_timedwait@@GLIBC_2.3.2");
+__asm__(".symver pthread_cond_init_232, pthread_cond_init@@GLIBC_2.3.2");
+__asm__(".symver pthread_cond_destroy_232, pthread_cond_destroy@@GLIBC_2.3.2");
+
+#endif
+
+
+/*
+ * Editor modelines
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
+
+/* eof */
diff --git a/tests/deckard/contrib/libfaketime/src/libfaketime.map b/tests/deckard/contrib/libfaketime/src/libfaketime.map
new file mode 100644
index 0000000..eb873e7
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/libfaketime.map
@@ -0,0 +1,21 @@
+GLIBC_2.2 {
+ global:
+
+ timer_gettime; timer_settime;
+ local: timer_settime_*; timer_gettime_*;
+};
+
+GLIBC_2.3.3 {
+ # Changed timer_t.
+ timer_gettime; timer_settime;
+} GLIBC_2.2;
+
+GLIBC_2.2.5 {
+ global: pthread_cond_timedwait;
+ local: pthread_cond_timedwait_*; pthread_cond_init_*; pthread_cond_destroy*;
+};
+
+GLIBC_2.3.2 {
+ pthread_cond_timedwait; pthread_cond_init; pthread_cond_destroy;
+} GLIBC_2.2.5;
+
diff --git a/tests/deckard/contrib/libfaketime/src/sunos_endian.h b/tests/deckard/contrib/libfaketime/src/sunos_endian.h
new file mode 100644
index 0000000..b15996a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/sunos_endian.h
@@ -0,0 +1,12 @@
+
+#ifndef SUN_OS_ENDIAN_H
+#define SUN_OS_ENDIAN_H
+
+#include <sys/byteorder.h>
+
+#define htobe64(x) BE_64(x)
+#define be64toh(x) BE_64(x)
+#define htole64(x) LE_64(x)
+#define le64toh(x) LE_64(x)
+
+#endif /* SUN_OS_ENDIAN_H */ \ No newline at end of file
diff --git a/tests/deckard/contrib/libfaketime/src/time_ops.h b/tests/deckard/contrib/libfaketime/src/time_ops.h
new file mode 100644
index 0000000..59ab1ee
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/time_ops.h
@@ -0,0 +1,104 @@
+/*
+ * Time operation macros based on sys/time.h
+ * Copyright 2013 Balint Reczey <balint@balintreczey.hu>
+ *
+ * This file is part of libfaketime.
+ *
+ * libfaketime is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License v2 as published by the Free
+ * Software Foundation.
+ *
+ * libfaketime is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License v2 along
+ * with libfaketime; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef TIME_OPS_H
+#define TIME_OPS_H
+#include <time.h>
+
+#define SEC_TO_uSEC 1000000
+#define SEC_TO_nSEC 1000000000
+
+/* Convenience macros for operations on timevals.
+ NOTE: `timercmp' does not work for >= or <=. */
+#define timerisset2(tvp, prefix) ((tvp)->tv_sec || (tvp)->tv_##prefix##sec)
+#define timerclear2(tvp, prefix) ((tvp)->tv_sec = (tvp)->tv_##prefix##sec = 0)
+#define timercmp2(a, b, CMP, prefix) \
+ (((a)->tv_sec == (b)->tv_sec) ? \
+ ((a)->tv_##prefix##sec CMP (b)->tv_##prefix##sec) : \
+ ((a)->tv_sec CMP (b)->tv_sec))
+#define timeradd2(a, b, result, prefix) \
+ do \
+ { \
+ (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
+ (result)->tv_##prefix##sec = (a)->tv_##prefix##sec + \
+ (b)->tv_##prefix##sec; \
+ if ((result)->tv_##prefix##sec >= SEC_TO_##prefix##SEC) \
+ { \
+ ++(result)->tv_sec; \
+ (result)->tv_##prefix##sec -= SEC_TO_##prefix##SEC; \
+ } \
+ } while (0)
+#define timersub2(a, b, result, prefix) \
+ do \
+ { \
+ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
+ (result)->tv_##prefix##sec = (a)->tv_##prefix##sec - \
+ (b)->tv_##prefix##sec; \
+ if ((result)->tv_##prefix##sec < 0) \
+ { \
+ --(result)->tv_sec; \
+ (result)->tv_##prefix##sec += SEC_TO_##prefix##SEC; \
+ } \
+ } while (0)
+#define timermul2(tvp, c, result, prefix) \
+ do \
+ { \
+ long long tmp_time; \
+ tmp_time = (c) * ((tvp)->tv_sec * SEC_TO_##prefix##SEC + \
+ (tvp)->tv_##prefix##sec); \
+ (result)->tv_##prefix##sec = tmp_time % SEC_TO_##prefix##SEC; \
+ (result)->tv_sec = (tmp_time - (result)->tv_##prefix##sec) / \
+ SEC_TO_##prefix##SEC; \
+ if ((result)->tv_##prefix##sec < 0) \
+ { \
+ (result)->tv_##prefix##sec += SEC_TO_##prefix##SEC; \
+ (result)->tv_sec -= 1; \
+ } \
+ } while (0)
+
+/* ops for microsecs */
+#ifndef timerisset
+#define timerisset(tvp) timerisset2(tvp,u)
+#endif
+#ifndef timerclear
+#define timerclear(tvp) timerclear2(tvp, u)
+#endif
+#ifndef timercmp
+#define timercmp(a, b, CMP) timercmp2(a, b, CMP, u)
+#endif
+#ifndef timeradd
+#define timeradd(a, b, result) timeradd2(a, b, result, u)
+#endif
+#ifndef timersub
+#define timersub(a, b, result) timersub2(a, b, result, u)
+#endif
+#ifndef timersub
+#define timermul(a, c, result) timermul2(a, c, result, u)
+#endif
+
+/* ops for nanosecs */
+#define timespecisset(tvp) timerisset2(tvp,n)
+#define timespecclear(tvp) timerclear2(tvp, n)
+#define timespeccmp(a, b, CMP) timercmp2(a, b, CMP, n)
+#define timespecadd(a, b, result) timeradd2(a, b, result, n)
+#define timespecsub(a, b, result) timersub2(a, b, result, n)
+#define timespecmul(a, c, result) timermul2(a, c, result, n)
+
+#endif
diff --git a/tests/deckard/contrib/libfaketime/src/timeprivacy b/tests/deckard/contrib/libfaketime/src/timeprivacy
new file mode 100644
index 0000000..5fd6fd7
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/timeprivacy
@@ -0,0 +1,270 @@
+#!/bin/bash
+
+## Copyright (c) 2013, adrelanos at riseup dot net
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+## 1. Redistributions of source code must retain the above copyright notice, this
+## list of conditions and the following disclaimer.
+## 2. 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.
+##
+## 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 OWNER 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.
+
+#set -x
+
+SCRIPTNAME="$(basename $0)"
+
+usage() {
+ echo "$SCRIPTNAME
+
+Usage: $SCRIPTNAME [-h help] [-d day] [-m month] [-y year] [-i increment in seconds (0-60)] [-r random increment in seconds (0-60)] [-f history folder]
+Example: $SCRIPTNAME -d 30 -m 12 -y 2013 -i 10 -f /tmp/$SCRIPTNAMEtest
+ sudo $SCRIPTNAME -d 30 -m 12 -y 2013 -r -f /tmp/$SCRIPTNAMEtest"
+}
+
+_randomincrement="none"
+_increment="none"
+
+while [ -n "$1" ]; do
+ case "$1" in
+ -h)
+ usage
+ exit 0
+ ;;
+ -d)
+ _day="$2"
+ shift
+ ;;
+ -m)
+ _month="$2"
+ shift
+ ;;
+ -y)
+ _year="$2"
+ shift
+ ;;
+ -i)
+ _increment="$2"
+ shift
+ ;;
+ -r)
+ _randomincrement="$2"
+ shift
+ ;;
+ -f)
+ TIMEDIR="$2"
+ shift
+ ;;
+ *)
+ command="$(which $1)"
+ ## From now on the complete to-be wrapped command + its args
+ ## are stored in $@, which will expand like we want it for
+ ## handling quoted arguments with whitespaces in it, etc.
+ break
+ esac
+ shift
+done
+
+if [ -z "$_day" ]; then
+ _day="$(date +"%d")"
+fi
+
+if [ -z "$_month" ]; then
+ _month="$(date +"%m")"
+fi
+
+if [ -z "$_year" ]; then
+ _year="$(date +"%Y")"
+fi
+
+if [ "$_randomincrement" = "none" ] && [ "$_increment" = "none" ]; then
+ _increment="1"
+fi
+
+if [ "$_randomincrement" = "none" ]; then
+ if [ -z "$_increment" ]; then
+ _increment="1"
+ fi
+elif [ "$_increment" = "none" ]; then
+ if [ "$_randomincrement" = "" ]; then
+ echo "randomincrement must be a positive number."
+ exit 1
+ else
+ ## random number between 1 and $_randomincrement
+ random_number="$(( 0+($(od -An -N2 -i /dev/random) )%($_randomincrement-0+1) ))"
+ _increment="$random_number"
+ fi
+else
+ echo "You can not combine -r and -i."
+ exit 1
+fi
+
+if [ -z "$TIMEDIR" ]; then
+ TIMEDIR=~/.timeprivacy
+fi
+
+nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "increment is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_year | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "_day is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_year | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "year is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_month | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "month is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_day | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "day is not a digit."
+ exit 1
+fi
+
+nodigits="$(echo $_increment | sed 's/[[:digit:]]//g')"
+if [ ! -z "$nodigits" ]; then
+ echo "increment is not a digit."
+ exit 1
+fi
+
+SECONDS_FILE="$TIMEDIR/seconds_file"
+MINUTES_FILE="$TIMEDIR/minutes_file"
+HOURS_FILE="$TIMEDIR/hours_file"
+
+#DAYS_FILE="$TIMEDIR/days_file"
+#MONTHS_FILE="$TIMEDIR/months_file"
+#YEARS_FILE="$TIMEDIR/years_file"
+
+#true "TIMEDIR: $TIMEDIR"
+#true "year: $_year"
+#true "month: $_month"
+#true "day: $_day"
+#true "_randomincrement: $_randomincrement"
+#true "_increment: $_increment"
+
+read_date_file() {
+ if [ ! -d "$TIMEDIR" ]; then
+ mkdir -p "$TIMEDIR"
+ fi
+
+ if [ ! -f "$SECONDS_FILE" ]; then
+ echo "0" > "$SECONDS_FILE"
+ fi
+
+ if [ ! -f "$MINUTES_FILE" ]; then
+ echo "0" > "$MINUTES_FILE"
+ fi
+
+ if [ ! -f "$HOURS_FILE" ]; then
+ echo "0" > "$HOURS_FILE"
+ fi
+
+ #if [ ! -f "$DAYS_FILE" ]; then
+ #echo "1" > "$DAYS_FILE"
+ #fi
+
+ #if [ ! -f "$MONTHS_FILE" ]; then
+ #echo "1" > "$MONTHS_FILE"
+ #fi
+
+ #if [ ! -f "$YEARS_FILE" ]; then
+ #echo "2013" > "$YEARS_FILE"
+ #fi
+
+ SECONDS="$(cat "$SECONDS_FILE")"
+ MINUTES="$(cat "$MINUTES_FILE")"
+ HOURS="$(cat "$HOURS_FILE")"
+
+ if [ -z "$SECONDS" ]; then
+ SECONDS="0"
+ fi
+
+ if [ -z "$MINUTES" ]; then
+ MINUTES="0"
+ fi
+
+ if [ -z "$HOURS" ]; then
+ HOURS="0"
+ fi
+
+ local nodigits="$(echo $SECONDS | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ SECONDS="0"
+ fi
+
+ local nodigits="$(echo $MINUTES | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ MINUTES="0"
+ fi
+
+ local nodigits="$(echo $HOURS | sed 's/[[:digit:]]//g')"
+ if [ ! -z "$nodigits" ]; then
+ HOURS="0"
+ fi
+
+ SECONDS="$(expr "$SECONDS" + "$_increment")" || true
+ if [ "$SECONDS" -ge "60" ]; then
+ SECONDS="0"
+
+ MINUTES="$(expr "$MINUTES" + "1")" || true
+ if [ "$MINUTES" -ge "60" ]; then
+ MINUTES="0"
+
+ HOURS="$(expr "$HOURS" + "1")" || true
+ if [ "$HOURS" -ge "24" ]; then
+ HOURS="0"
+ fi
+ echo "$HOURS" > "$HOURS_FILE"
+
+ fi
+ echo "$MINUTES" > "$MINUTES_FILE"
+
+ fi
+
+ echo "$SECONDS" > "$SECONDS_FILE"
+
+ #echo "$HOURS $MINUTES $SECONDS"
+}
+
+need_new_date() {
+ ## Testing
+ #while [ 1 ]; do
+ # read_date_file
+ #done
+
+ read_date_file
+
+ ## Testing
+ #echo "faketime '$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS' /bin/date"
+ #faketime "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS" /bin/date
+
+ echo "$_year-$_month-$_day $HOURS:$MINUTES:$SECONDS"
+}
+
+need_new_date
+
diff --git a/tests/deckard/contrib/libfaketime/src/uthash.h b/tests/deckard/contrib/libfaketime/src/uthash.h
new file mode 100644
index 0000000..7e64cac
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/src/uthash.h
@@ -0,0 +1,1208 @@
+/*
+Copyright (c) 2003-2017, Troy D. Hanson http://troydhanson.github.com/uthash/
+All rights reserved.
+
+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.
+
+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 OWNER
+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.
+*/
+
+#ifndef UTHASH_H
+#define UTHASH_H
+
+#define UTHASH_VERSION 2.0.2
+
+#include <string.h> /* memcmp, memset, strlen */
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h> /* exit */
+
+/* These macros use decltype or the earlier __typeof GNU extension.
+ As decltype is only available in newer compilers (VS2010 or gcc 4.3+
+ when compiling c++ source) this code uses whatever method is needed
+ or, for VS2008 where neither is available, uses casting workarounds. */
+#if !defined(DECLTYPE) && !defined(NO_DECLTYPE)
+#if defined(_MSC_VER) /* MS compiler */
+#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
+#define DECLTYPE(x) (decltype(x))
+#else /* VS2008 or older (or VS2010 in C mode) */
+#define NO_DECLTYPE
+#endif
+#elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__)
+#define NO_DECLTYPE
+#else /* GNU, Sun and other compilers */
+#define DECLTYPE(x) (__typeof(x))
+#endif
+#endif
+
+#ifdef NO_DECLTYPE
+#define DECLTYPE(x)
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ char **_da_dst = (char**)(&(dst)); \
+ *_da_dst = (char*)(src); \
+} while (0)
+#else
+#define DECLTYPE_ASSIGN(dst,src) \
+do { \
+ (dst) = DECLTYPE(dst)(src); \
+} while (0)
+#endif
+
+/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */
+#if defined(_WIN32)
+#if defined(_MSC_VER) && _MSC_VER >= 1600
+#include <stdint.h>
+#elif defined(__WATCOMC__) || defined(__MINGW32__) || defined(__CYGWIN__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+#elif defined(__GNUC__) && !defined(__VXWORKS__)
+#include <stdint.h>
+#else
+typedef unsigned int uint32_t;
+typedef unsigned char uint8_t;
+#endif
+
+#ifndef uthash_malloc
+#define uthash_malloc(sz) malloc(sz) /* malloc fcn */
+#endif
+#ifndef uthash_free
+#define uthash_free(ptr,sz) free(ptr) /* free fcn */
+#endif
+#ifndef uthash_bzero
+#define uthash_bzero(a,n) memset(a,'\0',n)
+#endif
+#ifndef uthash_memcmp
+#define uthash_memcmp(a,b,n) memcmp(a,b,n)
+#endif
+#ifndef uthash_strlen
+#define uthash_strlen(s) strlen(s)
+#endif
+
+#ifndef uthash_noexpand_fyi
+#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */
+#endif
+#ifndef uthash_expand_fyi
+#define uthash_expand_fyi(tbl) /* can be defined to log expands */
+#endif
+
+#ifndef HASH_NONFATAL_OOM
+#define HASH_NONFATAL_OOM 0
+#endif
+
+#if HASH_NONFATAL_OOM
+/* malloc failures can be recovered from */
+
+#ifndef uthash_nonfatal_oom
+#define uthash_nonfatal_oom(obj) do {} while (0) /* non-fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) do { (oomed) = 1; } while (0)
+#define IF_HASH_NONFATAL_OOM(x) x
+
+#else
+/* malloc failures result in lost memory, hash tables are unusable */
+
+#ifndef uthash_fatal
+#define uthash_fatal(msg) exit(-1) /* fatal OOM error */
+#endif
+
+#define HASH_RECORD_OOM(oomed) uthash_fatal("out of memory")
+#define IF_HASH_NONFATAL_OOM(x)
+
+#endif
+
+/* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */
+#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */
+#define HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */
+
+/* calculate the element whose hash handle address is hhp */
+#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
+/* calculate the hash handle from element address elp */
+#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle *)(((char*)(elp)) + ((tbl)->hho)))
+
+#define HASH_ROLLBACK_BKT(hh, head, itemptrhh) \
+do { \
+ struct UT_hash_handle *_hd_hh_item = (itemptrhh); \
+ unsigned _hd_bkt; \
+ HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ (head)->hh.tbl->buckets[_hd_bkt].count++; \
+ _hd_hh_item->hh_next = NULL; \
+ _hd_hh_item->hh_prev = NULL; \
+} while (0)
+
+#define HASH_VALUE(keyptr,keylen,hashv) \
+do { \
+ HASH_FCN(keyptr, keylen, hashv); \
+} while (0)
+
+#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \
+do { \
+ (out) = NULL; \
+ if (head) { \
+ unsigned _hf_bkt; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \
+ if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \
+ HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \
+ } \
+ } \
+} while (0)
+
+#define HASH_FIND(hh,head,keyptr,keylen,out) \
+do { \
+ unsigned _hf_hashv; \
+ HASH_VALUE(keyptr, keylen, _hf_hashv); \
+ HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \
+} while (0)
+
+#ifdef HASH_BLOOM
+#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM)
+#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL)
+#define HASH_BLOOM_MAKE(tbl,oomed) \
+do { \
+ (tbl)->bloom_nbits = HASH_BLOOM; \
+ (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \
+ if (!(tbl)->bloom_bv) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+ (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \
+ } \
+} while (0)
+
+#define HASH_BLOOM_FREE(tbl) \
+do { \
+ uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \
+} while (0)
+
+#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U)))
+#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U)))
+
+#define HASH_BLOOM_ADD(tbl,hashv) \
+ HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#define HASH_BLOOM_TEST(tbl,hashv) \
+ HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U)))
+
+#else
+#define HASH_BLOOM_MAKE(tbl,oomed)
+#define HASH_BLOOM_FREE(tbl)
+#define HASH_BLOOM_ADD(tbl,hashv)
+#define HASH_BLOOM_TEST(tbl,hashv) (1)
+#define HASH_BLOOM_BYTELEN 0U
+#endif
+
+#define HASH_MAKE_TABLE(hh,head,oomed) \
+do { \
+ (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \
+ if (!(head)->hh.tbl) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head)->hh.tbl->tail = &((head)->hh); \
+ (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \
+ (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \
+ (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \
+ (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \
+ HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \
+ (head)->hh.tbl->signature = HASH_SIGNATURE; \
+ if (!(head)->hh.tbl->buckets) { \
+ HASH_RECORD_OOM(oomed); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ } else { \
+ uthash_bzero((head)->hh.tbl->buckets, \
+ HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \
+ HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (oomed) { \
+ uthash_free((head)->hh.tbl->buckets, \
+ HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ } \
+ ) \
+ } \
+ } \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \
+do { \
+ (replaced) = NULL; \
+ HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+ if (replaced) { \
+ HASH_DELETE(hh, head, replaced); \
+ } \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \
+} while (0)
+
+#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \
+do { \
+ (replaced) = NULL; \
+ HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \
+ if (replaced) { \
+ HASH_DELETE(hh, head, replaced); \
+ } \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \
+} while (0)
+
+#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \
+do { \
+ unsigned _hr_hashv; \
+ HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \
+ HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \
+} while (0)
+
+#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \
+do { \
+ unsigned _hr_hashv; \
+ HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \
+ HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \
+} while (0)
+
+#define HASH_APPEND_LIST(hh, head, add) \
+do { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \
+ (head)->hh.tbl->tail->next = (add); \
+ (head)->hh.tbl->tail = &((add)->hh); \
+} while (0)
+
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \
+do { \
+ do { \
+ if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) { \
+ break; \
+ } \
+ } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
+} while (0)
+
+#ifdef NO_DECLTYPE
+#undef HASH_AKBI_INNER_LOOP
+#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \
+do { \
+ char *_hs_saved_head = (char*)(head); \
+ do { \
+ DECLTYPE_ASSIGN(head, _hs_iter); \
+ if (cmpfcn(head, add) > 0) { \
+ DECLTYPE_ASSIGN(head, _hs_saved_head); \
+ break; \
+ } \
+ DECLTYPE_ASSIGN(head, _hs_saved_head); \
+ } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \
+} while (0)
+#endif
+
+#if HASH_NONFATAL_OOM
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \
+do { \
+ if (!(oomed)) { \
+ unsigned _ha_bkt; \
+ (head)->hh.tbl->num_items++; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
+ HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
+ if (oomed) { \
+ HASH_ROLLBACK_BKT(hh, head, &(add)->hh); \
+ HASH_DELETE_HH(hh, head, &(add)->hh); \
+ (add)->hh.tbl = NULL; \
+ uthash_nonfatal_oom(add); \
+ } else { \
+ HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
+ HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
+ } \
+ } else { \
+ (add)->hh.tbl = NULL; \
+ uthash_nonfatal_oom(add); \
+ } \
+} while (0)
+
+#else
+
+#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \
+do { \
+ unsigned _ha_bkt; \
+ (head)->hh.tbl->num_items++; \
+ HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \
+ HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \
+ HASH_BLOOM_ADD((head)->hh.tbl, hashval); \
+ HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \
+} while (0)
+
+#endif
+
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \
+do { \
+ IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \
+ (add)->hh.hashv = (hashval); \
+ (add)->hh.key = (char*) (keyptr); \
+ (add)->hh.keylen = (unsigned) (keylen_in); \
+ if (!(head)) { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = NULL; \
+ HASH_MAKE_TABLE(hh, add, _ha_oomed); \
+ IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \
+ (head) = (add); \
+ IF_HASH_NONFATAL_OOM( } ) \
+ } else { \
+ void *_hs_iter = (head); \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \
+ if (_hs_iter) { \
+ (add)->hh.next = _hs_iter; \
+ if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \
+ HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \
+ } else { \
+ (head) = (add); \
+ } \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \
+ } else { \
+ HASH_APPEND_LIST(hh, head, add); \
+ } \
+ } \
+ HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
+ HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER"); \
+} while (0)
+
+#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \
+do { \
+ unsigned _hs_hashv; \
+ HASH_VALUE(keyptr, keylen_in, _hs_hashv); \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \
+ HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn)
+
+#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \
+ HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn)
+
+#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \
+do { \
+ IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \
+ (add)->hh.hashv = (hashval); \
+ (add)->hh.key = (char*) (keyptr); \
+ (add)->hh.keylen = (unsigned) (keylen_in); \
+ if (!(head)) { \
+ (add)->hh.next = NULL; \
+ (add)->hh.prev = NULL; \
+ HASH_MAKE_TABLE(hh, add, _ha_oomed); \
+ IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \
+ (head) = (add); \
+ IF_HASH_NONFATAL_OOM( } ) \
+ } else { \
+ (add)->hh.tbl = (head)->hh.tbl; \
+ HASH_APPEND_LIST(hh, head, add); \
+ } \
+ HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \
+ HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE"); \
+} while (0)
+
+#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \
+do { \
+ unsigned _ha_hashv; \
+ HASH_VALUE(keyptr, keylen_in, _ha_hashv); \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \
+} while (0)
+
+#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \
+ HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add)
+
+#define HASH_ADD(hh,head,fieldname,keylen_in,add) \
+ HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add)
+
+#define HASH_TO_BKT(hashv,num_bkts,bkt) \
+do { \
+ bkt = ((hashv) & ((num_bkts) - 1U)); \
+} while (0)
+
+/* delete "delptr" from the hash table.
+ * "the usual" patch-up process for the app-order doubly-linked-list.
+ * The use of _hd_hh_del below deserves special explanation.
+ * These used to be expressed using (delptr) but that led to a bug
+ * if someone used the same symbol for the head and deletee, like
+ * HASH_DELETE(hh,users,users);
+ * We want that to work, but by changing the head (users) below
+ * we were forfeiting our ability to further refer to the deletee (users)
+ * in the patch-up process. Solution: use scratch space to
+ * copy the deletee pointer, then the latter references are via that
+ * scratch pointer rather than through the repointed (users) symbol.
+ */
+#define HASH_DELETE(hh,head,delptr) \
+ HASH_DELETE_HH(hh, head, &(delptr)->hh)
+
+#define HASH_DELETE_HH(hh,head,delptrhh) \
+do { \
+ struct UT_hash_handle *_hd_hh_del = (delptrhh); \
+ if ((_hd_hh_del->prev == NULL) && (_hd_hh_del->next == NULL)) { \
+ HASH_BLOOM_FREE((head)->hh.tbl); \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head) = NULL; \
+ } else { \
+ unsigned _hd_bkt; \
+ if (_hd_hh_del == (head)->hh.tbl->tail) { \
+ (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \
+ } \
+ if (_hd_hh_del->prev != NULL) { \
+ HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \
+ } else { \
+ DECLTYPE_ASSIGN(head, _hd_hh_del->next); \
+ } \
+ if (_hd_hh_del->next != NULL) { \
+ HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \
+ } \
+ HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \
+ HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \
+ (head)->hh.tbl->num_items--; \
+ } \
+ HASH_FSCK(hh, head, "HASH_DELETE_HH"); \
+} while (0)
+
+/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
+#define HASH_FIND_STR(head,findstr,out) \
+ HASH_FIND(hh,head,findstr,(unsigned)uthash_strlen(findstr),out)
+#define HASH_ADD_STR(head,strfield,add) \
+ HASH_ADD(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add)
+#define HASH_REPLACE_STR(head,strfield,add,replaced) \
+ HASH_REPLACE(hh,head,strfield[0],(unsigned)uthash_strlen(add->strfield),add,replaced)
+#define HASH_FIND_INT(head,findint,out) \
+ HASH_FIND(hh,head,findint,sizeof(int),out)
+#define HASH_ADD_INT(head,intfield,add) \
+ HASH_ADD(hh,head,intfield,sizeof(int),add)
+#define HASH_REPLACE_INT(head,intfield,add,replaced) \
+ HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
+#define HASH_FIND_PTR(head,findptr,out) \
+ HASH_FIND(hh,head,findptr,sizeof(void *),out)
+#define HASH_ADD_PTR(head,ptrfield,add) \
+ HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
+#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \
+ HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
+#define HASH_DEL(head,delptr) \
+ HASH_DELETE(hh,head,delptr)
+
+/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
+ * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
+ */
+#ifdef HASH_DEBUG
+#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
+#define HASH_FSCK(hh,head,where) \
+do { \
+ struct UT_hash_handle *_thh; \
+ if (head) { \
+ unsigned _bkt_i; \
+ unsigned _count = 0; \
+ char *_prev; \
+ for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \
+ unsigned _bkt_count = 0; \
+ _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \
+ _prev = NULL; \
+ while (_thh) { \
+ if (_prev != (char*)(_thh->hh_prev)) { \
+ HASH_OOPS("%s: invalid hh_prev %p, actual %p\n", \
+ (where), (void*)_thh->hh_prev, (void*)_prev); \
+ } \
+ _bkt_count++; \
+ _prev = (char*)(_thh); \
+ _thh = _thh->hh_next; \
+ } \
+ _count += _bkt_count; \
+ if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \
+ HASH_OOPS("%s: invalid bucket count %u, actual %u\n", \
+ (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \
+ } \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("%s: invalid hh item count %u, actual %u\n", \
+ (where), (head)->hh.tbl->num_items, _count); \
+ } \
+ _count = 0; \
+ _prev = NULL; \
+ _thh = &(head)->hh; \
+ while (_thh) { \
+ _count++; \
+ if (_prev != (char*)_thh->prev) { \
+ HASH_OOPS("%s: invalid prev %p, actual %p\n", \
+ (where), (void*)_thh->prev, (void*)_prev); \
+ } \
+ _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \
+ _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \
+ } \
+ if (_count != (head)->hh.tbl->num_items) { \
+ HASH_OOPS("%s: invalid app item count %u, actual %u\n", \
+ (where), (head)->hh.tbl->num_items, _count); \
+ } \
+ } \
+} while (0)
+#else
+#define HASH_FSCK(hh,head,where)
+#endif
+
+/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to
+ * the descriptor to which this macro is defined for tuning the hash function.
+ * The app can #include <unistd.h> to get the prototype for write(2). */
+#ifdef HASH_EMIT_KEYS
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \
+do { \
+ unsigned _klen = fieldlen; \
+ write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \
+ write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \
+} while (0)
+#else
+#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)
+#endif
+
+/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
+#ifdef HASH_FUNCTION
+#define HASH_FCN HASH_FUNCTION
+#else
+#define HASH_FCN HASH_JEN
+#endif
+
+/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */
+#define HASH_BER(key,keylen,hashv) \
+do { \
+ unsigned _hb_keylen = (unsigned)keylen; \
+ const unsigned char *_hb_key = (const unsigned char*)(key); \
+ (hashv) = 0; \
+ while (_hb_keylen-- != 0U) { \
+ (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \
+ } \
+} while (0)
+
+
+/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at
+ * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
+#define HASH_SAX(key,keylen,hashv) \
+do { \
+ unsigned _sx_i; \
+ const unsigned char *_hs_key = (const unsigned char*)(key); \
+ hashv = 0; \
+ for (_sx_i=0; _sx_i < keylen; _sx_i++) { \
+ hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \
+ } \
+} while (0)
+/* FNV-1a variation */
+#define HASH_FNV(key,keylen,hashv) \
+do { \
+ unsigned _fn_i; \
+ const unsigned char *_hf_key = (const unsigned char*)(key); \
+ (hashv) = 2166136261U; \
+ for (_fn_i=0; _fn_i < keylen; _fn_i++) { \
+ hashv = hashv ^ _hf_key[_fn_i]; \
+ hashv = hashv * 16777619U; \
+ } \
+} while (0)
+
+#define HASH_OAT(key,keylen,hashv) \
+do { \
+ unsigned _ho_i; \
+ const unsigned char *_ho_key=(const unsigned char*)(key); \
+ hashv = 0; \
+ for(_ho_i=0; _ho_i < keylen; _ho_i++) { \
+ hashv += _ho_key[_ho_i]; \
+ hashv += (hashv << 10); \
+ hashv ^= (hashv >> 6); \
+ } \
+ hashv += (hashv << 3); \
+ hashv ^= (hashv >> 11); \
+ hashv += (hashv << 15); \
+} while (0)
+
+#define HASH_JEN_MIX(a,b,c) \
+do { \
+ a -= b; a -= c; a ^= ( c >> 13 ); \
+ b -= c; b -= a; b ^= ( a << 8 ); \
+ c -= a; c -= b; c ^= ( b >> 13 ); \
+ a -= b; a -= c; a ^= ( c >> 12 ); \
+ b -= c; b -= a; b ^= ( a << 16 ); \
+ c -= a; c -= b; c ^= ( b >> 5 ); \
+ a -= b; a -= c; a ^= ( c >> 3 ); \
+ b -= c; b -= a; b ^= ( a << 10 ); \
+ c -= a; c -= b; c ^= ( b >> 15 ); \
+} while (0)
+
+#define HASH_JEN(key,keylen,hashv) \
+do { \
+ unsigned _hj_i,_hj_j,_hj_k; \
+ unsigned const char *_hj_key=(unsigned const char*)(key); \
+ hashv = 0xfeedbeefu; \
+ _hj_i = _hj_j = 0x9e3779b9u; \
+ _hj_k = (unsigned)(keylen); \
+ while (_hj_k >= 12U) { \
+ _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \
+ + ( (unsigned)_hj_key[2] << 16 ) \
+ + ( (unsigned)_hj_key[3] << 24 ) ); \
+ _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \
+ + ( (unsigned)_hj_key[6] << 16 ) \
+ + ( (unsigned)_hj_key[7] << 24 ) ); \
+ hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \
+ + ( (unsigned)_hj_key[10] << 16 ) \
+ + ( (unsigned)_hj_key[11] << 24 ) ); \
+ \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+ \
+ _hj_key += 12; \
+ _hj_k -= 12U; \
+ } \
+ hashv += (unsigned)(keylen); \
+ switch ( _hj_k ) { \
+ case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \
+ case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \
+ case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \
+ case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \
+ case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \
+ case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \
+ case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \
+ case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \
+ case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \
+ case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \
+ case 1: _hj_i += _hj_key[0]; \
+ } \
+ HASH_JEN_MIX(_hj_i, _hj_j, hashv); \
+} while (0)
+
+/* The Paul Hsieh hash function */
+#undef get16bits
+#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
+ || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
+#define get16bits(d) (*((const uint16_t *) (d)))
+#endif
+
+#if !defined (get16bits)
+#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
+ +(uint32_t)(((const uint8_t *)(d))[0]) )
+#endif
+#define HASH_SFH(key,keylen,hashv) \
+do { \
+ unsigned const char *_sfh_key=(unsigned const char*)(key); \
+ uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \
+ \
+ unsigned _sfh_rem = _sfh_len & 3U; \
+ _sfh_len >>= 2; \
+ hashv = 0xcafebabeu; \
+ \
+ /* Main loop */ \
+ for (;_sfh_len > 0U; _sfh_len--) { \
+ hashv += get16bits (_sfh_key); \
+ _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \
+ hashv = (hashv << 16) ^ _sfh_tmp; \
+ _sfh_key += 2U*sizeof (uint16_t); \
+ hashv += hashv >> 11; \
+ } \
+ \
+ /* Handle end cases */ \
+ switch (_sfh_rem) { \
+ case 3: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 16; \
+ hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \
+ hashv += hashv >> 11; \
+ break; \
+ case 2: hashv += get16bits (_sfh_key); \
+ hashv ^= hashv << 11; \
+ hashv += hashv >> 17; \
+ break; \
+ case 1: hashv += *_sfh_key; \
+ hashv ^= hashv << 10; \
+ hashv += hashv >> 1; \
+ } \
+ \
+ /* Force "avalanching" of final 127 bits */ \
+ hashv ^= hashv << 3; \
+ hashv += hashv >> 5; \
+ hashv ^= hashv << 4; \
+ hashv += hashv >> 17; \
+ hashv ^= hashv << 25; \
+ hashv += hashv >> 6; \
+} while (0)
+
+#ifdef HASH_USING_NO_STRICT_ALIASING
+/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
+ * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
+ * MurmurHash uses the faster approach only on CPU's where we know it's safe.
+ *
+ * Note the preprocessor built-in defines can be emitted using:
+ *
+ * gcc -m64 -dM -E - < /dev/null (on gcc)
+ * cc -## a.c (where a.c is a simple test file) (Sun Studio)
+ */
+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))
+#define MUR_GETBLOCK(p,i) p[i]
+#else /* non intel */
+#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 3UL) == 0UL)
+#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 3UL) == 1UL)
+#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 3UL) == 2UL)
+#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 3UL) == 3UL)
+#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
+#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
+#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
+#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8))
+#else /* assume little endian non-intel */
+#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
+#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
+#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8))
+#endif
+#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \
+ (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
+ (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \
+ MUR_ONE_THREE(p))))
+#endif
+#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+#define MUR_FMIX(_h) \
+do { \
+ _h ^= _h >> 16; \
+ _h *= 0x85ebca6bu; \
+ _h ^= _h >> 13; \
+ _h *= 0xc2b2ae35u; \
+ _h ^= _h >> 16; \
+} while (0)
+
+#define HASH_MUR(key,keylen,hashv) \
+do { \
+ const uint8_t *_mur_data = (const uint8_t*)(key); \
+ const int _mur_nblocks = (int)(keylen) / 4; \
+ uint32_t _mur_h1 = 0xf88D5353u; \
+ uint32_t _mur_c1 = 0xcc9e2d51u; \
+ uint32_t _mur_c2 = 0x1b873593u; \
+ uint32_t _mur_k1 = 0; \
+ const uint8_t *_mur_tail; \
+ const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+(_mur_nblocks*4)); \
+ int _mur_i; \
+ for (_mur_i = -_mur_nblocks; _mur_i != 0; _mur_i++) { \
+ _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ \
+ _mur_h1 ^= _mur_k1; \
+ _mur_h1 = MUR_ROTL32(_mur_h1,13); \
+ _mur_h1 = (_mur_h1*5U) + 0xe6546b64u; \
+ } \
+ _mur_tail = (const uint8_t*)(_mur_data + (_mur_nblocks*4)); \
+ _mur_k1=0; \
+ switch ((keylen) & 3U) { \
+ case 0: break; \
+ case 3: _mur_k1 ^= (uint32_t)_mur_tail[2] << 16; /* FALLTHROUGH */ \
+ case 2: _mur_k1 ^= (uint32_t)_mur_tail[1] << 8; /* FALLTHROUGH */ \
+ case 1: _mur_k1 ^= (uint32_t)_mur_tail[0]; \
+ _mur_k1 *= _mur_c1; \
+ _mur_k1 = MUR_ROTL32(_mur_k1,15); \
+ _mur_k1 *= _mur_c2; \
+ _mur_h1 ^= _mur_k1; \
+ } \
+ _mur_h1 ^= (uint32_t)(keylen); \
+ MUR_FMIX(_mur_h1); \
+ hashv = _mur_h1; \
+} while (0)
+#endif /* HASH_USING_NO_STRICT_ALIASING */
+
+/* iterate over items in a known bucket to find desired item */
+#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \
+do { \
+ if ((head).hh_head != NULL) { \
+ DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \
+ } else { \
+ (out) = NULL; \
+ } \
+ while ((out) != NULL) { \
+ if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \
+ if (uthash_memcmp((out)->hh.key, keyptr, keylen_in) == 0) { \
+ break; \
+ } \
+ } \
+ if ((out)->hh.hh_next != NULL) { \
+ DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \
+ } else { \
+ (out) = NULL; \
+ } \
+ } \
+} while (0)
+
+/* add an item to a bucket */
+#define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \
+do { \
+ UT_hash_bucket *_ha_head = &(head); \
+ _ha_head->count++; \
+ (addhh)->hh_next = _ha_head->hh_head; \
+ (addhh)->hh_prev = NULL; \
+ if (_ha_head->hh_head != NULL) { \
+ _ha_head->hh_head->hh_prev = (addhh); \
+ } \
+ _ha_head->hh_head = (addhh); \
+ if ((_ha_head->count >= ((_ha_head->expand_mult + 1U) * HASH_BKT_CAPACITY_THRESH)) \
+ && !(addhh)->tbl->noexpand) { \
+ HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (oomed) { \
+ HASH_DEL_IN_BKT(head,addhh); \
+ } \
+ ) \
+ } \
+} while (0)
+
+/* remove an item from a given bucket */
+#define HASH_DEL_IN_BKT(head,delhh) \
+do { \
+ UT_hash_bucket *_hd_head = &(head); \
+ _hd_head->count--; \
+ if (_hd_head->hh_head == (delhh)) { \
+ _hd_head->hh_head = (delhh)->hh_next; \
+ } \
+ if ((delhh)->hh_prev) { \
+ (delhh)->hh_prev->hh_next = (delhh)->hh_next; \
+ } \
+ if ((delhh)->hh_next) { \
+ (delhh)->hh_next->hh_prev = (delhh)->hh_prev; \
+ } \
+} while (0)
+
+/* Bucket expansion has the effect of doubling the number of buckets
+ * and redistributing the items into the new buckets. Ideally the
+ * items will distribute more or less evenly into the new buckets
+ * (the extent to which this is true is a measure of the quality of
+ * the hash function as it applies to the key domain).
+ *
+ * With the items distributed into more buckets, the chain length
+ * (item count) in each bucket is reduced. Thus by expanding buckets
+ * the hash keeps a bound on the chain length. This bounded chain
+ * length is the essence of how a hash provides constant time lookup.
+ *
+ * The calculation of tbl->ideal_chain_maxlen below deserves some
+ * explanation. First, keep in mind that we're calculating the ideal
+ * maximum chain length based on the *new* (doubled) bucket count.
+ * In fractions this is just n/b (n=number of items,b=new num buckets).
+ * Since the ideal chain length is an integer, we want to calculate
+ * ceil(n/b). We don't depend on floating point arithmetic in this
+ * hash, so to calculate ceil(n/b) with integers we could write
+ *
+ * ceil(n/b) = (n/b) + ((n%b)?1:0)
+ *
+ * and in fact a previous version of this hash did just that.
+ * But now we have improved things a bit by recognizing that b is
+ * always a power of two. We keep its base 2 log handy (call it lb),
+ * so now we can write this with a bit shift and logical AND:
+ *
+ * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
+ *
+ */
+#define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \
+do { \
+ unsigned _he_bkt; \
+ unsigned _he_bkt_i; \
+ struct UT_hash_handle *_he_thh, *_he_hh_nxt; \
+ UT_hash_bucket *_he_new_buckets, *_he_newbkt; \
+ _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \
+ 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ if (!_he_new_buckets) { \
+ HASH_RECORD_OOM(oomed); \
+ } else { \
+ uthash_bzero(_he_new_buckets, \
+ 2UL * (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ (tbl)->ideal_chain_maxlen = \
+ ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) + \
+ ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \
+ (tbl)->nonideal_items = 0; \
+ for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) { \
+ _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head; \
+ while (_he_thh != NULL) { \
+ _he_hh_nxt = _he_thh->hh_next; \
+ HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt); \
+ _he_newbkt = &(_he_new_buckets[_he_bkt]); \
+ if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) { \
+ (tbl)->nonideal_items++; \
+ _he_newbkt->expand_mult = _he_newbkt->count / (tbl)->ideal_chain_maxlen; \
+ } \
+ _he_thh->hh_prev = NULL; \
+ _he_thh->hh_next = _he_newbkt->hh_head; \
+ if (_he_newbkt->hh_head != NULL) { \
+ _he_newbkt->hh_head->hh_prev = _he_thh; \
+ } \
+ _he_newbkt->hh_head = _he_thh; \
+ _he_thh = _he_hh_nxt; \
+ } \
+ } \
+ uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \
+ (tbl)->num_buckets *= 2U; \
+ (tbl)->log2_num_buckets++; \
+ (tbl)->buckets = _he_new_buckets; \
+ (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ? \
+ ((tbl)->ineff_expands+1U) : 0U; \
+ if ((tbl)->ineff_expands > 1U) { \
+ (tbl)->noexpand = 1; \
+ uthash_noexpand_fyi(tbl); \
+ } \
+ uthash_expand_fyi(tbl); \
+ } \
+} while (0)
+
+
+/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
+/* Note that HASH_SORT assumes the hash handle name to be hh.
+ * HASH_SRT was added to allow the hash handle name to be passed in. */
+#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
+#define HASH_SRT(hh,head,cmpfcn) \
+do { \
+ unsigned _hs_i; \
+ unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \
+ struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \
+ if (head != NULL) { \
+ _hs_insize = 1; \
+ _hs_looping = 1; \
+ _hs_list = &((head)->hh); \
+ while (_hs_looping != 0U) { \
+ _hs_p = _hs_list; \
+ _hs_list = NULL; \
+ _hs_tail = NULL; \
+ _hs_nmerges = 0; \
+ while (_hs_p != NULL) { \
+ _hs_nmerges++; \
+ _hs_q = _hs_p; \
+ _hs_psize = 0; \
+ for (_hs_i = 0; _hs_i < _hs_insize; ++_hs_i) { \
+ _hs_psize++; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ if (_hs_q == NULL) { \
+ break; \
+ } \
+ } \
+ _hs_qsize = _hs_insize; \
+ while ((_hs_psize != 0U) || ((_hs_qsize != 0U) && (_hs_q != NULL))) { \
+ if (_hs_psize == 0U) { \
+ _hs_e = _hs_q; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ _hs_qsize--; \
+ } else if ((_hs_qsize == 0U) || (_hs_q == NULL)) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL) { \
+ _hs_p = ((_hs_p->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
+ } \
+ _hs_psize--; \
+ } else if ((cmpfcn( \
+ DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \
+ DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \
+ )) <= 0) { \
+ _hs_e = _hs_p; \
+ if (_hs_p != NULL) { \
+ _hs_p = ((_hs_p->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \
+ } \
+ _hs_psize--; \
+ } else { \
+ _hs_e = _hs_q; \
+ _hs_q = ((_hs_q->next != NULL) ? \
+ HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \
+ _hs_qsize--; \
+ } \
+ if ( _hs_tail != NULL ) { \
+ _hs_tail->next = ((_hs_e != NULL) ? \
+ ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \
+ } else { \
+ _hs_list = _hs_e; \
+ } \
+ if (_hs_e != NULL) { \
+ _hs_e->prev = ((_hs_tail != NULL) ? \
+ ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \
+ } \
+ _hs_tail = _hs_e; \
+ } \
+ _hs_p = _hs_q; \
+ } \
+ if (_hs_tail != NULL) { \
+ _hs_tail->next = NULL; \
+ } \
+ if (_hs_nmerges <= 1U) { \
+ _hs_looping = 0; \
+ (head)->hh.tbl->tail = _hs_tail; \
+ DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \
+ } \
+ _hs_insize *= 2U; \
+ } \
+ HASH_FSCK(hh, head, "HASH_SRT"); \
+ } \
+} while (0)
+
+/* This function selects items from one hash into another hash.
+ * The end result is that the selected items have dual presence
+ * in both hashes. There is no copy of the items made; rather
+ * they are added into the new hash through a secondary hash
+ * hash handle that must be present in the structure. */
+#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \
+do { \
+ unsigned _src_bkt, _dst_bkt; \
+ void *_last_elt = NULL, *_elt; \
+ UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \
+ ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \
+ if ((src) != NULL) { \
+ for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \
+ for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \
+ _src_hh != NULL; \
+ _src_hh = _src_hh->hh_next) { \
+ _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \
+ if (cond(_elt)) { \
+ IF_HASH_NONFATAL_OOM( int _hs_oomed = 0; ) \
+ _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \
+ _dst_hh->key = _src_hh->key; \
+ _dst_hh->keylen = _src_hh->keylen; \
+ _dst_hh->hashv = _src_hh->hashv; \
+ _dst_hh->prev = _last_elt; \
+ _dst_hh->next = NULL; \
+ if (_last_elt_hh != NULL) { \
+ _last_elt_hh->next = _elt; \
+ } \
+ if ((dst) == NULL) { \
+ DECLTYPE_ASSIGN(dst, _elt); \
+ HASH_MAKE_TABLE(hh_dst, dst, _hs_oomed); \
+ IF_HASH_NONFATAL_OOM( \
+ if (_hs_oomed) { \
+ uthash_nonfatal_oom(_elt); \
+ (dst) = NULL; \
+ continue; \
+ } \
+ ) \
+ } else { \
+ _dst_hh->tbl = (dst)->hh_dst.tbl; \
+ } \
+ HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \
+ HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \
+ (dst)->hh_dst.tbl->num_items++; \
+ IF_HASH_NONFATAL_OOM( \
+ if (_hs_oomed) { \
+ HASH_ROLLBACK_BKT(hh_dst, dst, _dst_hh); \
+ HASH_DELETE_HH(hh_dst, dst, _dst_hh); \
+ _dst_hh->tbl = NULL; \
+ uthash_nonfatal_oom(_elt); \
+ continue; \
+ } \
+ ) \
+ HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv); \
+ _last_elt = _elt; \
+ _last_elt_hh = _dst_hh; \
+ } \
+ } \
+ } \
+ } \
+ HASH_FSCK(hh_dst, dst, "HASH_SELECT"); \
+} while (0)
+
+#define HASH_CLEAR(hh,head) \
+do { \
+ if ((head) != NULL) { \
+ HASH_BLOOM_FREE((head)->hh.tbl); \
+ uthash_free((head)->hh.tbl->buckets, \
+ (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \
+ uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \
+ (head) = NULL; \
+ } \
+} while (0)
+
+#define HASH_OVERHEAD(hh,head) \
+ (((head) != NULL) ? ( \
+ (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \
+ ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \
+ sizeof(UT_hash_table) + \
+ (HASH_BLOOM_BYTELEN))) : 0U)
+
+#ifdef NO_DECLTYPE
+#define HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#else
+#define HASH_ITER(hh,head,el,tmp) \
+for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \
+ (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL)))
+#endif
+
+/* obtain a count of items in the hash */
+#define HASH_COUNT(head) HASH_CNT(hh,head)
+#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U)
+
+typedef struct UT_hash_bucket {
+ struct UT_hash_handle *hh_head;
+ unsigned count;
+
+ /* expand_mult is normally set to 0. In this situation, the max chain length
+ * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
+ * the bucket's chain exceeds this length, bucket expansion is triggered).
+ * However, setting expand_mult to a non-zero value delays bucket expansion
+ * (that would be triggered by additions to this particular bucket)
+ * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
+ * (The multiplier is simply expand_mult+1). The whole idea of this
+ * multiplier is to reduce bucket expansions, since they are expensive, in
+ * situations where we know that a particular bucket tends to be overused.
+ * It is better to let its chain length grow to a longer yet-still-bounded
+ * value, than to do an O(n) bucket expansion too often.
+ */
+ unsigned expand_mult;
+
+} UT_hash_bucket;
+
+/* random signature used only to find hash tables in external analysis */
+#define HASH_SIGNATURE 0xa0111fe1u
+#define HASH_BLOOM_SIGNATURE 0xb12220f2u
+
+typedef struct UT_hash_table {
+ UT_hash_bucket *buckets;
+ unsigned num_buckets, log2_num_buckets;
+ unsigned num_items;
+ struct UT_hash_handle *tail; /* tail hh in app order, for fast append */
+ ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
+
+ /* in an ideal situation (all buckets used equally), no bucket would have
+ * more than ceil(#items/#buckets) items. that's the ideal chain length. */
+ unsigned ideal_chain_maxlen;
+
+ /* nonideal_items is the number of items in the hash whose chain position
+ * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
+ * hash distribution; reaching them in a chain traversal takes >ideal steps */
+ unsigned nonideal_items;
+
+ /* ineffective expands occur when a bucket doubling was performed, but
+ * afterward, more than half the items in the hash had nonideal chain
+ * positions. If this happens on two consecutive expansions we inhibit any
+ * further expansion, as it's not helping; this happens when the hash
+ * function isn't a good fit for the key domain. When expansion is inhibited
+ * the hash will still work, albeit no longer in constant time. */
+ unsigned ineff_expands, noexpand;
+
+ uint32_t signature; /* used only to find hash tables in external analysis */
+#ifdef HASH_BLOOM
+ uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
+ uint8_t *bloom_bv;
+ uint8_t bloom_nbits;
+#endif
+
+} UT_hash_table;
+
+typedef struct UT_hash_handle {
+ struct UT_hash_table *tbl;
+ void *prev; /* prev element in app order */
+ void *next; /* next element in app order */
+ struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
+ struct UT_hash_handle *hh_next; /* next hh in bucket order */
+ void *key; /* ptr to enclosing struct's key */
+ unsigned keylen; /* enclosing struct's key len */
+ unsigned hashv; /* result of hash-fcn(key) */
+} UT_hash_handle;
+
+#endif /* UTHASH_H */
diff --git a/tests/deckard/contrib/libfaketime/test/Makefile b/tests/deckard/contrib/libfaketime/test/Makefile
new file mode 100644
index 0000000..94d1a2e
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/Makefile
@@ -0,0 +1,31 @@
+CC = gcc
+
+CFLAGS = -std=gnu99 -Wall -DFAKE_STAT -Werror -Wextra
+LDFLAGS = -lrt -lpthread
+
+SRC = timetest.c
+OBJ = ${SRC:.c=.o}
+
+all: timetest test
+
+.c.o:
+ ${CC} -c ${CFLAGS} $<
+
+timetest: ${OBJ}
+ ${CC} -o $@ ${OBJ} ${LDFLAGS}
+
+test: timetest functest
+ @echo
+ @./test.sh
+
+# run functional tests
+functest:
+ ./testframe.sh functests
+
+clean:
+ @rm -f ${OBJ} timetest
+
+distclean: clean
+ @echo
+
+.PHONY: all test clean distclean
diff --git a/tests/deckard/contrib/libfaketime/test/Makefile.OSX b/tests/deckard/contrib/libfaketime/test/Makefile.OSX
new file mode 100644
index 0000000..209d19f
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/Makefile.OSX
@@ -0,0 +1,30 @@
+CC ?= clang
+
+CFLAGS += -std=gnu99 -Wall -DFAKE_STAT
+
+SRC = timetest.c
+OBJ = ${SRC:.c=.o}
+
+all: timetest test
+
+.c.o:
+ ${CC} -c ${CFLAGS} $<
+
+timetest: ${OBJ}
+ ${CC} -o $@ ${OBJ} ${LDFLAGS}
+
+test: timetest functest
+ @echo
+ @./test_OSX.sh
+
+# run functional tests
+functest:
+ ./testframe.sh functests
+
+clean:
+ @rm -f ${OBJ} timetest
+
+distclean: clean
+ @echo
+
+.PHONY: all test clean distclean
diff --git a/tests/deckard/contrib/libfaketime/test/README-testframe.txt b/tests/deckard/contrib/libfaketime/test/README-testframe.txt
new file mode 100644
index 0000000..d6980c3
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/README-testframe.txt
@@ -0,0 +1,39 @@
+# here's how the testframe script works.
+#
+# Usage for testing:
+# usage: testframe.sh DIR
+# testframe.sh runs each testsuite script found within DIR.
+# (in the context of libfaketime, the DIR is functest.)
+# exits with status 0 if all tests succeed.
+#
+# Interface:
+# by convention, each testsuite script (within DIR) must be
+# a bash script named test_*.sh. the script must define a
+# function named "run". run takes no arguments. run is
+# expected to call the framework-provided function
+# run_testcase once for each test function. run_testcase
+# uses the global vars NFAIL and NSUCC to keep track of how
+# many testcases failed/succeeded.
+#
+# the test function is expected to call something like
+# asserteq or assertneq (again, framework-provided).
+#
+# fine print: for each testsuite, the framework creates a
+# subshell and dots in the script. also dotted in are
+# testframe.inc and DIR/common.inc (if it exists). the
+# testsuite script can make use of any functions defined
+# in these inc files. the environment variable
+# TESTSUITE_NAME is set to the filename of the testsuite
+# script, for possible use in warning or info messages.
+#
+# see functests/test_true.sh for a simple example of
+# a test suite script.
+#
+# Simple steps to add a new testsuite:
+# 1. decide its name - eg, XXX.
+# 2. choose a DIR of similar testsuites to put it in, or create a new one.
+# 3. create DIR/test_XXX.sh.
+# 4. write a run function and testcase functions in DIR/test_XXX.sh.
+# 5. within the run function, call run_testcase for each testcase function.
+# 6. within each testcase function, call assertneq or asserteq, or do
+# the equivalent.
diff --git a/tests/deckard/contrib/libfaketime/test/functests/common.inc b/tests/deckard/contrib/libfaketime/test/functests/common.inc
new file mode 100644
index 0000000..d184ae2
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/common.inc
@@ -0,0 +1,63 @@
+# libfaketime-specific common support routines for tests
+
+# say which *_fakecmd wrapper to use
+platform()
+{
+ # may want to expand the pattern for linuxlike
+ typeset out=$(uname)
+ case "$out" in
+ *Darwin*) echo "mac" ;;
+ *Linux*) echo "linuxlike" ;;
+ GNU|GNU/kFreeBSD) echo "linuxlike" ;;
+ *SunOS*) echo "sunos" ;;
+ *) echo 1>&2 unsupported platform, uname=\"$out\" ;;
+ esac
+}
+
+# run faked command on a mac
+# UNTESTED
+mac_fakecmd()
+{
+ typeset timestring="$1"; shift
+ typeset fakelib=../src/libfaketime.1.dylib
+ export DYLD_INSERT_LIBRARIES=$fakelib
+ export DYLD_FORCE_FLAT_NAMESPACE=1
+ FAKETIME="$timestring" \
+ "$@"
+}
+
+sunos_fakecmd()
+{
+ typeset timestring="$1"; shift
+ typeset fakelib=../src/libfaketime.so.1
+ export LD_PRELOAD=$fakelib
+ FAKETIME="$timestring" \
+ "$@"
+}
+
+# run faked command on linuxlike OS
+linuxlike_fakecmd()
+{
+ typeset timestring="$1"; shift
+ typeset fakelib=../src/libfaketime.so.1
+ export LD_PRELOAD=$fakelib
+ FAKETIME="$timestring" \
+ "$@"
+}
+
+# run a command with libfaketime using the given timestring
+fakecmd()
+{
+ ${PLATFORM}_fakecmd "$@"
+}
+
+# generate a sequence of numbers from a to b
+range()
+{
+ typeset a=$1 b=$2
+ typeset i=$a
+ while ((i <= b)); do
+ echo $i
+ ((i = i+1))
+ done
+}
diff --git a/tests/deckard/contrib/libfaketime/test/functests/dont_test_false.sh b/tests/deckard/contrib/libfaketime/test/functests/dont_test_false.sh
new file mode 100644
index 0000000..65457ef
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/dont_test_false.sh
@@ -0,0 +1,6 @@
+# a testsuite that will force failure - for testing purposes
+
+run()
+{
+ run_testcase false
+}
diff --git a/tests/deckard/contrib/libfaketime/test/functests/test_exclude_mono.sh b/tests/deckard/contrib/libfaketime/test/functests/test_exclude_mono.sh
new file mode 100644
index 0000000..f68fc20
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/test_exclude_mono.sh
@@ -0,0 +1,87 @@
+# Checks that setting DONT_FAKE_MONOTONIC actually prevent
+# libfaketime from faking monotonic clocks.
+#
+# We do this by freezing time at a specific and arbitrary date with faketime,
+# and making sure that if we set DONT_FAKE_MONOTONIC to 1, calling
+# clock_gettime(CLOCK_MONOTONIC) returns two different values.
+#
+# We also make sure that if we don't set DONT_FAKE_MONOTONIC to 1, in other
+# words when we use the default behavior, two subsequent calls to
+# clock_gettime(CLOCK_MONOTONIC) do return different values.
+
+init()
+{
+ typeset testsuite="$1"
+ PLATFORM=$(platform)
+ if [ -z "$PLATFORM" ]; then
+ echo "$testsuite: unknown platform! quitting"
+ return 1
+ fi
+ echo "# PLATFORM=$PLATFORM"
+ return 0
+}
+
+run()
+{
+ init
+
+ run_testcase dont_fake_mono
+ run_testcase fake_mono
+}
+
+get_token()
+{
+ string=$1
+ token_index=$2
+ separator=$3
+
+ echo $string | cut -d "$separator" -f $token_index
+}
+
+assert_timestamps_neq()
+{
+ timestamps=$1
+ msg=$2
+
+ first_timestamp=$(get_token "${timestamps}" 1 ' ')
+ second_timestamp=$(get_token "${timestamps}" 2 ' ')
+
+ assertneq "${first_timestamp}" "${second_timestamp}" "${msg}"
+}
+
+assert_timestamps_eq()
+{
+ timestamps=$1
+ msg=$2
+
+ first_timestamp=$(get_token "${timestamps}" 1 ' ')
+ second_timestamp=$(get_token "${timestamps}" 2 ' ')
+
+ asserteq "${first_timestamp}" "${second_timestamp}" "${msg}"
+}
+
+get_monotonic_time()
+{
+ dont_fake_mono=$1; shift;
+ clock_id=$1; shift;
+ DONT_FAKE_MONOTONIC=${dont_fake_mono} fakecmd "2014-07-21 09:00:00" \
+ /bin/bash -c "for i in 1 2; do \
+ perl -w -MTime::HiRes=clock_gettime,${clock_id} -E \
+ 'say clock_gettime(${clock_id})'; \
+ sleep 1; \
+ done"
+}
+
+dont_fake_mono()
+{
+ timestamps=$(get_monotonic_time 1 CLOCK_MONOTONIC)
+ msg="When not faking monotonic time, timestamps should be different"
+ assert_timestamps_neq "${timestamps}" "${msg}"
+}
+
+fake_mono()
+{
+ timestamps=$(get_monotonic_time 0 CLOCK_MONOTONIC)
+ msg="When faking monotonic, timestamps should be equal"
+ assert_timestamps_eq "${timestamps}" "${msg}"
+}
diff --git a/tests/deckard/contrib/libfaketime/test/functests/test_null.sh b/tests/deckard/contrib/libfaketime/test/functests/test_null.sh
new file mode 100644
index 0000000..09e7560
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/test_null.sh
@@ -0,0 +1,13 @@
+# check that the date doesn't happen to be 0.
+
+run()
+{
+ run_testcase nulltest
+}
+
+nulltest()
+{
+ typeset tdate=${I2DATES[0]}
+
+ assertneq 0 "$(date +%s)" "($tdate)"
+}
diff --git a/tests/deckard/contrib/libfaketime/test/functests/test_true.sh b/tests/deckard/contrib/libfaketime/test/functests/test_true.sh
new file mode 100644
index 0000000..0025bcf
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/test_true.sh
@@ -0,0 +1,7 @@
+# test suite that always succeeds - for testing framework
+
+run()
+{
+ run_testcase true
+ return 0
+}
diff --git a/tests/deckard/contrib/libfaketime/test/functests/test_walkone.sh b/tests/deckard/contrib/libfaketime/test/functests/test_walkone.sh
new file mode 100755
index 0000000..b27df9a
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/functests/test_walkone.sh
@@ -0,0 +1,67 @@
+# walking-1 test.
+# sourced in from testframe.sh.
+#
+# this script defines a suite of functional tests
+# that verifies the correct operation of libfaketime
+# with the date command.
+
+run()
+{
+ init
+
+ for i in $(range 0 30); do
+ run_testcase test_with_i $i
+ done
+}
+
+# ----- support routines
+init()
+{
+ typeset testsuite="$1"
+ PLATFORM=$(platform)
+ if [ -z "$PLATFORM" ]; then
+ echo "$testsuite: unknown platform! quitting"
+ return 1
+ fi
+ echo "# PLATFORM=$PLATFORM"
+ return 0
+}
+
+
+# run date cmd under faketime, print time in secs
+fakedate()
+{
+ #
+ # let the time format be raw seconds since Epoch
+ # for both input to libfaketime, and output of the date cmd.
+ #
+ typeset fmt='%s'
+ export FAKETIME_FMT=$fmt
+ fakecmd "$1" date +$fmt
+}
+
+#
+# compute x**n.
+# use only the shell, in case we need to run on machines
+# without bc, dc, perl, etc.
+#
+pow()
+{
+ typeset x="$1" n="$2"
+ typeset r=1
+ typeset i=0
+ while ((i < n)); do
+ ((r = r*x))
+ ((i++))
+ done
+ echo $r
+}
+
+# run a fakedate test with a given time t
+test_with_i()
+{
+ typeset i="$1"
+ typeset t=$(pow 2 $i)
+
+ asserteq $(fakedate $t) $t "(secs since Epoch)"
+}
diff --git a/tests/deckard/contrib/libfaketime/test/test.sh b/tests/deckard/contrib/libfaketime/test/test.sh
new file mode 100755
index 0000000..630cec6
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/test.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+if [ -f /etc/faketimerc ] ; then
+ echo "Running the test program with your system-wide default in /etc/faketimerc"
+ echo "\$ LD_PRELOAD=../src/libfaketime.so.1 ./timetest"
+ LD_PRELOAD=../src/libfaketime.so.1 ./timetest
+ echo
+else
+ echo "Running the test program with no faked time specified"
+ echo "\$ LD_PRELOAD=../src/libfaketime.so.1 ./timetest"
+ LD_PRELOAD=../src/libfaketime.so.1 ./timetest
+ echo
+fi
+
+echo "============================================================================="
+echo
+
+echo "Running the test program with absolute date 2003-01-01 10:00:05 specified"
+echo "\$ LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"2003-01-01 10:00:05\" ./timetest"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="2003-01-01 10:00:05" ./timetest
+echo
+
+echo "============================================================================="
+echo
+
+echo "Running the test program with START date @2005-03-29 14:14:14 specified"
+echo "\$ LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"@2005-03-29 14:14:14\" ./timetest"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="@2005-03-29 14:14:14" ./timetest
+echo
+
+echo "============================================================================="
+echo
+
+echo "Running the test program with 10 days negative offset specified"
+echo "LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"-10d\" ./timetest"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="-10d" ./timetest
+echo
+
+echo "============================================================================="
+echo
+
+echo "Running the test program with 10 days negative offset specified, and FAKE_STAT disabled"
+echo "\$ LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"-10d\" NO_FAKE_STAT=1 ./timetest"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="-10d" NO_FAKE_STAT=1 ./timetest
+echo
+
+echo "============================================================================="
+echo
+
+echo "Running the test program with 10 days positive offset specified, and sped up 2 times"
+echo "\$ LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"+10d x2\" ./timetest"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="+10d x2" NO_FAKE_STAT=1 ./timetest
+echo
+
+echo "============================================================================="
+echo
+
+echo "Running the 'date' command with 15 days negative offset specified"
+echo "\$ LD_PRELOAD=../src/libfaketime.so.1 FAKETIME=\"-15d\" date"
+LD_PRELOAD=../src/libfaketime.so.1 FAKETIME="-15d" date
+echo
+
+echo "============================================================================="
+echo "Testing finished."
+
+exit 0
diff --git a/tests/deckard/contrib/libfaketime/test/test_OSX.sh b/tests/deckard/contrib/libfaketime/test/test_OSX.sh
new file mode 100755
index 0000000..a259275
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/test_OSX.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+export DYLD_FORCE_FLAT_NAMESPACE=1
+export DYLD_INSERT_LIBRARIES=../src/libfaketime.1.dylib
+
+if [ -f /etc/faketimerc ] ; then
+ echo "Running the test program with your system-wide default in /etc/faketimerc"
+ ./timetest
+ echo
+else
+ echo "Running the test program with no faked time specified"
+ ./timetest
+ echo
+fi
+
+echo "Running the test program with absolute date 2003-01-01 10:00:05 specified"
+echo "FAKETIME=\"2003-01-01 10:00:05\" ./timetest"
+FAKETIME="2003-01-01 10:00:05" ./timetest
+echo
+
+echo "Running the test program with START date @2005-03-29 14:14:14 specified"
+echo "FAKETIME=\"@2005-03-29 14:14:14\" ./timetest"
+FAKETIME="@2005-03-29 14:14:14" ./timetest
+echo
+
+echo "Running the test program with 10 days negative offset specified"
+echo "FAKETIME=\"-10d\" ./timetest"
+FAKETIME="-10d" ./timetest
+echo
+
+echo "Running the test program with 10 days negative offset specified, and FAKE_STAT disabled"
+echo "FAKETIME=\"-10d\" NO_FAKE_STAT=1 ./timetest"
+FAKETIME="-10d" NO_FAKE_STAT=1 ./timetest
+echo
+
+echo "Running the test program with 10 days positive offset specified, and sped up 2 times"
+echo "FAKETIME=\"+10d x2\" ./timetest"
+FAKETIME="+10d x2" NO_FAKE_STAT=1 ./timetest
+echo
+
+echo "Running the 'date' command with 15 days negative offset specified"
+echo "FAKETIME=\"-15d\" date"
+FAKETIME="-15d" date
+echo
+
+exit 0
diff --git a/tests/deckard/contrib/libfaketime/test/testframe.inc b/tests/deckard/contrib/libfaketime/test/testframe.inc
new file mode 100644
index 0000000..b5f66a3
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/testframe.inc
@@ -0,0 +1,55 @@
+# framework common functions for use in test suites and test cases
+
+#
+# run a test and keep stats on success/failure.
+# arguments: a command, possibly a shell function.
+# return value: 0 on success, 1 on failure.
+# side effects: increments global var NSUCC on success, NFAIL on failure.
+#
+run_testcase()
+{
+ if "$@"; then
+ ((NSUCC++))
+ return 0
+ else
+ ((NFAIL++))
+ return 1
+ fi
+}
+
+#
+# verbosely check that the test output matches the expected value.
+# arguments: the test output, the expected value, and a description.
+# return value: 0 on if test output equals expected value; 1 otherwise.
+# side effects: prints a descriptive message.
+#
+asserteq()
+{
+ typeset out="$1" expected="$2" desc="$3"
+ echo -n "out=$out $desc"
+ if [ "$out" = "$expected" ]; then
+ echo " - ok"
+ return 0
+ else
+ echo " expected=$expected - bad"
+ return 1
+ fi
+}
+
+#
+# verbosely check that the test output doesn't match the reference value.
+# return value: 1 on if test output equals expected value; 0 if not equal.
+# side effects: prints descriptive message.
+#
+assertneq()
+{
+ typeset out="$1" ref="$2" desc="$3"
+ echo -n "out=$out $desc"
+ if [ "$out" = "$ref" ]; then
+ echo " ref=$ref - bad"
+ return 1
+ else
+ echo " ref=$ref - ok"
+ return 0
+ fi
+}
diff --git a/tests/deckard/contrib/libfaketime/test/testframe.sh b/tests/deckard/contrib/libfaketime/test/testframe.sh
new file mode 100755
index 0000000..22975b6
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/testframe.sh
@@ -0,0 +1,99 @@
+#! /bin/bash
+# testframe.sh DIR
+# bare-bones testing framework.
+# run the test suites in the given DIR;
+# exit with nonzero status if any of them failed.
+# see README.testframe.txt for details.
+#
+
+# echo labelled error/warning message to stderr
+report()
+{
+ echo $PROG: $* 1>&2
+}
+
+# echo OK or BAD depending on argument (0 or not)
+status_word()
+{
+ if [ "$1" -eq 0 ]; then
+ echo OK
+ else
+ echo BAD
+ fi
+}
+
+# run the given testsuite, return nonzero if any testcase failed.
+run_testsuite()
+{
+ typeset testsuite="$1"
+
+ NFAIL=0
+ NSUCC=0
+
+ # add testsuite dir to PATH for convenience
+ typeset dir=$(dirname $testsuite)
+ PATH=$dir:$PATH
+ . testframe.inc
+ if [ -f $dir/common.inc ]; then
+ . $dir/common.inc
+ fi
+ . $testsuite
+ export TESTSUITE_NAME=$testsuite
+
+ echo ""
+ echo "# Begin $testsuite"
+
+ run
+ typeset runstat=$?
+
+ echo "# $testsuite summary: $NSUCC succeeded, $NFAIL failed"
+ if [ $runstat -ne 0 ]; then
+ ((NFAIL++))
+ report "error: $testsuite run exit_status=$runstat!"
+ fi
+ echo "# End $testsuite -" $(status_word $NFAIL)
+ [ $NFAIL -eq 0 ]
+}
+
+#
+# list all testsuite scripts in the given directories.
+# a testsuite file must be a bash script whose name is of the form test_*.sh .
+#
+list_testsuites()
+{
+ for dir in "$@"; do
+ ls $dir/test_*.sh 2>/dev/null
+ done
+}
+
+main()
+{
+ TS_NFAIL=0
+ TS_NSUCC=0
+
+ echo "# Begin Test Suites in $*"
+ typeset testsuites=$(list_testsuites "$@")
+
+ if [ -z "$testsuites" ]; then
+ report "error: no testsuites found"
+ exit 1
+ fi
+
+ for testsuite in $testsuites; do
+ if run_testsuite $testsuite; then
+ ((TS_NSUCC++))
+ else
+ ((TS_NFAIL++))
+ fi
+ done
+
+ echo ""
+ echo "# Test Suites summary: $TS_NSUCC succeeded, $TS_NFAIL failed"
+ echo "# End Test Suites -" $(status_word $TS_NFAIL)
+ [ $TS_NFAIL -eq 0 ]
+}
+
+# ----- start of mainline code
+PROG=${0##*/}
+
+main "${@:-.}"
diff --git a/tests/deckard/contrib/libfaketime/test/timetest.c b/tests/deckard/contrib/libfaketime/test/timetest.c
new file mode 100644
index 0000000..4e3515c
--- /dev/null
+++ b/tests/deckard/contrib/libfaketime/test/timetest.c
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2003,2007 Wolfgang Hommel
+ *
+ * This file is part of the FakeTime Preload Library.
+ *
+ * The FakeTime Preload Library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * The FakeTime Preload Library is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with the FakeTime Preload Library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+
+#ifdef FAKE_STAT
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#endif
+
+#ifndef __APPLE__
+#include <pthread.h>
+#include <errno.h>
+#include <signal.h>
+
+#define VERBOSE 0
+
+#define SIG SIGUSR1
+
+static void
+handler(int sig, siginfo_t *si, void *uc)
+{
+ /* Note: calling printf() from a signal handler is not
+ strictly correct, since printf() is not async-signal-safe;
+ see signal(7) */
+
+ if ((si == NULL) || (si != uc))
+ {
+ printf("Caught signal %d\n", sig);
+ }
+}
+
+void* pthread_test(void* args)
+{
+ pthread_mutex_t fakeMutex = PTHREAD_MUTEX_INITIALIZER;
+ pthread_cond_t fakeCond = PTHREAD_COND_INITIALIZER;
+
+ pthread_cond_t monotonic_cond;
+ pthread_condattr_t attr;
+
+ struct timespec timeToWait, now;
+ int rt;
+
+ args = args; // silence compiler warning about unused argument
+
+ clock_gettime(CLOCK_REALTIME, &now);
+ timeToWait.tv_sec = now.tv_sec+1;
+ timeToWait.tv_nsec = now.tv_nsec;
+
+ printf("pthread_cond_timedwait: CLOCK_REALTIME test\n");
+ printf("(Intentionally sleeping 1 second...)\n");
+ fflush(stdout);
+
+ pthread_mutex_lock(&fakeMutex);
+ rt = pthread_cond_timedwait(&fakeCond, &fakeMutex, &timeToWait);
+ if (rt != ETIMEDOUT)
+ {
+ printf("pthread_cond_timedwait failed\n");
+ exit(EXIT_FAILURE);
+ }
+ pthread_mutex_unlock(&fakeMutex);
+
+
+ pthread_condattr_init(&attr);
+ pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
+ pthread_cond_init(&monotonic_cond, &attr);
+
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ timeToWait.tv_sec = now.tv_sec+1;
+ timeToWait.tv_nsec = now.tv_nsec;
+
+ printf("pthread_cond_timedwait: CLOCK_MONOTONIC test\n");
+ printf("(Intentionally sleeping 1 second...)\n");
+ fflush(stdout);
+
+ pthread_mutex_lock(&fakeMutex);
+ rt = pthread_cond_timedwait(&monotonic_cond, &fakeMutex, &timeToWait);
+ if (rt != ETIMEDOUT)
+ {
+ printf("pthread_cond_timedwait failed\n");
+ exit(EXIT_FAILURE);
+ }
+ pthread_mutex_unlock(&fakeMutex);
+
+ pthread_cond_destroy(&monotonic_cond);
+
+ return NULL;
+}
+
+#endif
+
+int main (int argc, char **argv)
+{
+ time_t now;
+ struct timeb tb;
+ struct timeval tv;
+#ifndef __APPLE__
+ struct timespec ts;
+ timer_t timerid1 = 0, timerid2;
+ struct sigevent sev;
+ struct itimerspec its;
+ sigset_t mask;
+ struct sigaction sa;
+#endif
+#ifdef FAKE_STAT
+ struct stat buf;
+#endif
+
+#ifndef __APPLE__
+ pthread_t thread;
+ void *ret;
+
+ pthread_create(&thread, NULL, pthread_test, NULL);
+ pthread_join(thread, &ret);
+
+ sa.sa_flags = SA_SIGINFO;
+ sa.sa_sigaction = handler;
+ sigemptyset(&sa.sa_mask);
+ if (sigaction(SIGUSR1, &sa, NULL) == -1)
+ {
+ perror("sigaction");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Block timer signal temporarily */
+ printf("Blocking signal %d\n", SIGUSR1);
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGUSR1);
+ if (sigprocmask(SIG_SETMASK, &mask, NULL) == -1)
+ {
+ perror("sigaction");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Create the timer */
+ sev.sigev_notify = SIGEV_SIGNAL;
+ sev.sigev_signo = SIGUSR1;
+ sev.sigev_value.sival_ptr = &timerid1;
+ if (timer_create(CLOCK_REALTIME, &sev, &timerid1) == -1)
+ {
+ perror("timer_create");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Start timer1 */
+
+ /* start timer ticking after one second */
+ its.it_value.tv_sec = 1;
+ its.it_value.tv_nsec = 0;
+ /* fire in every 0.3 seconds */
+ its.it_interval.tv_sec = 0;
+ its.it_interval.tv_nsec = 300000000;
+
+ if (timer_settime(timerid1, 0, &its, NULL) == -1)
+ {
+ perror("timer_settime");
+ exit(EXIT_FAILURE);
+ }
+
+ sev.sigev_value.sival_ptr = &timerid2;
+ if (timer_create(CLOCK_REALTIME, &sev, &timerid2) == -1)
+ {
+ perror("timer_create");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Start timer2 */
+
+ clock_gettime(CLOCK_REALTIME, &its.it_value);
+ /* start timer ticking after one second */
+ its.it_value.tv_sec += 3;
+ /* fire once */
+ its.it_interval.tv_sec = 0;
+ its.it_interval.tv_nsec = 0;
+
+ if (timer_settime(timerid2, TIMER_ABSTIME, &its, NULL) == -1)
+ {
+ perror("timer_settime");
+ exit(EXIT_FAILURE);
+ }
+#endif
+
+ time(&now);
+ printf("time() : Current date and time: %s", ctime(&now));
+ printf("time(NULL) : Seconds since Epoch : %u\n", (unsigned int)time(NULL));
+
+ ftime(&tb);
+ printf("ftime() : Current date and time: %s", ctime(&tb.time));
+
+ printf("(Intentionally sleeping 2 seconds...)\n");
+ fflush(stdout);
+ if (argc < 3)
+ {
+ sleep(1);
+ usleep(1000000);
+ }
+
+ gettimeofday(&tv, NULL);
+ printf("gettimeofday() : Current date and time: %s", ctime(&tv.tv_sec));
+
+#ifndef __APPLE__
+ if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1)
+ {
+ perror("sigprocmask");
+ exit(EXIT_FAILURE);
+ }
+
+ clock_gettime(CLOCK_REALTIME, &ts);
+ printf("clock_gettime(): Current date and time: %s", ctime(&ts.tv_sec));
+
+ int timer_getoverrun_timerid1 = timer_getoverrun(timerid1);
+ if (timer_getoverrun_timerid1 != 3)
+ {
+ printf("timer_getoverrun(timerid1) FAILED, must be 3 but got: %d\n", timer_getoverrun_timerid1);
+ }
+
+ timer_gettime(timerid1, &its);
+ if (VERBOSE == 1)
+ {
+ printf("timer_gettime(timerid1, &its); its = {{%ld, %ld}, {%ld, %ld}}}\n",
+ (long)its.it_interval.tv_sec, (long)its.it_interval.tv_nsec,
+ (long)its.it_value.tv_sec, (long)its.it_value.tv_nsec);
+ }
+
+ int timer_getoverrun_timerid2 = timer_getoverrun(timerid2);
+ if (timer_getoverrun_timerid2 != 0)
+ {
+ printf("timer_getoverrun(timerid2) FAILED, must be 0 but got: %d\n", timer_getoverrun_timerid2);
+ }
+
+ timer_gettime(timerid2, &its);
+ if (VERBOSE == 1)
+ {
+ printf("timer_gettime(timerid2, &its); its = {{%ld, %ld}, {%ld, %ld}}}\n",
+ (long)its.it_interval.tv_sec, (long)its.it_interval.tv_nsec,
+ (long)its.it_value.tv_sec, (long)its.it_value.tv_nsec);
+ }
+#endif
+
+#ifdef FAKE_STAT
+ lstat(argv[0], &buf);
+ printf("stat(): mod. time of file '%s': %s", argv[0], ctime(&buf.st_mtime));
+#endif
+
+ return 0;
+}
+
+/*
+ * Editor modelines
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
+
+/* eof */
diff --git a/tests/deckard/contrib/libswrap/.gitignore b/tests/deckard/contrib/libswrap/.gitignore
new file mode 100644
index 0000000..5d8f581
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/.gitignore
@@ -0,0 +1,9 @@
+*.a
+*.o
+.*
+*.swp
+*~
+build
+obj
+cscope.*
+tags
diff --git a/tests/deckard/contrib/libswrap/AUTHORS b/tests/deckard/contrib/libswrap/AUTHORS
new file mode 100644
index 0000000..b29dad2
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/AUTHORS
@@ -0,0 +1,3 @@
+Jelmer Vernooij <jelmer@samba.org>
+Stefan Metzmacher <metze@samba.org>
+Andreas Schneider <asn@samba.org>
diff --git a/tests/deckard/contrib/libswrap/CMakeLists.txt b/tests/deckard/contrib/libswrap/CMakeLists.txt
new file mode 100644
index 0000000..4d7c12e
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/CMakeLists.txt
@@ -0,0 +1,86 @@
+project(socket_wrapper C)
+
+# Required cmake version
+cmake_minimum_required(VERSION 2.8.5)
+
+# global needed variables
+set(APPLICATION_NAME ${PROJECT_NAME})
+
+set(APPLICATION_VERSION_MAJOR "1")
+set(APPLICATION_VERSION_MINOR "1")
+set(APPLICATION_VERSION_PATCH "7")
+
+set(APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}")
+
+# SOVERSION scheme: CURRENT.AGE.REVISION
+# If there was an incompatible interface change:
+# Increment CURRENT. Set AGE and REVISION to 0
+# If there was a compatible interface change:
+# Increment AGE. Set REVISION to 0
+# If the source code was changed, but there were no interface changes:
+# Increment REVISION.
+set(LIBRARY_VERSION "0.1.7")
+set(LIBRARY_SOVERSION "0")
+
+# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
+set(CMAKE_MODULE_PATH
+ ${CMAKE_SOURCE_DIR}/cmake/Modules
+)
+
+# add definitions
+include(DefineCMakeDefaults)
+include(DefinePlatformDefaults)
+include(DefineCompilerFlags)
+include(DefineInstallationPaths)
+include(DefineOptions.cmake)
+include(CPackConfig.cmake)
+
+# disallow in-source build
+include(MacroEnsureOutOfSourceBuild)
+macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.")
+
+# Find out if we have threading available
+set(CMAKE_THREAD_PREFER_PTHREADS ON)
+find_package(Threads)
+
+# config.h checks
+include(ConfigureChecks.cmake)
+configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+
+# check subdirectories
+add_subdirectory(src)
+
+if (UNIT_TESTING)
+ find_package(cmocka 0.4.1 REQUIRED)
+
+ include(AddCMockaTest)
+ add_subdirectory(tests)
+endif (UNIT_TESTING)
+
+# pkg-config file
+get_filename_component(SOCKET_WRAPPER_LIB ${SOCKET_WRAPPER_LOCATION} NAME)
+
+configure_file(socket_wrapper.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper.pc @ONLY)
+install(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper.pc
+ DESTINATION
+ ${LIB_INSTALL_DIR}/pkgconfig
+ COMPONENT
+ pkgconfig
+)
+
+# cmake config files
+configure_file(socket_wrapper-config-version.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper-config-version.cmake @ONLY)
+configure_file(socket_wrapper-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper-config.cmake @ONLY)
+install(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper-config-version.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/socket_wrapper-config.cmake
+ DESTINATION
+ ${CMAKE_INSTALL_DIR}/socket_wrapper
+ COMPONENT
+ devel
+)
+
+add_subdirectory(doc)
diff --git a/tests/deckard/contrib/libswrap/COPYING b/tests/deckard/contrib/libswrap/COPYING
new file mode 100644
index 0000000..e6227e1
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/COPYING
@@ -0,0 +1,32 @@
+Copyright (C) Jelmer Vernooij 2005,2008 <jelmer@samba.org>
+Copyright (C) Stefan Metzmacher 2006-2009 <metze@samba.org>
+Copyright (C) Andreas Schneider 2013 <asn@samba.org>
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+3. Neither the name of the author 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 AUTHOR 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 AUTHOR 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.
diff --git a/tests/deckard/contrib/libswrap/CPackConfig.cmake b/tests/deckard/contrib/libswrap/CPackConfig.cmake
new file mode 100644
index 0000000..dc74dfa
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/CPackConfig.cmake
@@ -0,0 +1,53 @@
+# For help take a look at:
+# http://www.cmake.org/Wiki/CMake:CPackConfiguration
+
+### general settings
+set(CPACK_PACKAGE_NAME ${APPLICATION_NAME})
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The SSH library")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README")
+set(CPACK_PACKAGE_VENDOR "The SSH Library Development Team")
+set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
+
+
+### versions
+set(CPACK_PACKAGE_VERSION_MAJOR "${APPLICATION_VERSION_MAJOR}")
+set(CPACK_PACKAGE_VERSION_MINOR "${APPLICATION_VERSION_MINOR}")
+set(CPACK_PACKAGE_VERSION_PATCH "${APPLICATION_VERSION_PATCH}")
+set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+
+
+### source generator
+set(CPACK_SOURCE_GENERATOR "TGZ")
+set(CPACK_SOURCE_IGNORE_FILES "~$;[.]swp$;/[.]svn/;/[.]git/;.gitignore;/build/;/obj/;tags;cscope.*")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
+
+if (WIN32)
+ set(CPACK_GENERATOR "ZIP")
+
+ ### nsis generator
+ find_package(NSIS)
+ if (NSIS_MAKE)
+ set(CPACK_GENERATOR "${CPACK_GENERATOR};NSIS")
+ set(CPACK_NSIS_DISPLAY_NAME "The SSH Library")
+ set(CPACK_NSIS_COMPRESSOR "/SOLID zlib")
+ set(CPACK_NSIS_MENU_LINKS "http://www.libssh.org/" "libssh homepage")
+ endif (NSIS_MAKE)
+endif (WIN32)
+
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "libssh")
+
+set(CPACK_PACKAGE_FILE_NAME ${APPLICATION_NAME}-${CPACK_PACKAGE_VERSION})
+
+set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
+set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers")
+set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
+ "Libraries used to build programs which use libssh")
+set(CPACK_COMPONENT_HEADERS_DESCRIPTION
+ "C/C++ header files for use with libssh")
+set(CPACK_COMPONENT_HEADERS_DEPENDS libraries)
+#set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime")
+set(CPACK_COMPONENT_LIBRARIES_GROUP "Development")
+set(CPACK_COMPONENT_HEADERS_GROUP "Development")
+
+include(CPack)
diff --git a/tests/deckard/contrib/libswrap/CTestConfig.cmake b/tests/deckard/contrib/libswrap/CTestConfig.cmake
new file mode 100644
index 0000000..3c29af3
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/CTestConfig.cmake
@@ -0,0 +1,9 @@
+set(UPDATE_TYPE "true")
+
+set(CTEST_PROJECT_NAME "socketwrapper")
+set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
+
+set(CTEST_DROP_METHOD "https")
+set(CTEST_DROP_SITE "mock.cryptomilk.org")
+set(CTEST_DROP_LOCATION "/submit.php?project=socketwrapper")
+set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/tests/deckard/contrib/libswrap/ChangeLog b/tests/deckard/contrib/libswrap/ChangeLog
new file mode 100644
index 0000000..dd03665
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/ChangeLog
@@ -0,0 +1,60 @@
+ChangeLog
+==========
+
+version 1.1.7 (released 2016-05-20)
+ * Added support for accept4()
+ * Added support for OpenBSD
+ * Fixed sendto() with UDP and a connected socket
+ * Fixed AF_RAWLINK sockets
+
+version 1.1.6 (released 2016-03-15)
+ * Added a wrapper for write()
+ * Added support for automatic binding of ephemeral ports
+ * Fixed recvmsg() with UDP
+ * Fixed AF_NETLINK sockets
+
+version 1.1.5 (released 2015-10-15)
+ * Added support for TCP_NODELAY in setsockopt/getsockopt
+ * Fixed cmsg space calculation
+
+version 1.1.4 (released 2015-08-25)
+ * Fixed handling of msg_name in recvmsg()
+ * Fixed sendmsg()/recvmsg() TCP support
+ * Fixed several compile warnings
+ * Added environment variable to change MTU
+
+version 1.1.3 (released 2015-02-23)
+ * Added support for address sanitizer.
+ * Fixed leaking of memory and fds of stale sockets.
+ * Fixed the library loading code.
+
+version 1.1.2 (released 2014-10-01)
+ * Added support for fnctl(F_DUPFD).
+ * Added support for glibc 2.20.90.
+
+version 1.1.1 (released 2014-06-05)
+ * Disable incomplete address in use check in bind().
+
+version 1.1.0 (released 2014-06-02)
+ * Added support for IP_PKTINFO in recvmsg().
+ * Added support for IPV6_PKTINFO in recvmsg().
+ * Added support for IP_RECVDSTADDR in recvmsg() on BSD.
+ * Added support for more socket options in getsockopt().
+ * Added support for bindresvport().
+ * Fixed rebinding on connect().
+ * Fixed sockaddr buffer truncation in getsockname() and getpeername().
+ * Fixed special cases in bind().
+ * Fixed loading libc on some platforms.
+
+version 1.0.2 (released 2014-05-05)
+ * Fixed memory leaks
+ * Fixed calling open from libc.
+ * Fixed loading libc functions on some platforms.
+
+version 1.0.1 (released 2014-02-04)
+ * Added --libs to pkg-config.
+ * Added socket_wrapper-config.cmake
+ * Fixed a bug packaging the obj directory.
+
+version 1.0.0 (released 2014-02-02)
+ * Initial release
diff --git a/tests/deckard/contrib/libswrap/ConfigureChecks.cmake b/tests/deckard/contrib/libswrap/ConfigureChecks.cmake
new file mode 100644
index 0000000..48455ef
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/ConfigureChecks.cmake
@@ -0,0 +1,232 @@
+include(CheckIncludeFile)
+include(CheckSymbolExists)
+include(CheckFunctionExists)
+include(CheckLibraryExists)
+include(CheckTypeSize)
+include(CheckStructHasMember)
+include(CheckPrototypeDefinition)
+include(TestBigEndian)
+
+set(PACKAGE ${APPLICATION_NAME})
+set(VERSION ${APPLICATION_VERSION})
+set(DATADIR ${DATA_INSTALL_DIR})
+set(LIBDIR ${LIB_INSTALL_DIR})
+set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}")
+set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
+
+set(BINARYDIR ${CMAKE_BINARY_DIR})
+set(SOURCEDIR ${CMAKE_SOURCE_DIR})
+
+function(COMPILER_DUMPVERSION _OUTPUT_VERSION)
+ # Remove whitespaces from the argument.
+ # This is needed for CC="ccache gcc" cmake ..
+ string(REPLACE " " "" _C_COMPILER_ARG "${CMAKE_C_COMPILER_ARG1}")
+
+ execute_process(
+ COMMAND
+ ${CMAKE_C_COMPILER} ${_C_COMPILER_ARG} -dumpversion
+ OUTPUT_VARIABLE _COMPILER_VERSION
+ )
+
+ string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
+ _COMPILER_VERSION "${_COMPILER_VERSION}")
+
+ set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
+endfunction()
+
+if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW AND NOT OS2)
+ compiler_dumpversion(GNUCC_VERSION)
+ if (NOT GNUCC_VERSION EQUAL 34)
+ set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden")
+ check_c_source_compiles(
+"void __attribute__((visibility(\"default\"))) test() {}
+int main(void){ return 0; }
+" WITH_VISIBILITY_HIDDEN)
+ set(CMAKE_REQUIRED_FLAGS "")
+ endif (NOT GNUCC_VERSION EQUAL 34)
+endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW AND NOT OS2)
+
+# HEADERS
+check_include_file(sys/filio.h HAVE_SYS_FILIO_H)
+check_include_file(sys/signalfd.h HAVE_SYS_SIGNALFD_H)
+check_include_file(sys/eventfd.h HAVE_SYS_EVENTFD_H)
+check_include_file(sys/timerfd.h HAVE_SYS_TIMERFD_H)
+check_include_file(gnu/lib-names.h HAVE_GNU_LIB_NAMES_H)
+check_include_file(rpc/rpc.h HAVE_RPC_RPC_H)
+
+# FUNCTIONS
+check_function_exists(strncpy HAVE_STRNCPY)
+check_function_exists(vsnprintf HAVE_VSNPRINTF)
+check_function_exists(snprintf HAVE_SNPRINTF)
+check_function_exists(signalfd HAVE_SIGNALFD)
+check_function_exists(eventfd HAVE_EVENTFD)
+check_function_exists(timerfd_create HAVE_TIMERFD_CREATE)
+check_function_exists(bindresvport HAVE_BINDRESVPORT)
+check_function_exists(accept4 HAVE_ACCEPT4)
+
+check_function_exists(pledge HAVE_PLEDGE)
+
+
+if (UNIX)
+ if (NOT LINUX)
+ # libsocket (Solaris)
+ check_library_exists(socket getaddrinfo "" HAVE_LIBSOCKET)
+ if (HAVE_LIBSOCKET)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} socket)
+ endif (HAVE_LIBSOCKET)
+
+ # libnsl/inet_pton (Solaris)
+ check_library_exists(nsl inet_pton "" HAVE_LIBNSL)
+ if (HAVE_LIBNSL)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} nsl)
+ endif (HAVE_LIBNSL)
+ endif (NOT LINUX)
+
+ check_function_exists(getaddrinfo HAVE_GETADDRINFO)
+endif (UNIX)
+
+set(SWRAP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CACHE INTERNAL "socket_wrapper required system libraries")
+
+# STRUCTS
+check_struct_has_member("struct in_pktinfo" ipi_addr "sys/types.h;sys/socket.h;netinet/in.h" HAVE_STRUCT_IN_PKTINFO)
+set(CMAKE_REQUIRED_FLAGS -D_GNU_SOURCE)
+check_struct_has_member("struct in6_pktinfo" ipi6_addr "sys/types.h;sys/socket.h;netinet/in.h" HAVE_STRUCT_IN6_PKTINFO)
+set(CMAKE_REQUIRED_FLAGS)
+
+# STRUCT MEMBERS
+check_struct_has_member("struct sockaddr" sa_len "sys/types.h;sys/socket.h;netinet/in.h" HAVE_STRUCT_SOCKADDR_SA_LEN)
+check_struct_has_member("struct msghdr" msg_control "sys/types.h;sys/socket.h" HAVE_STRUCT_MSGHDR_MSG_CONTROL)
+
+# PROTOTYPES
+check_prototype_definition(gettimeofday
+ "int gettimeofday(struct timeval *tv, struct timezone *tz)"
+ "-1"
+ "sys/time.h"
+ HAVE_GETTIMEOFDAY_TZ)
+
+check_prototype_definition(gettimeofday
+ "int gettimeofday(struct timeval *tv, void *tzp)"
+ "-1"
+ "sys/time.h"
+ HAVE_GETTIMEOFDAY_TZ_VOID)
+
+check_prototype_definition(accept
+ "int accept(int s, struct sockaddr *addr, Psocklen_t addrlen)"
+ "-1"
+ "sys/types.h;sys/socket.h"
+ HAVE_ACCEPT_PSOCKLEN_T)
+
+check_prototype_definition(ioctl
+ "int ioctl(int s, int r, ...)"
+ "-1"
+ "unistd.h;sys/ioctl.h"
+ HAVE_IOCTL_INT)
+
+if (HAVE_EVENTFD)
+ check_prototype_definition(eventfd
+ "int eventfd(unsigned int count, int flags)"
+ "-1"
+ "sys/eventfd.h"
+ HAVE_EVENTFD_UNSIGNED_INT)
+endif (HAVE_EVENTFD)
+
+# IPV6
+check_c_source_compiles("
+ #include <stdlib.h>
+ #include <sys/socket.h>
+ #include <netdb.h>
+ #include <netinet/in.h>
+ #include <net/if.h>
+
+int main(void) {
+ struct sockaddr_storage sa_store;
+ struct addrinfo *ai = NULL;
+ struct in6_addr in6addr;
+ int idx = if_nametoindex(\"iface1\");
+ int s = socket(AF_INET6, SOCK_STREAM, 0);
+ int ret = getaddrinfo(NULL, NULL, NULL, &ai);
+ if (ret != 0) {
+ const char *es = gai_strerror(ret);
+ }
+
+ freeaddrinfo(ai);
+ {
+ int val = 1;
+#ifdef HAVE_LINUX_IPV6_V6ONLY_26
+#define IPV6_V6ONLY 26
+#endif
+ ret = setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
+ (const void *)&val, sizeof(val));
+ }
+
+ return 0;
+}" HAVE_IPV6)
+
+check_c_source_compiles("
+#include <sys/socket.h>
+
+int main(void) {
+ struct sockaddr_storage s;
+
+ return 0;
+}" HAVE_SOCKADDR_STORAGE)
+
+check_c_source_compiles("
+void test_destructor_attribute(void) __attribute__ ((destructor));
+
+void test_destructor_attribute(void)
+{
+ return;
+}
+
+int main(void) {
+ return 0;
+}" HAVE_DESTRUCTOR_ATTRIBUTE)
+
+check_c_source_compiles("
+__thread int tls;
+
+int main(void) {
+ return 0;
+}" HAVE_GCC_THREAD_LOCAL_STORAGE)
+
+check_c_source_compiles("
+void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
+
+int main(void) {
+ return 0;
+}" HAVE_FUNCTION_ATTRIBUTE_FORMAT)
+
+# If this produces a warning treat it as error!
+set(CMAKE_REQUIRED_FLAGS "-Werror")
+check_c_source_compiles("
+void test_address_sanitizer_attribute(void) __attribute__((no_sanitize_address));
+
+void test_address_sanitizer_attribute(void)
+{
+ return;
+}
+
+int main(void) {
+ return 0;
+}" HAVE_ADDRESS_SANITIZER_ATTRIBUTE)
+set(CMAKE_REQUIRED_FLAGS)
+
+check_library_exists(dl dlopen "" HAVE_LIBDL)
+if (HAVE_LIBDL)
+ find_library(DLFCN_LIBRARY dl)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${DLFCN_LIBRARY})
+endif (HAVE_LIBDL)
+
+if (OSX)
+ set(HAVE_APPLE 1)
+endif (OSX)
+
+# ENDIAN
+if (NOT WIN32)
+ test_big_endian(WORDS_BIGENDIAN)
+endif (NOT WIN32)
+
+check_type_size(pid_t SIZEOF_PID_T)
+
+set(SWRAP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CACHE INTERNAL "swrap required system libraries")
diff --git a/tests/deckard/contrib/libswrap/DefineOptions.cmake b/tests/deckard/contrib/libswrap/DefineOptions.cmake
new file mode 100644
index 0000000..6030e79
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/DefineOptions.cmake
@@ -0,0 +1 @@
+option(UNIT_TESTING "Build with unit tests" OFF)
diff --git a/tests/deckard/contrib/libswrap/README b/tests/deckard/contrib/libswrap/README
new file mode 100644
index 0000000..fd08cc4
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/README
@@ -0,0 +1,21 @@
+SOCKET_WRAPPER
+==============
+
+This is a modification of initial socket_wrapper (https://cwrap.org/socket_wrapper.html) library.
+Essence : functionally both libraries are equal. But here implemented some minor changes intended
+to ensure the possibility of using arbitrary IP addresses instead of private-range IP addresses.
+
+DESCRIPTION
+-----------
+
+More details can be found in the manpage:
+
+ man -l ./doc/socket_wrapper.1
+
+or the raw text version:
+
+ less ./doc/socket_wrapper.1.txt
+
+For installation instructions please take a look at the README.install file.
+
+
diff --git a/tests/deckard/contrib/libswrap/README.install b/tests/deckard/contrib/libswrap/README.install
new file mode 100644
index 0000000..6fe012f
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/README.install
@@ -0,0 +1,78 @@
+Obtaining the sources
+=====================
+
+Source tarballs for socket_wrapper can be downloaded from
+
+ https://ftp.samba.org/pub/cwrap/
+
+The source code repository for socket wrapper is located under
+
+ git://git.samba.org/socket_wrapper.git
+
+To create a local copy, run
+
+ $ git clone git://git.samba.org/socket_wrapper.git
+ $ cd socket_wrapper
+
+Building from sources
+=====================
+
+socket_wrapper uses cmake (www.cmake.org) as its build system.
+
+In an unpacked sources base directory, create a directory to
+contain the build results, e.g.
+
+ $ mkdir obj
+ $ cd obj
+
+Note that "obj" is just an example. The directory can
+be named arbitrarily.
+
+Next, run cmake to configure the build, e.g.
+
+ $ cmake -DCMAKE_INSTALL_PREFIX=<prefix> ..
+
+or on a 64 bit red hat system:
+
+ $ cmake -DCMAKE_INSTALL_PREFIX=<prefix> -DLIB_SUFFIX=64 ..
+
+The "<prefix>" should be replaced by the intended installation
+target prefix directory, typically /usr or /usr/local.
+
+Note that the target directory does not have to be a direct
+or indirect subdirectory of the source base directory: It can
+be an arbitrary directory in the system. In the general case,
+".." has to be replaced by a relative or absolute path of the
+source base directory in the "cmake" command line.
+
+One can control the build type with "-DCMAKE_BUILD_TYPE=<mode>"
+where <mode> can be one of Debug, Release, RelWithDebInfo, and
+some more (see cmake.org). The default is "RelWithDebInfo".
+
+After configuring with cmake, run the build with
+
+ $ make
+
+Unit testing
+============
+
+In order to support running the test suite after building,
+the cmocka unit test framework needs to be installed (cmocka.org),
+and you need to specify
+
+ -DUNIT_TESTING=ON
+
+in the cmake run. After running "make",
+
+ $ make test
+
+runs the test suite.
+
+Installing
+==========
+
+socket_wrapper is installed into the prefix directory
+after running "cmake" and "make" with
+
+ $ make install
+
diff --git a/tests/deckard/contrib/libswrap/TODO b/tests/deckard/contrib/libswrap/TODO
new file mode 100644
index 0000000..147c166
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/TODO
@@ -0,0 +1,33 @@
+TODO
+=====
+
+This is the TODO list of this project. It should give you some hints of things
+which need to be implemented. If you can spend some time on this project, then
+look at the list below.
+
+
+Library:
+---------
+
+Goals:
+* Thread safety
+* The proposed way ==> - fd-passing for tcp sockets (for free)
+ Approach:
+ - tdb "in small". So a "db file".
+ - for each socket an entry in the db file
+ (file, mmap, robust mutex. e.g. one file per local ip addr)
+ - socket_info : structure in db. protected by pthread robust mutexes
+ - socket_info_fd : --> pointer into mmap area of db
+ - free-list
+ - fd-passing: pass index in array
+ - the last element we pass is not a fd but the index number in the
+ mmaped file
+* Use realpath() in socket_wrapper_dir().
+
+Testing:
+---------
+* Add a test to make sure detect stale file descriptors.
+* Add a test for sento() to broadcast 255.255.255.255.
+* Add a test to check that read/readv/send/ only work on connected sockets.
+* Add unit tests for conversion functions like convert_in_un_remote().
+* Add threaded tests.
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/AddCMockaTest.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/AddCMockaTest.cmake
new file mode 100644
index 0000000..b2d1ca8
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/AddCMockaTest.cmake
@@ -0,0 +1,23 @@
+# - ADD_CHECK_TEST(test_name test_source linklib1 ... linklibN)
+
+# Copyright (c) 2007 Daniel Gollub <dgollub@suse.de>
+# Copyright (c) 2007-2010 Andreas Schneider <asn@cynapses.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+enable_testing()
+include(CTest)
+
+if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)
+ set(CMAKE_C_FLAGS_PROFILING "-g -O0 -Wall -W -Wshadow -Wunused-variable -Wunused-parameter -Wunused-function -Wunused -Wno-system-headers -Wwrite-strings -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Compiler Flags")
+ set(CMAKE_SHARED_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags")
+ set(CMAKE_MODULE_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags")
+ set(CMAKE_EXEC_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags")
+endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)
+
+function (ADD_CMOCKA_TEST _testName _testSource)
+ add_executable(${_testName} ${_testSource})
+ target_link_libraries(${_testName} ${ARGN})
+ add_test(${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName})
+endfunction (ADD_CMOCKA_TEST)
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/COPYING-CMAKE-SCRIPTS b/tests/deckard/contrib/libswrap/cmake/Modules/COPYING-CMAKE-SCRIPTS
new file mode 100644
index 0000000..4b41776
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/COPYING-CMAKE-SCRIPTS
@@ -0,0 +1,22 @@
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/CheckCCompilerFlagSSP.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/CheckCCompilerFlagSSP.cmake
new file mode 100644
index 0000000..2fe4395
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/CheckCCompilerFlagSSP.cmake
@@ -0,0 +1,26 @@
+# - Check whether the C compiler supports a given flag in the
+# context of a stack checking compiler option.
+
+# CHECK_C_COMPILER_FLAG_SSP(FLAG VARIABLE)
+#
+# FLAG - the compiler flag
+# VARIABLE - variable to store the result
+#
+# This actually calls check_c_source_compiles.
+# See help for CheckCSourceCompiles for a listing of variables
+# that can modify the build.
+
+# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+include(CheckCSourceCompiles)
+
+function(CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT)
+ set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
+ set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
+ check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT})
+ set(CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
+endfunction(CHECK_C_COMPILER_FLAG_SSP)
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/DefineCMakeDefaults.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/DefineCMakeDefaults.cmake
new file mode 100644
index 0000000..a6cd47e
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/DefineCMakeDefaults.cmake
@@ -0,0 +1,30 @@
+# Always include srcdir and builddir in include path
+# This saves typing ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY} in
+# about every subdir
+# since cmake 2.4.0
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+# Put the include dirs which are in the source or build tree
+# before all other include dirs, so the headers in the sources
+# are preferred over the already installed ones
+# since cmake 2.4.1
+set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
+
+# Use colored output
+# since cmake 2.4.0
+set(CMAKE_COLOR_MAKEFILE ON)
+
+# Define the generic version of the libraries here
+set(GENERIC_LIB_VERSION "0.1.0")
+set(GENERIC_LIB_SOVERSION "0")
+
+# Set the default build type to release with debug info
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo
+ CACHE STRING
+ "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
+ )
+endif (NOT CMAKE_BUILD_TYPE)
+
+# Create the compile command database for clang by default
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/DefineCompilerFlags.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/DefineCompilerFlags.cmake
new file mode 100644
index 0000000..53481c3
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/DefineCompilerFlags.cmake
@@ -0,0 +1,93 @@
+# define system dependent compiler flags
+
+include(CheckCCompilerFlag)
+include(CheckCCompilerFlagSSP)
+
+if (UNIX AND NOT WIN32)
+ #
+ # Define GNUCC compiler flags
+ #
+ if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
+
+ # add -Wconversion ?
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute -Wcast-align -Wcast-qual")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers")
+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=pointer-arith -Werror=declaration-after-statement")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration -Werror=write-strings")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast")
+ # -Werror=strict-aliasing is broken
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing -Wstrict-aliasing=2")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-overflow -Wstrict-overflow=5 -Werror=strict-overflow")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
+
+ if (OSX)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__APPLE_USE_RFC_3542")
+ endif (OSX)
+
+ # with -fPIC
+ check_c_compiler_flag("-fPIC" WITH_FPIC)
+ if (WITH_FPIC)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+ endif (WITH_FPIC)
+
+ check_c_compiler_flag_ssp("-fstack-protector" WITH_STACK_PROTECTOR)
+ if (WITH_STACK_PROTECTOR)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
+ endif (WITH_STACK_PROTECTOR)
+
+ if (CMAKE_BUILD_TYPE)
+ string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
+ if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel))
+ check_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE)
+ if (WITH_FORTIFY_SOURCE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wp,-D_FORTIFY_SOURCE=2")
+ endif (WITH_FORTIFY_SOURCE)
+
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=uninitialized")
+ endif()
+ endif()
+ endif (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
+
+ #
+ # Check for large filesystem support
+ #
+ if (CMAKE_SIZEOF_VOID_P MATCHES "8")
+ # with large file support
+ execute_process(
+ COMMAND
+ getconf LFS64_CFLAGS
+ OUTPUT_VARIABLE
+ _lfs_CFLAGS
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ else (CMAKE_SIZEOF_VOID_P MATCHES "8")
+ # with large file support
+ execute_process(
+ COMMAND
+ getconf LFS_CFLAGS
+ OUTPUT_VARIABLE
+ _lfs_CFLAGS
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ endif (CMAKE_SIZEOF_VOID_P MATCHES "8")
+ if (_lfs_CFLAGS)
+ string(REGEX REPLACE "[\r\n]" " " "${_lfs_CFLAGS}" "${${_lfs_CFLAGS}}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_lfs_CFLAGS}")
+ endif (_lfs_CFLAGS)
+
+endif (UNIX AND NOT WIN32)
+
+if (MSVC)
+ # Use secure functions by defaualt and suppress warnings about
+ #"deprecated" functions
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1")
+endif (MSVC)
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/DefineInstallationPaths.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/DefineInstallationPaths.cmake
new file mode 100644
index 0000000..a415f3d
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/DefineInstallationPaths.cmake
@@ -0,0 +1,109 @@
+if (UNIX OR OS2)
+ IF (NOT APPLICATION_NAME)
+ MESSAGE(STATUS "${PROJECT_NAME} is used as APPLICATION_NAME")
+ SET(APPLICATION_NAME ${PROJECT_NAME})
+ ENDIF (NOT APPLICATION_NAME)
+
+ # Suffix for Linux
+ SET(LIB_SUFFIX
+ CACHE STRING "Define suffix of directory name (32/64)"
+ )
+
+ SET(EXEC_INSTALL_PREFIX
+ "${CMAKE_INSTALL_PREFIX}"
+ CACHE PATH "Base directory for executables and libraries"
+ )
+ SET(SHARE_INSTALL_PREFIX
+ "${CMAKE_INSTALL_PREFIX}/share"
+ CACHE PATH "Base directory for files which go to share/"
+ )
+ SET(DATA_INSTALL_PREFIX
+ "${SHARE_INSTALL_PREFIX}/${APPLICATION_NAME}"
+ CACHE PATH "The parent directory where applications can install their data")
+
+ # The following are directories where stuff will be installed to
+ SET(BIN_INSTALL_DIR
+ "${EXEC_INSTALL_PREFIX}/bin"
+ CACHE PATH "The ${APPLICATION_NAME} binary install dir (default prefix/bin)"
+ )
+ SET(SBIN_INSTALL_DIR
+ "${EXEC_INSTALL_PREFIX}/sbin"
+ CACHE PATH "The ${APPLICATION_NAME} sbin install dir (default prefix/sbin)"
+ )
+ SET(LIB_INSTALL_DIR
+ "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}"
+ CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/lib)"
+ )
+ SET(LIBEXEC_INSTALL_DIR
+ "${EXEC_INSTALL_PREFIX}/libexec"
+ CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/libexec)"
+ )
+ SET(PLUGIN_INSTALL_DIR
+ "${LIB_INSTALL_DIR}/${APPLICATION_NAME}"
+ CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is prefix/lib/${APPLICATION_NAME})"
+ )
+ SET(INCLUDE_INSTALL_DIR
+ "${CMAKE_INSTALL_PREFIX}/include"
+ CACHE PATH "The subdirectory to the header prefix (default prefix/include)"
+ )
+
+ set(CMAKE_INSTALL_DIR
+ "${LIB_INSTALL_DIR}/cmake"
+ CACHE PATH "The subdirectory to install cmake config files")
+
+ SET(DATA_INSTALL_DIR
+ "${DATA_INSTALL_PREFIX}"
+ CACHE PATH "The parent directory where applications can install their data (default prefix/share/${APPLICATION_NAME})"
+ )
+ SET(HTML_INSTALL_DIR
+ "${DATA_INSTALL_PREFIX}/doc/HTML"
+ CACHE PATH "The HTML install dir for documentation (default data/doc/html)"
+ )
+ SET(ICON_INSTALL_DIR
+ "${DATA_INSTALL_PREFIX}/icons"
+ CACHE PATH "The icon install dir (default data/icons/)"
+ )
+ SET(SOUND_INSTALL_DIR
+ "${DATA_INSTALL_PREFIX}/sounds"
+ CACHE PATH "The install dir for sound files (default data/sounds)"
+ )
+
+ SET(LOCALE_INSTALL_DIR
+ "${SHARE_INSTALL_PREFIX}/locale"
+ CACHE PATH "The install dir for translations (default prefix/share/locale)"
+ )
+
+ SET(XDG_APPS_DIR
+ "${SHARE_INSTALL_PREFIX}/applications/"
+ CACHE PATH "The XDG apps dir"
+ )
+ SET(XDG_DIRECTORY_DIR
+ "${SHARE_INSTALL_PREFIX}/desktop-directories"
+ CACHE PATH "The XDG directory"
+ )
+
+ SET(SYSCONF_INSTALL_DIR
+ "${EXEC_INSTALL_PREFIX}/etc"
+ CACHE PATH "The ${APPLICATION_NAME} sysconfig install dir (default prefix/etc)"
+ )
+ SET(MAN_INSTALL_DIR
+ "${SHARE_INSTALL_PREFIX}/man"
+ CACHE PATH "The ${APPLICATION_NAME} man install dir (default prefix/man)"
+ )
+ SET(INFO_INSTALL_DIR
+ "${SHARE_INSTALL_PREFIX}/info"
+ CACHE PATH "The ${APPLICATION_NAME} info install dir (default prefix/info)"
+ )
+else()
+ # Same same
+ set(BIN_INSTALL_DIR "bin" CACHE PATH "-")
+ set(SBIN_INSTALL_DIR "sbin" CACHE PATH "-")
+ set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "-")
+ set(INCLUDE_INSTALL_DIR "include" CACHE PATH "-")
+ set(CMAKE_INSTALL_DIR "CMake" CACHE PATH "-")
+ set(PLUGIN_INSTALL_DIR "plugins" CACHE PATH "-")
+ set(HTML_INSTALL_DIR "doc/HTML" CACHE PATH "-")
+ set(ICON_INSTALL_DIR "icons" CACHE PATH "-")
+ set(SOUND_INSTALL_DIR "sounds" CACHE PATH "-")
+ set(LOCALE_INSTALL_DIR "lang" CACHE PATH "-")
+endif ()
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/DefinePlatformDefaults.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/DefinePlatformDefaults.cmake
new file mode 100644
index 0000000..f36d9e6
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/DefinePlatformDefaults.cmake
@@ -0,0 +1,32 @@
+# Set system vars
+
+if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ set(LINUX TRUE)
+endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+
+if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ set(FREEBSD TRUE)
+ set(BSD TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+
+if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+ set(OPENBSD TRUE)
+ set(BSD TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+
+if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+ set(NETBSD TRUE)
+ set(BSD TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+
+if (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
+ set(SOLARIS TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
+
+if (CMAKE_SYSTEM_NAME MATCHES "OS2")
+ set(OS2 TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "OS2")
+
+if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ set(OSX TRUE)
+endif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
diff --git a/tests/deckard/contrib/libswrap/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake b/tests/deckard/contrib/libswrap/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake
new file mode 100644
index 0000000..a2e9480
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake
@@ -0,0 +1,17 @@
+# - MACRO_ENSURE_OUT_OF_SOURCE_BUILD(<errorMessage>)
+# MACRO_ENSURE_OUT_OF_SOURCE_BUILD(<errorMessage>)
+
+# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+macro (MACRO_ENSURE_OUT_OF_SOURCE_BUILD _errorMessage)
+
+ string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" _insource)
+ if (_insource)
+ message(SEND_ERROR "${_errorMessage}")
+ message(FATAL_ERROR "Remove the file CMakeCache.txt in ${CMAKE_SOURCE_DIR} first.")
+ endif (_insource)
+
+endmacro (MACRO_ENSURE_OUT_OF_SOURCE_BUILD)
diff --git a/tests/deckard/contrib/libswrap/config.h.cmake b/tests/deckard/contrib/libswrap/config.h.cmake
new file mode 100644
index 0000000..a9b8ce8
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/config.h.cmake
@@ -0,0 +1,74 @@
+/* Name of package */
+#cmakedefine PACKAGE "${APPLICATION_NAME}"
+
+/* Version number of package */
+#cmakedefine VERSION "${APPLICATION_VERSION}"
+
+#cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}"
+#cmakedefine DATADIR "${DATADIR}"
+#cmakedefine LIBDIR "${LIBDIR}"
+#cmakedefine PLUGINDIR "${PLUGINDIR}"
+#cmakedefine SYSCONFDIR "${SYSCONFDIR}"
+#cmakedefine BINARYDIR "${BINARYDIR}"
+#cmakedefine SOURCEDIR "${SOURCEDIR}"
+
+/************************** HEADER FILES *************************/
+
+#cmakedefine HAVE_SYS_FILIO_H 1
+#cmakedefine HAVE_SYS_SIGNALFD_H 1
+#cmakedefine HAVE_SYS_EVENTFD_H 1
+#cmakedefine HAVE_SYS_TIMERFD_H 1
+#cmakedefine HAVE_GNU_LIB_NAMES_H 1
+#cmakedefine HAVE_RPC_RPC_H 1
+
+/**************************** STRUCTS ****************************/
+
+#cmakedefine HAVE_STRUCT_IN_PKTINFO 1
+#cmakedefine HAVE_STRUCT_IN6_PKTINFO 1
+
+/************************ STRUCT MEMBERS *************************/
+
+#cmakedefine HAVE_STRUCT_SOCKADDR_SA_LEN 1
+#cmakedefine HAVE_STRUCT_MSGHDR_MSG_CONTROL 1
+
+/*************************** FUNCTIONS ***************************/
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#cmakedefine HAVE_GETADDRINFO 1
+#cmakedefine HAVE_SIGNALFD 1
+#cmakedefine HAVE_EVENTFD 1
+#cmakedefine HAVE_TIMERFD_CREATE 1
+#cmakedefine HAVE_BINDRESVPORT 1
+#cmakedefine HAVE_ACCEPT4 1
+#cmakedefine HAVE_PLEDGE 1
+
+#cmakedefine HAVE_ACCEPT_PSOCKLEN_T 1
+#cmakedefine HAVE_IOCTL_INT 1
+#cmakedefine HAVE_EVENTFD_UNSIGNED_INT 1
+
+/*************************** LIBRARIES ***************************/
+
+#cmakedefine HAVE_GETTIMEOFDAY_TZ 1
+#cmakedefine HAVE_GETTIMEOFDAY_TZ_VOID 1
+
+/*************************** DATA TYPES***************************/
+
+#cmakedefine SIZEOF_PID_T @SIZEOF_PID_T@
+
+/**************************** OPTIONS ****************************/
+
+#cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
+#cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
+#cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1
+#cmakedefine HAVE_SOCKADDR_STORAGE 1
+#cmakedefine HAVE_IPV6 1
+#cmakedefine HAVE_FUNCTION_ATTRIBUTE_FORMAT 1
+
+#cmakedefine HAVE_APPLE 1
+#cmakedefine HAVE_LIBSOCKET 1
+
+/*************************** ENDIAN *****************************/
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+ significant byte first (like Motorola and SPARC, unlike Intel). */
+#cmakedefine WORDS_BIGENDIAN 1
diff --git a/tests/deckard/contrib/libswrap/doc/CMakeLists.txt b/tests/deckard/contrib/libswrap/doc/CMakeLists.txt
new file mode 100644
index 0000000..57552d6
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/doc/CMakeLists.txt
@@ -0,0 +1,4 @@
+install(FILES
+ socket_wrapper.1
+ DESTINATION
+ ${MAN_INSTALL_DIR}/man1)
diff --git a/tests/deckard/contrib/libswrap/doc/README b/tests/deckard/contrib/libswrap/doc/README
new file mode 100644
index 0000000..dbe07f7
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/doc/README
@@ -0,0 +1,3 @@
+The manpage is written with asciidoc. To generate the manpage use:
+
+a2x --doctype manpage --format manpage doc/socket_wrapper.1.txt
diff --git a/tests/deckard/contrib/libswrap/doc/socket_wrapper.1 b/tests/deckard/contrib/libswrap/doc/socket_wrapper.1
new file mode 100644
index 0000000..c3cf835
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/doc/socket_wrapper.1
@@ -0,0 +1,204 @@
+'\" t
+.\" Title: socket_wrapper
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\" Date: 2015-08-11
+.\" Manual: \ \&
+.\" Source: \ \&
+.\" Language: English
+.\"
+.TH "SOCKET_WRAPPER" "1" "2015\-08\-11" "\ \&" "\ \&"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+socket_wrapper \- A library passing all socket communications through unix sockets\&.
+.SH "SYNOPSIS"
+.sp
+LD_PRELOAD=libsocket_wrapper\&.so SOCKET_WRAPPER_DIR=/tmp/tmp\&.bQRELqDrhM SOCKET_WRAPPER_DEFAULT_IFACE=10 \fB\&./myapplication\fR
+.SH "DESCRIPTION"
+.sp
+socket_wrapper aims to help client/server software development teams willing to gain full functional test coverage\&. It makes possible to run several instances of the full software stack on the same machine and perform locally functional testing of complex network configurations\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Redirects all network communication to happen over unix sockets\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Support for IPv4 and IPv6 socket and addressing emulation\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Ablility to capture network traffic in pcap format\&.
+.RE
+.SH "ENVIRONMENT VARIABLES"
+.PP
+\fBSOCKET_WRAPPER_DIR\fR
+.RS 4
+The user defines a directory where to put all the unix sockets using the envionment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir"\&. When a server opens a port or a client wants to connect, socket_wrapper will translate IP addresses to a special socket_wrapper name and look for the relevant unix socket in the SOCKET_WRAPPER_DIR\&.
+.RE
+.PP
+\fBSOCKET_WRAPPER_DEFAULT_IFACE\fR
+.RS 4
+Additionally, the default interface to be used by an application is defined with "SOCKET_WRAPPER_DEFAULT_IFACE=<ID>" where <ID> is between 2 and 254\&. This is analogous to use the IPv4 addresses "127\&.0\&.0\&.<ID>" or IPv6 addresses "fd00::5357:5f<IDx>" (where <IDx> is a hexadecimal presentation of <ID>)\&. You should always set the default interface\&. If you listen on INADDR_ANY then it will use the default interface to listen on\&.
+.RE
+.PP
+\fBSOCKET_WRAPPER_PCAP_FILE\fR
+.RS 4
+When debugging, it is often interesting to investigate the network traffic between the client and server within your application\&. If you define SOCKET_WRAPPER_PCAP_FILE=/path/to/file\&.pcap, socket_wrapper will dump all your network traffic to the specified file\&. After the test has been finished you\(cqre able to open the file for example with Wireshark\&.
+.RE
+.PP
+\fBSOCKET_WRAPPER_MTU\fR
+.RS 4
+With this variable you can change the MTU size\&. However we do not recomment to do that as the default size of 1500 byte is best for formatting PCAP files\&.
+.RE
+.sp
+The minimum value you can set is 512 and the maximum 32768\&.
+.PP
+\fBSOCKET_WRAPPER_DEBUGLEVEL\fR
+.RS 4
+If you need to see what is going on in socket_wrapper itself or try to find a bug, you can enable logging support in socket_wrapper if you built it with debug symbols\&.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+0 = ERROR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+1 = WARNING
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+2 = DEBUG
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+3 = TRACE
+.RE
+.RE
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Open a console and create a directory for the unix sockets\&.
+$ mktemp \-d
+/tmp/tmp\&.bQRELqDrhM
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Then start nc to listen for network traffic using the temporary directory\&.
+$ LD_PRELOAD=libsocket_wrapper\&.so \e
+ SOCKET_WRAPPER_DIR=/tmp/tmp\&.bQRELqDrhM \e
+ SOCKET_WRAPPER_DEFAULT_IFACE=10 nc \-v \-l 127\&.0\&.0\&.10 7
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# (If nc, listens on 0\&.0\&.0\&.0 then listener will be open on 127\&.0\&.0\&.10 because
+# it is the default interface)
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# Now open another console and start \*(Aqnc\*(Aq as a client to connect to the server:
+$ LD_PRELOAD=libsocket_wrapper\&.so \e
+ SOCKET_WRAPPER_DIR=/tmp/tmp\&.bQRELqDrhM \e
+ SOCKET_WRAPPER_DEFAULT_IFACE=100 nc \-v 127\&.0\&.0\&.10 7
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# (The client will use the address 127\&.0\&.0\&.100 when connecting to the server)
+# Now you can type \*(AqHello!\*(Aq which will be sent to the server and should appear
+# in the console output of the server\&.
+.fi
+.if n \{\
+.RE
+.\}
diff --git a/tests/deckard/contrib/libswrap/doc/socket_wrapper.1.txt b/tests/deckard/contrib/libswrap/doc/socket_wrapper.1.txt
new file mode 100644
index 0000000..f4e82a8
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/doc/socket_wrapper.1.txt
@@ -0,0 +1,95 @@
+socket_wrapper(1)
+=================
+:revdate: 2015-08-11
+
+NAME
+----
+
+socket_wrapper - A library passing all socket communications through unix sockets.
+
+SYNOPSIS
+--------
+
+LD_PRELOAD=libsocket_wrapper.so SOCKET_WRAPPER_DIR=/tmp/tmp.bQRELqDrhM SOCKET_WRAPPER_DEFAULT_IFACE=10 *./myapplication*
+
+DESCRIPTION
+-----------
+
+socket_wrapper aims to help client/server software development teams willing to
+gain full functional test coverage. It makes possible to run several instances
+of the full software stack on the same machine and perform locally functional
+testing of complex network configurations.
+
+- Redirects all network communication to happen over unix sockets.
+- Support for IPv4 and IPv6 socket and addressing emulation.
+- Ablility to capture network traffic in pcap format.
+
+ENVIRONMENT VARIABLES
+---------------------
+
+*SOCKET_WRAPPER_DIR*::
+
+The user defines a directory where to put all the unix sockets using the
+envionment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir". When a server
+opens a port or a client wants to connect, socket_wrapper will translate IP
+addresses to a special socket_wrapper name and look for the relevant unix
+socket in the SOCKET_WRAPPER_DIR.
+
+*SOCKET_WRAPPER_DEFAULT_IFACE*::
+
+Additionally, the default interface to be used by an application is defined
+with "SOCKET_WRAPPER_DEFAULT_IFACE=<ID>" where <ID> is between 2 and 254. This
+is analogous to use the IPv4 addresses "127.0.0.<ID>" or IPv6 addresses
+"fd00::5357:5f<IDx>" (where <IDx> is a hexadecimal presentation of <ID>). You
+should always set the default interface. If you listen on INADDR_ANY then it
+will use the default interface to listen on.
+
+*SOCKET_WRAPPER_PCAP_FILE*::
+
+When debugging, it is often interesting to investigate the network traffic
+between the client and server within your application. If you define
+SOCKET_WRAPPER_PCAP_FILE=/path/to/file.pcap, socket_wrapper will dump all your
+network traffic to the specified file. After the test has been finished you're
+able to open the file for example with Wireshark.
+
+*SOCKET_WRAPPER_MTU*::
+
+With this variable you can change the MTU size. However we do not recomment to
+do that as the default size of 1500 byte is best for formatting PCAP files.
+
+The minimum value you can set is 512 and the maximum 32768.
+
+*SOCKET_WRAPPER_DEBUGLEVEL*::
+
+If you need to see what is going on in socket_wrapper itself or try to find a
+bug, you can enable logging support in socket_wrapper if you built it with
+debug symbols.
+
+- 0 = ERROR
+- 1 = WARNING
+- 2 = DEBUG
+- 3 = TRACE
+
+EXAMPLE
+-------
+
+ # Open a console and create a directory for the unix sockets.
+ $ mktemp -d
+ /tmp/tmp.bQRELqDrhM
+
+ # Then start nc to listen for network traffic using the temporary directory.
+ $ LD_PRELOAD=libsocket_wrapper.so \
+ SOCKET_WRAPPER_DIR=/tmp/tmp.bQRELqDrhM \
+ SOCKET_WRAPPER_DEFAULT_IFACE=10 nc -v -l 127.0.0.10 7
+
+ # (If nc, listens on 0.0.0.0 then listener will be open on 127.0.0.10 because
+ # it is the default interface)
+
+ # Now open another console and start 'nc' as a client to connect to the server:
+ $ LD_PRELOAD=libsocket_wrapper.so \
+ SOCKET_WRAPPER_DIR=/tmp/tmp.bQRELqDrhM \
+ SOCKET_WRAPPER_DEFAULT_IFACE=100 nc -v 127.0.0.10 7
+
+ # (The client will use the address 127.0.0.100 when connecting to the server)
+ # Now you can type 'Hello!' which will be sent to the server and should appear
+ # in the console output of the server.
diff --git a/tests/deckard/contrib/libswrap/example/openssh.sh b/tests/deckard/contrib/libswrap/example/openssh.sh
new file mode 100755
index 0000000..bb74f03
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/example/openssh.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+SSH_DIRECTORY=$(mktemp -d /tmp/tmp.swrap.XXXXXXXX)
+SERVER_ADDRESS="127.0.0.10"
+mkdir ${SSH_DIRECTORY}/swrap
+
+cleanup_and_exit () {
+ trap EXIT
+ test -z "$1" && set 0
+
+ echo
+ echo "CLEANING UP"
+ echo
+
+ kill -TERM $(< ${SSH_DIRECTORY}/sshd.pid)
+ rm -rf ${SSH_DIRECTORY}
+
+ exit $1
+}
+
+# Setup exit handler
+trap cleanup_and_exit SIGINT SIGTERM
+
+echo Generating ${SSH_DIRECTORY}/ssh_host_key.
+ssh-keygen -t rsa1 -b 2048 -f ${SSH_DIRECTORY}/ssh_host_key -N '' 2>/dev/null
+echo Generating ${SSH_DIRECTORY}/ssh_host_dsa_key.
+ssh-keygen -t dsa -f ${SSH_DIRECTORY}/ssh_host_dsa_key -N '' 2>/dev/null
+echo Generating ${SSH_DIRECTORY}/ssh_host_rsa_key.
+ssh-keygen -t rsa -b 2048 -f ${SSH_DIRECTORY}/ssh_host_rsa_key -N '' 2>/dev/null
+#echo Generating ${SSH_DIRECTORY}/ssh_host_ecdsa_key.
+#ssh-keygen -t ecdsa -b 256 -f ${SSH_DIRECTORY}/ssh_host_ecdsa_key -N '' 2>/dev/null
+
+# Create sshd_config file
+cat > ${SSH_DIRECTORY}/sshd_config << EOT
+Port 22
+ListenAddress ${SERVER_ADDRESS}
+HostKey ${SSH_DIRECTORY}/ssh_host_key
+HostKey ${SSH_DIRECTORY}/ssh_host_rsa_key
+HostKey ${SSH_DIRECTORY}/ssh_host_dsa_key
+#HostKey ${SSH_DIRECTORY}/ssh_host_ecdsa_key
+Subsystem sftp /usr/lib/ssh/sftp-server
+
+LogLevel DEBUG1
+
+AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
+AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
+AcceptEnv LC_IDENTIFICATION LC_ALL
+
+PidFile ${SSH_DIRECTORY}/sshd.pid
+EOT
+
+export SOCKET_WRAPPER_DIR="${SSH_DIRECTORY}/swrap"
+export SOCKET_WRAPPER_DEFAULT_IFACE=11
+
+echo
+echo "Starting SSHD with SOCKET_WRAPPER_DIR=${SSH_DIRECTORY}/swrap ..."
+DYLD_INSERT_LIBRARIES=libsocket_wrapper.dylib LD_PRELOAD=libsocket_wrapper.so /usr/sbin/sshd -f ${SSH_DIRECTORY}/sshd_config -e 2> ${SSH_DIRECTORY}/sshd_log || cleanup_and_exit 1
+echo "done"
+
+echo
+echo "Connecting to the ${SERVER_ADDRESS} ssh server using ssh binary."
+echo "You can check the sshd log file at ${SSH_DIRECTORY}/sshd_log."
+echo "If you logout sshd will be stopped and the environment cleaned up."
+DYLD_INSERT_LIBRARIES=libsocket_wrapper.dylib LD_PRELOAD=libsocket_wrapper.so ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${SERVER_ADDRESS}
+
+cleanup_and_exit 0
diff --git a/tests/deckard/contrib/libswrap/socket_wrapper-config-version.cmake.in b/tests/deckard/contrib/libswrap/socket_wrapper-config-version.cmake.in
new file mode 100644
index 0000000..98f292c
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/socket_wrapper-config-version.cmake.in
@@ -0,0 +1,11 @@
+set(PACKAGE_VERSION @APPLICATION_VERSION@)
+
+# Check whether the requested PACKAGE_FIND_VERSION is compatible
+if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+endif()
diff --git a/tests/deckard/contrib/libswrap/socket_wrapper-config.cmake.in b/tests/deckard/contrib/libswrap/socket_wrapper-config.cmake.in
new file mode 100644
index 0000000..7bedd79
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/socket_wrapper-config.cmake.in
@@ -0,0 +1 @@
+set(SOCKET_WRAPPER_LIBRARY @LIB_INSTALL_DIR@/@SOCKET_WRAPPER_LIB@)
diff --git a/tests/deckard/contrib/libswrap/socket_wrapper.pc.cmake b/tests/deckard/contrib/libswrap/socket_wrapper.pc.cmake
new file mode 100644
index 0000000..6dc71f7
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/socket_wrapper.pc.cmake
@@ -0,0 +1,4 @@
+Name: @APPLICATION_NAME@
+Description: The socket_wrapper library
+Version: @APPLICATION_VERSION@
+Libs: @LIB_INSTALL_DIR@/@SOCKET_WRAPPER_LIB@
diff --git a/tests/deckard/contrib/libswrap/src/CMakeLists.txt b/tests/deckard/contrib/libswrap/src/CMakeLists.txt
new file mode 100644
index 0000000..e5f2fbb
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/src/CMakeLists.txt
@@ -0,0 +1,26 @@
+project(libsocket_wrapper C)
+
+include_directories(${CMAKE_BINARY_DIR})
+
+add_library(socket_wrapper SHARED socket_wrapper.c)
+
+target_link_libraries(socket_wrapper ${SWRAP_REQUIRED_LIBRARIES})
+
+install(
+ TARGETS
+ socket_wrapper
+ RUNTIME DESTINATION ${BIN_INSTALL_DIR}
+ LIBRARY DESTINATION ${LIB_INSTALL_DIR}
+ ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
+)
+
+set_target_properties(
+ socket_wrapper
+ PROPERTIES
+ VERSION
+ ${LIBRARY_VERSION}
+ SOVERSION
+ ${LIBRARY_SOVERSION}
+)
+
+set(SOCKET_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}socket_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}" PARENT_SCOPE)
diff --git a/tests/deckard/contrib/libswrap/src/socket_wrapper.c b/tests/deckard/contrib/libswrap/src/socket_wrapper.c
new file mode 100644
index 0000000..bc4f4ab
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/src/socket_wrapper.c
@@ -0,0 +1,5475 @@
+/*
+ * Copyright (c) 2005-2008 Jelmer Vernooij <jelmer@samba.org>
+ * Copyright (C) 2006-2014 Stefan Metzmacher <metze@samba.org>
+ * Copyright (C) 2013-2014 Andreas Schneider <asn@samba.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * 3. Neither the name of the author 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 AUTHOR 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 AUTHOR 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.
+ *
+ */
+
+/*
+ Socket wrapper library. Passes all socket communication over
+ unix domain sockets if the environment variable SOCKET_WRAPPER_DIR
+ is set.
+*/
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+#ifdef HAVE_SYS_SIGNALFD_H
+#include <sys/signalfd.h>
+#endif
+#ifdef HAVE_SYS_EVENTFD_H
+#include <sys/eventfd.h>
+#endif
+#ifdef HAVE_SYS_TIMERFD_H
+#include <sys/timerfd.h>
+#endif
+#include <sys/uio.h>
+#include <errno.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <unistd.h>
+#ifdef HAVE_GNU_LIB_NAMES_H
+#include <gnu/lib-names.h>
+#endif
+#ifdef HAVE_RPC_RPC_H
+#include <rpc/rpc.h>
+#endif
+#include <dirent.h>
+
+enum swrap_dbglvl_e {
+ SWRAP_LOG_ERROR = 0,
+ SWRAP_LOG_WARN,
+ SWRAP_LOG_DEBUG,
+ SWRAP_LOG_TRACE
+};
+
+/* GCC have printf type attribute check. */
+#ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT
+#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b)))
+#else
+#define PRINTF_ATTRIBUTE(a,b)
+#endif /* HAVE_FUNCTION_ATTRIBUTE_FORMAT */
+
+#ifdef HAVE_DESTRUCTOR_ATTRIBUTE
+#define DESTRUCTOR_ATTRIBUTE __attribute__ ((destructor))
+#else
+#define DESTRUCTOR_ATTRIBUTE
+#endif
+
+#ifdef HAVE_ADDRESS_SANITIZER_ATTRIBUTE
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE __attribute__((no_sanitize_address))
+#else
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
+#endif
+
+#ifdef HAVE_GCC_THREAD_LOCAL_STORAGE
+# define SWRAP_THREAD __thread
+#else
+# define SWRAP_THREAD
+#endif
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
+#ifndef ZERO_STRUCT
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
+#endif
+
+#ifndef ZERO_STRUCTP
+#define ZERO_STRUCTP(x) do { \
+ if ((x) != NULL) \
+ memset((char *)(x), 0, sizeof(*(x))); \
+ } while(0)
+#endif
+
+#ifndef discard_const
+#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
+#endif
+
+#ifndef discard_const_p
+#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
+#endif
+
+#ifdef IPV6_PKTINFO
+# ifndef IPV6_RECVPKTINFO
+# define IPV6_RECVPKTINFO IPV6_PKTINFO
+# endif /* IPV6_RECVPKTINFO */
+#endif /* IPV6_PKTINFO */
+
+/*
+ * On BSD IP_PKTINFO has a different name because during
+ * the time when they implemented it, there was no RFC.
+ * The name for IPv6 is the same as on Linux.
+ */
+#ifndef IP_PKTINFO
+# ifdef IP_RECVDSTADDR
+# define IP_PKTINFO IP_RECVDSTADDR
+# endif
+#endif
+
+
+#define SWRAP_DLIST_ADD(list,item) do { \
+ if (!(list)) { \
+ (item)->prev = NULL; \
+ (item)->next = NULL; \
+ (list) = (item); \
+ } else { \
+ (item)->prev = NULL; \
+ (item)->next = (list); \
+ (list)->prev = (item); \
+ (list) = (item); \
+ } \
+} while (0)
+
+#define SWRAP_DLIST_REMOVE(list,item) do { \
+ if ((list) == (item)) { \
+ (list) = (item)->next; \
+ if (list) { \
+ (list)->prev = NULL; \
+ } \
+ } else { \
+ if ((item)->prev) { \
+ (item)->prev->next = (item)->next; \
+ } \
+ if ((item)->next) { \
+ (item)->next->prev = (item)->prev; \
+ } \
+ } \
+ (item)->prev = NULL; \
+ (item)->next = NULL; \
+} while (0)
+
+#if defined(HAVE_GETTIMEOFDAY_TZ) || defined(HAVE_GETTIMEOFDAY_TZ_VOID)
+#define swrapGetTimeOfDay(tval) gettimeofday(tval,NULL)
+#else
+#define swrapGetTimeOfDay(tval) gettimeofday(tval)
+#endif
+
+/* we need to use a very terse format here as IRIX 6.4 silently
+ truncates names to 16 chars, so if we use a longer name then we
+ can't tell which port a packet came from with recvfrom()
+
+ with this format we have 8 chars left for the directory name
+*/
+#define SOCKET_FORMAT "%c%02X%04X"
+#define SOCKET_TYPE_CHAR_TCP 'T'
+#define SOCKET_TYPE_CHAR_UDP 'U'
+#define SOCKET_TYPE_CHAR_TCP_V6 'X'
+#define SOCKET_TYPE_CHAR_UDP_V6 'Y'
+
+
+#define SOCKET_FORMAT_LONG "%c%08X%04X"
+#define SOCKET_FORMAT_V6_LONG "%c%08X%08X%08X%08X%04X"
+
+#define SOCKET_TYPE_CHAR_TCP_LONG 'Q'
+#define SOCKET_TYPE_CHAR_UDP_LONG 'W'
+#define SOCKET_TYPE_CHAR_TCP_V6_LONG 'E'
+#define SOCKET_TYPE_CHAR_UDP_V6_LONG 'R'
+
+/*
+ * Set the packet MTU to 1500 bytes for stream sockets to make it it easier to
+ * format PCAP capture files (as the caller will simply continue from here).
+ */
+#define SOCKET_WRAPPER_MTU_DEFAULT 1500
+#define SOCKET_WRAPPER_MTU_MIN 512
+#define SOCKET_WRAPPER_MTU_MAX 32768
+
+#define SOCKET_MAX_SOCKETS 1024
+
+/* This limit is to avoid broadcast sendto() needing to stat too many
+ * files. It may be raised (with a performance cost) to up to 254
+ * without changing the format above */
+#define MAX_WRAPPED_INTERFACES 40
+
+struct swrap_address {
+ socklen_t sa_socklen;
+ union {
+ struct sockaddr s;
+ struct sockaddr_in in;
+#ifdef HAVE_IPV6
+ struct sockaddr_in6 in6;
+#endif
+ struct sockaddr_un un;
+ struct sockaddr_storage ss;
+ } sa;
+};
+
+struct socket_info_fd {
+ struct socket_info_fd *prev, *next;
+ int fd;
+};
+
+struct socket_info
+{
+ struct socket_info_fd *fds;
+
+ int family;
+ int type;
+ int protocol;
+ int bound;
+ int bcast;
+ int is_server;
+ int connected;
+ int defer_connect;
+ int pktinfo;
+ int tcp_nodelay;
+
+ /* The unix path so we can unlink it on close() */
+ struct sockaddr_un un_addr;
+
+ struct swrap_address bindname;
+ struct swrap_address myname;
+ struct swrap_address peername;
+
+ struct {
+ unsigned long pck_snd;
+ unsigned long pck_rcv;
+ } io;
+
+ struct socket_info *prev, *next;
+};
+
+/*
+ * File descriptors are shared between threads so we should share socket
+ * information too.
+ */
+struct socket_info *sockets;
+
+/* Function prototypes */
+
+bool socket_wrapper_enabled(void);
+void swrap_destructor(void) DESTRUCTOR_ATTRIBUTE;
+
+#ifdef NDEBUG
+# define SWRAP_LOG(...)
+#else
+
+static void swrap_log(enum swrap_dbglvl_e dbglvl, const char *func, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
+# define SWRAP_LOG(dbglvl, ...) swrap_log((dbglvl), __func__, __VA_ARGS__)
+
+static void swrap_log(enum swrap_dbglvl_e dbglvl,
+ const char *func,
+ const char *format, ...)
+{
+ char buffer[1024];
+ va_list va;
+ const char *d;
+ unsigned int lvl = 0;
+
+ d = getenv("SOCKET_WRAPPER_DEBUGLEVEL");
+ if (d != NULL) {
+ lvl = atoi(d);
+ }
+
+ va_start(va, format);
+ vsnprintf(buffer, sizeof(buffer), format, va);
+ va_end(va);
+
+ if (lvl >= dbglvl) {
+ switch (dbglvl) {
+ case SWRAP_LOG_ERROR:
+ fprintf(stderr,
+ "SWRAP_ERROR(%d) - %s: %s\n",
+ (int)getpid(), func, buffer);
+ break;
+ case SWRAP_LOG_WARN:
+ fprintf(stderr,
+ "SWRAP_WARN(%d) - %s: %s\n",
+ (int)getpid(), func, buffer);
+ break;
+ case SWRAP_LOG_DEBUG:
+ fprintf(stderr,
+ "SWRAP_DEBUG(%d) - %s: %s\n",
+ (int)getpid(), func, buffer);
+ break;
+ case SWRAP_LOG_TRACE:
+ fprintf(stderr,
+ "SWRAP_TRACE(%d) - %s: %s\n",
+ (int)getpid(), func, buffer);
+ break;
+ }
+ }
+}
+#endif
+
+/*********************************************************
+ * SWRAP LOADING LIBC FUNCTIONS
+ *********************************************************/
+
+#include <dlfcn.h>
+
+struct swrap_libc_fns {
+#ifdef HAVE_ACCEPT4
+ int (*libc_accept4)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen,
+ int flags);
+#else
+ int (*libc_accept)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+#endif
+ int (*libc_bind)(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen);
+ int (*libc_close)(int fd);
+ int (*libc_connect)(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen);
+ int (*libc_dup)(int fd);
+ int (*libc_dup2)(int oldfd, int newfd);
+ int (*libc_fcntl)(int fd, int cmd, ...);
+ FILE *(*libc_fopen)(const char *name, const char *mode);
+#ifdef HAVE_EVENTFD
+ int (*libc_eventfd)(int count, int flags);
+#endif
+ int (*libc_getpeername)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+ int (*libc_getsockname)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+ int (*libc_getsockopt)(int sockfd,
+ int level,
+ int optname,
+ void *optval,
+ socklen_t *optlen);
+ int (*libc_ioctl)(int d, unsigned long int request, ...);
+ int (*libc_listen)(int sockfd, int backlog);
+ int (*libc_open)(const char *pathname, int flags, mode_t mode);
+ int (*libc_pipe)(int pipefd[2]);
+ int (*libc_read)(int fd, void *buf, size_t count);
+ ssize_t (*libc_readv)(int fd, const struct iovec *iov, int iovcnt);
+ int (*libc_recv)(int sockfd, void *buf, size_t len, int flags);
+ int (*libc_recvfrom)(int sockfd,
+ void *buf,
+ size_t len,
+ int flags,
+ struct sockaddr *src_addr,
+ socklen_t *addrlen);
+ int (*libc_recvmsg)(int sockfd, const struct msghdr *msg, int flags);
+ int (*libc_send)(int sockfd, const void *buf, size_t len, int flags);
+ int (*libc_sendmsg)(int sockfd, const struct msghdr *msg, int flags);
+ int (*libc_sendto)(int sockfd,
+ const void *buf,
+ size_t len,
+ int flags,
+ const struct sockaddr *dst_addr,
+ socklen_t addrlen);
+ int (*libc_setsockopt)(int sockfd,
+ int level,
+ int optname,
+ const void *optval,
+ socklen_t optlen);
+#ifdef HAVE_SIGNALFD
+ int (*libc_signalfd)(int fd, const sigset_t *mask, int flags);
+#endif
+ int (*libc_socket)(int domain, int type, int protocol);
+ int (*libc_socketpair)(int domain, int type, int protocol, int sv[2]);
+#ifdef HAVE_TIMERFD_CREATE
+ int (*libc_timerfd_create)(int clockid, int flags);
+#endif
+ ssize_t (*libc_write)(int fd, const void *buf, size_t count);
+ ssize_t (*libc_writev)(int fd, const struct iovec *iov, int iovcnt);
+};
+
+struct swrap {
+ void *libc_handle;
+ void *libsocket_handle;
+
+ bool initialised;
+ bool enabled;
+
+ char *socket_dir;
+
+ struct swrap_libc_fns fns;
+};
+
+static struct swrap swrap;
+
+/* prototypes */
+static const char *socket_wrapper_dir(void);
+
+#define LIBC_NAME "libc.so"
+
+enum swrap_lib {
+ SWRAP_LIBC,
+ SWRAP_LIBNSL,
+ SWRAP_LIBSOCKET,
+};
+
+#ifndef NDEBUG
+static const char *swrap_str_lib(enum swrap_lib lib)
+{
+ switch (lib) {
+ case SWRAP_LIBC:
+ return "libc";
+ case SWRAP_LIBNSL:
+ return "libnsl";
+ case SWRAP_LIBSOCKET:
+ return "libsocket";
+ }
+
+ /* Compiler would warn us about unhandled enum value if we get here */
+ return "unknown";
+}
+#endif
+
+static void *swrap_load_lib_handle(enum swrap_lib lib)
+{
+ int flags = RTLD_LAZY;
+ void *handle = NULL;
+ int i;
+
+#ifdef RTLD_DEEPBIND
+ flags |= RTLD_DEEPBIND;
+#endif
+
+ switch (lib) {
+ case SWRAP_LIBNSL:
+ /* FALL TROUGH */
+ case SWRAP_LIBSOCKET:
+#ifdef HAVE_LIBSOCKET
+ handle = swrap.libsocket_handle;
+ if (handle == NULL) {
+ for (i = 10; i >= 0; i--) {
+ char soname[256] = {0};
+
+ snprintf(soname, sizeof(soname), "libsocket.so.%d", i);
+ handle = dlopen(soname, flags);
+ if (handle != NULL) {
+ break;
+ }
+ }
+
+ swrap.libsocket_handle = handle;
+ }
+ break;
+#endif
+ /* FALL TROUGH */
+ case SWRAP_LIBC:
+ handle = swrap.libc_handle;
+#ifdef LIBC_SO
+ if (handle == NULL) {
+ handle = dlopen(LIBC_SO, flags);
+
+ swrap.libc_handle = handle;
+ }
+#endif
+ if (handle == NULL) {
+ for (i = 10; i >= 0; i--) {
+ char soname[256] = {0};
+
+ snprintf(soname, sizeof(soname), "libc.so.%d", i);
+ handle = dlopen(soname, flags);
+ if (handle != NULL) {
+ break;
+ }
+ }
+
+ swrap.libc_handle = handle;
+ }
+ break;
+ }
+
+ if (handle == NULL) {
+#ifdef RTLD_NEXT
+ handle = swrap.libc_handle = swrap.libsocket_handle = RTLD_NEXT;
+#else
+ SWRAP_LOG(SWRAP_LOG_ERROR,
+ "Failed to dlopen library: %s\n",
+ dlerror());
+ exit(-1);
+#endif
+ }
+
+ return handle;
+}
+
+static void *_swrap_load_lib_function(enum swrap_lib lib, const char *fn_name)
+{
+ void *handle;
+ void *func;
+
+ handle = swrap_load_lib_handle(lib);
+
+ func = dlsym(handle, fn_name);
+ if (func == NULL) {
+ SWRAP_LOG(SWRAP_LOG_ERROR,
+ "Failed to find %s: %s\n",
+ fn_name, dlerror());
+ exit(-1);
+ }
+
+ SWRAP_LOG(SWRAP_LOG_TRACE,
+ "Loaded %s from %s",
+ fn_name, swrap_str_lib(lib));
+ return func;
+}
+
+#define swrap_load_lib_function(lib, fn_name) \
+ if (swrap.fns.libc_##fn_name == NULL) { \
+ void *swrap_cast_ptr = _swrap_load_lib_function(lib, #fn_name); \
+ *(void **) (&swrap.fns.libc_##fn_name) = \
+ swrap_cast_ptr; \
+ }
+
+
+/*
+ * IMPORTANT
+ *
+ * Functions especially from libc need to be loaded individually, you can't load
+ * all at once or gdb will segfault at startup. The same applies to valgrind and
+ * has probably something todo with with the linker.
+ * So we need load each function at the point it is called the first time.
+ */
+#ifdef HAVE_ACCEPT4
+static int libc_accept4(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen,
+ int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, accept4);
+
+ return swrap.fns.libc_accept4(sockfd, addr, addrlen, flags);
+}
+
+#else /* HAVE_ACCEPT4 */
+
+static int libc_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, accept);
+
+ return swrap.fns.libc_accept(sockfd, addr, addrlen);
+}
+#endif /* HAVE_ACCEPT4 */
+
+static int libc_bind(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, bind);
+
+ return swrap.fns.libc_bind(sockfd, addr, addrlen);
+}
+
+static int libc_close(int fd)
+{
+ swrap_load_lib_function(SWRAP_LIBC, close);
+
+ return swrap.fns.libc_close(fd);
+}
+
+static int libc_connect(int sockfd,
+ const struct sockaddr *addr,
+ socklen_t addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, connect);
+
+ return swrap.fns.libc_connect(sockfd, addr, addrlen);
+}
+
+static int libc_dup(int fd)
+{
+ swrap_load_lib_function(SWRAP_LIBC, dup);
+
+ return swrap.fns.libc_dup(fd);
+}
+
+static int libc_dup2(int oldfd, int newfd)
+{
+ swrap_load_lib_function(SWRAP_LIBC, dup2);
+
+ return swrap.fns.libc_dup2(oldfd, newfd);
+}
+
+#ifdef HAVE_EVENTFD
+static int libc_eventfd(int count, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBC, eventfd);
+
+ return swrap.fns.libc_eventfd(count, flags);
+}
+#endif
+
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
+static int libc_vfcntl(int fd, int cmd, va_list ap)
+{
+ long int args[4];
+ int rc;
+ int i;
+
+ swrap_load_lib_function(SWRAP_LIBC, fcntl);
+
+ for (i = 0; i < 4; i++) {
+ args[i] = va_arg(ap, long int);
+ }
+
+ rc = swrap.fns.libc_fcntl(fd,
+ cmd,
+ args[0],
+ args[1],
+ args[2],
+ args[3]);
+
+ return rc;
+}
+
+static int libc_getpeername(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, getpeername);
+
+ return swrap.fns.libc_getpeername(sockfd, addr, addrlen);
+}
+
+static int libc_getsockname(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, getsockname);
+
+ return swrap.fns.libc_getsockname(sockfd, addr, addrlen);
+}
+
+static int libc_getsockopt(int sockfd,
+ int level,
+ int optname,
+ void *optval,
+ socklen_t *optlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, getsockopt);
+
+ return swrap.fns.libc_getsockopt(sockfd, level, optname, optval, optlen);
+}
+
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
+static int libc_vioctl(int d, unsigned long int request, va_list ap)
+{
+ long int args[4];
+ int rc;
+ int i;
+
+ swrap_load_lib_function(SWRAP_LIBC, ioctl);
+
+ for (i = 0; i < 4; i++) {
+ args[i] = va_arg(ap, long int);
+ }
+
+ rc = swrap.fns.libc_ioctl(d,
+ request,
+ args[0],
+ args[1],
+ args[2],
+ args[3]);
+
+ return rc;
+}
+
+static int libc_listen(int sockfd, int backlog)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, listen);
+
+ return swrap.fns.libc_listen(sockfd, backlog);
+}
+
+static FILE *libc_fopen(const char *name, const char *mode)
+{
+ swrap_load_lib_function(SWRAP_LIBC, fopen);
+
+ return swrap.fns.libc_fopen(name, mode);
+}
+
+static int libc_vopen(const char *pathname, int flags, va_list ap)
+{
+ long int mode = 0;
+ int fd;
+
+ swrap_load_lib_function(SWRAP_LIBC, open);
+
+ mode = va_arg(ap, long int);
+
+ fd = swrap.fns.libc_open(pathname, flags, (mode_t)mode);
+
+ return fd;
+}
+
+static int libc_open(const char *pathname, int flags, ...)
+{
+ va_list ap;
+ int fd;
+
+ va_start(ap, flags);
+ fd = libc_vopen(pathname, flags, ap);
+ va_end(ap);
+
+ return fd;
+}
+
+static int libc_pipe(int pipefd[2])
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, pipe);
+
+ return swrap.fns.libc_pipe(pipefd);
+}
+
+static int libc_read(int fd, void *buf, size_t count)
+{
+ swrap_load_lib_function(SWRAP_LIBC, read);
+
+ return swrap.fns.libc_read(fd, buf, count);
+}
+
+static ssize_t libc_readv(int fd, const struct iovec *iov, int iovcnt)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, readv);
+
+ return swrap.fns.libc_readv(fd, iov, iovcnt);
+}
+
+static int libc_recv(int sockfd, void *buf, size_t len, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, recv);
+
+ return swrap.fns.libc_recv(sockfd, buf, len, flags);
+}
+
+static int libc_recvfrom(int sockfd,
+ void *buf,
+ size_t len,
+ int flags,
+ struct sockaddr *src_addr,
+ socklen_t *addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, recvfrom);
+
+ return swrap.fns.libc_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
+}
+
+static int libc_recvmsg(int sockfd, struct msghdr *msg, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, recvmsg);
+
+ return swrap.fns.libc_recvmsg(sockfd, msg, flags);
+}
+
+static int libc_send(int sockfd, const void *buf, size_t len, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, send);
+
+ return swrap.fns.libc_send(sockfd, buf, len, flags);
+}
+
+static int libc_sendmsg(int sockfd, const struct msghdr *msg, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, sendmsg);
+
+ return swrap.fns.libc_sendmsg(sockfd, msg, flags);
+}
+
+static int libc_sendto(int sockfd,
+ const void *buf,
+ size_t len,
+ int flags,
+ const struct sockaddr *dst_addr,
+ socklen_t addrlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, sendto);
+
+ return swrap.fns.libc_sendto(sockfd, buf, len, flags, dst_addr, addrlen);
+}
+
+static int libc_setsockopt(int sockfd,
+ int level,
+ int optname,
+ const void *optval,
+ socklen_t optlen)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, setsockopt);
+
+ return swrap.fns.libc_setsockopt(sockfd, level, optname, optval, optlen);
+}
+
+#ifdef HAVE_SIGNALFD
+static int libc_signalfd(int fd, const sigset_t *mask, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, signalfd);
+
+ return swrap.fns.libc_signalfd(fd, mask, flags);
+}
+#endif
+
+static int libc_socket(int domain, int type, int protocol)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, socket);
+
+ return swrap.fns.libc_socket(domain, type, protocol);
+}
+
+static int libc_socketpair(int domain, int type, int protocol, int sv[2])
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, socketpair);
+
+ return swrap.fns.libc_socketpair(domain, type, protocol, sv);
+}
+
+#ifdef HAVE_TIMERFD_CREATE
+static int libc_timerfd_create(int clockid, int flags)
+{
+ swrap_load_lib_function(SWRAP_LIBC, timerfd_create);
+
+ return swrap.fns.libc_timerfd_create(clockid, flags);
+}
+#endif
+
+static ssize_t libc_write(int fd, const void *buf, size_t count)
+{
+ swrap_load_lib_function(SWRAP_LIBC, write);
+
+ return swrap.fns.libc_write(fd, buf, count);
+}
+
+static ssize_t libc_writev(int fd, const struct iovec *iov, int iovcnt)
+{
+ swrap_load_lib_function(SWRAP_LIBSOCKET, writev);
+
+ return swrap.fns.libc_writev(fd, iov, iovcnt);
+}
+
+/*********************************************************
+ * SWRAP HELPER FUNCTIONS
+ *********************************************************/
+
+#ifdef HAVE_IPV6
+/*
+ * FD00::5357:5FXX
+ */
+static const struct in6_addr *swrap_ipv6(void)
+{
+ static struct in6_addr v;
+ static int initialized;
+ int ret;
+
+ if (initialized) {
+ return &v;
+ }
+ initialized = 1;
+
+ ret = inet_pton(AF_INET6, "FD00::5357:5F00", &v);
+ if (ret <= 0) {
+ abort();
+ }
+
+ return &v;
+}
+static struct in6_addr swrap_make_ipv6(unsigned int a0, unsigned int a1,
+ unsigned int a2, unsigned int a3)
+{
+ struct in6_addr v;
+ int i;
+ for (i = 0 ; i < 4; i++)
+ {
+ v.s6_addr[ 0 + i] = a0;
+ v.s6_addr[ 4 + i] = a1;
+ v.s6_addr[ 8 + i] = a2;
+ v.s6_addr[12 + i] = a3;
+ a0 >>= 8;
+ a1 >>= 8;
+ a2 >>= 8;
+ a3 >>= 8;
+ }
+ return v;
+}
+static void swrap_make_ipv6_ints(const unsigned char s[16], unsigned int *a0, unsigned int *a1,
+ unsigned int *a2, unsigned int *a3)
+{
+ int i;
+
+ *a0 = 0; *a1 = 0; *a2 = 0; *a3 = 0;
+ for (i = 3 ; i > 0; i--)
+ {
+ *a0 += s[ 0 + i];
+ *a1 += s[ 4 + i];
+ *a2 += s[ 8 + i];
+ *a3 += s[12 + i];
+ *a0 <<= 8;
+ *a1 <<= 8;
+ *a2 <<= 8;
+ *a3 <<= 8;
+ }
+ *a0 += s[ 0];
+ *a1 += s[ 4];
+ *a2 += s[ 8];
+ *a3 += s[12];
+}
+
+#endif
+
+static void set_port(int family, int prt, struct swrap_address *addr)
+{
+ switch (family) {
+ case AF_INET:
+ addr->sa.in.sin_port = htons(prt);
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ addr->sa.in6.sin6_port = htons(prt);
+ break;
+#endif
+ }
+}
+
+static size_t socket_length(int family)
+{
+ switch (family) {
+ case AF_INET:
+ return sizeof(struct sockaddr_in);
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ return sizeof(struct sockaddr_in6);
+#endif
+ }
+ return 0;
+}
+
+static const char *socket_wrapper_dir(void)
+{
+ const char *s = getenv("SOCKET_WRAPPER_DIR");
+ if (s == NULL) {
+ return NULL;
+ }
+ /* TODO use realpath(3) here, when we add support for threads */
+ if (strncmp(s, "./", 2) == 0) {
+ s += 2;
+ }
+
+ SWRAP_LOG(SWRAP_LOG_TRACE, "socket_wrapper_dir: %s", s);
+ return s;
+}
+
+static unsigned int socket_wrapper_mtu(void)
+{
+ static unsigned int max_mtu = 0;
+ unsigned int tmp;
+ const char *s;
+ char *endp;
+
+ if (max_mtu != 0) {
+ return max_mtu;
+ }
+
+ max_mtu = SOCKET_WRAPPER_MTU_DEFAULT;
+
+ s = getenv("SOCKET_WRAPPER_MTU");
+ if (s == NULL) {
+ goto done;
+ }
+
+ tmp = strtol(s, &endp, 10);
+ if (s == endp) {
+ goto done;
+ }
+
+ if (tmp < SOCKET_WRAPPER_MTU_MIN || tmp > SOCKET_WRAPPER_MTU_MAX) {
+ goto done;
+ }
+ max_mtu = tmp;
+
+done:
+ return max_mtu;
+}
+
+bool socket_wrapper_enabled(void)
+{
+ const char *s = socket_wrapper_dir();
+
+ return s != NULL ? true : false;
+}
+
+static unsigned int socket_wrapper_default_iface(void)
+{
+ const char *s = getenv("SOCKET_WRAPPER_DEFAULT_IFACE");
+ if (s) {
+ unsigned int iface;
+ if (sscanf(s, "%u", &iface) == 1) {
+ if (iface >= 1 && iface <= MAX_WRAPPED_INTERFACES) {
+ return iface;
+ }
+ }
+ }
+
+ return 1;/* 127.0.0.1 */
+}
+
+static unsigned int socket_wrapper_default_addr(void)
+{
+ const char *s = getenv("SOCKET_WRAPPER_DEFAULT_IFACE");
+ if (s) {
+ unsigned int iface;
+ if (sscanf(s, "%u", &iface) == 1) {
+ if (iface >= 1 && iface <= MAX_WRAPPED_INTERFACES) {
+ return (127<<24) | iface;
+ }
+ }
+ }
+ return (127<<24) | 0x00000001; /* 127.0.0.1 */
+}
+
+static int convert_un_in(const struct sockaddr_un *un, struct sockaddr *in, socklen_t *len)
+{
+ unsigned int prt;
+ const char *p;
+ char type;
+
+ p = strrchr(un->sun_path, '/');
+ if (p) p++; else p = un->sun_path;
+
+ type = p[0];
+
+
+ switch(type) {
+ case SOCKET_TYPE_CHAR_TCP_LONG:
+ case SOCKET_TYPE_CHAR_UDP_LONG: {
+ unsigned int in4_addr;
+ struct sockaddr_in *in2 = (struct sockaddr_in *)(void *)in;
+
+ if ((*len) < sizeof(*in2)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (sscanf(p, SOCKET_FORMAT_LONG, &type, &in4_addr, &prt) != 3) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (prt > 0xFFFF) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ memset(in2, 0, sizeof(*in2));
+ in2->sin_family = AF_INET;
+ in2->sin_addr.s_addr = htonl(in4_addr);
+ in2->sin_port = htons(prt);
+
+ *len = sizeof(*in2);
+ break;
+ }
+#ifdef HAVE_IPV6
+ case SOCKET_TYPE_CHAR_TCP_V6_LONG:
+ case SOCKET_TYPE_CHAR_UDP_V6_LONG: {
+ unsigned int in6_a0, in6_a1, in6_a2, in6_a3;
+ struct sockaddr_in6 *in2 = (struct sockaddr_in6 *)(void *)in;
+
+ if (sscanf(p, SOCKET_FORMAT_V6_LONG, &type,
+ &in6_a0, &in6_a1, &in6_a2, &in6_a3, &prt) != 6) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if ((*len) < sizeof(*in2)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ memset(in2, 0, sizeof(*in2));
+ in2->sin6_family = AF_INET6;
+ in2->sin6_addr = swrap_make_ipv6(in6_a0,in6_a1,in6_a2,in6_a3);
+ in2->sin6_port = htons(prt);
+
+ *len = sizeof(*in2);
+ break;
+ }
+#endif
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+
+ return 0;
+}
+
+static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un,
+ int *bcast)
+{
+ char type = '\0';
+ unsigned int prt;
+ unsigned int in4_addr, in6_a0, in6_a1, in6_a2, in6_a3;
+ int is_bcast = 0;
+
+ if (bcast) *bcast = 0;
+
+ switch (inaddr->sa_family) {
+ case AF_INET: {
+ const struct sockaddr_in *in =
+ (const struct sockaddr_in *)(const void *)inaddr;
+ unsigned int addr = ntohl(in->sin_addr.s_addr);
+ char u_type = '\0';
+ char b_type = '\0';
+ char a_type = '\0';
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ u_type = SOCKET_TYPE_CHAR_TCP_LONG;
+ break;
+ case SOCK_DGRAM:
+ u_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ a_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ b_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ prt = ntohs(in->sin_port);
+ if (a_type && addr == 0xFFFFFFFF) {
+ /* 255.255.255.255 only udp */
+ is_bcast = 2;
+ type = a_type;
+ in4_addr = socket_wrapper_default_addr();
+ } else if (b_type && addr == 0x7FFFFFFF) {
+ /* 127.255.255.255 only udp */
+ is_bcast = 1;
+ type = b_type;
+ in4_addr = socket_wrapper_default_addr();
+ } else {
+ is_bcast = 0;
+ type = u_type;
+ in4_addr = addr;
+ }
+ if (bcast) *bcast = is_bcast;
+ break;
+ }
+#ifdef HAVE_IPV6
+ case AF_INET6: {
+ const struct sockaddr_in6 *in =
+ (const struct sockaddr_in6 *)(const void *)inaddr;
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ type = SOCKET_TYPE_CHAR_TCP_V6_LONG;
+ break;
+ case SOCK_DGRAM:
+ type = SOCKET_TYPE_CHAR_UDP_V6_LONG;
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ /* XXX no multicast/broadcast */
+
+ prt = ntohs(in->sin6_port);
+
+ /* TODO - More checks */
+
+ swrap_make_ipv6_ints(in->sin6_addr.s6_addr,&in6_a0,&in6_a1,&in6_a2,&in6_a3);
+ break;
+ }
+#endif
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown address family!\n");
+ errno = ENETUNREACH;
+ return -1;
+ }
+
+ if (prt == 0) {
+ SWRAP_LOG(SWRAP_LOG_WARN, "Port not set\n");
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (is_bcast) {
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL",
+ socket_wrapper_dir());
+ SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
+ /* the caller need to do more processing */
+ return 0;
+ }
+
+ switch (inaddr->sa_family) {
+ case AF_INET:
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_LONG,
+ socket_wrapper_dir(), type, in4_addr, prt);
+ break;
+ case AF_INET6:
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_V6_LONG,
+ socket_wrapper_dir(), type, in6_a0, in6_a1, in6_a2, in6_a3, prt);
+ break;
+ }
+ SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
+
+ return 0;
+}
+
+static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un,
+ int *bcast)
+{
+ char type = '\0';
+ unsigned int prt;
+ unsigned int in4_addr, in6_a0, in6_a1, in6_a2, in6_a3;
+ struct stat st;
+ int is_bcast = 0;
+
+ if (bcast) *bcast = 0;
+
+ switch (si->family) {
+ case AF_INET: {
+ const struct sockaddr_in *in =
+ (const struct sockaddr_in *)(const void *)inaddr;
+ unsigned int addr = ntohl(in->sin_addr.s_addr);
+ char u_type = '\0';
+ char d_type = '\0';
+ char b_type = '\0';
+ char a_type = '\0';
+
+ prt = ntohs(in->sin_port);
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ u_type = SOCKET_TYPE_CHAR_TCP_LONG;
+ d_type = SOCKET_TYPE_CHAR_TCP_LONG;
+ break;
+ case SOCK_DGRAM:
+ u_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ d_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ a_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ b_type = SOCKET_TYPE_CHAR_UDP_LONG;
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ if (addr == 0) {
+ /* 0.0.0.0 */
+ is_bcast = 0;
+ type = d_type;
+ in4_addr = socket_wrapper_default_addr();
+ } else if (a_type && addr == 0xFFFFFFFF) {
+ /* 255.255.255.255 only udp */
+ is_bcast = 2;
+ type = a_type;
+ in4_addr = socket_wrapper_default_addr();
+ } else if (b_type && addr == 0x7FFFFFFF) {
+ /* 127.255.255.255 only udp */
+ is_bcast = 1;
+ type = b_type;
+ in4_addr = socket_wrapper_default_addr();
+ } else {
+ /* 127.0.0.X */
+ is_bcast = 0;
+ type = u_type;
+ in4_addr = addr;
+ }
+
+ /* Store the bind address for connect() */
+ if (si->bindname.sa_socklen == 0) {
+ struct sockaddr_in bind_in;
+ socklen_t blen = sizeof(struct sockaddr_in);
+
+ ZERO_STRUCT(bind_in);
+ bind_in.sin_family = in->sin_family;
+ bind_in.sin_port = in->sin_port;
+ bind_in.sin_addr.s_addr = htonl(in4_addr);
+
+ si->bindname.sa_socklen = blen;
+ memcpy(&si->bindname.sa.in, &bind_in, blen);
+ }
+
+ break;
+ }
+#ifdef HAVE_IPV6
+ case AF_INET6: {
+ const struct sockaddr_in6 *in =
+ (const struct sockaddr_in6 *)(const void *)inaddr;
+ struct sockaddr_in6 in6_addr = *in;
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ type = SOCKET_TYPE_CHAR_TCP_V6_LONG;
+ break;
+ case SOCK_DGRAM:
+ type = SOCKET_TYPE_CHAR_UDP_V6_LONG;
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ /* XXX no multicast/broadcast */
+
+ prt = ntohs(in->sin6_port);
+
+ /* TODO - More checks */
+
+ if (IN6_IS_ADDR_UNSPECIFIED(&in->sin6_addr)) {
+ in6_addr.sin6_addr = *swrap_ipv6();
+ in6_addr.sin6_addr.s6_addr[15] = socket_wrapper_default_iface();
+ }
+
+ swrap_make_ipv6_ints(in6_addr.sin6_addr.s6_addr,&in6_a0,&in6_a1,&in6_a2,&in6_a3);
+
+ /* Store the bind address for connect() */
+ if (si->bindname.sa_socklen == 0) {
+ struct sockaddr_in6 bind_in;
+ socklen_t blen = sizeof(struct sockaddr_in6);
+
+ ZERO_STRUCT(bind_in);
+ bind_in.sin6_family = in6_addr.sin6_family;
+ bind_in.sin6_port = in6_addr.sin6_port;
+
+ bind_in.sin6_addr = in6_addr.sin6_addr;
+
+ memcpy(&si->bindname.sa.in6, &bind_in, blen);
+ si->bindname.sa_socklen = blen;
+ }
+
+ break;
+ }
+#endif
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown address family\n");
+ errno = EADDRNOTAVAIL;
+ return -1;
+ }
+
+
+ if (bcast) *bcast = is_bcast;
+
+
+ if (prt == 0) {
+ /* handle auto-allocation of ephemeral ports */
+ for (prt = 5001; prt < 10000; prt++) {
+ if (si->family == AF_INET)
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_LONG,
+ socket_wrapper_dir(), type, in4_addr, prt);
+ else
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_V6_LONG,
+ socket_wrapper_dir(), type, in6_a0,in6_a1, in6_a2, in6_a3, prt);
+
+ if (stat(un->sun_path, &st) == 0) continue;
+
+ set_port(si->family, prt, &si->myname);
+ set_port(si->family, prt, &si->bindname);
+
+ break;
+ }
+ if (prt == 10000) {
+ errno = ENFILE;
+ return -1;
+ }
+ }
+
+ if (si->family == AF_INET)
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_LONG,
+ socket_wrapper_dir(), type, in4_addr, prt);
+ else
+ snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT_V6_LONG,
+ socket_wrapper_dir(), type, in6_a0,in6_a1, in6_a2, in6_a3, prt);
+ SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
+ return 0;
+}
+
+static struct socket_info *find_socket_info(int fd)
+{
+ struct socket_info *i;
+
+ for (i = sockets; i; i = i->next) {
+ struct socket_info_fd *f;
+ for (f = i->fds; f; f = f->next) {
+ if (f->fd == fd) {
+ return i;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+#if 0 /* FIXME */
+static bool check_addr_port_in_use(const struct sockaddr *sa, socklen_t len)
+{
+ struct socket_info *s;
+
+ /* first catch invalid input */
+ switch (sa->sa_family) {
+ case AF_INET:
+ if (len < sizeof(struct sockaddr_in)) {
+ return false;
+ }
+ break;
+#if HAVE_IPV6
+ case AF_INET6:
+ if (len < sizeof(struct sockaddr_in6)) {
+ return false;
+ }
+ break;
+#endif
+ default:
+ return false;
+ break;
+ }
+
+ for (s = sockets; s != NULL; s = s->next) {
+ if (s->myname == NULL) {
+ continue;
+ }
+ if (s->myname->sa_family != sa->sa_family) {
+ continue;
+ }
+ switch (s->myname->sa_family) {
+ case AF_INET: {
+ struct sockaddr_in *sin1, *sin2;
+
+ sin1 = (struct sockaddr_in *)s->myname;
+ sin2 = (struct sockaddr_in *)sa;
+
+ if (sin1->sin_addr.s_addr == htonl(INADDR_ANY)) {
+ continue;
+ }
+ if (sin1->sin_port != sin2->sin_port) {
+ continue;
+ }
+ if (sin1->sin_addr.s_addr != sin2->sin_addr.s_addr) {
+ continue;
+ }
+
+ /* found */
+ return true;
+ break;
+ }
+#if HAVE_IPV6
+ case AF_INET6: {
+ struct sockaddr_in6 *sin1, *sin2;
+
+ sin1 = (struct sockaddr_in6 *)s->myname;
+ sin2 = (struct sockaddr_in6 *)sa;
+
+ if (sin1->sin6_port != sin2->sin6_port) {
+ continue;
+ }
+ if (!IN6_ARE_ADDR_EQUAL(&sin1->sin6_addr,
+ &sin2->sin6_addr))
+ {
+ continue;
+ }
+
+ /* found */
+ return true;
+ break;
+ }
+#endif
+ default:
+ continue;
+ break;
+
+ }
+ }
+
+ return false;
+}
+#endif
+
+static void swrap_remove_stale(int fd)
+{
+ struct socket_info *si = find_socket_info(fd);
+ struct socket_info_fd *fi;
+
+ if (si != NULL) {
+ for (fi = si->fds; fi; fi = fi->next) {
+ if (fi->fd == fd) {
+ SWRAP_LOG(SWRAP_LOG_TRACE, "remove stale wrapper for %d", fd);
+ SWRAP_DLIST_REMOVE(si->fds, fi);
+ free(fi);
+ break;
+ }
+ }
+
+ if (si->fds == NULL) {
+ SWRAP_DLIST_REMOVE(sockets, si);
+ if (si->un_addr.sun_path[0] != '\0') {
+ unlink(si->un_addr.sun_path);
+ }
+ free(si);
+ }
+ }
+}
+
+static int sockaddr_convert_to_un(struct socket_info *si,
+ const struct sockaddr *in_addr,
+ socklen_t in_len,
+ struct sockaddr_un *out_addr,
+ int alloc_sock,
+ int *bcast)
+{
+ struct sockaddr *out = (struct sockaddr *)(void *)out_addr;
+
+ (void) in_len; /* unused */
+
+ if (out_addr == NULL) {
+ return 0;
+ }
+
+ out->sa_family = AF_UNIX;
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+ out->sa_len = sizeof(*out_addr);
+#endif
+
+ switch (in_addr->sa_family) {
+ case AF_UNSPEC: {
+ const struct sockaddr_in *sin;
+ if (si->family != AF_INET) {
+ break;
+ }
+ if (in_len < sizeof(struct sockaddr_in)) {
+ break;
+ }
+ sin = (const struct sockaddr_in *)(const void *)in_addr;
+ if(sin->sin_addr.s_addr != htonl(INADDR_ANY)) {
+ break;
+ }
+
+ /*
+ * Note: in the special case of AF_UNSPEC and INADDR_ANY,
+ * AF_UNSPEC is mapped to AF_INET and must be treated here.
+ */
+
+ /* FALL THROUGH */
+ }
+ case AF_INET:
+#ifdef HAVE_IPV6
+ case AF_INET6:
+#endif
+ switch (si->type) {
+ case SOCK_STREAM:
+ case SOCK_DGRAM:
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+ if (alloc_sock) {
+ return convert_in_un_alloc(si, in_addr, out_addr, bcast);
+ } else {
+ return convert_in_un_remote(si, in_addr, out_addr, bcast);
+ }
+ default:
+ break;
+ }
+
+ errno = EAFNOSUPPORT;
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown address family\n");
+ return -1;
+}
+
+static int sockaddr_convert_from_un(const struct socket_info *si,
+ const struct sockaddr_un *in_addr,
+ socklen_t un_addrlen,
+ int family,
+ struct sockaddr *out_addr,
+ socklen_t *out_addrlen)
+{
+ int ret;
+
+ if (out_addr == NULL || out_addrlen == NULL)
+ return 0;
+
+ if (un_addrlen == 0) {
+ *out_addrlen = 0;
+ return 0;
+ }
+
+ switch (family) {
+ case AF_INET:
+#ifdef HAVE_IPV6
+ case AF_INET6:
+#endif
+ switch (si->type) {
+ case SOCK_STREAM:
+ case SOCK_DGRAM:
+ break;
+ default:
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown socket type!\n");
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+ ret = convert_un_in(in_addr, out_addr, out_addrlen);
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
+ out_addr->sa_len = *out_addrlen;
+#endif
+ return ret;
+ default:
+ break;
+ }
+
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Unknown address family\n");
+ errno = EAFNOSUPPORT;
+ return -1;
+}
+
+enum swrap_packet_type {
+ SWRAP_CONNECT_SEND,
+ SWRAP_CONNECT_UNREACH,
+ SWRAP_CONNECT_RECV,
+ SWRAP_CONNECT_ACK,
+ SWRAP_ACCEPT_SEND,
+ SWRAP_ACCEPT_RECV,
+ SWRAP_ACCEPT_ACK,
+ SWRAP_RECVFROM,
+ SWRAP_SENDTO,
+ SWRAP_SENDTO_UNREACH,
+ SWRAP_PENDING_RST,
+ SWRAP_RECV,
+ SWRAP_RECV_RST,
+ SWRAP_SEND,
+ SWRAP_SEND_RST,
+ SWRAP_CLOSE_SEND,
+ SWRAP_CLOSE_RECV,
+ SWRAP_CLOSE_ACK,
+};
+
+struct swrap_file_hdr {
+ uint32_t magic;
+ uint16_t version_major;
+ uint16_t version_minor;
+ int32_t timezone;
+ uint32_t sigfigs;
+ uint32_t frame_max_len;
+#define SWRAP_FRAME_LENGTH_MAX 0xFFFF
+ uint32_t link_type;
+};
+#define SWRAP_FILE_HDR_SIZE 24
+
+struct swrap_packet_frame {
+ uint32_t seconds;
+ uint32_t micro_seconds;
+ uint32_t recorded_length;
+ uint32_t full_length;
+};
+#define SWRAP_PACKET_FRAME_SIZE 16
+
+union swrap_packet_ip {
+ struct {
+ uint8_t ver_hdrlen;
+ uint8_t tos;
+ uint16_t packet_length;
+ uint16_t identification;
+ uint8_t flags;
+ uint8_t fragment;
+ uint8_t ttl;
+ uint8_t protocol;
+ uint16_t hdr_checksum;
+ uint32_t src_addr;
+ uint32_t dest_addr;
+ } v4;
+#define SWRAP_PACKET_IP_V4_SIZE 20
+ struct {
+ uint8_t ver_prio;
+ uint8_t flow_label_high;
+ uint16_t flow_label_low;
+ uint16_t payload_length;
+ uint8_t next_header;
+ uint8_t hop_limit;
+ uint8_t src_addr[16];
+ uint8_t dest_addr[16];
+ } v6;
+#define SWRAP_PACKET_IP_V6_SIZE 40
+};
+#define SWRAP_PACKET_IP_SIZE 40
+
+union swrap_packet_payload {
+ struct {
+ uint16_t source_port;
+ uint16_t dest_port;
+ uint32_t seq_num;
+ uint32_t ack_num;
+ uint8_t hdr_length;
+ uint8_t control;
+ uint16_t window;
+ uint16_t checksum;
+ uint16_t urg;
+ } tcp;
+#define SWRAP_PACKET_PAYLOAD_TCP_SIZE 20
+ struct {
+ uint16_t source_port;
+ uint16_t dest_port;
+ uint16_t length;
+ uint16_t checksum;
+ } udp;
+#define SWRAP_PACKET_PAYLOAD_UDP_SIZE 8
+ struct {
+ uint8_t type;
+ uint8_t code;
+ uint16_t checksum;
+ uint32_t unused;
+ } icmp4;
+#define SWRAP_PACKET_PAYLOAD_ICMP4_SIZE 8
+ struct {
+ uint8_t type;
+ uint8_t code;
+ uint16_t checksum;
+ uint32_t unused;
+ } icmp6;
+#define SWRAP_PACKET_PAYLOAD_ICMP6_SIZE 8
+};
+#define SWRAP_PACKET_PAYLOAD_SIZE 20
+
+#define SWRAP_PACKET_MIN_ALLOC \
+ (SWRAP_PACKET_FRAME_SIZE + \
+ SWRAP_PACKET_IP_SIZE + \
+ SWRAP_PACKET_PAYLOAD_SIZE)
+
+static const char *swrap_pcap_init_file(void)
+{
+ static const char *s = NULL;
+ static const struct swrap_file_hdr h;
+ static const struct swrap_packet_frame f;
+ static const union swrap_packet_ip i;
+ static const union swrap_packet_payload p;
+
+ // if (initialized == 1) {
+ // printf("return: 1\n");
+ // return s;
+ // }
+ // initialized = 1;
+
+ /*
+ * TODO: don't use the structs use plain buffer offsets
+ * and PUSH_U8(), PUSH_U16() and PUSH_U32()
+ *
+ * for now make sure we disable PCAP support
+ * if the struct has alignment!
+ */
+ if (sizeof(h) != SWRAP_FILE_HDR_SIZE) {
+ return NULL;
+ }
+ if (sizeof(f) != SWRAP_PACKET_FRAME_SIZE) {
+ return NULL;
+ }
+ if (sizeof(i) != SWRAP_PACKET_IP_SIZE) {
+ return NULL;
+ }
+ if (sizeof(i.v4) != SWRAP_PACKET_IP_V4_SIZE) {
+ return NULL;
+ }
+ if (sizeof(i.v6) != SWRAP_PACKET_IP_V6_SIZE) {
+ return NULL;
+ }
+ if (sizeof(p) != SWRAP_PACKET_PAYLOAD_SIZE) {
+ return NULL;
+ }
+ if (sizeof(p.tcp) != SWRAP_PACKET_PAYLOAD_TCP_SIZE) {
+ return NULL;
+ }
+ if (sizeof(p.udp) != SWRAP_PACKET_PAYLOAD_UDP_SIZE) {
+ return NULL;
+ }
+ if (sizeof(p.icmp4) != SWRAP_PACKET_PAYLOAD_ICMP4_SIZE) {
+ return NULL;
+ }
+ if (sizeof(p.icmp6) != SWRAP_PACKET_PAYLOAD_ICMP6_SIZE) {
+ return NULL;
+ }
+
+ s = getenv("SOCKET_WRAPPER_PCAP_FILE");
+ if (s == NULL) {
+ return NULL;
+ }
+ if (strncmp(s, "./", 2) == 0) {
+ s += 2;
+ }
+ return s;
+}
+
+static uint8_t *swrap_pcap_packet_init(struct timeval *tval,
+ const struct sockaddr *src,
+ const struct sockaddr *dest,
+ int socket_type,
+ const uint8_t *payload,
+ size_t payload_len,
+ unsigned long tcp_seqno,
+ unsigned long tcp_ack,
+ unsigned char tcp_ctl,
+ int unreachable,
+ size_t *_packet_len)
+{
+ uint8_t *base;
+ uint8_t *buf;
+ struct swrap_packet_frame *frame;
+ union swrap_packet_ip *ip;
+ union swrap_packet_payload *pay;
+ size_t packet_len;
+ size_t alloc_len;
+ size_t nonwire_len = sizeof(*frame);
+ size_t wire_hdr_len = 0;
+ size_t wire_len = 0;
+ size_t ip_hdr_len = 0;
+ size_t icmp_hdr_len = 0;
+ size_t icmp_truncate_len = 0;
+ uint8_t protocol = 0, icmp_protocol = 0;
+ const struct sockaddr_in *src_in = NULL;
+ const struct sockaddr_in *dest_in = NULL;
+#ifdef HAVE_IPV6
+ const struct sockaddr_in6 *src_in6 = NULL;
+ const struct sockaddr_in6 *dest_in6 = NULL;
+#endif
+ uint16_t src_port;
+ uint16_t dest_port;
+
+ switch (src->sa_family) {
+ case AF_INET:
+ src_in = (const struct sockaddr_in *)(const void *)src;
+ dest_in = (const struct sockaddr_in *)(const void *)dest;
+ src_port = src_in->sin_port;
+ dest_port = dest_in->sin_port;
+ ip_hdr_len = sizeof(ip->v4);
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ src_in6 = (const struct sockaddr_in6 *)(const void *)src;
+ dest_in6 = (const struct sockaddr_in6 *)(const void *)dest;
+ src_port = src_in6->sin6_port;
+ dest_port = dest_in6->sin6_port;
+ ip_hdr_len = sizeof(ip->v6);
+ break;
+#endif
+ default:
+ return NULL;
+ }
+
+ switch (socket_type) {
+ case SOCK_STREAM:
+ protocol = 0x06; /* TCP */
+ wire_hdr_len = ip_hdr_len + sizeof(pay->tcp);
+ wire_len = wire_hdr_len + payload_len;
+ break;
+
+ case SOCK_DGRAM:
+ protocol = 0x11; /* UDP */
+ wire_hdr_len = ip_hdr_len + sizeof(pay->udp);
+ wire_len = wire_hdr_len + payload_len;
+ break;
+
+ default:
+ return NULL;
+ }
+
+ if (unreachable) {
+ icmp_protocol = protocol;
+ switch (src->sa_family) {
+ case AF_INET:
+ protocol = 0x01; /* ICMPv4 */
+ icmp_hdr_len = ip_hdr_len + sizeof(pay->icmp4);
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ protocol = 0x3A; /* ICMPv6 */
+ icmp_hdr_len = ip_hdr_len + sizeof(pay->icmp6);
+ break;
+#endif
+ }
+ if (wire_len > 64 ) {
+ icmp_truncate_len = wire_len - 64;
+ }
+ wire_hdr_len += icmp_hdr_len;
+ wire_len += icmp_hdr_len;
+ }
+
+ packet_len = nonwire_len + wire_len;
+ alloc_len = packet_len;
+ if (alloc_len < SWRAP_PACKET_MIN_ALLOC) {
+ alloc_len = SWRAP_PACKET_MIN_ALLOC;
+ }
+
+ base = (uint8_t *)calloc(1, alloc_len);
+ if (base == NULL) {
+ return NULL;
+ }
+
+ buf = base;
+
+ frame = (struct swrap_packet_frame *)(void *)buf;
+ frame->seconds = tval->tv_sec;
+ frame->micro_seconds = tval->tv_usec;
+ frame->recorded_length = wire_len - icmp_truncate_len;
+ frame->full_length = wire_len - icmp_truncate_len;
+ buf += SWRAP_PACKET_FRAME_SIZE;
+
+ ip = (union swrap_packet_ip *)(void *)buf;
+ switch (src->sa_family) {
+ case AF_INET:
+ ip->v4.ver_hdrlen = 0x45; /* version 4 and 5 * 32 bit words */
+ ip->v4.tos = 0x00;
+ ip->v4.packet_length = htons(wire_len - icmp_truncate_len);
+ ip->v4.identification = htons(0xFFFF);
+ ip->v4.flags = 0x40; /* BIT 1 set - means don't fragment */
+ ip->v4.fragment = htons(0x0000);
+ ip->v4.ttl = 0xFF;
+ ip->v4.protocol = protocol;
+ ip->v4.hdr_checksum = htons(0x0000);
+ ip->v4.src_addr = src_in->sin_addr.s_addr;
+ ip->v4.dest_addr = dest_in->sin_addr.s_addr;
+ buf += SWRAP_PACKET_IP_V4_SIZE;
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ ip->v6.ver_prio = 0x60; /* version 4 and 5 * 32 bit words */
+ ip->v6.flow_label_high = 0x00;
+ ip->v6.flow_label_low = 0x0000;
+ ip->v6.payload_length = htons(wire_len - icmp_truncate_len); /* TODO */
+ ip->v6.next_header = protocol;
+ memcpy(ip->v6.src_addr, src_in6->sin6_addr.s6_addr, 16);
+ memcpy(ip->v6.dest_addr, dest_in6->sin6_addr.s6_addr, 16);
+ buf += SWRAP_PACKET_IP_V6_SIZE;
+ break;
+#endif
+ }
+
+ if (unreachable) {
+ pay = (union swrap_packet_payload *)(void *)buf;
+ switch (src->sa_family) {
+ case AF_INET:
+ pay->icmp4.type = 0x03; /* destination unreachable */
+ pay->icmp4.code = 0x01; /* host unreachable */
+ pay->icmp4.checksum = htons(0x0000);
+ pay->icmp4.unused = htonl(0x00000000);
+ buf += SWRAP_PACKET_PAYLOAD_ICMP4_SIZE;
+
+ /* set the ip header in the ICMP payload */
+ ip = (union swrap_packet_ip *)(void *)buf;
+ ip->v4.ver_hdrlen = 0x45; /* version 4 and 5 * 32 bit words */
+ ip->v4.tos = 0x00;
+ ip->v4.packet_length = htons(wire_len - icmp_hdr_len);
+ ip->v4.identification = htons(0xFFFF);
+ ip->v4.flags = 0x40; /* BIT 1 set - means don't fragment */
+ ip->v4.fragment = htons(0x0000);
+ ip->v4.ttl = 0xFF;
+ ip->v4.protocol = icmp_protocol;
+ ip->v4.hdr_checksum = htons(0x0000);
+ ip->v4.src_addr = dest_in->sin_addr.s_addr;
+ ip->v4.dest_addr = src_in->sin_addr.s_addr;
+ buf += SWRAP_PACKET_IP_V4_SIZE;
+
+ src_port = dest_in->sin_port;
+ dest_port = src_in->sin_port;
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ pay->icmp6.type = 0x01; /* destination unreachable */
+ pay->icmp6.code = 0x03; /* address unreachable */
+ pay->icmp6.checksum = htons(0x0000);
+ pay->icmp6.unused = htonl(0x00000000);
+ buf += SWRAP_PACKET_PAYLOAD_ICMP6_SIZE;
+
+ /* set the ip header in the ICMP payload */
+ ip = (union swrap_packet_ip *)(void *)buf;
+ ip->v6.ver_prio = 0x60; /* version 4 and 5 * 32 bit words */
+ ip->v6.flow_label_high = 0x00;
+ ip->v6.flow_label_low = 0x0000;
+ ip->v6.payload_length = htons(wire_len - icmp_truncate_len); /* TODO */
+ ip->v6.next_header = protocol;
+ memcpy(ip->v6.src_addr, dest_in6->sin6_addr.s6_addr, 16);
+ memcpy(ip->v6.dest_addr, src_in6->sin6_addr.s6_addr, 16);
+ buf += SWRAP_PACKET_IP_V6_SIZE;
+
+ src_port = dest_in6->sin6_port;
+ dest_port = src_in6->sin6_port;
+ break;
+#endif
+ }
+ }
+
+ pay = (union swrap_packet_payload *)(void *)buf;
+
+ switch (socket_type) {
+ case SOCK_STREAM:
+ pay->tcp.source_port = src_port;
+ pay->tcp.dest_port = dest_port;
+ pay->tcp.seq_num = htonl(tcp_seqno);
+ pay->tcp.ack_num = htonl(tcp_ack);
+ pay->tcp.hdr_length = 0x50; /* 5 * 32 bit words */
+ pay->tcp.control = tcp_ctl;
+ pay->tcp.window = htons(0x7FFF);
+ pay->tcp.checksum = htons(0x0000);
+ pay->tcp.urg = htons(0x0000);
+ buf += SWRAP_PACKET_PAYLOAD_TCP_SIZE;
+
+ break;
+
+ case SOCK_DGRAM:
+ pay->udp.source_port = src_port;
+ pay->udp.dest_port = dest_port;
+ pay->udp.length = htons(8 + payload_len);
+ pay->udp.checksum = htons(0x0000);
+ buf += SWRAP_PACKET_PAYLOAD_UDP_SIZE;
+
+ break;
+ }
+
+ if (payload && payload_len > 0) {
+ memcpy(buf, payload, payload_len);
+ }
+
+ *_packet_len = packet_len - icmp_truncate_len;
+ return base;
+}
+
+static int swrap_pcap_get_fd(const char *fname)
+{
+ int fd = -1;
+
+ // if (fd != -1) return fd;
+
+ fd = libc_open(fname, O_WRONLY|O_CREAT|O_EXCL|O_APPEND, 0644);
+ if (fd != -1) {
+ struct swrap_file_hdr file_hdr;
+ file_hdr.magic = 0xA1B2C3D4;
+ file_hdr.version_major = 0x0002;
+ file_hdr.version_minor = 0x0004;
+ file_hdr.timezone = 0x00000000;
+ file_hdr.sigfigs = 0x00000000;
+ file_hdr.frame_max_len = SWRAP_FRAME_LENGTH_MAX;
+ file_hdr.link_type = 0x0065; /* 101 RAW IP */
+
+ if (write(fd, &file_hdr, sizeof(file_hdr)) != sizeof(file_hdr)) {
+ close(fd);
+ fd = -1;
+ }
+ return fd;
+ }
+
+ fd = libc_open(fname, O_WRONLY|O_APPEND, 0644);
+
+ return fd;
+}
+
+static uint8_t *swrap_pcap_marshall_packet(struct socket_info *si,
+ const struct sockaddr *addr,
+ enum swrap_packet_type type,
+ const void *buf, size_t len,
+ size_t *packet_len)
+{
+ const struct sockaddr *src_addr;
+ const struct sockaddr *dest_addr;
+ unsigned long tcp_seqno = 0;
+ unsigned long tcp_ack = 0;
+ unsigned char tcp_ctl = 0;
+ int unreachable = 0;
+
+ struct timeval tv;
+
+ switch (si->family) {
+ case AF_INET:
+ break;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ break;
+#endif
+ default:
+ return NULL;
+ }
+
+ switch (type) {
+ case SWRAP_CONNECT_SEND:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ src_addr = &si->myname.sa.s;
+ dest_addr = addr;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x02; /* SYN */
+
+ si->io.pck_snd += 1;
+
+ break;
+
+ case SWRAP_CONNECT_RECV:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x12; /** SYN,ACK */
+
+ si->io.pck_rcv += 1;
+
+ break;
+
+ case SWRAP_CONNECT_UNREACH:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ /* Unreachable: resend the data of SWRAP_CONNECT_SEND */
+ tcp_seqno = si->io.pck_snd - 1;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x02; /* SYN */
+ unreachable = 1;
+
+ break;
+
+ case SWRAP_CONNECT_ACK:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ src_addr = &si->myname.sa.s;
+ dest_addr = addr;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x10; /* ACK */
+
+ break;
+
+ case SWRAP_ACCEPT_SEND:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x02; /* SYN */
+
+ si->io.pck_rcv += 1;
+
+ break;
+
+ case SWRAP_ACCEPT_RECV:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ src_addr = &si->myname.sa.s;
+ dest_addr = addr;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x12; /* SYN,ACK */
+
+ si->io.pck_snd += 1;
+
+ break;
+
+ case SWRAP_ACCEPT_ACK:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x10; /* ACK */
+
+ break;
+
+ case SWRAP_SEND:
+ src_addr = &si->myname.sa.s;
+ dest_addr = &si->peername.sa.s;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x18; /* PSH,ACK */
+
+ si->io.pck_snd += len;
+
+ break;
+
+ case SWRAP_SEND_RST:
+ dest_addr = &si->myname.sa.s;
+ src_addr = &si->peername.sa.s;
+
+ if (si->type == SOCK_DGRAM) {
+ return swrap_pcap_marshall_packet(si,
+ &si->peername.sa.s,
+ SWRAP_SENDTO_UNREACH,
+ buf,
+ len,
+ packet_len);
+ }
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x14; /** RST,ACK */
+
+ break;
+
+ case SWRAP_PENDING_RST:
+ dest_addr = &si->myname.sa.s;
+ src_addr = &si->peername.sa.s;
+
+ if (si->type == SOCK_DGRAM) {
+ return NULL;
+ }
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x14; /* RST,ACK */
+
+ break;
+
+ case SWRAP_RECV:
+ dest_addr = &si->myname.sa.s;
+ src_addr = &si->peername.sa.s;
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x18; /* PSH,ACK */
+
+ si->io.pck_rcv += len;
+
+ break;
+
+ case SWRAP_RECV_RST:
+ dest_addr = &si->myname.sa.s;
+ src_addr = &si->peername.sa.s;
+
+ if (si->type == SOCK_DGRAM) {
+ return NULL;
+ }
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x14; /* RST,ACK */
+
+ break;
+
+ case SWRAP_SENDTO:
+ src_addr = &si->myname.sa.s;
+ dest_addr = addr;
+
+ si->io.pck_snd += len;
+
+ break;
+
+ case SWRAP_SENDTO_UNREACH:
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ unreachable = 1;
+
+ break;
+
+ case SWRAP_RECVFROM:
+ dest_addr = &si->myname.sa.s;
+ src_addr = addr;
+
+ si->io.pck_rcv += len;
+
+ break;
+
+ case SWRAP_CLOSE_SEND:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ src_addr = &si->myname.sa.s;
+ dest_addr = &si->peername.sa.s;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x11; /* FIN, ACK */
+
+ si->io.pck_snd += 1;
+
+ break;
+
+ case SWRAP_CLOSE_RECV:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ dest_addr = &si->myname.sa.s;
+ src_addr = &si->peername.sa.s;
+
+ tcp_seqno = si->io.pck_rcv;
+ tcp_ack = si->io.pck_snd;
+ tcp_ctl = 0x11; /* FIN,ACK */
+
+ si->io.pck_rcv += 1;
+
+ break;
+
+ case SWRAP_CLOSE_ACK:
+ if (si->type != SOCK_STREAM) return NULL;
+
+ src_addr = &si->myname.sa.s;
+ dest_addr = &si->peername.sa.s;
+
+ tcp_seqno = si->io.pck_snd;
+ tcp_ack = si->io.pck_rcv;
+ tcp_ctl = 0x10; /* ACK */
+
+ break;
+ default:
+ return NULL;
+ }
+
+ swrapGetTimeOfDay(&tv);
+
+ return swrap_pcap_packet_init(&tv,
+ src_addr,
+ dest_addr,
+ si->type,
+ (const uint8_t *)buf,
+ len,
+ tcp_seqno,
+ tcp_ack,
+ tcp_ctl,
+ unreachable,
+ packet_len);
+}
+
+static void swrap_pcap_dump_packet(struct socket_info *si,
+ const struct sockaddr *addr,
+ enum swrap_packet_type type,
+ const void *buf, size_t len)
+{
+ const char *file_name;
+ uint8_t *packet;
+ size_t packet_len = 0;
+ int fd;
+
+ file_name = swrap_pcap_init_file();
+ if (!file_name) {
+ return;
+ }
+
+ packet = swrap_pcap_marshall_packet(si,
+ addr,
+ type,
+ buf,
+ len,
+ &packet_len);
+ if (packet == NULL) {
+ return;
+ }
+
+ fd = swrap_pcap_get_fd(file_name);
+ if (fd != -1) {
+ if (write(fd, packet, packet_len) != (ssize_t)packet_len) {
+ close(fd);
+ free(packet);
+ return;
+ }
+ }
+ close(fd);
+ free(packet);
+}
+
+/****************************************************************************
+ * SIGNALFD
+ ***************************************************************************/
+
+#ifdef HAVE_SIGNALFD
+static int swrap_signalfd(int fd, const sigset_t *mask, int flags)
+{
+ int rc;
+
+ rc = libc_signalfd(fd, mask, flags);
+ if (rc != -1) {
+ swrap_remove_stale(fd);
+ }
+
+ return rc;
+}
+
+int signalfd(int fd, const sigset_t *mask, int flags)
+{
+ return swrap_signalfd(fd, mask, flags);
+}
+#endif
+
+/****************************************************************************
+ * SOCKET
+ ***************************************************************************/
+
+static int swrap_socket(int family, int type, int protocol)
+{
+ struct socket_info *si;
+ struct socket_info_fd *fi;
+ int fd;
+ int real_type = type;
+
+ /*
+ * Remove possible addition flags passed to socket() so
+ * do not fail checking the type.
+ * See https://lwn.net/Articles/281965/
+ */
+#ifdef SOCK_CLOEXEC
+ real_type &= ~SOCK_CLOEXEC;
+#endif
+#ifdef SOCK_NONBLOCK
+ real_type &= ~SOCK_NONBLOCK;
+#endif
+
+ if (!socket_wrapper_enabled()) {
+ return libc_socket(family, type, protocol);
+ }
+
+ switch (family) {
+ case AF_INET:
+#ifdef HAVE_IPV6
+ case AF_INET6:
+#endif
+ break;
+#ifdef AF_NETLINK
+ case AF_NETLINK:
+#endif /* AF_NETLINK */
+#ifdef AF_PACKET
+ case AF_PACKET:
+#endif /* AF_PACKET */
+ case AF_UNIX:
+ return libc_socket(family, type, protocol);
+ default:
+ errno = EAFNOSUPPORT;
+ return -1;
+ }
+
+ switch (real_type) {
+ case SOCK_STREAM:
+ break;
+ case SOCK_DGRAM:
+ break;
+ default:
+ errno = EPROTONOSUPPORT;
+ return -1;
+ }
+
+ switch (protocol) {
+ case 0:
+ break;
+ case 6:
+ if (real_type == SOCK_STREAM) {
+ break;
+ }
+ /*fall through*/
+ case 17:
+ if (real_type == SOCK_DGRAM) {
+ break;
+ }
+ /*fall through*/
+ default:
+ errno = EPROTONOSUPPORT;
+ return -1;
+ }
+
+ /*
+ * We must call libc_socket with type, from the caller, not the version
+ * we removed SOCK_CLOEXEC and SOCK_NONBLOCK from
+ */
+ fd = libc_socket(AF_UNIX, type, 0);
+
+ if (fd == -1) {
+ return -1;
+ }
+
+ /* Check if we have a stale fd and remove it */
+ si = find_socket_info(fd);
+ if (si != NULL) {
+ swrap_remove_stale(fd);
+ }
+
+ si = (struct socket_info *)calloc(1, sizeof(struct socket_info));
+ if (si == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ si->family = family;
+
+ /* however, the rest of the socket_wrapper code expects just
+ * the type, not the flags */
+ si->type = real_type;
+ si->protocol = protocol;
+
+ /*
+ * Setup myname so getsockname() can succeed to find out the socket
+ * type.
+ */
+ switch(si->family) {
+ case AF_INET: {
+ struct sockaddr_in sin = {
+ .sin_family = AF_INET,
+ };
+
+ si->myname.sa_socklen = sizeof(struct sockaddr_in);
+ memcpy(&si->myname.sa.in, &sin, si->myname.sa_socklen);
+ break;
+ }
+ case AF_INET6: {
+ struct sockaddr_in6 sin6 = {
+ .sin6_family = AF_INET6,
+ };
+
+ si->myname.sa_socklen = sizeof(struct sockaddr_in6);
+ memcpy(&si->myname.sa.in6, &sin6, si->myname.sa_socklen);
+ break;
+ }
+ default:
+ free(si);
+ errno = EINVAL;
+ return -1;
+ }
+
+ fi = (struct socket_info_fd *)calloc(1, sizeof(struct socket_info_fd));
+ if (fi == NULL) {
+ free(si);
+ errno = ENOMEM;
+ return -1;
+ }
+
+ fi->fd = fd;
+
+ SWRAP_DLIST_ADD(si->fds, fi);
+ SWRAP_DLIST_ADD(sockets, si);
+
+ SWRAP_LOG(SWRAP_LOG_TRACE,
+ "Created %s socket for protocol %s",
+ si->family == AF_INET ? "IPv4" : "IPv6",
+ si->type == SOCK_DGRAM ? "UDP" : "TCP");
+
+ return fd;
+}
+
+int socket(int family, int type, int protocol)
+{
+ return swrap_socket(family, type, protocol);
+}
+
+/****************************************************************************
+ * SOCKETPAIR
+ ***************************************************************************/
+
+static int swrap_socketpair(int family, int type, int protocol, int sv[2])
+{
+ int rc;
+
+ rc = libc_socketpair(family, type, protocol, sv);
+ if (rc != -1) {
+ swrap_remove_stale(sv[0]);
+ swrap_remove_stale(sv[1]);
+ }
+
+ return rc;
+}
+
+int socketpair(int family, int type, int protocol, int sv[2])
+{
+ return swrap_socketpair(family, type, protocol, sv);
+}
+
+/****************************************************************************
+ * SOCKETPAIR
+ ***************************************************************************/
+
+#ifdef HAVE_TIMERFD_CREATE
+static int swrap_timerfd_create(int clockid, int flags)
+{
+ int fd;
+
+ fd = libc_timerfd_create(clockid, flags);
+ if (fd != -1) {
+ swrap_remove_stale(fd);
+ }
+
+ return fd;
+}
+
+int timerfd_create(int clockid, int flags)
+{
+ return swrap_timerfd_create(clockid, flags);
+}
+#endif
+
+/****************************************************************************
+ * PIPE
+ ***************************************************************************/
+
+static int swrap_pipe(int pipefd[2])
+{
+ int rc;
+
+ rc = libc_pipe(pipefd);
+ if (rc != -1) {
+ swrap_remove_stale(pipefd[0]);
+ swrap_remove_stale(pipefd[1]);
+ }
+
+ return rc;
+}
+
+int pipe(int pipefd[2])
+{
+ return swrap_pipe(pipefd);
+}
+
+/****************************************************************************
+ * ACCEPT
+ ***************************************************************************/
+
+static int swrap_accept(int s,
+ struct sockaddr *addr,
+ socklen_t *addrlen,
+ int flags)
+{
+ struct socket_info *parent_si, *child_si;
+ struct socket_info_fd *child_fi;
+ int fd;
+ struct swrap_address un_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ struct swrap_address un_my_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ struct swrap_address in_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct swrap_address in_my_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int ret;
+
+ parent_si = find_socket_info(s);
+ if (!parent_si) {
+#ifdef HAVE_ACCEPT4
+ return libc_accept4(s, addr, addrlen, flags);
+#else
+ return libc_accept(s, addr, addrlen);
+#endif
+ }
+
+ /*
+ * assume out sockaddr have the same size as the in parent
+ * socket family
+ */
+ in_addr.sa_socklen = socket_length(parent_si->family);
+ if (in_addr.sa_socklen <= 0) {
+ errno = EINVAL;
+ return -1;
+ }
+
+#ifdef HAVE_ACCEPT4
+ ret = libc_accept4(s, &un_addr.sa.s, &un_addr.sa_socklen, flags);
+#else
+ ret = libc_accept(s, &un_addr.sa.s, &un_addr.sa_socklen);
+#endif
+ if (ret == -1) {
+ if (errno == ENOTSOCK) {
+ /* Remove stale fds */
+ swrap_remove_stale(s);
+ }
+ return ret;
+ }
+
+ fd = ret;
+
+ ret = sockaddr_convert_from_un(parent_si,
+ &un_addr.sa.un,
+ un_addr.sa_socklen,
+ parent_si->family,
+ &in_addr.sa.s,
+ &in_addr.sa_socklen);
+ if (ret == -1) {
+ close(fd);
+ return ret;
+ }
+
+ child_si = (struct socket_info *)calloc(1, sizeof(struct socket_info));
+ if (child_si == NULL) {
+ close(fd);
+ errno = ENOMEM;
+ return -1;
+ }
+
+ child_fi = (struct socket_info_fd *)calloc(1, sizeof(struct socket_info_fd));
+ if (child_fi == NULL) {
+ free(child_si);
+ close(fd);
+ errno = ENOMEM;
+ return -1;
+ }
+
+ child_fi->fd = fd;
+
+ SWRAP_DLIST_ADD(child_si->fds, child_fi);
+
+ child_si->family = parent_si->family;
+ child_si->type = parent_si->type;
+ child_si->protocol = parent_si->protocol;
+ child_si->bound = 1;
+ child_si->is_server = 1;
+ child_si->connected = 1;
+
+ child_si->peername = (struct swrap_address) {
+ .sa_socklen = in_addr.sa_socklen,
+ };
+ memcpy(&child_si->peername.sa.ss, &in_addr.sa.ss, in_addr.sa_socklen);
+
+ if (addr != NULL && addrlen != NULL) {
+ size_t copy_len = MIN(*addrlen, in_addr.sa_socklen);
+ if (copy_len > 0) {
+ memcpy(addr, &in_addr.sa.ss, copy_len);
+ }
+ *addrlen = in_addr.sa_socklen;
+ }
+
+ ret = libc_getsockname(fd,
+ &un_my_addr.sa.s,
+ &un_my_addr.sa_socklen);
+ if (ret == -1) {
+ free(child_fi);
+ free(child_si);
+ close(fd);
+ return ret;
+ }
+
+ ret = sockaddr_convert_from_un(child_si,
+ &un_my_addr.sa.un,
+ un_my_addr.sa_socklen,
+ child_si->family,
+ &in_my_addr.sa.s,
+ &in_my_addr.sa_socklen);
+ if (ret == -1) {
+ free(child_fi);
+ free(child_si);
+ close(fd);
+ return ret;
+ }
+
+ SWRAP_LOG(SWRAP_LOG_TRACE,
+ "accept() path=%s, fd=%d",
+ un_my_addr.sa.un.sun_path, s);
+
+ child_si->myname = (struct swrap_address) {
+ .sa_socklen = in_my_addr.sa_socklen,
+ };
+ memcpy(&child_si->myname.sa.ss, &in_my_addr.sa.ss, in_my_addr.sa_socklen);
+
+ SWRAP_DLIST_ADD(sockets, child_si);
+
+ if (addr != NULL) {
+ swrap_pcap_dump_packet(child_si, addr, SWRAP_ACCEPT_SEND, NULL, 0);
+ swrap_pcap_dump_packet(child_si, addr, SWRAP_ACCEPT_RECV, NULL, 0);
+ swrap_pcap_dump_packet(child_si, addr, SWRAP_ACCEPT_ACK, NULL, 0);
+ }
+
+ return fd;
+}
+
+#ifdef HAVE_ACCEPT4
+int accept4(int s, struct sockaddr *addr, socklen_t *addrlen, int flags)
+{
+ return swrap_accept(s, addr, (socklen_t *)addrlen, flags);
+}
+#endif
+
+#ifdef HAVE_ACCEPT_PSOCKLEN_T
+int accept(int s, struct sockaddr *addr, Psocklen_t addrlen)
+#else
+int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
+#endif
+{
+ return swrap_accept(s, addr, (socklen_t *)addrlen, 0);
+}
+
+static int autobind_start_init;
+static int autobind_start;
+
+/* using sendto() or connect() on an unbound socket would give the
+ recipient no way to reply, as unlike UDP and TCP, a unix domain
+ socket can't auto-assign ephemeral port numbers, so we need to
+ assign it here.
+ Note: this might change the family from ipv6 to ipv4
+*/
+static int swrap_auto_bind(int fd, struct socket_info *si, int family)
+{
+ struct swrap_address un_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ int i;
+ char type;
+ int ret;
+ int port;
+ unsigned int in4_addr, in6_a0, in6_a1, in6_a2, in6_a3;
+ struct stat st;
+
+ if (autobind_start_init != 1) {
+ autobind_start_init = 1;
+ autobind_start = getpid();
+ autobind_start %= 50000;
+ autobind_start += 10000;
+ }
+
+ un_addr.sa.un.sun_family = AF_UNIX;
+
+ switch (family) {
+ case AF_INET: {
+ struct sockaddr_in in;
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ type = SOCKET_TYPE_CHAR_TCP_LONG;
+ break;
+ case SOCK_DGRAM:
+ type = SOCKET_TYPE_CHAR_UDP_LONG;
+ break;
+ default:
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ memset(&in, 0, sizeof(in));
+ in.sin_family = AF_INET;
+ in4_addr = socket_wrapper_default_addr();
+ in.sin_addr.s_addr = htonl(in4_addr);
+
+ si->myname = (struct swrap_address) {
+ .sa_socklen = sizeof(in),
+ };
+ memcpy(&si->myname.sa.in, &in, si->myname.sa_socklen);
+ break;
+ }
+#ifdef HAVE_IPV6
+ case AF_INET6: {
+ struct sockaddr_in6 in6;
+
+ if (si->family != family) {
+ errno = ENETUNREACH;
+ return -1;
+ }
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ type = SOCKET_TYPE_CHAR_TCP_V6_LONG;
+ break;
+ case SOCK_DGRAM:
+ type = SOCKET_TYPE_CHAR_UDP_V6_LONG;
+ break;
+ default:
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ memset(&in6, 0, sizeof(in6));
+ in6.sin6_family = AF_INET6;
+ in6.sin6_addr = *swrap_ipv6();
+ in6.sin6_addr.s6_addr[15] = socket_wrapper_default_iface();
+
+ si->myname = (struct swrap_address) {
+ .sa_socklen = sizeof(in6),
+ };
+ memcpy(&si->myname.sa.in6, &in6, si->myname.sa_socklen);
+ swrap_make_ipv6_ints(in6.sin6_addr.s6_addr,&in6_a0,&in6_a1,&in6_a2,&in6_a3);
+ break;
+ }
+#endif
+ default:
+ errno = ESOCKTNOSUPPORT;
+ return -1;
+ }
+
+ if (autobind_start > 60000) {
+ autobind_start = 10000;
+ }
+
+ for (i = 0; i < SOCKET_MAX_SOCKETS; i++) {
+ port = autobind_start + i;
+
+ if (family == AF_INET)
+ snprintf(un_addr.sa.un.sun_path, sizeof(un_addr.sa.un.sun_path),
+ "%s/"SOCKET_FORMAT_LONG, socket_wrapper_dir(),
+ type, in4_addr, port);
+ else
+ snprintf(un_addr.sa.un.sun_path, sizeof(un_addr.sa.un.sun_path),
+ "%s/"SOCKET_FORMAT_V6_LONG, socket_wrapper_dir(),
+ type, in6_a0,in6_a1, in6_a2, in6_a3, port);
+
+ if (stat(un_addr.sa.un.sun_path, &st) == 0) continue;
+
+ ret = libc_bind(fd, &un_addr.sa.s, un_addr.sa_socklen);
+ if (ret == -1) return ret;
+
+ si->un_addr = un_addr.sa.un;
+
+ si->bound = 1;
+ autobind_start = port + 1;
+ SWRAP_LOG(SWRAP_LOG_TRACE, "bound to: %s", un_addr.sa.un.sun_path);
+ break;
+ }
+ if (i == SOCKET_MAX_SOCKETS) {
+ SWRAP_LOG(SWRAP_LOG_ERROR, "Too many open unix sockets (%u) for "
+ "interface "SOCKET_FORMAT,
+ SOCKET_MAX_SOCKETS,
+ type,
+ socket_wrapper_default_addr(),
+ 0);
+ errno = ENFILE;
+ return -1;
+ }
+
+ si->family = family;
+ set_port(si->family, port, &si->myname);
+
+ return 0;
+}
+
+/****************************************************************************
+ * CONNECT
+ ***************************************************************************/
+
+static int swrap_connect(int s, const struct sockaddr *serv_addr,
+ socklen_t addrlen)
+{
+ int ret;
+ struct swrap_address un_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ struct socket_info *si = find_socket_info(s);
+ int bcast = 0;
+
+ if (!si) {
+ return libc_connect(s, serv_addr, addrlen);
+ }
+
+ if (si->bound == 0) {
+ ret = swrap_auto_bind(s, si, serv_addr->sa_family);
+ if (ret == -1) return -1;
+ }
+
+ if (si->family != serv_addr->sa_family) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ ret = sockaddr_convert_to_un(si, serv_addr,
+ addrlen, &un_addr.sa.un, 0, &bcast);
+ if (ret == -1) return -1;
+
+ if (bcast) {
+ errno = ENETUNREACH;
+ return -1;
+ }
+
+ if (si->type == SOCK_DGRAM) {
+ si->defer_connect = 1;
+ ret = 0;
+ } else {
+ swrap_pcap_dump_packet(si, serv_addr, SWRAP_CONNECT_SEND, NULL, 0);
+
+ ret = libc_connect(s,
+ &un_addr.sa.s,
+ un_addr.sa_socklen);
+ }
+
+ SWRAP_LOG(SWRAP_LOG_TRACE,
+ "connect() path=%s, fd=%d",
+ un_addr.sa.un.sun_path, s);
+
+
+ /* to give better errors */
+ if (ret == -1 && errno == ENOENT) {
+ errno = EHOSTUNREACH;
+ }
+
+ if (ret == 0) {
+ si->peername = (struct swrap_address) {
+ .sa_socklen = addrlen,
+ };
+
+ memcpy(&si->peername.sa.ss, serv_addr, addrlen);
+ si->connected = 1;
+
+ /*
+ * When we connect() on a socket than we have to bind the
+ * outgoing connection on the interface we use for the
+ * transport. We already bound it on the right interface
+ * but here we have to update the name so getsockname()
+ * returns correct information.
+ */
+ if (si->bindname.sa_socklen > 0) {
+ si->myname = (struct swrap_address) {
+ .sa_socklen = si->bindname.sa_socklen,
+ };
+
+ memcpy(&si->myname.sa.ss,
+ &si->bindname.sa.ss,
+ si->bindname.sa_socklen);
+
+ /* Cleanup bindname */
+ si->bindname = (struct swrap_address) {
+ .sa_socklen = 0,
+ };
+ }
+
+ swrap_pcap_dump_packet(si, serv_addr, SWRAP_CONNECT_RECV, NULL, 0);
+ swrap_pcap_dump_packet(si, serv_addr, SWRAP_CONNECT_ACK, NULL, 0);
+ } else {
+ swrap_pcap_dump_packet(si, serv_addr, SWRAP_CONNECT_UNREACH, NULL, 0);
+ }
+
+ return ret;
+}
+
+int connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen)
+{
+ return swrap_connect(s, serv_addr, addrlen);
+}
+
+/****************************************************************************
+ * BIND
+ ***************************************************************************/
+
+static int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen)
+{
+ int ret;
+ struct swrap_address un_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ struct socket_info *si = find_socket_info(s);
+ int bind_error = 0;
+#if 0 /* FIXME */
+ bool in_use;
+#endif
+
+ if (!si) {
+ return libc_bind(s, myaddr, addrlen);
+ }
+
+ switch (si->family) {
+ case AF_INET: {
+ const struct sockaddr_in *sin;
+ if (addrlen < sizeof(struct sockaddr_in)) {
+ bind_error = EINVAL;
+ break;
+ }
+
+ sin = (const struct sockaddr_in *)(const void *)myaddr;
+
+ if (sin->sin_family != AF_INET) {
+ bind_error = EAFNOSUPPORT;
+ }
+
+ /* special case for AF_UNSPEC */
+ if (sin->sin_family == AF_UNSPEC &&
+ (sin->sin_addr.s_addr == htonl(INADDR_ANY)))
+ {
+ bind_error = 0;
+ }
+
+ break;
+ }
+#ifdef HAVE_IPV6
+ case AF_INET6: {
+ const struct sockaddr_in6 *sin6;
+ if (addrlen < sizeof(struct sockaddr_in6)) {
+ bind_error = EINVAL;
+ break;
+ }
+
+ sin6 = (const struct sockaddr_in6 *)(const void *)myaddr;
+
+ if (sin6->sin6_family != AF_INET6) {
+ bind_error = EAFNOSUPPORT;
+ }
+
+ break;
+ }
+#endif
+ default:
+ bind_error = EINVAL;
+ break;
+ }
+
+ if (bind_error != 0) {
+ errno = bind_error;
+ return -1;
+ }
+
+#if 0 /* FIXME */
+ in_use = check_addr_port_in_use(myaddr, addrlen);
+ if (in_use) {
+ errno = EADDRINUSE;
+ return -1;
+ }
+#endif
+
+ si->myname.sa_socklen = addrlen;
+ memcpy(&si->myname.sa.ss, myaddr, addrlen);
+
+ ret = sockaddr_convert_to_un(si,
+ myaddr,
+ addrlen,
+ &un_addr.sa.un,
+ 1,
+ &si->bcast);
+ if (ret == -1) return -1;
+
+ unlink(un_addr.sa.un.sun_path);
+
+ ret = libc_bind(s, &un_addr.sa.s, un_addr.sa_socklen);
+
+ SWRAP_LOG(SWRAP_LOG_TRACE,
+ "bind() path=%s, fd=%d",
+ un_addr.sa.un.sun_path, s);
+
+ if (ret == 0) {
+ si->bound = 1;
+ }
+
+ return ret;
+}
+
+int bind(int s, const struct sockaddr *myaddr, socklen_t addrlen)
+{
+ return swrap_bind(s, myaddr, addrlen);
+}
+
+/****************************************************************************
+ * BINDRESVPORT
+ ***************************************************************************/
+
+#ifdef HAVE_BINDRESVPORT
+static int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen);
+
+static int swrap_bindresvport_sa(int sd, struct sockaddr *sa)
+{
+ struct swrap_address myaddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ socklen_t salen;
+ static uint16_t port;
+ uint16_t i;
+ int rc = -1;
+ int af;
+
+#define SWRAP_STARTPORT 600
+#define SWRAP_ENDPORT (IPPORT_RESERVED - 1)
+#define SWRAP_NPORTS (SWRAP_ENDPORT - SWRAP_STARTPORT + 1)
+
+ if (port == 0) {
+ port = (getpid() % SWRAP_NPORTS) + SWRAP_STARTPORT;
+ }
+
+ if (sa == NULL) {
+ salen = myaddr.sa_socklen;
+ sa = &myaddr.sa.s;
+
+ rc = swrap_getsockname(sd, &myaddr.sa.s, &salen);
+ if (rc < 0) {
+ return -1;
+ }
+
+ af = sa->sa_family;
+ memset(&myaddr.sa.ss, 0, salen);
+ } else {
+ af = sa->sa_family;
+ }
+
+ for (i = 0; i < SWRAP_NPORTS; i++, port++) {
+ switch(af) {
+ case AF_INET: {
+ struct sockaddr_in *sinp = (struct sockaddr_in *)(void *)sa;
+
+ salen = sizeof(struct sockaddr_in);
+ sinp->sin_port = htons(port);
+ break;
+ }
+ case AF_INET6: {
+ struct sockaddr_in6 *sin6p = (struct sockaddr_in6 *)(void *)sa;
+
+ salen = sizeof(struct sockaddr_in6);
+ sin6p->sin6_port = htons(port);
+ break;
+ }
+ default:
+ errno = EAFNOSUPPORT;
+ return -1;
+ }
+ sa->sa_family = af;
+
+ if (port > SWRAP_ENDPORT) {
+ port = SWRAP_STARTPORT;
+ }
+
+ rc = swrap_bind(sd, (struct sockaddr *)sa, salen);
+ if (rc == 0 || errno != EADDRINUSE) {
+ break;
+ }
+ }
+
+ return rc;
+}
+
+int bindresvport(int sockfd, struct sockaddr_in *sinp)
+{
+ return swrap_bindresvport_sa(sockfd, (struct sockaddr *)sinp);
+}
+#endif
+
+/****************************************************************************
+ * LISTEN
+ ***************************************************************************/
+
+static int swrap_listen(int s, int backlog)
+{
+ int ret;
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return libc_listen(s, backlog);
+ }
+
+ if (si->bound == 0) {
+ ret = swrap_auto_bind(s, si, si->family);
+ if (ret == -1) {
+ errno = EADDRINUSE;
+ return ret;
+ }
+ }
+
+ ret = libc_listen(s, backlog);
+
+ return ret;
+}
+
+int listen(int s, int backlog)
+{
+ return swrap_listen(s, backlog);
+}
+
+/****************************************************************************
+ * FOPEN
+ ***************************************************************************/
+
+static FILE *swrap_fopen(const char *name, const char *mode)
+{
+ FILE *fp;
+
+ fp = libc_fopen(name, mode);
+ if (fp != NULL) {
+ int fd = fileno(fp);
+
+ swrap_remove_stale(fd);
+ }
+
+ return fp;
+}
+
+FILE *fopen(const char *name, const char *mode)
+{
+ return swrap_fopen(name, mode);
+}
+
+/****************************************************************************
+ * OPEN
+ ***************************************************************************/
+
+static int swrap_vopen(const char *pathname, int flags, va_list ap)
+{
+ int ret;
+
+ ret = libc_vopen(pathname, flags, ap);
+ if (ret != -1) {
+ /*
+ * There are methods for closing descriptors (libc-internal code
+ * paths, direct syscalls) which close descriptors in ways that
+ * we can't intercept, so try to recover when we notice that
+ * that's happened
+ */
+ swrap_remove_stale(ret);
+ }
+ return ret;
+}
+
+int open(const char *pathname, int flags, ...)
+{
+ va_list ap;
+ int fd;
+
+ va_start(ap, flags);
+ fd = swrap_vopen(pathname, flags, ap);
+ va_end(ap);
+
+ return fd;
+}
+
+/****************************************************************************
+ * GETPEERNAME
+ ***************************************************************************/
+
+static int swrap_getpeername(int s, struct sockaddr *name, socklen_t *addrlen)
+{
+ struct socket_info *si = find_socket_info(s);
+ socklen_t len;
+
+ if (!si) {
+ return libc_getpeername(s, name, addrlen);
+ }
+
+ if (si->peername.sa_socklen == 0)
+ {
+ errno = ENOTCONN;
+ return -1;
+ }
+
+ len = MIN(*addrlen, si->peername.sa_socklen);
+ if (len == 0) {
+ return 0;
+ }
+
+ memcpy(name, &si->peername.sa.ss, len);
+ *addrlen = si->peername.sa_socklen;
+
+ return 0;
+}
+
+#ifdef HAVE_ACCEPT_PSOCKLEN_T
+int getpeername(int s, struct sockaddr *name, Psocklen_t addrlen)
+#else
+int getpeername(int s, struct sockaddr *name, socklen_t *addrlen)
+#endif
+{
+ return swrap_getpeername(s, name, (socklen_t *)addrlen);
+}
+
+/****************************************************************************
+ * GETSOCKNAME
+ ***************************************************************************/
+
+static int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen)
+{
+ struct socket_info *si = find_socket_info(s);
+ socklen_t len;
+
+ if (!si) {
+ return libc_getsockname(s, name, addrlen);
+ }
+
+ len = MIN(*addrlen, si->myname.sa_socklen);
+ if (len == 0) {
+ return 0;
+ }
+
+ memcpy(name, &si->myname.sa.ss, len);
+ *addrlen = si->myname.sa_socklen;
+
+ return 0;
+}
+
+#ifdef HAVE_ACCEPT_PSOCKLEN_T
+int getsockname(int s, struct sockaddr *name, Psocklen_t addrlen)
+#else
+int getsockname(int s, struct sockaddr *name, socklen_t *addrlen)
+#endif
+{
+ return swrap_getsockname(s, name, (socklen_t *)addrlen);
+}
+
+/****************************************************************************
+ * GETSOCKOPT
+ ***************************************************************************/
+
+#ifndef SO_PROTOCOL
+# ifdef SO_PROTOTYPE /* The Solaris name */
+# define SO_PROTOCOL SO_PROTOTYPE
+# endif /* SO_PROTOTYPE */
+#endif /* SO_PROTOCOL */
+
+static int swrap_getsockopt(int s, int level, int optname,
+ void *optval, socklen_t *optlen)
+{
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return libc_getsockopt(s,
+ level,
+ optname,
+ optval,
+ optlen);
+ }
+
+ if (level == SOL_SOCKET) {
+ switch (optname) {
+#ifdef SO_DOMAIN
+ case SO_DOMAIN:
+ if (optval == NULL || optlen == NULL ||
+ *optlen < (socklen_t)sizeof(int)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *optlen = sizeof(int);
+ *(int *)optval = si->family;
+ return 0;
+#endif /* SO_DOMAIN */
+
+#ifdef SO_PROTOCOL
+ case SO_PROTOCOL:
+ if (optval == NULL || optlen == NULL ||
+ *optlen < (socklen_t)sizeof(int)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *optlen = sizeof(int);
+ *(int *)optval = si->protocol;
+ return 0;
+#endif /* SO_PROTOCOL */
+ case SO_TYPE:
+ if (optval == NULL || optlen == NULL ||
+ *optlen < (socklen_t)sizeof(int)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *optlen = sizeof(int);
+ *(int *)optval = si->type;
+ return 0;
+ default:
+ return libc_getsockopt(s,
+ level,
+ optname,
+ optval,
+ optlen);
+ }
+ } else if (level == IPPROTO_TCP) {
+ switch (optname) {
+#ifdef TCP_NODELAY
+ case TCP_NODELAY:
+ /*
+ * This enables sending packets directly out over TCP.
+ * As a unix socket is doing that any way, report it as
+ * enabled.
+ */
+ if (optval == NULL || optlen == NULL ||
+ *optlen < (socklen_t)sizeof(int)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *optlen = sizeof(int);
+ *(int *)optval = si->tcp_nodelay;
+
+ return 0;
+#endif /* TCP_NODELAY */
+ default:
+ break;
+ }
+ }
+
+ errno = ENOPROTOOPT;
+ return -1;
+}
+
+#ifdef HAVE_ACCEPT_PSOCKLEN_T
+int getsockopt(int s, int level, int optname, void *optval, Psocklen_t optlen)
+#else
+int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
+#endif
+{
+ return swrap_getsockopt(s, level, optname, optval, (socklen_t *)optlen);
+}
+
+/****************************************************************************
+ * SETSOCKOPT
+ ***************************************************************************/
+
+static int swrap_setsockopt(int s, int level, int optname,
+ const void *optval, socklen_t optlen)
+{
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return libc_setsockopt(s,
+ level,
+ optname,
+ optval,
+ optlen);
+ }
+
+ if (level == SOL_SOCKET) {
+ return libc_setsockopt(s,
+ level,
+ optname,
+ optval,
+ optlen);
+ } else if (level == IPPROTO_TCP) {
+ switch (optname) {
+#ifdef TCP_NODELAY
+ case TCP_NODELAY: {
+ int i;
+
+ /*
+ * This enables sending packets directly out over TCP.
+ * A unix socket is doing that any way.
+ */
+ if (optval == NULL || optlen == 0 ||
+ optlen < (socklen_t)sizeof(int)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ i = *discard_const_p(int, optval);
+ if (i != 0 && i != 1) {
+ errno = EINVAL;
+ return -1;
+ }
+ si->tcp_nodelay = i;
+
+ return 0;
+ }
+#endif /* TCP_NODELAY */
+ default:
+ break;
+ }
+ }
+
+ switch (si->family) {
+ case AF_INET:
+ if (level == IPPROTO_IP) {
+#ifdef IP_PKTINFO
+ if (optname == IP_PKTINFO) {
+ si->pktinfo = AF_INET;
+ }
+#endif /* IP_PKTINFO */
+ }
+ return 0;
+#ifdef HAVE_IPV6
+ case AF_INET6:
+ if (level == IPPROTO_IPV6) {
+#ifdef IPV6_RECVPKTINFO
+ if (optname == IPV6_RECVPKTINFO) {
+ si->pktinfo = AF_INET6;
+ }
+#endif /* IPV6_PKTINFO */
+ }
+ return 0;
+#endif
+ default:
+ errno = ENOPROTOOPT;
+ return -1;
+ }
+}
+
+int setsockopt(int s, int level, int optname,
+ const void *optval, socklen_t optlen)
+{
+ return swrap_setsockopt(s, level, optname, optval, optlen);
+}
+
+/****************************************************************************
+ * IOCTL
+ ***************************************************************************/
+
+static int swrap_vioctl(int s, unsigned long int r, va_list va)
+{
+ struct socket_info *si = find_socket_info(s);
+ va_list ap;
+ int value;
+ int rc;
+
+ if (!si) {
+ return libc_vioctl(s, r, va);
+ }
+
+ va_copy(ap, va);
+
+ rc = libc_vioctl(s, r, va);
+
+ switch (r) {
+ case FIONREAD:
+ value = *((int *)va_arg(ap, int *));
+
+ if (rc == -1 && errno != EAGAIN && errno != ENOBUFS) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0);
+ } else if (value == 0) { /* END OF FILE */
+ swrap_pcap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0);
+ }
+ break;
+ }
+
+ va_end(ap);
+
+ return rc;
+}
+
+#ifdef HAVE_IOCTL_INT
+int ioctl(int s, int r, ...)
+#else
+int ioctl(int s, unsigned long int r, ...)
+#endif
+{
+ va_list va;
+ int rc;
+
+ va_start(va, r);
+
+ rc = swrap_vioctl(s, (unsigned long int) r, va);
+
+ va_end(va);
+
+ return rc;
+}
+
+/*****************
+ * CMSG
+ *****************/
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+
+#ifndef CMSG_ALIGN
+# ifdef _ALIGN /* BSD */
+#define CMSG_ALIGN _ALIGN
+# else
+#define CMSG_ALIGN(len) (((len) + sizeof(size_t) - 1) & ~(sizeof(size_t) - 1))
+# endif /* _ALIGN */
+#endif /* CMSG_ALIGN */
+
+/**
+ * @brief Add a cmsghdr to a msghdr.
+ *
+ * This is an function to add any type of cmsghdr. It will operate on the
+ * msg->msg_control and msg->msg_controllen you pass in by adapting them to
+ * the buffer position after the added cmsg element. Hence, this function is
+ * intended to be used with an intermediate msghdr and not on the original
+ * one handed in by the client.
+ *
+ * @param[in] msg The msghdr to which to add the cmsg.
+ *
+ * @param[in] level The cmsg level to set.
+ *
+ * @param[in] type The cmsg type to set.
+ *
+ * @param[in] data The cmsg data to set.
+ *
+ * @param[in] len the length of the data to set.
+ */
+static void swrap_msghdr_add_cmsghdr(struct msghdr *msg,
+ int level,
+ int type,
+ const void *data,
+ size_t len)
+{
+ size_t cmlen = CMSG_LEN(len);
+ size_t cmspace = CMSG_SPACE(len);
+ uint8_t cmbuf[cmspace];
+ void *cast_ptr = (void *)cmbuf;
+ struct cmsghdr *cm = (struct cmsghdr *)cast_ptr;
+ uint8_t *p;
+
+ memset(cmbuf, 0, cmspace);
+
+ if (msg->msg_controllen < cmlen) {
+ cmlen = msg->msg_controllen;
+ msg->msg_flags |= MSG_CTRUNC;
+ }
+
+ if (msg->msg_controllen < cmspace) {
+ cmspace = msg->msg_controllen;
+ }
+
+ /*
+ * We copy the full input data into an intermediate cmsghdr first
+ * in order to more easily cope with truncation.
+ */
+ cm->cmsg_len = cmlen;
+ cm->cmsg_level = level;
+ cm->cmsg_type = type;
+ memcpy(CMSG_DATA(cm), data, len);
+
+ /*
+ * We now copy the possibly truncated buffer.
+ * We copy cmlen bytes, but consume cmspace bytes,
+ * leaving the possible padding uninitialiazed.
+ */
+ p = (uint8_t *)msg->msg_control;
+ memcpy(p, cm, cmlen);
+ p += cmspace;
+ msg->msg_control = p;
+ msg->msg_controllen -= cmspace;
+
+ return;
+}
+
+static int swrap_msghdr_add_pktinfo(struct socket_info *si,
+ struct msghdr *msg)
+{
+ /* Add packet info */
+ switch (si->pktinfo) {
+#if defined(IP_PKTINFO) && (defined(HAVE_STRUCT_IN_PKTINFO) || defined(IP_RECVDSTADDR))
+ case AF_INET: {
+ struct sockaddr_in *sin;
+#if defined(HAVE_STRUCT_IN_PKTINFO)
+ struct in_pktinfo pkt;
+#elif defined(IP_RECVDSTADDR)
+ struct in_addr pkt;
+#endif
+
+ if (si->bindname.sa_socklen == sizeof(struct sockaddr_in)) {
+ sin = &si->bindname.sa.in;
+ } else {
+ if (si->myname.sa_socklen != sizeof(struct sockaddr_in)) {
+ return 0;
+ }
+ sin = &si->myname.sa.in;
+ }
+
+ ZERO_STRUCT(pkt);
+
+#if defined(HAVE_STRUCT_IN_PKTINFO)
+ pkt.ipi_ifindex = socket_wrapper_default_iface();
+ pkt.ipi_addr.s_addr = sin->sin_addr.s_addr;
+#elif defined(IP_RECVDSTADDR)
+ pkt = sin->sin_addr;
+#endif
+
+ swrap_msghdr_add_cmsghdr(msg, IPPROTO_IP, IP_PKTINFO,
+ &pkt, sizeof(pkt));
+
+ break;
+ }
+#endif /* IP_PKTINFO */
+#if defined(HAVE_IPV6)
+ case AF_INET6: {
+#if defined(IPV6_PKTINFO) && defined(HAVE_STRUCT_IN6_PKTINFO)
+ struct sockaddr_in6 *sin6;
+ struct in6_pktinfo pkt6;
+
+ if (si->bindname.sa_socklen == sizeof(struct sockaddr_in6)) {
+ sin6 = &si->bindname.sa.in6;
+ } else {
+ if (si->myname.sa_socklen != sizeof(struct sockaddr_in6)) {
+ return 0;
+ }
+ sin6 = &si->myname.sa.in6;
+ }
+
+ ZERO_STRUCT(pkt6);
+
+ pkt6.ipi6_ifindex = socket_wrapper_default_iface();
+ pkt6.ipi6_addr = sin6->sin6_addr;
+
+ swrap_msghdr_add_cmsghdr(msg, IPPROTO_IPV6, IPV6_PKTINFO,
+ &pkt6, sizeof(pkt6));
+#endif /* HAVE_STRUCT_IN6_PKTINFO */
+
+ break;
+ }
+#endif /* IPV6_PKTINFO */
+ default:
+ return -1;
+ }
+
+ return 0;
+}
+
+static int swrap_msghdr_add_socket_info(struct socket_info *si,
+ struct msghdr *omsg)
+{
+ int rc = 0;
+
+ if (si->pktinfo > 0) {
+ rc = swrap_msghdr_add_pktinfo(si, omsg);
+ }
+
+ return rc;
+}
+
+static int swrap_sendmsg_copy_cmsg(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space);
+static int swrap_sendmsg_filter_cmsg_socket(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space);
+
+static int swrap_sendmsg_filter_cmsghdr(struct msghdr *msg,
+ uint8_t **cm_data,
+ size_t *cm_data_space) {
+ struct cmsghdr *cmsg;
+ int rc = -1;
+
+ /* Nothing to do */
+ if (msg->msg_controllen == 0 || msg->msg_control == NULL) {
+ return 0;
+ }
+
+ for (cmsg = CMSG_FIRSTHDR(msg);
+ cmsg != NULL;
+ cmsg = CMSG_NXTHDR(msg, cmsg)) {
+ switch (cmsg->cmsg_level) {
+ case IPPROTO_IP:
+ rc = swrap_sendmsg_filter_cmsg_socket(cmsg,
+ cm_data,
+ cm_data_space);
+ break;
+ default:
+ rc = swrap_sendmsg_copy_cmsg(cmsg,
+ cm_data,
+ cm_data_space);
+ break;
+ }
+ }
+
+ return rc;
+}
+
+static int swrap_sendmsg_copy_cmsg(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space)
+{
+ size_t cmspace;
+ uint8_t *p;
+
+ cmspace = *cm_data_space + CMSG_ALIGN(cmsg->cmsg_len);
+
+ p = realloc((*cm_data), cmspace);
+ if (p == NULL) {
+ return -1;
+ }
+ (*cm_data) = p;
+
+ p = (*cm_data) + (*cm_data_space);
+ *cm_data_space = cmspace;
+
+ memcpy(p, cmsg, cmsg->cmsg_len);
+
+ return 0;
+}
+
+static int swrap_sendmsg_filter_cmsg_pktinfo(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space);
+
+
+static int swrap_sendmsg_filter_cmsg_socket(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space)
+{
+ int rc = -1;
+
+ switch(cmsg->cmsg_type) {
+#ifdef IP_PKTINFO
+ case IP_PKTINFO:
+ rc = swrap_sendmsg_filter_cmsg_pktinfo(cmsg,
+ cm_data,
+ cm_data_space);
+ break;
+#endif
+#ifdef IPV6_PKTINFO
+ case IPV6_PKTINFO:
+ rc = swrap_sendmsg_filter_cmsg_pktinfo(cmsg,
+ cm_data,
+ cm_data_space);
+ break;
+#endif
+ default:
+ break;
+ }
+
+ return rc;
+}
+
+static int swrap_sendmsg_filter_cmsg_pktinfo(struct cmsghdr *cmsg,
+ uint8_t **cm_data,
+ size_t *cm_data_space)
+{
+ (void)cmsg; /* unused */
+ (void)cm_data; /* unused */
+ (void)cm_data_space; /* unused */
+
+ /*
+ * Passing a IP pktinfo to a unix socket might be rejected by the
+ * Kernel, at least on FreeBSD. So skip this cmsg.
+ */
+ return 0;
+}
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL */
+
+static ssize_t swrap_sendmsg_before(int fd,
+ struct socket_info *si,
+ struct msghdr *msg,
+ struct iovec *tmp_iov,
+ struct sockaddr_un *tmp_un,
+ const struct sockaddr_un **to_un,
+ const struct sockaddr **to,
+ int *bcast)
+{
+ size_t i, len = 0;
+ ssize_t ret;
+
+ if (to_un) {
+ *to_un = NULL;
+ }
+ if (to) {
+ *to = NULL;
+ }
+ if (bcast) {
+ *bcast = 0;
+ }
+
+ switch (si->type) {
+ case SOCK_STREAM: {
+ unsigned long mtu;
+
+ if (!si->connected) {
+ errno = ENOTCONN;
+ return -1;
+ }
+
+ if (msg->msg_iovlen == 0) {
+ break;
+ }
+
+ mtu = socket_wrapper_mtu();
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ size_t nlen;
+ nlen = len + msg->msg_iov[i].iov_len;
+ if (nlen > mtu) {
+ break;
+ }
+ }
+ msg->msg_iovlen = i;
+ if (msg->msg_iovlen == 0) {
+ *tmp_iov = msg->msg_iov[0];
+ tmp_iov->iov_len = MIN((size_t)tmp_iov->iov_len,
+ (size_t)mtu);
+ msg->msg_iov = tmp_iov;
+ msg->msg_iovlen = 1;
+ }
+ break;
+ }
+ case SOCK_DGRAM:
+ if (si->connected) {
+ if (msg->msg_name != NULL) {
+ /*
+ * We are dealing with unix sockets and if we
+ * are connected, we should only talk to the
+ * connected unix path. Using the fd to send
+ * to another server would be hard to achieve.
+ */
+ msg->msg_name = NULL;
+ msg->msg_namelen = 0;
+ }
+ } else {
+ const struct sockaddr *msg_name;
+ msg_name = (const struct sockaddr *)msg->msg_name;
+
+ if (msg_name == NULL) {
+ errno = ENOTCONN;
+ return -1;
+ }
+
+
+ ret = sockaddr_convert_to_un(si, msg_name, msg->msg_namelen,
+ tmp_un, 0, bcast);
+ if (ret == -1) return -1;
+
+ if (to_un) {
+ *to_un = tmp_un;
+ }
+ if (to) {
+ *to = msg_name;
+ }
+ msg->msg_name = tmp_un;
+ msg->msg_namelen = sizeof(*tmp_un);
+ }
+
+ if (si->bound == 0) {
+ ret = swrap_auto_bind(fd, si, si->family);
+ if (ret == -1) {
+ if (errno == ENOTSOCK) {
+ swrap_remove_stale(fd);
+ return -ENOTSOCK;
+ } else {
+ SWRAP_LOG(SWRAP_LOG_ERROR, "swrap_sendmsg_before failed");
+ return -1;
+ }
+ }
+ }
+
+ if (!si->defer_connect) {
+ break;
+ }
+
+ ret = sockaddr_convert_to_un(si,
+ &si->peername.sa.s,
+ si->peername.sa_socklen,
+ tmp_un,
+ 0,
+ NULL);
+ if (ret == -1) return -1;
+
+ ret = libc_connect(fd,
+ (struct sockaddr *)(void *)tmp_un,
+ sizeof(*tmp_un));
+
+ /* to give better errors */
+ if (ret == -1 && errno == ENOENT) {
+ errno = EHOSTUNREACH;
+ }
+
+ if (ret == -1) {
+ return ret;
+ }
+
+ si->defer_connect = 0;
+ break;
+ default:
+ errno = EHOSTUNREACH;
+ return -1;
+ }
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ if (msg->msg_controllen > 0 && msg->msg_control != NULL) {
+ uint8_t *cmbuf = NULL;
+ size_t cmlen = 0;
+
+ ret = swrap_sendmsg_filter_cmsghdr(msg, &cmbuf, &cmlen);
+ if (ret < 0) {
+ free(cmbuf);
+ return -1;
+ }
+
+ if (cmlen == 0) {
+ msg->msg_controllen = 0;
+ msg->msg_control = NULL;
+ } else if (cmlen < msg->msg_controllen && cmbuf != NULL) {
+ memcpy(msg->msg_control, cmbuf, cmlen);
+ msg->msg_controllen = cmlen;
+ }
+ free(cmbuf);
+ }
+#endif
+
+ return 0;
+}
+
+static void swrap_sendmsg_after(int fd,
+ struct socket_info *si,
+ struct msghdr *msg,
+ const struct sockaddr *to,
+ ssize_t ret)
+{
+ int saved_errno = errno;
+ size_t i, len = 0;
+ uint8_t *buf;
+ off_t ofs = 0;
+ size_t avail = 0;
+ size_t remain;
+
+ /* to give better errors */
+ if (ret == -1) {
+ if (saved_errno == ENOENT) {
+ saved_errno = EHOSTUNREACH;
+ } else if (saved_errno == ENOTSOCK) {
+ /* If the fd is not a socket, remove it */
+ swrap_remove_stale(fd);
+ }
+ }
+
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ avail += msg->msg_iov[i].iov_len;
+ }
+
+ if (ret == -1) {
+ remain = MIN(80, avail);
+ } else {
+ remain = ret;
+ }
+
+ /* we capture it as one single packet */
+ buf = (uint8_t *)malloc(remain);
+ if (!buf) {
+ /* we just not capture the packet */
+ errno = saved_errno;
+ return;
+ }
+
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ size_t this_time = MIN(remain, (size_t)msg->msg_iov[i].iov_len);
+ memcpy(buf + ofs,
+ msg->msg_iov[i].iov_base,
+ this_time);
+ ofs += this_time;
+ remain -= this_time;
+ }
+ len = ofs;
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ if (ret == -1) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_SEND, buf, len);
+ swrap_pcap_dump_packet(si, NULL, SWRAP_SEND_RST, NULL, 0);
+ } else {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_SEND, buf, len);
+ }
+ break;
+
+ case SOCK_DGRAM:
+ if (si->connected) {
+ to = &si->peername.sa.s;
+ }
+ if (ret == -1) {
+ swrap_pcap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
+ swrap_pcap_dump_packet(si, to, SWRAP_SENDTO_UNREACH, buf, len);
+ } else {
+ swrap_pcap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
+ }
+ break;
+ }
+
+ free(buf);
+ errno = saved_errno;
+}
+
+static int swrap_recvmsg_before(int fd,
+ struct socket_info *si,
+ struct msghdr *msg,
+ struct iovec *tmp_iov)
+{
+ size_t i, len = 0;
+ ssize_t ret;
+
+ (void)fd; /* unused */
+
+ switch (si->type) {
+ case SOCK_STREAM: {
+ unsigned int mtu;
+ if (!si->connected) {
+ errno = ENOTCONN;
+ return -1;
+ }
+
+ if (msg->msg_iovlen == 0) {
+ break;
+ }
+
+ mtu = socket_wrapper_mtu();
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ size_t nlen;
+ nlen = len + msg->msg_iov[i].iov_len;
+ if (nlen > mtu) {
+ break;
+ }
+ }
+ msg->msg_iovlen = i;
+ if (msg->msg_iovlen == 0) {
+ *tmp_iov = msg->msg_iov[0];
+ tmp_iov->iov_len = MIN((size_t)tmp_iov->iov_len,
+ (size_t)mtu);
+ msg->msg_iov = tmp_iov;
+ msg->msg_iovlen = 1;
+ }
+ break;
+ }
+ case SOCK_DGRAM:
+ if (msg->msg_name == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (msg->msg_iovlen == 0) {
+ break;
+ }
+
+ if (si->bound == 0) {
+ ret = swrap_auto_bind(fd, si, si->family);
+ if (ret == -1) {
+ /*
+ * When attempting to read or write to a
+ * descriptor, if an underlying autobind fails
+ * because it's not a socket, stop intercepting
+ * uses of that descriptor.
+ */
+ if (errno == ENOTSOCK) {
+ swrap_remove_stale(fd);
+ return -ENOTSOCK;
+ } else {
+ SWRAP_LOG(SWRAP_LOG_ERROR,
+ "swrap_recvmsg_before failed");
+ return -1;
+ }
+ }
+ }
+ break;
+ default:
+ errno = EHOSTUNREACH;
+ return -1;
+ }
+
+ return 0;
+}
+
+static int swrap_recvmsg_after(int fd,
+ struct socket_info *si,
+ struct msghdr *msg,
+ const struct sockaddr_un *un_addr,
+ socklen_t un_addrlen,
+ ssize_t ret)
+{
+ int saved_errno = errno;
+ size_t i;
+ uint8_t *buf = NULL;
+ off_t ofs = 0;
+ size_t avail = 0;
+ size_t remain;
+ int rc;
+
+ /* to give better errors */
+ if (ret == -1) {
+ if (saved_errno == ENOENT) {
+ saved_errno = EHOSTUNREACH;
+ } else if (saved_errno == ENOTSOCK) {
+ /* If the fd is not a socket, remove it */
+ swrap_remove_stale(fd);
+ }
+ }
+
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ avail += msg->msg_iov[i].iov_len;
+ }
+
+ /* Convert the socket address before we leave */
+ if (si->type == SOCK_DGRAM && un_addr != NULL) {
+ rc = sockaddr_convert_from_un(si,
+ un_addr,
+ un_addrlen,
+ si->family,
+ msg->msg_name,
+ &msg->msg_namelen);
+ if (rc == -1) {
+ goto done;
+ }
+ }
+
+ if (avail == 0) {
+ rc = 0;
+ goto done;
+ }
+
+ if (ret == -1) {
+ remain = MIN(80, avail);
+ } else {
+ remain = ret;
+ }
+
+ /* we capture it as one single packet */
+ buf = (uint8_t *)malloc(remain);
+ if (buf == NULL) {
+ /* we just not capture the packet */
+ errno = saved_errno;
+ return -1;
+ }
+
+ for (i = 0; i < (size_t)msg->msg_iovlen; i++) {
+ size_t this_time = MIN(remain, (size_t)msg->msg_iov[i].iov_len);
+ memcpy(buf + ofs,
+ msg->msg_iov[i].iov_base,
+ this_time);
+ ofs += this_time;
+ remain -= this_time;
+ }
+
+ switch (si->type) {
+ case SOCK_STREAM:
+ if (ret == -1 && saved_errno != EAGAIN && saved_errno != ENOBUFS) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0);
+ } else if (ret == 0) { /* END OF FILE */
+ swrap_pcap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0);
+ } else if (ret > 0) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_RECV, buf, ret);
+ }
+ break;
+
+ case SOCK_DGRAM:
+ if (ret == -1) {
+ break;
+ }
+
+ if (un_addr != NULL) {
+ swrap_pcap_dump_packet(si,
+ msg->msg_name,
+ SWRAP_RECVFROM,
+ buf,
+ ret);
+ } else {
+ swrap_pcap_dump_packet(si,
+ msg->msg_name,
+ SWRAP_RECV,
+ buf,
+ ret);
+ }
+
+ break;
+ }
+
+ rc = 0;
+done:
+ free(buf);
+ errno = saved_errno;
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ if (rc == 0 &&
+ msg->msg_controllen > 0 &&
+ msg->msg_control != NULL) {
+ rc = swrap_msghdr_add_socket_info(si, msg);
+ if (rc < 0) {
+ return -1;
+ }
+ }
+#endif
+
+ return rc;
+}
+
+/****************************************************************************
+ * RECVFROM
+ ***************************************************************************/
+
+static ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen)
+{
+ struct swrap_address from_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ ssize_t ret;
+ struct socket_info *si = find_socket_info(s);
+ struct swrap_address saddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr msg;
+ struct iovec tmp;
+ int tret;
+
+ if (!si) {
+ return libc_recvfrom(s,
+ buf,
+ len,
+ flags,
+ from,
+ fromlen);
+ }
+
+ tmp.iov_base = buf;
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ if (from != NULL && fromlen != NULL) {
+ msg.msg_name = from; /* optional address */
+ msg.msg_namelen = *fromlen; /* size of address */
+ } else {
+ msg.msg_name = &saddr.sa.s; /* optional address */
+ msg.msg_namelen = saddr.sa_socklen; /* size of address */
+ }
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ tret = swrap_recvmsg_before(s, si, &msg, &tmp);
+ if (tret < 0) {
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ ret = libc_recvfrom(s,
+ buf,
+ len,
+ flags,
+ &from_addr.sa.s,
+ &from_addr.sa_socklen);
+ if (ret == -1) {
+ return ret;
+ }
+
+ tret = swrap_recvmsg_after(s,
+ si,
+ &msg,
+ &from_addr.sa.un,
+ from_addr.sa_socklen,
+ ret);
+ if (tret != 0) {
+ return tret;
+ }
+
+ if (from != NULL && fromlen != NULL) {
+ *fromlen = msg.msg_namelen;
+ }
+
+ return ret;
+}
+
+#ifdef HAVE_ACCEPT_PSOCKLEN_T
+ssize_t recvfrom(int s, void *buf, size_t len, int flags,
+ struct sockaddr *from, Psocklen_t fromlen)
+#else
+ssize_t recvfrom(int s, void *buf, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen)
+#endif
+{
+ return swrap_recvfrom(s, buf, len, flags, from, (socklen_t *)fromlen);
+}
+
+/****************************************************************************
+ * SENDTO
+ ***************************************************************************/
+
+static ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags,
+ const struct sockaddr *to, socklen_t tolen)
+{
+ struct msghdr msg;
+ struct iovec tmp;
+ struct swrap_address un_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ const struct sockaddr_un *to_un = NULL;
+ ssize_t ret;
+ int rc;
+ struct socket_info *si = find_socket_info(s);
+ int bcast = 0;
+
+ if (!si) {
+ return libc_sendto(s, buf, len, flags, to, tolen);
+ }
+
+ tmp.iov_base = discard_const_p(char, buf);
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = discard_const_p(struct sockaddr, to); /* optional address */
+ msg.msg_namelen = tolen; /* size of address */
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ rc = swrap_sendmsg_before(s,
+ si,
+ &msg,
+ &tmp,
+ &un_addr.sa.un,
+ &to_un,
+ &to,
+ &bcast);
+ if (rc < 0) {
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ if (bcast) {
+/* struct stat st;
+ unsigned int iface; */
+ unsigned int prt = ntohs(((const struct sockaddr_in *)(const void *)to)->sin_port);
+ unsigned int remote_prt;
+ unsigned int in4_addr;
+ char type;
+ DIR *d;
+ struct dirent *dir;
+
+/*
+ type = SOCKET_TYPE_CHAR_UDP;
+
+ for(iface=0; iface <= MAX_WRAPPED_INTERFACES; iface++) {
+ snprintf(un_addr.sa.un.sun_path,
+ sizeof(un_addr.sa.un.sun_path),
+ "%s/"SOCKET_FORMAT,
+ socket_wrapper_dir(), type, iface, prt);
+ if (stat(un_addr.sa.un.sun_path, &st) != 0) continue;
+
+ / * ignore the any errors in broadcast sends * /
+ libc_sendto(s,
+ buf,
+ len,
+ flags,
+ &un_addr.sa.s,
+ un_addr.sa_socklen);
+ }
+*/
+
+ d = opendir(socket_wrapper_dir());
+ if (d) {
+ while ((dir = readdir(d)) != NULL) {
+ if (dir->d_name[0] == SOCKET_TYPE_CHAR_UDP_LONG)
+ /* TODO - use S_ISSOCK ? */
+ if (sscanf(dir->d_name, SOCKET_FORMAT_LONG, &type, &in4_addr, &remote_prt) == 3)
+ if (prt == remote_prt) {
+ snprintf(un_addr.sa.un.sun_path,
+ sizeof(un_addr.sa.un.sun_path),
+ "%s/%s",
+ socket_wrapper_dir(),dir->d_name);
+ libc_sendto(s,
+ buf,
+ len,
+ flags,
+ &un_addr.sa.s,
+ un_addr.sa_socklen);
+ SWRAP_LOG(SWRAP_LOG_DEBUG,"send bcast packet to %s", dir->d_name);
+ }
+ }
+ closedir(d);
+ }
+
+ swrap_pcap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
+
+ return len;
+ }
+
+ /*
+ * If it is a dgram socket and we are connected, don't include the
+ * 'to' address.
+ */
+ if (si->type == SOCK_DGRAM && si->connected) {
+ ret = libc_sendto(s,
+ buf,
+ len,
+ flags,
+ NULL,
+ 0);
+ } else {
+ ret = libc_sendto(s,
+ buf,
+ len,
+ flags,
+ (struct sockaddr *)msg.msg_name,
+ msg.msg_namelen);
+ }
+
+ swrap_sendmsg_after(s, si, &msg, to, ret);
+
+ return ret;
+}
+
+ssize_t sendto(int s, const void *buf, size_t len, int flags,
+ const struct sockaddr *to, socklen_t tolen)
+{
+ return swrap_sendto(s, buf, len, flags, to, tolen);
+}
+
+/****************************************************************************
+ * READV
+ ***************************************************************************/
+
+static ssize_t swrap_recv(int s, void *buf, size_t len, int flags)
+{
+ struct socket_info *si;
+ struct msghdr msg;
+ struct swrap_address saddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct iovec tmp;
+ ssize_t ret;
+ int tret;
+
+ si = find_socket_info(s);
+ if (si == NULL) {
+ return libc_recv(s, buf, len, flags);
+ }
+
+ tmp.iov_base = buf;
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = &saddr.sa.s; /* optional address */
+ msg.msg_namelen = saddr.sa_socklen; /* size of address */
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ tret = swrap_recvmsg_before(s, si, &msg, &tmp);
+ if (tret < 0) {
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ ret = libc_recv(s, buf, len, flags);
+
+ tret = swrap_recvmsg_after(s, si, &msg, NULL, 0, ret);
+ if (tret != 0) {
+ return tret;
+ }
+
+ return ret;
+}
+
+ssize_t recv(int s, void *buf, size_t len, int flags)
+{
+ return swrap_recv(s, buf, len, flags);
+}
+
+/****************************************************************************
+ * READ
+ ***************************************************************************/
+
+static ssize_t swrap_read(int s, void *buf, size_t len)
+{
+ struct socket_info *si;
+ struct msghdr msg;
+ struct iovec tmp;
+ struct swrap_address saddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ ssize_t ret;
+ int tret;
+
+ si = find_socket_info(s);
+ if (si == NULL) {
+ return libc_read(s, buf, len);
+ }
+
+ tmp.iov_base = buf;
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = &saddr.sa.ss; /* optional address */
+ msg.msg_namelen = saddr.sa_socklen; /* size of address */
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ tret = swrap_recvmsg_before(s, si, &msg, &tmp);
+ if (tret < 0) {
+ if (tret == -ENOTSOCK) {
+ return libc_read(s, buf, len);
+ }
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ ret = libc_read(s, buf, len);
+
+ tret = swrap_recvmsg_after(s, si, &msg, NULL, 0, ret);
+ if (tret != 0) {
+ return tret;
+ }
+
+ return ret;
+}
+
+ssize_t read(int s, void *buf, size_t len)
+{
+ return swrap_read(s, buf, len);
+}
+
+/****************************************************************************
+ * WRITE
+ ***************************************************************************/
+
+static ssize_t swrap_write(int s, const void *buf, size_t len)
+{
+ struct msghdr msg;
+ struct iovec tmp;
+ struct sockaddr_un un_addr;
+ ssize_t ret;
+ int rc;
+ struct socket_info *si;
+
+ si = find_socket_info(s);
+ if (si == NULL) {
+ return libc_write(s, buf, len);
+ }
+
+ tmp.iov_base = discard_const_p(char, buf);
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = NULL; /* optional address */
+ msg.msg_namelen = 0; /* size of address */
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ rc = swrap_sendmsg_before(s, si, &msg, &tmp, &un_addr, NULL, NULL, NULL);
+ if (rc < 0) {
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ ret = libc_write(s, buf, len);
+
+ swrap_sendmsg_after(s, si, &msg, NULL, ret);
+
+ return ret;
+}
+
+ssize_t write(int s, const void *buf, size_t len)
+{
+ return swrap_write(s, buf, len);
+}
+
+/****************************************************************************
+ * SEND
+ ***************************************************************************/
+
+static ssize_t swrap_send(int s, const void *buf, size_t len, int flags)
+{
+ struct msghdr msg;
+ struct iovec tmp;
+ struct sockaddr_un un_addr;
+ ssize_t ret;
+ int rc;
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return libc_send(s, buf, len, flags);
+ }
+
+ tmp.iov_base = discard_const_p(char, buf);
+ tmp.iov_len = len;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = NULL; /* optional address */
+ msg.msg_namelen = 0; /* size of address */
+ msg.msg_iov = &tmp; /* scatter/gather array */
+ msg.msg_iovlen = 1; /* # elements in msg_iov */
+#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ rc = swrap_sendmsg_before(s, si, &msg, &tmp, &un_addr, NULL, NULL, NULL);
+ if (rc < 0) {
+ return -1;
+ }
+
+ buf = msg.msg_iov[0].iov_base;
+ len = msg.msg_iov[0].iov_len;
+
+ ret = libc_send(s, buf, len, flags);
+
+ swrap_sendmsg_after(s, si, &msg, NULL, ret);
+
+ return ret;
+}
+
+ssize_t send(int s, const void *buf, size_t len, int flags)
+{
+ return swrap_send(s, buf, len, flags);
+}
+
+/****************************************************************************
+ * RECVMSG
+ ***************************************************************************/
+
+static ssize_t swrap_recvmsg(int s, struct msghdr *omsg, int flags)
+{
+ struct swrap_address from_addr = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ struct swrap_address convert_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct socket_info *si;
+ struct msghdr msg;
+ struct iovec tmp;
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ size_t msg_ctrllen_filled;
+ size_t msg_ctrllen_left;
+#endif
+
+ ssize_t ret;
+ int rc;
+
+ si = find_socket_info(s);
+ if (si == NULL) {
+ return libc_recvmsg(s, omsg, flags);
+ }
+
+ tmp.iov_base = NULL;
+ tmp.iov_len = 0;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = &from_addr.sa; /* optional address */
+ msg.msg_namelen = from_addr.sa_socklen; /* size of address */
+ msg.msg_iov = omsg->msg_iov; /* scatter/gather array */
+ msg.msg_iovlen = omsg->msg_iovlen; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg_ctrllen_filled = 0;
+ msg_ctrllen_left = omsg->msg_controllen;
+
+ msg.msg_control = omsg->msg_control; /* ancillary data, see below */
+ msg.msg_controllen = omsg->msg_controllen; /* ancillary data buffer len */
+ msg.msg_flags = omsg->msg_flags; /* flags on received message */
+#endif
+
+ rc = swrap_recvmsg_before(s, si, &msg, &tmp);
+ if (rc < 0) {
+ return -1;
+ }
+
+ ret = libc_recvmsg(s, &msg, flags);
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg_ctrllen_filled += msg.msg_controllen;
+ msg_ctrllen_left -= msg.msg_controllen;
+
+ if (omsg->msg_control != NULL) {
+ uint8_t *p;
+
+ p = omsg->msg_control;
+ p += msg_ctrllen_filled;
+
+ msg.msg_control = p;
+ msg.msg_controllen = msg_ctrllen_left;
+ } else {
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ }
+#endif
+
+ /*
+ * We convert the unix address to a IP address so we need a buffer
+ * which can store the address in case of SOCK_DGRAM, see below.
+ */
+ msg.msg_name = &convert_addr.sa;
+ msg.msg_namelen = convert_addr.sa_socklen;
+
+ rc = swrap_recvmsg_after(s,
+ si,
+ &msg,
+ &from_addr.sa.un,
+ from_addr.sa_socklen,
+ ret);
+ if (rc != 0) {
+ return rc;
+ }
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ if (omsg->msg_control != NULL) {
+ /* msg.msg_controllen = space left */
+ msg_ctrllen_left = msg.msg_controllen;
+ msg_ctrllen_filled = omsg->msg_controllen - msg_ctrllen_left;
+ }
+
+ /* Update the original message length */
+ omsg->msg_controllen = msg_ctrllen_filled;
+ omsg->msg_flags = msg.msg_flags;
+#endif
+ omsg->msg_iovlen = msg.msg_iovlen;
+
+ /*
+ * From the manpage:
+ *
+ * The msg_name field points to a caller-allocated buffer that is
+ * used to return the source address if the socket is unconnected. The
+ * caller should set msg_namelen to the size of this buffer before this
+ * call; upon return from a successful call, msg_name will contain the
+ * length of the returned address. If the application does not need
+ * to know the source address, msg_name can be specified as NULL.
+ */
+ if (si->type == SOCK_STREAM) {
+ omsg->msg_namelen = 0;
+ } else if (omsg->msg_name != NULL &&
+ omsg->msg_namelen != 0 &&
+ omsg->msg_namelen >= msg.msg_namelen) {
+ memcpy(omsg->msg_name, msg.msg_name, msg.msg_namelen);
+ omsg->msg_namelen = msg.msg_namelen;
+ }
+
+ return ret;
+}
+
+ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags)
+{
+ return swrap_recvmsg(sockfd, msg, flags);
+}
+
+/****************************************************************************
+ * SENDMSG
+ ***************************************************************************/
+
+static ssize_t swrap_sendmsg(int s, const struct msghdr *omsg, int flags)
+{
+ struct msghdr msg;
+ struct iovec tmp;
+ struct sockaddr_un un_addr;
+ const struct sockaddr_un *to_un = NULL;
+ const struct sockaddr *to = NULL;
+ ssize_t ret;
+ int rc;
+ struct socket_info *si = find_socket_info(s);
+ int bcast = 0;
+
+ if (!si) {
+ return libc_sendmsg(s, omsg, flags);
+ }
+
+ ZERO_STRUCT(un_addr);
+
+ tmp.iov_base = NULL;
+ tmp.iov_len = 0;
+
+ ZERO_STRUCT(msg);
+
+ if (si->connected == 0) {
+ msg.msg_name = omsg->msg_name; /* optional address */
+ msg.msg_namelen = omsg->msg_namelen; /* size of address */
+ }
+ msg.msg_iov = omsg->msg_iov; /* scatter/gather array */
+ msg.msg_iovlen = omsg->msg_iovlen; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ if (msg.msg_controllen > 0 && msg.msg_control != NULL) {
+ /* omsg is a const so use a local buffer for modifications */
+ uint8_t cmbuf[omsg->msg_controllen];
+
+ memcpy(cmbuf, omsg->msg_control, omsg->msg_controllen);
+
+ msg.msg_control = cmbuf; /* ancillary data, see below */
+ msg.msg_controllen = omsg->msg_controllen; /* ancillary data buffer len */
+ }
+ msg.msg_flags = omsg->msg_flags; /* flags on received message */
+#endif
+
+ rc = swrap_sendmsg_before(s, si, &msg, &tmp, &un_addr, &to_un, &to, &bcast);
+ if (rc < 0) {
+ return -1;
+ }
+
+ if (bcast) {
+// struct stat st;
+// unsigned int iface;
+ unsigned int prt = ntohs(((const struct sockaddr_in *)(const void *)to)->sin_port);
+ char type;
+ size_t i, len = 0;
+ uint8_t *buf;
+ off_t ofs = 0;
+ size_t avail = 0;
+ size_t remain;
+
+ unsigned int remote_prt;
+ unsigned int in4_addr;
+ DIR *d;
+ struct dirent *dir;
+
+
+ for (i = 0; i < (size_t)msg.msg_iovlen; i++) {
+ avail += msg.msg_iov[i].iov_len;
+ }
+
+ len = avail;
+ remain = avail;
+
+ /* we capture it as one single packet */
+ buf = (uint8_t *)malloc(remain);
+ if (!buf) {
+ return -1;
+ }
+
+ for (i = 0; i < (size_t)msg.msg_iovlen; i++) {
+ size_t this_time = MIN(remain, (size_t)msg.msg_iov[i].iov_len);
+ memcpy(buf + ofs,
+ msg.msg_iov[i].iov_base,
+ this_time);
+ ofs += this_time;
+ remain -= this_time;
+ }
+
+ /*
+ type = SOCKET_TYPE_CHAR_UDP;
+
+ for(iface=0; iface <= MAX_WRAPPED_INTERFACES; iface++) {
+ snprintf(un_addr.sun_path, sizeof(un_addr.sun_path), "%s/"SOCKET_FORMAT,
+ socket_wrapper_dir(), type, iface, prt);
+ if (stat(un_addr.sun_path, &st) != 0) continue;
+
+ msg.msg_name = &un_addr; / * optional address * /
+ msg.msg_namelen = sizeof(un_addr); / * size of address * /
+
+ / * ignore the any errors in broadcast sends * /
+ libc_sendmsg(s, &msg, flags);
+ }
+ */
+
+
+ d = opendir(socket_wrapper_dir());
+ if (d) {
+ while ((dir = readdir(d)) != NULL) {
+ if (dir->d_name[0] == SOCKET_TYPE_CHAR_UDP_LONG)
+ /* TODO - use S_ISSOCK ? */
+ if (sscanf(dir->d_name, SOCKET_FORMAT_LONG, &type, &in4_addr, &remote_prt) == 3)
+ if (prt == remote_prt) {
+ snprintf(un_addr.sun_path,
+ sizeof(un_addr.sun_path),
+ "%s/%s",
+ socket_wrapper_dir(),dir->d_name);
+ libc_sendmsg(s, &msg, flags);
+ SWRAP_LOG(SWRAP_LOG_DEBUG,"send bcast packet to %s", dir->d_name);
+ }
+ }
+ closedir(d);
+ }
+
+ swrap_pcap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
+ free(buf);
+
+ return len;
+ }
+
+ ret = libc_sendmsg(s, &msg, flags);
+
+ swrap_sendmsg_after(s, si, &msg, to, ret);
+
+ return ret;
+}
+
+ssize_t sendmsg(int s, const struct msghdr *omsg, int flags)
+{
+ return swrap_sendmsg(s, omsg, flags);
+}
+
+/****************************************************************************
+ * READV
+ ***************************************************************************/
+
+static ssize_t swrap_readv(int s, const struct iovec *vector, int count)
+{
+ struct socket_info *si;
+ struct msghdr msg;
+ struct iovec tmp;
+ struct swrap_address saddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage)
+ };
+ ssize_t ret;
+ int rc;
+
+ si = find_socket_info(s);
+ if (si == NULL) {
+ return libc_readv(s, vector, count);
+ }
+
+ tmp.iov_base = NULL;
+ tmp.iov_len = 0;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = &saddr.sa.s; /* optional address */
+ msg.msg_namelen = saddr.sa_socklen; /* size of address */
+ msg.msg_iov = discard_const_p(struct iovec, vector); /* scatter/gather array */
+ msg.msg_iovlen = count; /* # elements in msg_iov */
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ rc = swrap_recvmsg_before(s, si, &msg, &tmp);
+ if (rc < 0) {
+ if (rc == -ENOTSOCK) {
+ return libc_readv(s, vector, count);
+ }
+ return -1;
+ }
+
+ ret = libc_readv(s, msg.msg_iov, msg.msg_iovlen);
+
+ rc = swrap_recvmsg_after(s, si, &msg, NULL, 0, ret);
+ if (rc != 0) {
+ return rc;
+ }
+
+ return ret;
+}
+
+ssize_t readv(int s, const struct iovec *vector, int count)
+{
+ return swrap_readv(s, vector, count);
+}
+
+/****************************************************************************
+ * WRITEV
+ ***************************************************************************/
+
+static ssize_t swrap_writev(int s, const struct iovec *vector, int count)
+{
+ struct msghdr msg;
+ struct iovec tmp;
+ struct sockaddr_un un_addr;
+ ssize_t ret;
+ int rc;
+ struct socket_info *si = find_socket_info(s);
+
+ if (!si) {
+ return libc_writev(s, vector, count);
+ }
+
+ tmp.iov_base = NULL;
+ tmp.iov_len = 0;
+
+ ZERO_STRUCT(msg);
+ msg.msg_name = NULL; /* optional address */
+ msg.msg_namelen = 0; /* size of address */
+ msg.msg_iov = discard_const_p(struct iovec, vector); /* scatter/gather array */
+ msg.msg_iovlen = count; /* # elements in msg_iov */
+#if HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ msg.msg_control = NULL; /* ancillary data, see below */
+ msg.msg_controllen = 0; /* ancillary data buffer len */
+ msg.msg_flags = 0; /* flags on received message */
+#endif
+
+ rc = swrap_sendmsg_before(s, si, &msg, &tmp, &un_addr, NULL, NULL, NULL);
+ if (rc < 0) {
+ if (rc == -ENOTSOCK) {
+ return libc_readv(s, vector, count);
+ }
+ return -1;
+ }
+
+ ret = libc_writev(s, msg.msg_iov, msg.msg_iovlen);
+
+ swrap_sendmsg_after(s, si, &msg, NULL, ret);
+
+ return ret;
+}
+
+ssize_t writev(int s, const struct iovec *vector, int count)
+{
+ return swrap_writev(s, vector, count);
+}
+
+/****************************
+ * CLOSE
+ ***************************/
+
+static int swrap_close(int fd)
+{
+ struct socket_info *si = find_socket_info(fd);
+ struct socket_info_fd *fi;
+ int ret;
+
+ if (!si) {
+ return libc_close(fd);
+ }
+
+ for (fi = si->fds; fi; fi = fi->next) {
+ if (fi->fd == fd) {
+ SWRAP_DLIST_REMOVE(si->fds, fi);
+ free(fi);
+ break;
+ }
+ }
+
+ if (si->fds) {
+ /* there are still references left */
+ return libc_close(fd);
+ }
+
+ SWRAP_DLIST_REMOVE(sockets, si);
+
+ if (si->myname.sa_socklen > 0 && si->peername.sa_socklen > 0) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_CLOSE_SEND, NULL, 0);
+ }
+
+ ret = libc_close(fd);
+
+ if (si->myname.sa_socklen > 0 && si->peername.sa_socklen > 0) {
+ swrap_pcap_dump_packet(si, NULL, SWRAP_CLOSE_RECV, NULL, 0);
+ swrap_pcap_dump_packet(si, NULL, SWRAP_CLOSE_ACK, NULL, 0);
+ }
+
+ if (si->un_addr.sun_path[0] != '\0') {
+ unlink(si->un_addr.sun_path);
+ }
+ free(si);
+
+ return ret;
+}
+
+int close(int fd)
+{
+ return swrap_close(fd);
+}
+
+/****************************
+ * DUP
+ ***************************/
+
+static int swrap_dup(int fd)
+{
+ struct socket_info *si;
+ struct socket_info_fd *fi;
+
+ si = find_socket_info(fd);
+
+ if (!si) {
+ return libc_dup(fd);
+ }
+
+ fi = (struct socket_info_fd *)calloc(1, sizeof(struct socket_info_fd));
+ if (fi == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ fi->fd = libc_dup(fd);
+ if (fi->fd == -1) {
+ int saved_errno = errno;
+ free(fi);
+ errno = saved_errno;
+ return -1;
+ }
+
+ /* Make sure we don't have an entry for the fd */
+ swrap_remove_stale(fi->fd);
+
+ SWRAP_DLIST_ADD(si->fds, fi);
+ return fi->fd;
+}
+
+int dup(int fd)
+{
+ return swrap_dup(fd);
+}
+
+/****************************
+ * DUP2
+ ***************************/
+
+static int swrap_dup2(int fd, int newfd)
+{
+ struct socket_info *si;
+ struct socket_info_fd *fi;
+
+ si = find_socket_info(fd);
+
+ if (!si) {
+ return libc_dup2(fd, newfd);
+ }
+
+ if (find_socket_info(newfd)) {
+ /* dup2() does an implicit close of newfd, which we
+ * need to emulate */
+ swrap_close(newfd);
+ }
+
+ fi = (struct socket_info_fd *)calloc(1, sizeof(struct socket_info_fd));
+ if (fi == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ fi->fd = libc_dup2(fd, newfd);
+ if (fi->fd == -1) {
+ int saved_errno = errno;
+ free(fi);
+ errno = saved_errno;
+ return -1;
+ }
+
+ /* Make sure we don't have an entry for the fd */
+ swrap_remove_stale(fi->fd);
+
+ SWRAP_DLIST_ADD(si->fds, fi);
+ return fi->fd;
+}
+
+int dup2(int fd, int newfd)
+{
+ return swrap_dup2(fd, newfd);
+}
+
+/****************************
+ * FCNTL
+ ***************************/
+
+static int swrap_vfcntl(int fd, int cmd, va_list va)
+{
+ struct socket_info_fd *fi;
+ struct socket_info *si;
+ int rc;
+
+ si = find_socket_info(fd);
+ if (si == NULL) {
+ rc = libc_vfcntl(fd, cmd, va);
+
+ return rc;
+ }
+
+ switch (cmd) {
+ case F_DUPFD:
+ fi = (struct socket_info_fd *)calloc(1, sizeof(struct socket_info_fd));
+ if (fi == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ fi->fd = libc_vfcntl(fd, cmd, va);
+ if (fi->fd == -1) {
+ int saved_errno = errno;
+ free(fi);
+ errno = saved_errno;
+ return -1;
+ }
+
+ /* Make sure we don't have an entry for the fd */
+ swrap_remove_stale(fi->fd);
+
+ SWRAP_DLIST_ADD(si->fds, fi);
+
+ rc = fi->fd;
+ break;
+ default:
+ rc = libc_vfcntl(fd, cmd, va);
+ break;
+ }
+
+ return rc;
+}
+
+int fcntl(int fd, int cmd, ...)
+{
+ va_list va;
+ int rc;
+
+ va_start(va, cmd);
+
+ rc = swrap_vfcntl(fd, cmd, va);
+
+ va_end(va);
+
+ return rc;
+}
+
+/****************************
+ * EVENTFD
+ ***************************/
+
+#ifdef HAVE_EVENTFD
+static int swrap_eventfd(int count, int flags)
+{
+ int fd;
+
+ fd = libc_eventfd(count, flags);
+ if (fd != -1) {
+ swrap_remove_stale(fd);
+ }
+
+ return fd;
+}
+
+#ifdef HAVE_EVENTFD_UNSIGNED_INT
+int eventfd(unsigned int count, int flags)
+#else
+int eventfd(int count, int flags)
+#endif
+{
+ return swrap_eventfd(count, flags);
+}
+#endif
+
+#ifdef HAVE_PLEDGE
+int pledge(const char *promises, const char *paths[])
+{
+ (void)promises; /* unused */
+ (void)paths; /* unused */
+
+ return 0;
+}
+#endif /* HAVE_PLEDGE */
+
+/****************************
+ * DESTRUCTOR
+ ***************************/
+
+/*
+ * This function is called when the library is unloaded and makes sure that
+ * sockets get closed and the unix file for the socket are unlinked.
+ */
+void swrap_destructor(void)
+{
+ struct socket_info *s = sockets;
+
+ while (s != NULL) {
+ struct socket_info_fd *f = s->fds;
+ if (f != NULL) {
+ swrap_close(f->fd);
+ }
+ s = sockets;
+ }
+
+ if (swrap.libc_handle != NULL) {
+ dlclose(swrap.libc_handle);
+ }
+ if (swrap.libsocket_handle) {
+ dlclose(swrap.libsocket_handle);
+ }
+}
diff --git a/tests/deckard/contrib/libswrap/tests/CMakeLists.txt b/tests/deckard/contrib/libswrap/tests/CMakeLists.txt
new file mode 100644
index 0000000..aecf6b8
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/CMakeLists.txt
@@ -0,0 +1,57 @@
+project(tests C)
+
+include_directories(
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/src
+ ${CMOCKA_INCLUDE_DIR}
+)
+
+set(TORTURE_LIBRARY torture)
+
+# RFC862 echo server
+add_executable(echo_srv echo_srv.c)
+target_link_libraries(echo_srv ${SWRAP_REQUIRED_LIBRARIES})
+
+add_library(${TORTURE_LIBRARY} STATIC torture.c)
+target_link_libraries(${TORTURE_LIBRARY}
+ ${CMOCKA_LIBRARY}
+ ${SWRAP_REQUIRED_LIBRARIES})
+
+set(SWRAP_TESTS
+ test_ioctl
+ test_tcp_listen
+ test_echo_tcp_socket
+ test_echo_tcp_connect
+ test_echo_tcp_bind
+ test_echo_tcp_socket_options
+ test_echo_tcp_sendmsg_recvmsg
+ test_echo_tcp_write_read
+ test_echo_tcp_writev_readv
+ test_echo_tcp_get_peer_sock_name
+ test_echo_udp_sendto_recvfrom
+ test_echo_udp_send_recv
+ test_echo_udp_sendmsg_recvmsg
+ test_swrap_unit)
+
+if (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
+ set(SWRAP_TESTS ${SWRAP_TESTS} test_sendmsg_recvmsg_fd)
+endif (HAVE_STRUCT_MSGHDR_MSG_CONTROL)
+
+foreach(_SWRAP_TEST ${SWRAP_TESTS})
+ add_cmocka_test(${_SWRAP_TEST} ${_SWRAP_TEST}.c ${TORTURE_LIBRARY})
+
+ if (OSX)
+ set_property(
+ TEST
+ ${_SWRAP_TEST}
+ PROPERTY
+ ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${SOCKET_WRAPPER_LOCATION})
+ else ()
+ set_property(
+ TEST
+ ${_SWRAP_TEST}
+ PROPERTY
+ ENVIRONMENT LD_PRELOAD=${SOCKET_WRAPPER_LOCATION})
+ endif()
+endforeach()
diff --git a/tests/deckard/contrib/libswrap/tests/README b/tests/deckard/contrib/libswrap/tests/README
new file mode 100644
index 0000000..26bf1fb
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/README
@@ -0,0 +1,9 @@
+In this directory you can find all socket_wrapper tests. All tests can also be
+executed outside of the 'make test' environment and without socket_wrapper.
+
+This can be done with:
+
+TORTURE_SERVER_ADDRESS_IPV4="127.0.0.1" \
+TORTURE_SERVER_ADDRESS_IPV6="::1" \
+TORTURE_SERVER_PORT=7777 \
+./tests/test_echo_tcp_write_read
diff --git a/tests/deckard/contrib/libswrap/tests/echo_srv.c b/tests/deckard/contrib/libswrap/tests/echo_srv.c
new file mode 100644
index 0000000..5b784de
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/echo_srv.c
@@ -0,0 +1,925 @@
+#include "config.h"
+
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <resolv.h>
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <unistd.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#ifndef PIDFILE
+#define PIDFILE "echo_srv.pid"
+#endif /* PIDFILE */
+
+#define ECHO_SRV_IPV4 "127.0.0.10"
+/* socket wrapper IPv6 prefix fd00::5357:5fxx */
+#define ECHO_SRV_IPV6 "fd00::5357:5f0a"
+
+#define DFL_PORT 7
+#define BACKLOG 5
+
+#ifndef BUFSIZE
+#define BUFSIZE 0x400000
+#endif /* BUFSIZE */
+
+#ifndef discard_const
+#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
+#endif
+
+#ifndef discard_const_p
+#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
+#endif
+
+#ifndef ZERO_STRUCT
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
+#endif
+
+struct torture_address {
+ socklen_t sa_socklen;
+ union {
+ struct sockaddr s;
+ struct sockaddr_in in;
+#ifdef HAVE_IPV6
+ struct sockaddr_in6 in6;
+#endif
+ struct sockaddr_storage ss;
+ } sa;
+};
+
+struct echo_srv_opts {
+ int port;
+ int socktype;
+ bool daemon;
+ char *bind;
+ const char *pidfile;
+};
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+
+#if defined(IP_PKTINFO) || defined(IP_RECVDSTADDR) || defined(IPV6_PKTINFO)
+union pktinfo {
+#ifdef HAVE_STRUCT_IN6_PKTINFO
+ struct in6_pktinfo pkt6;
+#endif
+#ifdef HAVE_STRUCT_IN_PKTINFO
+ struct in_pktinfo pkt4;
+#elif defined(IP_RECVDSTADDR)
+ struct in_addr pkt4;
+#endif
+ char c;
+};
+
+#define HAVE_UNION_PKTINFO 1
+#endif /* IP_PKTINFO || IP_RECVDSTADDR || IPV6_PKTINFO */
+
+static const char *echo_server_address(int family)
+{
+ switch (family) {
+ case AF_INET: {
+ const char *ip4 = getenv("TORTURE_SERVER_ADDRESS_IPV4");
+
+ if (ip4 != NULL && ip4[0] != '\0') {
+ return ip4;
+ }
+
+ return ECHO_SRV_IPV4;
+ }
+ case AF_INET6: {
+ const char *ip6 = getenv("TORTURE_SERVER_ADDRESS_IPV6");
+
+ if (ip6 != NULL && ip6[0] != '\0') {
+ return ip6;
+ }
+
+ return ECHO_SRV_IPV6;
+ }
+ default:
+ return NULL;
+ }
+
+ return NULL;
+}
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL */
+
+static void _assert_return_code(int rc,
+ int err,
+ const char * const file,
+ const int line)
+{
+ if (rc < 0) {
+ fprintf(stderr, "Fatal error: %s\n", strerror(err));
+ fprintf(stderr, "%s:%d", file, line);
+
+ abort();
+ }
+}
+#define assert_return_code(rc, err) \
+ _assert_return_code(rc, err, __FILE__, __LINE__)
+
+
+static int pidfile(const char *path)
+{
+ int err;
+ int fd;
+ char pid_str[32] = { 0 };
+ ssize_t nwritten;
+ size_t len;
+
+ fd = open(path, O_RDONLY, 0644);
+ err = errno;
+ if (fd != -1) {
+ close(fd);
+ return EEXIST;
+ } else if (err != ENOENT) {
+ return err;
+ }
+
+ fd = open(path, O_CREAT | O_WRONLY | O_EXCL, 0644);
+ err = errno;
+ if (fd == -1) {
+ return err;
+ }
+
+ snprintf(pid_str, sizeof(pid_str) -1, "%u\n", (unsigned int) getpid());
+ len = strlen(pid_str);
+
+ nwritten = write(fd, pid_str, len);
+ close(fd);
+ if (nwritten != (ssize_t)len) {
+ return EIO;
+ }
+
+ return 0;
+}
+
+static int become_daemon(void)
+{
+ int ret;
+ pid_t child_pid;
+ int fd;
+ int i;
+
+ if (getppid() == 1) {
+ return 0;
+ }
+
+ child_pid = fork();
+ if (child_pid == -1) {
+ ret = errno;
+ perror("fork");
+ return ret;
+ } else if (child_pid > 0) {
+ exit(0);
+ }
+
+ /* If a working directory was defined, go there */
+#ifdef WORKING_DIR
+ chdir(WORKING_DIR);
+#endif
+
+ ret = setsid();
+ if (ret == -1) {
+ ret = errno;
+ perror("setsid");
+ return ret;
+ }
+
+ for (fd = getdtablesize(); fd >= 0; --fd) {
+ close(fd);
+ }
+
+ for (i = 0; i < 3; i++) {
+ fd = open("/dev/null", O_RDWR, 0);
+ if (fd < 0) {
+ fd = open("/dev/null", O_WRONLY, 0);
+ }
+ if (fd < 0) {
+ ret = errno;
+ perror("Can't open /dev/null");
+ return ret;
+ }
+ if (fd != i) {
+ perror("Didn't get correct fd");
+ close(fd);
+ return EINVAL;
+ }
+ }
+
+ umask(0177);
+ return 0;
+}
+
+static void set_sock_pktinfo(int sock, int family)
+{
+ int sockopt = 1;
+ int option = 0;
+ int proto = 0;
+ int rc;
+
+ switch(family) {
+ case AF_INET:
+ proto = IPPROTO_IP;
+#ifdef IP_PKTINFO
+ option = IP_PKTINFO;
+#elif IP_RECVDSTADDR
+ option = IP_RECVDSTADDR;
+#else
+ return;
+#endif /* IP_PKTINFO */
+ break;
+#ifdef HAVE_IPV6
+#ifdef IPV6_RECVPKTINFO
+ case AF_INET6:
+ proto = IPPROTO_IPV6;
+ option = IPV6_RECVPKTINFO;
+ break;
+#endif /* IPV6_RECVPKTINFO */
+#endif /* HAVE_IPV6 */
+ default:
+ return;
+ }
+
+ rc = setsockopt(sock, proto, option, &sockopt, sizeof(sockopt));
+ assert_return_code(rc, errno);
+}
+
+/* Returns 0 on success, errno on failure. If successful,
+ * sock is a ready to use socket */
+static int setup_srv(struct echo_srv_opts *opts, int *_sock)
+{
+ struct addrinfo hints;
+ struct addrinfo *res, *ri;
+ char svc[6];
+ int ret;
+ int sock;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = opts->socktype;
+ hints.ai_flags = AI_PASSIVE;
+
+ snprintf(svc, sizeof(svc), "%d", opts->port);
+
+ ret = getaddrinfo(opts->bind, svc, &hints, &res);
+ if (ret != 0) {
+ return errno;
+ }
+
+ for (ri = res; ri != NULL; ri = ri->ai_next) {
+ sock = socket(ri->ai_family, ri->ai_socktype,
+ ri->ai_protocol);
+ if (sock == -1) {
+ ret = errno;
+ freeaddrinfo(res);
+ perror("socket");
+ return ret;
+ }
+
+ if (ri->ai_socktype == SOCK_DGRAM) {
+ set_sock_pktinfo(sock, ri->ai_family);
+ }
+
+ ret = bind(sock, ri->ai_addr, ri->ai_addrlen);
+ if (ret == 0) {
+ break;
+ }
+
+ close(sock);
+ }
+ freeaddrinfo(res);
+
+ if (ri == NULL) {
+ fprintf(stderr, "Could not bind\n");
+ return EFAULT;
+ }
+
+ if (opts->socktype == SOCK_STREAM) {
+ ret = listen(sock, BACKLOG);
+ if (ret == -1) {
+ ret = errno;
+ close(sock);
+ perror("listen");
+ return ret;
+ }
+ }
+
+ *_sock = sock;
+ return 0;
+}
+
+static int socket_dup(int s)
+{
+ struct torture_address cli_addr1 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr1 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ struct torture_address cli_addr2 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr2 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ struct torture_address cli_addr3 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr3 = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ int s2;
+ int rc;
+
+ rc = getsockname(s, &srv_addr1.sa.s, &srv_addr1.sa_socklen);
+ if (rc == -1) {
+ perror("getsockname");
+ return -1;
+ }
+
+ rc = getpeername(s, &cli_addr1.sa.s, &cli_addr1.sa_socklen);
+ if (rc == -1) {
+ perror("getpeername");
+ return -1;
+ }
+
+ if (cli_addr1.sa.ss.ss_family != srv_addr1.sa.ss.ss_family) {
+ perror("client/server family mismatch");
+ return -1;
+ }
+
+ /* Test dup */
+ s2 = dup(s);
+ if (s2 == -1) {
+ perror("dup");
+ return -1;
+ }
+ close(s);
+
+ rc = getsockname(s2, &srv_addr2.sa.s, &srv_addr2.sa_socklen);
+ if (rc == -1) {
+ perror("getsockname");
+ close(s2);
+ return -1;
+ }
+
+ rc = getpeername(s2, &cli_addr2.sa.s, &cli_addr2.sa_socklen);
+ if (rc == -1) {
+ perror("getpeername");
+ close(s2);
+ return -1;
+ }
+
+ if (cli_addr1.sa_socklen != cli_addr2.sa_socklen ||
+ srv_addr1.sa_socklen != srv_addr2.sa_socklen) {
+ perror("length mismatch");
+ close(s2);
+ return -1;
+ }
+
+ switch(cli_addr1.sa.ss.ss_family) {
+ case AF_INET: {
+ rc = memcmp(&cli_addr1.sa.in, &cli_addr2.sa.in, sizeof(struct sockaddr_in));
+ if (rc != 0) {
+ perror("client mismatch");
+ }
+
+ rc = memcmp(&srv_addr1.sa.in, &srv_addr2.sa.in, sizeof(struct sockaddr_in));
+ if (rc != 0) {
+ perror("server mismatch");
+ }
+ break;
+ }
+ case AF_INET6: {
+ rc = memcmp(&cli_addr1.sa.in6, &cli_addr2.sa.in6, sizeof(struct sockaddr_in6));
+ if (rc != 0) {
+ perror("client mismatch");
+ }
+
+ rc = memcmp(&srv_addr1.sa.in6, &srv_addr2.sa.in6, sizeof(struct sockaddr_in6));
+ if (rc != 0) {
+ perror("server mismatch");
+ }
+ break;
+ }
+ default:
+ perror("family mismatch");
+ close(s2);
+ return -1;
+ }
+
+ /* Test dup2 */
+ s = dup2(s2, s);
+ close(s2);
+ if (s == -1) {
+ perror("dup");
+ return -1;
+ }
+
+ rc = getsockname(s, &srv_addr3.sa.s, &srv_addr3.sa_socklen);
+ if (rc == -1) {
+ perror("getsockname");
+ close(s);
+ return -1;
+ }
+
+ rc = getpeername(s, &cli_addr3.sa.s, &cli_addr3.sa_socklen);
+ if (rc == -1) {
+ perror("getpeername");
+ close(s);
+ return -1;
+ }
+
+ if (cli_addr2.sa_socklen != cli_addr3.sa_socklen ||
+ srv_addr2.sa_socklen != srv_addr3.sa_socklen) {
+ perror("length mismatch");
+ close(s);
+ return -1;
+ }
+
+ switch(cli_addr2.sa.ss.ss_family) {
+ case AF_INET: {
+ rc = memcmp(&cli_addr1.sa.in, &cli_addr2.sa.in, sizeof(struct sockaddr_in));
+ if (rc != 0) {
+ perror("client mismatch");
+ }
+
+ rc = memcmp(&srv_addr1.sa.in, &srv_addr2.sa.in, sizeof(struct sockaddr_in));
+ if (rc != 0) {
+ perror("server mismatch");
+ }
+ break;
+ }
+ case AF_INET6: {
+ rc = memcmp(&cli_addr1.sa.in6, &cli_addr2.sa.in6, sizeof(struct sockaddr_in6));
+ if (rc != 0) {
+ perror("client mismatch");
+ }
+
+ rc = memcmp(&srv_addr1.sa.in6, &srv_addr2.sa.in6, sizeof(struct sockaddr_in6));
+ if (rc != 0) {
+ perror("server mismatch");
+ }
+ break;
+ }
+ default:
+ perror("family mismatch");
+ close(s);
+ return -1;
+ }
+
+ return s;
+}
+
+static void echo_tcp(int sock)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ char buf[BUFSIZE];
+ ssize_t bret;
+
+ int client_sock = -1;
+ int s;
+
+ s = accept(sock, &addr.sa.s, &addr.sa_socklen);
+ if (s == -1) {
+ perror("accept");
+ goto done;
+ }
+
+ client_sock = socket_dup(s);
+ if (client_sock == -1) {
+ perror("socket_dup");
+ goto done;
+ }
+
+ /* Start ping pong */
+ while (1) {
+ bret = recv(client_sock, buf, BUFSIZE, 0);
+ if (bret == -1) {
+ perror("recv");
+ goto done;
+ } else if (bret == 0) {
+ break;
+ }
+
+ bret = send(client_sock, buf, bret, 0);
+ if (bret == -1) {
+ perror("send");
+ goto done;
+ }
+ }
+
+done:
+ if (client_sock != -1) {
+ close(client_sock);
+ }
+}
+
+static ssize_t echo_udp_recv_from_to(int sock,
+ void *buf, size_t buflen, int flags,
+ struct sockaddr *from, socklen_t *fromlen,
+ struct sockaddr *to, socklen_t *tolen)
+{
+ struct msghdr rmsg;
+ struct iovec riov;
+ ssize_t ret;
+
+#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) && defined(HAVE_UNION_PKTINFO)
+ size_t cmlen = CMSG_LEN(sizeof(union pktinfo));
+ char cmsg[cmlen];
+#else
+ (void)to; /* unused */
+ (void)tolen; /* unused */
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL */
+
+ riov.iov_base = buf;
+ riov.iov_len = buflen;
+
+ ZERO_STRUCT(rmsg);
+
+ rmsg.msg_name = from;
+ rmsg.msg_namelen = *fromlen;
+
+ rmsg.msg_iov = &riov;
+ rmsg.msg_iovlen = 1;
+
+#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) && defined(HAVE_UNION_PKTINFO)
+ memset(cmsg, 0, cmlen);
+
+ rmsg.msg_control = cmsg;
+ rmsg.msg_controllen = cmlen;
+#endif
+
+ ret = recvmsg(sock, &rmsg, flags);
+ if (ret < 0) {
+ return ret;
+ }
+ *fromlen = rmsg.msg_namelen;
+
+#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) && defined(HAVE_UNION_PKTINFO)
+ if (rmsg.msg_controllen > 0) {
+ struct cmsghdr *cmsgptr;
+
+ cmsgptr = CMSG_FIRSTHDR(&rmsg);
+ while (cmsgptr != NULL) {
+ const char *p;
+
+#if defined(IP_PKTINFO) && defined(HAVE_STRUCT_IN_PKTINFO)
+ if (cmsgptr->cmsg_level == IPPROTO_IP &&
+ cmsgptr->cmsg_type == IP_PKTINFO) {
+ char ip[INET_ADDRSTRLEN] = { 0 };
+ struct sockaddr_in *sinp = (struct sockaddr_in *)to;
+ struct in_pktinfo *pkt;
+ void *cmsg_cast_ptr = CMSG_DATA(cmsgptr);
+
+ pkt = (struct in_pktinfo *)cmsg_cast_ptr;
+
+ sinp->sin_family = AF_INET;
+ sinp->sin_addr = pkt->ipi_addr;
+ *tolen = sizeof(struct sockaddr_in);
+
+ p = inet_ntop(AF_INET, &sinp->sin_addr, ip, sizeof(ip));
+ if (p == 0) {
+ fprintf(stderr, "Failed to convert IP address");
+ abort();
+ }
+
+ if (strcmp(ip, echo_server_address(AF_INET)) != 0) {
+ fprintf(stderr, "Wrong IP received");
+ abort();
+ }
+ }
+#endif /* IP_PKTINFO */
+#ifdef IP_RECVDSTADDR
+ if (cmsgptr->cmsg_level == IPPROTO_IP &&
+ cmsgptr->cmsg_type == IP_RECVDSTADDR) {
+ char ip[INET_ADDRSTRLEN] = { 0 };
+ struct sockaddr_in *sinp =
+ (struct sockaddr_in *)(void *)to;
+ struct in_addr *addr;
+ void *cmsg_cast_ptr = CMSG_DATA(cmsgptr);
+
+ addr = (struct in_addr *)cmsg_cast_ptr;
+
+ sinp->sin_family = AF_INET;
+ sinp->sin_addr = *addr;
+ *tolen = sizeof(struct sockaddr_in);
+
+ p = inet_ntop(AF_INET, &sinp->sin_addr, ip, sizeof(ip));
+ if (p == 0) {
+ fprintf(stderr, "Failed to convert IP address");
+ abort();
+ }
+
+ if (strcmp(ip, echo_server_address(AF_INET)) != 0) {
+ fprintf(stderr, "Wrong IP received");
+ abort();
+ }
+ }
+#endif /* IP_RECVDSTADDR */
+#if defined(IPV6_PKTINFO) && defined(HAVE_STRUCT_IN6_PKTINFO)
+ if (cmsgptr->cmsg_level == IPPROTO_IPV6 &&
+ cmsgptr->cmsg_type == IPV6_PKTINFO) {
+ char ip[INET6_ADDRSTRLEN] = { 0 };
+ struct in6_pktinfo *pkt6;
+ struct sockaddr_in6 *sin6p =
+ (struct sockaddr_in6 *)(void *)to;
+ void *cmsg_cast_ptr = CMSG_DATA(cmsgptr);
+
+ pkt6 = (struct in6_pktinfo *)cmsg_cast_ptr;
+
+ sin6p->sin6_family = AF_INET6;
+ sin6p->sin6_addr = pkt6->ipi6_addr;
+
+ p = inet_ntop(AF_INET6, &sin6p->sin6_addr, ip, sizeof(ip));
+ if (p == 0) {
+ fprintf(stderr, "Failed to convert IP address");
+ abort();
+ }
+
+ if (strcmp(ip, echo_server_address(AF_INET6)) != 0) {
+ fprintf(stderr, "Wrong IP received");
+ abort();
+ }
+ }
+#endif /* IPV6_PKTINFO */
+ cmsgptr = CMSG_NXTHDR(&rmsg, cmsgptr);
+ }
+ } else {
+ fprintf(stderr, "Failed to receive pktinfo");
+ abort();
+ }
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL && HAVE_UNION_PKTINFO */
+
+ return ret;
+}
+
+static ssize_t echo_udp_send_to_from(int sock,
+ void *buf, size_t buflen, int flags,
+ struct sockaddr *to, socklen_t tolen,
+ struct sockaddr *from, socklen_t fromlen)
+{
+ struct msghdr msg;
+ struct iovec iov;
+ ssize_t ret;
+
+#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) && defined(HAVE_UNION_PKTINFO)
+ size_t clen = CMSG_SPACE(sizeof(union pktinfo));
+ char cbuf[clen];
+ struct cmsghdr *cmsgptr;
+#else
+ (void)from; /* unused */
+ (void)fromlen; /* unused */
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL && HAVE_UNION_PKTINFO */
+
+ iov.iov_base = buf;
+ iov.iov_len = buflen;
+
+ ZERO_STRUCT(msg);
+
+ msg.msg_name = to;
+ msg.msg_namelen = tolen;
+
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+
+#if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) && defined(HAVE_UNION_PKTINFO)
+ memset(cbuf, 0, clen);
+
+ msg.msg_control = cbuf;
+ msg.msg_controllen = clen;
+
+ cmsgptr = CMSG_FIRSTHDR(&msg);
+ msg.msg_controllen = 0;
+
+ switch (from->sa_family) {
+#if defined(IP_PKTINFO) || defined(IP_SENDSRCADDR)
+ case AF_INET: {
+ void *cmsg_cast_ptr = CMSG_DATA(cmsgptr);
+#ifdef IP_PKTINFO
+ struct in_pktinfo *p = (struct in_pktinfo *)cmsg_cast_ptr;
+#elif defined(IP_SENDSRCADDR)
+ struct in_addr *p = (struct in_addr *)cmsg_cast_ptr;
+#endif
+ const struct sockaddr_in *from4 =
+ (const struct sockaddr_in *)(const void *)from;
+
+ if (fromlen != sizeof(struct sockaddr_in)) {
+ break;
+ }
+
+ cmsgptr->cmsg_level = IPPROTO_IP;
+#ifdef IP_PKTINFO
+ cmsgptr->cmsg_type = IP_PKTINFO;
+ p->ipi_spec_dst = from4->sin_addr;
+#elif defined(IP_SENDSRCADDR)
+ cmsgptr->cmsg_type = IP_SENDSRCADDR;
+ *p = from4->sin_addr;
+#endif
+ cmsgptr->cmsg_len = CMSG_LEN(sizeof(*p));
+
+ msg.msg_controllen = CMSG_SPACE(sizeof(*p));
+
+ break;
+ }
+#endif /* IP_PKTINFO || IP_SENDSRCADDR */
+#ifdef IPV6_PKTINFO
+ case AF_INET6: {
+ void *cast_ptr = CMSG_DATA(cmsgptr);
+ struct in6_pktinfo *p = (struct in6_pktinfo *)cast_ptr;
+ const struct sockaddr_in6 *from6 =
+ (const struct sockaddr_in6 *)(const void *)from;
+
+ if (fromlen != sizeof(struct sockaddr_in6)) {
+ break;
+ }
+
+ cmsgptr->cmsg_level = IPPROTO_IPV6;
+ cmsgptr->cmsg_type = IPV6_PKTINFO;
+ cmsgptr->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
+
+ p->ipi6_addr = from6->sin6_addr;
+
+ msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
+
+ break;
+ }
+#endif /* IPV6_PKTINFO */
+ default:
+ break;
+ }
+#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL && HAVE_UNION_PKTINFO */
+
+ ret = sendmsg(sock, &msg, flags);
+
+ return ret;
+}
+
+static void echo_udp(int sock)
+{
+ struct torture_address saddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address daddr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ ssize_t bret;
+ char buf[BUFSIZE];
+
+ while (1) {
+ bret = echo_udp_recv_from_to(sock,
+ buf,
+ BUFSIZE,
+ 0,
+ &saddr.sa.s,
+ &saddr.sa_socklen,
+ &daddr.sa.s,
+ &daddr.sa_socklen);
+ if (bret == -1) {
+ perror("recvfrom");
+ continue;
+ }
+
+ bret = echo_udp_send_to_from(sock,
+ buf,
+ bret,
+ 0,
+ &saddr.sa.s,
+ saddr.sa_socklen,
+ &daddr.sa.s,
+ daddr.sa_socklen);
+ if (bret == -1) {
+ perror("sendto");
+ continue;
+ }
+ }
+}
+
+static void echo(int sock, struct echo_srv_opts *opts)
+{
+ switch (opts->socktype) {
+ case SOCK_STREAM:
+ echo_tcp(sock);
+ return;
+ case SOCK_DGRAM:
+ echo_udp(sock);
+ return;
+ default:
+ fprintf(stderr, "Unsupported protocol\n");
+ return;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ int ret;
+ int sock = -1;
+ struct echo_srv_opts opts;
+ int opt;
+ int optindex;
+ static struct option long_options[] = {
+ { discard_const_p(char, "tcp"), no_argument, 0, 't' },
+ { discard_const_p(char, "udp"), no_argument, 0, 'u' },
+ { discard_const_p(char, "bind-addr"), required_argument, 0, 'b' },
+ { discard_const_p(char, "port"), required_argument, 0, 'p' },
+ { discard_const_p(char, "daemon"), no_argument, 0, 'D' },
+ { discard_const_p(char, "pid"), required_argument, 0, 0 },
+ {0, 0, 0, 0 }
+ };
+
+ opts.port = DFL_PORT;
+ opts.socktype = SOCK_STREAM;
+ opts.bind = NULL;
+ opts.pidfile = PIDFILE;
+ opts.daemon = false;
+
+ while ((opt = getopt_long(argc, argv, "Dutp:b:",
+ long_options, &optindex)) != -1) {
+ switch (opt) {
+ case 0:
+ if (optindex == 5) {
+ opts.pidfile = optarg;
+ }
+ break;
+ case 'p':
+ opts.port = atoi(optarg);
+ break;
+ case 'b':
+ opts.bind = optarg;
+ break;
+ case 'u':
+ opts.socktype = SOCK_DGRAM;
+ break;
+ case 't':
+ opts.socktype = SOCK_STREAM;
+ break;
+ case 'D':
+ opts.daemon = true;
+ break;
+ default: /* '?' */
+ fprintf(stderr, "Usage: %s [-p port] [-u] [-t] [-b bind_addr] " \
+ "[-D] [--pid pidfile]\n"
+ "-t makes the server listen on TCP\n"
+ "-u makes the server listen on UDP\n"
+ "-D tells the server to become a deamon and " \
+ "write a PIDfile\n"
+ "The default port is 7, the default PIDfile is " \
+ "echo_srv.pid in the current directory\n",
+ argv[0]);
+ ret = 1;
+ goto done;
+ }
+ }
+
+ if (opts.daemon) {
+ ret = become_daemon();
+ if (ret != 0) {
+ fprintf(stderr, "Cannot become daemon: %s\n", strerror(ret));
+ goto done;
+ }
+ }
+
+ ret = setup_srv(&opts, &sock);
+ if (ret != 0) {
+ fprintf(stderr, "Cannot setup server: %s\n", strerror(ret));
+ goto done;
+ }
+
+ if (opts.daemon && opts.pidfile != NULL) {
+ ret = pidfile(opts.pidfile);
+ if (ret != 0) {
+ fprintf(stderr, "Cannot create pidfile %s: %s\n",
+ opts.pidfile, strerror(ret));
+ goto done;
+ }
+ }
+
+ echo(sock, &opts);
+ close(sock);
+
+ if (opts.daemon) {
+ unlink(opts.pidfile);
+ }
+
+ ret = 0;
+done:
+ return ret;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_bind.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_bind.c
new file mode 100644
index 0000000..cde7e3f
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_bind.c
@@ -0,0 +1,536 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_RPC_RPC_H
+#include <rpc/rpc.h>
+#endif
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+static int setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv6(state);
+
+ return 0;
+}
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_bind_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address addr_in = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address addr_un = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /*
+ * Test various cases with family AF_UNSPEC
+ */
+
+ /* UNSPEC, len == 1: EINVAL */
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_UNSPEC,
+ };
+ rc = bind(s, &addr.sa.s, 1);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EINVAL);
+
+ /* UNSPEC: EAFNOSUPPORT */
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_UNSPEC,
+ };
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr_in.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ /* FreeBSD uses EADDRNOTAVAIL here ... */
+ assert_true(errno == EAFNOSUPPORT || errno == EADDRNOTAVAIL);
+
+ /* special case: AF_UNSPEC with INADDR_ANY: success mapped to AF_INET */
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_UNSPEC,
+ };
+ assert_int_equal(addr_in.sa.in.sin_addr.s_addr, htonl(INADDR_ANY));
+
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s);
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /*
+ * Test various cases with family AF_UNIX
+ * all fail with EAFNOSUPPORT
+ */
+
+ addr.sa.ss = (struct sockaddr_storage) {
+ .ss_family = AF_UNIX,
+ };
+ rc = bind(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_UNIX,
+ };
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+
+ addr_un.sa.un = (struct sockaddr_un) {
+ .sun_family = AF_UNIX,
+ };
+ rc = bind(s, &addr_un.sa.s, addr_un.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+
+#ifdef HAVE_IPV6
+ /*
+ * Test with family AF_INET6 - fail
+ */
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET6,
+ };
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+#endif
+
+ /*
+ * Finally, success binding a new IPv4 address.
+ */
+ addr_in = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ },
+ };
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr_in.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_return_code(rc, errno);
+
+ addr_in = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ .sin_port = htons(torture_server_port()),
+ },
+ };
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr_in.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s);
+}
+
+#if 0 /* TODO */
+static void test_bind_ipv4_addr_in_use(void **state)
+{
+ struct sockaddr_in sin, sin2;
+ socklen_t slen = sizeof(struct sockaddr_in);
+ int rc;
+ int s, s2;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /*
+ * Try to bind to the same address as already bound by a
+ * different process.
+ */
+
+ /* Without specifying the port - success */
+
+ ZERO_STRUCT(sin);
+ sin.sin_family = AF_INET;
+ rc = inet_pton(AF_INET, torture_server_address(AF_INET), &sin.sin_addr);
+ assert_int_equal(rc, 1);
+ rc = bind(s, (struct sockaddr *)&sin, slen);
+ assert_return_code(rc, errno);
+
+ close(s);
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+#if 0
+ /* specify the same port - fail with EADDRINUSE. */
+
+ /* Not supported by socket_wrapper yet. ==> TODO! */
+
+ ZERO_STRUCT(sin);
+ sin.sin_family = AF_INET,
+ sin.sin_port = htons(torture_server_port());
+ rc = inet_pton(AF_INET, torture_server_address(AF_INET), &sin.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, (struct sockaddr *)&sin, slen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EADDRINUSE);
+#endif
+
+ /*
+ * Try double binding when the firs bind is with port == 0
+ */
+
+ ZERO_STRUCT(sin);
+ sin.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, (struct sockaddr *)&sin, slen);
+ assert_return_code(rc, errno);
+
+ /*
+ * Open a second socket locally and try to bind to the same address.
+ */
+
+ /* Succeeds with port == 0 */
+
+ s2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin2);
+ sin2.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin2.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s2, (struct sockaddr *)&sin2, slen);
+ assert_return_code(rc, errno);
+
+ close(s2);
+
+ /* second bind with port != 0 - succeeds */
+
+ s2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin2);
+ sin2.sin_family = AF_INET;
+ sin2.sin_port = htons(12345);
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin2.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s2, (struct sockaddr *)&sin2, slen);
+ assert_return_code(rc, errno);
+
+ close(s2);
+ close(s);
+
+ /*
+ * Try double binding when the first bind is with port != 0
+ */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin);
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons(12345);
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, (struct sockaddr *)&sin, slen);
+ assert_return_code(rc, errno);
+
+ /*
+ * Open a second socket locally and try to bind to the same address.
+ */
+
+ /* Succeeds with port == 0 */
+
+ s2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin2);
+ sin2.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin2.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s2, (struct sockaddr *)&sin2, slen);
+ assert_return_code(rc, errno);
+
+ close(s2);
+
+ /* with same port as above - fail with EADDRINUSE */
+
+ s2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin2);
+ sin2.sin_family = AF_INET;
+ sin2.sin_port = htons(12345);
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin2.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s2, (struct sockaddr *)&sin2, slen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EADDRINUSE);
+
+ close(s);
+}
+#endif
+
+#ifdef HAVE_BINDRESVPORT
+static void test_bindresvport_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ addr.sa.in.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bindresvport(s, &addr.sa.in);
+ assert_return_code(rc, errno);
+
+ addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ .sin_port = htons(torture_server_port()),
+ },
+ };
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s);
+}
+
+static void test_bindresvport_ipv4_null(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ rc = bindresvport(s, NULL);
+ assert_return_code(rc, errno);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+ rc = inet_pton(AF_INET, torture_server_address(AF_INET), &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s);
+}
+#endif /* HAVE_BINDRESVPORT */
+
+#ifdef HAVE_IPV6
+static void test_bind_on_ipv6_sock(void **state)
+{
+ struct torture_address addr_in = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address addr_un = {
+ .sa_socklen = sizeof(struct sockaddr_un),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ addr_un.sa.un.sun_family = AF_UNIX;
+ rc = bind(s, &addr_un.sa.s, addr_un.sa_socklen);
+ assert_int_equal(rc, -1);
+ /* FreeBSD uses EINVAL here... */
+ assert_true(errno == EAFNOSUPPORT || errno == EINVAL);
+
+ addr_in.sa.in.sin_family = AF_INET;
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EINVAL);
+
+ addr_in.sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ };
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr_in.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EINVAL);
+
+ addr_in = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ },
+ };
+
+ rc = bind(s, &addr_in.sa.s, addr_in.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+
+ close(s);
+}
+
+#ifdef HAVE_BINDRESVPORT
+static void test_bindresvport_on_ipv6_sock(void **state)
+{
+ struct sockaddr_in sin;
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ ZERO_STRUCT(sin);
+ sin.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &sin.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bindresvport(s, &sin);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EINVAL);
+
+ close(s);
+}
+
+static void test_bindresvport_on_ipv6_sock_null(void **state)
+{
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ rc = bindresvport(s, NULL);
+ assert_return_code(rc, errno);
+
+ close(s);
+}
+#endif /* HAVE_BINDRESVPORT */
+#endif /* HAVE_IPV6 */
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tcp_bind_tests[] = {
+ cmocka_unit_test_setup_teardown(test_bind_ipv4,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#if 0 /* TODO */
+ cmocka_unit_test_setup_teardown(test_bind_ipv4_addr_in_use,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#endif
+#ifdef HAVE_BINDRESVPORT
+ cmocka_unit_test_setup_teardown(test_bindresvport_ipv4,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_bindresvport_ipv4_null,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#endif /* HAVE_BINDRESVPORT */
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_bind_on_ipv6_sock,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+#ifdef HAVE_BINDRESVPORT
+ cmocka_unit_test_setup_teardown(test_bindresvport_on_ipv6_sock,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_bindresvport_on_ipv6_sock_null,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+#endif /* HAVE_BINDRESVPORT */
+#endif /* HAVE_IPV6 */
+ };
+
+ rc = cmocka_run_group_tests(tcp_bind_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_connect.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_connect.c
new file mode 100644
index 0000000..d2020c8
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_connect.c
@@ -0,0 +1,101 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_connect_broadcast_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+ addr.sa.in.sin_addr.s_addr = INADDR_BROADCAST;
+
+ /* We don't allow connect to broadcast addresses */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, -1);
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_connect_downgrade_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect should downgrade to IPv4 and allow the connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ close(s);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tcp_connect_tests[] = {
+ cmocka_unit_test(test_connect_broadcast_ipv4),
+#ifdef HAVE_IPV6
+ cmocka_unit_test(test_connect_downgrade_ipv6),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(tcp_connect_tests,
+ setup_echo_srv_tcp_ipv4,
+ teardown);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_get_peer_sock_name.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_get_peer_sock_name.c
new file mode 100644
index 0000000..ac369dd
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_get_peer_sock_name.c
@@ -0,0 +1,476 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+ setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "20", 1);
+
+ return 0;
+}
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void _assert_sockaddr_equal(struct torture_address *addr, const char *a,
+ const char * const file, const int line)
+{
+ char ip[INET6_ADDRSTRLEN] = { 0 };
+ const char *p;
+
+ p = inet_ntop(addr->sa.ss.ss_family,
+ addr->sa.ss.ss_family == AF_INET6 ?
+ (void *)&addr->sa.in6.sin6_addr :
+ (void *)&addr->sa.in.sin_addr,
+ ip,
+ sizeof(ip));
+ _assert_true(cast_ptr_to_largest_integral_type(p),
+ "inet_ntop: Failed to convert IP address", file, line);
+
+ _assert_string_equal(ip, a, file, line);
+}
+
+#define assert_sockaddr_equal(ss, a) \
+ _assert_sockaddr_equal(ss, a, __FILE__, __LINE__)
+
+static void _assert_sockaddr_port_equal(struct torture_address *addr,
+ const char *a,
+ uint16_t port,
+ const char * const file, const int line)
+{
+ uint16_t n_port;
+
+ _assert_sockaddr_equal(addr, a, file, line);
+
+ switch(addr->sa.ss.ss_family) {
+ case AF_INET:
+ n_port = addr->sa.in.sin_port;
+ break;
+ case AF_INET6:
+ n_port = addr->sa.in6.sin6_port;
+ break;
+ default:
+ return;
+ }
+
+ _assert_int_equal(ntohs(n_port), port, file, line);
+}
+
+#define assert_sockaddr_port_equal(ss, a, prt) \
+ _assert_sockaddr_port_equal(ss, a, prt, __FILE__, __LINE__)
+
+static void _assert_sockaddr_port_range_equal(struct torture_address *addr,
+ const char *a,
+ uint16_t min_port, uint16_t max_port,
+ const char * const file, const int line)
+{
+ uint16_t n_port;
+
+ _assert_sockaddr_equal(addr, a, file, line);
+
+ switch(addr->sa.ss.ss_family) {
+ case AF_INET:
+ n_port = addr->sa.in.sin_port;
+ break;
+ case AF_INET6:
+ n_port = addr->sa.in6.sin6_port;
+ break;
+ default:
+ return;
+ }
+
+ _assert_in_range(ntohs(n_port),
+ min_port,
+ max_port,
+ file,
+ line);
+}
+
+#define assert_sockaddr_port_range_equal(ss, a, min_prt, max_prt) \
+ _assert_sockaddr_port_range_equal(ss, a, min_prt, max_prt, __FILE__, __LINE__)
+
+static void test_connect_getsockname_getpeername(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address cli_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /* Bind client address to wildcard address */
+ addr.sa.in.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = bind(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_range_equal(&cli_addr, "127.0.0.20", 1024, 65535);
+
+ rc = getpeername(s, &addr.sa.s, &addr.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, ENOTCONN);
+
+ /* connect */
+ addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ .sin_port = htons(torture_server_port()),
+ },
+ };
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ cli_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_range_equal(&cli_addr, "127.0.0.20", 1024, 65535);
+
+ srv_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&srv_addr, "127.0.0.10", 7);
+
+ close(s);
+}
+
+static void test_connect_getsockname_getpeername_port(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address cli_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /* Bind client address to wildcard address */
+ addr.sa.in.sin_family = AF_INET;
+
+ rc = inet_pton(AF_INET, "127.0.0.20", &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+ addr.sa.in.sin_port = htons(12345);
+
+ rc = bind(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&cli_addr, "127.0.0.20", 12345);
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, ENOTCONN);
+
+ /* connect */
+ addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ .sa.in = (struct sockaddr_in) {
+ .sin_family = AF_INET,
+ .sin_port = htons(torture_server_port()),
+ },
+ };
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ cli_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&cli_addr, "127.0.0.20", 12345);
+
+ srv_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&srv_addr, "127.0.0.10", 7);
+
+ close(s);
+}
+
+static void test_connect_getsockname_getpeername_any(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address cli_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /* Bind client address to wildcard address */
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_addr.s_addr = htonl(INADDR_ANY);
+
+ rc = bind(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_range_equal(&cli_addr, "0.0.0.0", 1024, 65535);
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, ENOTCONN);
+
+ /* connect */
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ cli_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_range_equal(&cli_addr, "127.0.0.20", 1024, 65535);
+
+ srv_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&srv_addr, "127.0.0.10", 7);
+
+ close(s);
+}
+
+static void test_connect_getsockname_getpeername_any_port(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address cli_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /* Bind client address to wildcard address */
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_addr.s_addr = htonl(INADDR_ANY);
+ addr.sa.in.sin_port = htons(12345);
+
+ rc = bind(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&cli_addr, "0.0.0.0", 12345);
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, ENOTCONN);
+
+ /* connect */
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ cli_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&cli_addr, "127.0.0.20", 12345);
+
+ srv_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_sockaddr_port_equal(&srv_addr, "127.0.0.10", 7);
+
+ close(s);
+}
+
+static void test_connect_getsockname_getpeername_len(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct torture_address cli_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address srv_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ socklen_t tmp_len;
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s, errno);
+
+ /* connect */
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ /* Connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ /* Check with len=0 */
+ cli_addr.sa_socklen = 0;
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ srv_addr.sa_socklen = 0;
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ /* Check with len=too small */
+ cli_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_in) - 2,
+ };
+
+ tmp_len = cli_addr.sa_socklen;
+ rc = getsockname(s, &cli_addr.sa.s, &cli_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(tmp_len + 2, cli_addr.sa_socklen);
+
+ srv_addr = (struct torture_address) {
+ .sa_socklen = sizeof(struct sockaddr_in) - 2,
+ };
+
+ tmp_len = srv_addr.sa_socklen;
+ rc = getpeername(s, &srv_addr.sa.s, &srv_addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(tmp_len + 2, srv_addr.sa_socklen);
+
+ close(s);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest sock_name_tests[] = {
+ cmocka_unit_test_setup_teardown(test_connect_getsockname_getpeername,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_connect_getsockname_getpeername_port,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_connect_getsockname_getpeername_any,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_connect_getsockname_getpeername_any_port,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_connect_getsockname_getpeername_len,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ };
+
+ rc = cmocka_run_group_tests(sock_name_tests,
+ NULL,
+ NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_sendmsg_recvmsg.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_sendmsg_recvmsg.c
new file mode 100644
index 0000000..4f7629e
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_sendmsg_recvmsg.c
@@ -0,0 +1,273 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_sendmsg_recvmsg_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+
+ for (i = 0; i < 10; i++) {
+ struct torture_address reply_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = 0,
+ };
+ struct iovec s_iov;
+ struct iovec r_iov;
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ /* This should be ignored */
+ rc = inet_pton(AF_INET,
+ "127.0.0.1",
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ s_msg.msg_name = &addr.sa.s;
+ s_msg.msg_namelen = addr.sa_socklen;
+
+ s_iov.iov_base = send_buf;
+ s_iov.iov_len = sizeof(send_buf);
+
+ s_msg.msg_iov = &s_iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ r_msg.msg_name = &reply_addr.sa.s;
+ r_msg.msg_namelen = reply_addr.sa_socklen;
+
+ r_iov.iov_base = recv_buf;
+ r_iov.iov_len = sizeof(recv_buf);
+
+ r_msg.msg_iov = &r_iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, 0);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_sendmsg_recvmsg_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET6;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+
+ for (i = 0; i < 10; i++) {
+ struct torture_address reply_addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = 0,
+ };
+ struct iovec s_iov;
+ struct iovec r_iov;
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ s_iov.iov_base = send_buf;
+ s_iov.iov_len = sizeof(send_buf);
+
+ s_msg.msg_iov = &s_iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ r_msg.msg_name = &reply_addr.sa.s;
+ r_msg.msg_namelen = reply_addr.sa_socklen;
+
+ r_iov.iov_base = recv_buf;
+ r_iov.iov_len = sizeof(recv_buf);
+
+ r_msg.msg_iov = &r_iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, 0);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+#endif
+
+static void test_sendmsg_recvmsg_ipv4_null(void **state)
+{
+ struct torture_address send_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = 0,
+ };
+ struct iovec iov;
+ char payload[] = "PACKET";
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void)state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ send_addr.sa.in.sin_family = AF_INET;
+ send_addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &send_addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &send_addr.sa.s, send_addr.sa_socklen);
+
+ /* msg_name = NULL */
+
+ iov.iov_base = (void *)payload;
+ iov.iov_len = sizeof(payload);
+
+ s_msg.msg_iov = &iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ /* msg_name = NULL */
+
+ memset(payload, 0, sizeof(payload));
+
+ r_msg.msg_iov = &iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, 0);
+ assert_null(r_msg.msg_name);
+
+ close(s);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest sendmsg_tests[] = {
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4_null,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv6,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(sendmsg_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket.c
new file mode 100644
index 0000000..57b92de
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket.c
@@ -0,0 +1,69 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static void test_socket_getsockname(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ rc = getsockname(s, &addr.sa.s, &addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(addr.sa.in.sin_family, AF_INET);
+}
+
+#ifdef HAVE_IPV6
+static void test_socket_getsockname6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ rc = getsockname(s, &addr.sa.s, &addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(addr.sa.in6.sin6_family, AF_INET6);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest getsockname_tests[] = {
+ cmocka_unit_test(test_socket_getsockname),
+#ifdef HAVE_IPV6
+ cmocka_unit_test(test_socket_getsockname6),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(getsockname_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket_options.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket_options.c
new file mode 100644
index 0000000..dfa46fe
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_socket_options.c
@@ -0,0 +1,368 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#ifndef ZERO_STRUCT
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
+#endif
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv6(state);
+
+ return 0;
+}
+
+static int setup_ipv6(void **state)
+{
+ torture_setup_socket_dir(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_sockopt_sndbuf(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int obufsize = 0;
+ socklen_t olen = sizeof(obufsize);
+ int gbufsize = 0;
+ socklen_t glen = sizeof(gbufsize);
+ int sbufsize = 0;
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ rc = getsockopt(s, SOL_SOCKET, SO_SNDBUF, &obufsize, &olen);
+ assert_int_equal(rc, 0);
+
+ /* request 4k, on Linux the kernel doubles the value */
+ sbufsize = 4096;
+ rc = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &sbufsize, sizeof(sbufsize));
+ assert_int_equal(rc, 0);
+
+ rc = getsockopt(s, SOL_SOCKET, SO_SNDBUF, &gbufsize, &glen);
+ assert_int_equal(rc, 0);
+
+ assert_true(sbufsize == gbufsize || sbufsize == gbufsize/2);
+
+ close(s);
+}
+
+#ifndef SO_PROTOCOL
+# ifdef SO_PROTOTYPE /* The Solaris name */
+# define SO_PROTOCOL SO_PROTOTYPE
+# endif /* SO_PROTOTYPE */
+#endif /* SO_PROTOCOL */
+
+static void test_sockopt_so(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ socklen_t so_len;
+#ifdef SO_DOMAIN
+ int so_domain = -1;
+#endif /* SO_DOMAIN */
+#ifdef SO_PROTOCOL
+ int so_protocol = -1;
+ int so_type = -1;
+#endif /* SO_PROTOCOL */
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+#ifdef SO_DOMAIN
+ so_len = sizeof(so_domain);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_DOMAIN,
+ &so_domain,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_domain, AF_INET);
+ assert_int_equal(so_len, sizeof(int));
+#endif /* SO_DOMAIN */
+
+#ifdef SO_PROTOCOL
+ so_len = sizeof(so_protocol);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_PROTOCOL,
+ &so_protocol,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_protocol, IPPROTO_TCP);
+ assert_int_equal(so_len, sizeof(int));
+
+ so_len = sizeof(so_type);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_TYPE,
+ &so_type,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_type, SOCK_STREAM);
+ assert_int_equal(so_len, sizeof(int));
+#endif /* SO_PROTOCOL */
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_sockopt_so6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+#ifdef SO_DOMAIN
+ int so_domain = -1;
+#endif /* SO_DOMAIN */
+#ifdef SO_PROTOCOL
+ socklen_t so_len;
+ int so_protocol = -1;
+ int so_type = -1;
+#endif /* SO_PROTOCOL */
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in6.sin6_family,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+#ifdef SO_DOMAIN
+ so_len = sizeof(so_domain);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_DOMAIN,
+ &so_domain,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_domain, AF_INET6);
+ assert_int_equal(so_len, sizeof(int));
+#endif /* SO_DOMAIN */
+
+#ifdef SO_PROTOCOL
+ so_len = sizeof(so_protocol);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_PROTOCOL,
+ &so_protocol,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_protocol, IPPROTO_TCP);
+ assert_int_equal(so_len, sizeof(int));
+
+ so_len = sizeof(so_type);
+ rc = getsockopt(s,
+ SOL_SOCKET,
+ SO_TYPE,
+ &so_type,
+ &so_len);
+ assert_return_code(rc, errno);
+ assert_int_equal(so_type, SOCK_STREAM);
+ assert_int_equal(so_len, sizeof(int));
+#endif /* SO_PROTOCOL */
+
+ close(s);
+}
+
+static void test_bind_ipv6_only(void **state)
+{
+ struct addrinfo hints;
+ struct addrinfo *res, *ri;
+ char svc[] = "7777";
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ ZERO_STRUCT(hints);
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_PASSIVE;
+
+ rc = getaddrinfo(torture_server_address(AF_INET6), svc, &hints, &res);
+ assert_int_equal(rc, 0);
+
+ for (ri = res; ri != NULL; ri = ri->ai_next) {
+ int one = 1;
+
+ s = socket(ri->ai_family,
+ ri->ai_socktype,
+ ri->ai_protocol);
+ assert_int_not_equal(rc, -1);
+
+ rc = setsockopt(s,
+ IPPROTO_IPV6,
+ IPV6_V6ONLY,
+ (const void *)&one,
+ sizeof(one));
+ switch(ri->ai_family) {
+ case AF_INET:
+ assert_int_equal(rc, -1);
+
+ break;
+ case AF_INET6:
+ assert_int_equal(rc, 0);
+
+ rc = bind(s, ri->ai_addr, ri->ai_addrlen);
+ assert_int_equal(rc, 0);
+
+ break;
+ default:
+ break;
+ }
+
+ close(s);
+ }
+ freeaddrinfo(res);
+}
+#endif
+
+static void test_sockopt_tcp(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ int opt = -1;
+ socklen_t optlen = sizeof(int);
+ int rc;
+
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ rc = getsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, &optlen);
+ assert_return_code(rc, errno);
+ assert_int_equal(opt, 0);
+
+ opt = 1; /* Turn on TCP_NODELAY */
+ optlen = sizeof(int);
+ rc = setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, optlen);
+ assert_return_code(rc, errno);
+
+ opt = -1;
+ optlen = sizeof(int);
+ rc = getsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, &optlen);
+ assert_return_code(rc, errno);
+ assert_int_equal(opt, 1);
+
+ close(s);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest sockopt_tests[] = {
+ cmocka_unit_test_setup_teardown(test_sockopt_sndbuf,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_sockopt_so,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_sockopt_so6,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_bind_ipv6_only,
+ setup_ipv6,
+ teardown),
+#endif
+ cmocka_unit_test_setup_teardown(test_sockopt_tcp,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+ };
+
+ rc = cmocka_run_group_tests(sockopt_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_write_read.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_write_read.c
new file mode 100644
index 0000000..9129022
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_write_read.c
@@ -0,0 +1,156 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_write_read_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 0; i < 10; i++) {
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = write(s,
+ send_buf,
+ sizeof(send_buf));
+ assert_int_not_equal(ret, -1);
+
+ ret = read(s,
+ recv_buf,
+ sizeof(recv_buf));
+ assert_int_not_equal(ret, -1);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_write_read_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 0; i < 10; i++) {
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = write(s,
+ send_buf,
+ sizeof(send_buf));
+ assert_int_not_equal(ret, -1);
+
+ ret = read(s,
+ recv_buf,
+ sizeof(recv_buf));
+ assert_int_not_equal(ret, -1);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tcp_write_tests[] = {
+ cmocka_unit_test_setup_teardown(test_write_read_ipv4,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_write_read_ipv6,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(tcp_write_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_tcp_writev_readv.c b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_writev_readv.c
new file mode 100644
index 0000000..e011236
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_tcp_writev_readv.c
@@ -0,0 +1,189 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_tcp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_writev_readv_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(addr.sa.in.sin_family,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 1; i < 10; i++) {
+ char send_buf[10][64];
+ char recv_buf[10][64];
+ struct iovec iov_send[10];
+ struct iovec iov_recv[10];
+ int j;
+
+ for (j = 0; j < i; j++) {
+ memset(send_buf[j], 0, 64);
+ snprintf(send_buf[j], sizeof(send_buf[j]),
+ "packet.%d", j);
+
+ iov_send[j].iov_base = send_buf[j];
+ iov_send[j].iov_len = strlen(send_buf[j]);
+
+ iov_recv[j].iov_base = recv_buf[j];
+ iov_recv[j].iov_len = strlen(send_buf[j]);
+ }
+
+ ret = writev(s, iov_send, j);
+ assert_int_not_equal(ret, -1);
+
+ ret = readv(s, iov_recv, j);
+ assert_int_not_equal(ret, -1);
+
+ for (j = 0; j < i; j++) {
+ assert_int_equal(iov_send[j].iov_len,
+ iov_recv[j].iov_len);
+
+ assert_memory_equal(iov_send[j].iov_base,
+ iov_recv[j].iov_base,
+ iov_send[j].iov_len);
+ }
+ }
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_writev_readv_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 1; i < 10; i++) {
+ char send_buf[10][64];
+ char recv_buf[10][64];
+ struct iovec iov_send[10];
+ struct iovec iov_recv[10];
+ int j;
+
+ for (j = 0; j < i; j++) {
+ memset(send_buf[j], 0, 64);
+ snprintf(send_buf[j], sizeof(send_buf[j]),
+ "packet.%d", j);
+
+ iov_send[j].iov_base = send_buf[j];
+ iov_send[j].iov_len = strlen(send_buf[j]);
+
+ iov_recv[j].iov_base = recv_buf[j];
+ iov_recv[j].iov_len = strlen(send_buf[j]);
+ }
+
+ ret = writev(s, iov_send, j);
+ assert_int_not_equal(ret, -1);
+
+ ret = readv(s, iov_recv, j);
+ assert_int_not_equal(ret, -1);
+
+ for (j = 0; j < i; j++) {
+ assert_int_equal(iov_send[j].iov_len,
+ iov_recv[j].iov_len);
+
+ assert_memory_equal(iov_send[j].iov_base,
+ iov_recv[j].iov_base,
+ iov_send[j].iov_len);
+ }
+ }
+
+ close(s);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tcp_writev_tests[] = {
+ cmocka_unit_test_setup_teardown(test_writev_readv_ipv4,
+ setup_echo_srv_tcp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_writev_readv_ipv6,
+ setup_echo_srv_tcp_ipv6,
+ teardown),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(tcp_writev_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_udp_send_recv.c b/tests/deckard/contrib/libswrap/tests/test_echo_udp_send_recv.c
new file mode 100644
index 0000000..cf4e848
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_udp_send_recv.c
@@ -0,0 +1,160 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_udp_ipv4(void **state)
+{
+ torture_setup_echo_srv_udp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_udp_ipv6(void **state)
+{
+ torture_setup_echo_srv_udp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_send_recv_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 0; i < 10; i++) {
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = send(s,
+ send_buf,
+ sizeof(send_buf),
+ 0);
+ assert_int_not_equal(ret, -1);
+
+ ret = recv(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_send_recv_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_int_equal(rc, 0);
+
+ for (i = 0; i < 10; i++) {
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = send(s,
+ send_buf,
+ sizeof(send_buf),
+ 0);
+ assert_int_not_equal(ret, -1);
+
+ ret = recv(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest send_tests[] = {
+ cmocka_unit_test_setup_teardown(test_send_recv_ipv4,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_send_recv_ipv6,
+ setup_echo_srv_udp_ipv6,
+ teardown),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(send_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendmsg_recvmsg.c b/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendmsg_recvmsg.c
new file mode 100644
index 0000000..93450b7
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendmsg_recvmsg.c
@@ -0,0 +1,407 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_udp_ipv4(void **state)
+{
+ torture_setup_echo_srv_udp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_udp_ipv6(void **state)
+{
+ torture_setup_echo_srv_udp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_sendmsg_recvmsg_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ for (i = 0; i < 10; i++) {
+ char ip[INET_ADDRSTRLEN] = {0};
+ const char *a;
+ struct torture_address srv_in = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ struct msghdr s_msg;
+ struct msghdr r_msg;
+ struct iovec s_iov;
+ struct iovec r_iov;
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ZERO_STRUCT(s_msg);
+
+ s_msg.msg_name = &addr.sa.s;
+ s_msg.msg_namelen = addr.sa_socklen;
+
+ s_iov.iov_base = send_buf;
+ s_iov.iov_len = sizeof(send_buf);
+
+ s_msg.msg_iov = &s_iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ ZERO_STRUCT(r_msg);
+
+ r_msg.msg_name = &srv_in.sa.s;
+ r_msg.msg_namelen = srv_in.sa_socklen;
+
+ r_iov.iov_base = recv_buf;
+ r_iov.iov_len = sizeof(recv_buf);
+
+ r_msg.msg_iov = &r_iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, sizeof(struct sockaddr_in));
+
+ a = inet_ntop(AF_INET, &srv_in.sa.in.sin_addr, ip, sizeof(ip));
+ assert_non_null(a);
+ assert_string_equal(a, torture_server_address(AF_INET));
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_sendmsg_recvmsg_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ for (i = 0; i < 10; i++) {
+ char ip[INET6_ADDRSTRLEN] = {0};
+ const char *a;
+ struct torture_address srv_in6 = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ struct msghdr s_msg;
+ struct msghdr r_msg;
+ struct iovec s_iov;
+ struct iovec r_iov;
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ZERO_STRUCT(s_msg);
+
+ s_msg.msg_name = &addr.sa.s;
+ s_msg.msg_namelen = addr.sa_socklen;
+
+ s_iov.iov_base = send_buf;
+ s_iov.iov_len = sizeof(send_buf);
+
+ s_msg.msg_iov = &s_iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ ZERO_STRUCT(r_msg);
+ r_msg.msg_name = &srv_in6.sa.s;
+ r_msg.msg_namelen = srv_in6.sa_socklen;
+
+ r_iov.iov_base = recv_buf;
+ r_iov.iov_len = sizeof(recv_buf);
+
+ r_msg.msg_iov = &r_iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, sizeof(struct sockaddr_in6));
+
+ a = inet_ntop(AF_INET6, &srv_in6.sa.in6.sin6_addr, ip, sizeof(ip));
+ assert_non_null(a);
+ assert_string_equal(a, torture_server_address(AF_INET6));
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ close(s);
+}
+#endif
+
+static void test_sendmsg_recvmsg_ipv4_connected(void **state)
+{
+ struct torture_address send_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct torture_address r_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = 0,
+ };
+ struct iovec iov;
+ char ip[INET_ADDRSTRLEN] = {0};
+ char payload[] = "PACKET";
+ const char *a;
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void)state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ send_addr.sa.in.sin_family = AF_INET;
+ send_addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &send_addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &send_addr.sa.s, send_addr.sa_socklen);
+
+ iov.iov_base = (void *)payload;
+ iov.iov_len = sizeof(payload);
+
+ /* msg_name is NULL */
+
+ s_msg.msg_iov = &iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ r_msg.msg_name = &r_addr.sa.ss;
+ r_msg.msg_namelen = r_addr.sa_socklen;
+
+ memset(payload, 0, sizeof(payload));
+
+ r_msg.msg_iov = &iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, sizeof(struct sockaddr_in));
+
+ a = inet_ntop(AF_INET, &r_addr.sa.in.sin_addr, ip, sizeof(ip));
+ assert_non_null(a);
+ assert_string_equal(a, torture_server_address(AF_INET));
+
+ close(s);
+}
+
+static void test_sendmsg_recvmsg_ipv4_connected_null(void **state)
+{
+ struct torture_address send_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = 0,
+ };
+ struct iovec iov;
+ char payload[] = "PACKET";
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void)state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ send_addr.sa.in.sin_family = AF_INET;
+ send_addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &send_addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &send_addr.sa.s, send_addr.sa_socklen);
+
+ /* msg_name = NULL */
+
+ iov.iov_base = (void *)payload;
+ iov.iov_len = sizeof(payload);
+
+ s_msg.msg_iov = &iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ /* msg_name = NULL */
+
+ memset(payload, 0, sizeof(payload));
+
+ r_msg.msg_iov = &iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ assert_int_equal(r_msg.msg_namelen, 0);
+ assert_null(r_msg.msg_name);
+
+ close(s);
+}
+
+static void test_sendmsg_recvmsg_ipv4_connected_namelen(void **state)
+{
+ struct torture_address send_addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ struct msghdr s_msg = {
+ .msg_namelen = 0,
+ };
+ struct msghdr r_msg = {
+ .msg_namelen = sizeof(struct sockaddr_storage),
+ };
+ struct iovec iov;
+ char payload[] = "PACKET";
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void)state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ send_addr.sa.in.sin_family = AF_INET;
+ send_addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &send_addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ rc = connect(s, &send_addr.sa.s, send_addr.sa_socklen);
+
+ /* msg_name = NULL */
+
+ iov.iov_base = (void *)payload;
+ iov.iov_len = sizeof(payload);
+
+ s_msg.msg_iov = &iov;
+ s_msg.msg_iovlen = 1;
+
+ ret = sendmsg(s, &s_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ /* msg_name = NULL */
+
+ memset(payload, 0, sizeof(payload));
+
+ r_msg.msg_iov = &iov;
+ r_msg.msg_iovlen = 1;
+
+ ret = recvmsg(s, &r_msg, 0);
+ assert_int_not_equal(ret, -1);
+
+ close(s);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest sendmsg_tests[] = {
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv6,
+ setup_echo_srv_udp_ipv6,
+ teardown),
+#endif
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4_connected,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4_connected_null,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_sendmsg_recvmsg_ipv4_connected_namelen,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+ };
+
+ rc = cmocka_run_group_tests(sendmsg_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendto_recvfrom.c b/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendto_recvfrom.c
new file mode 100644
index 0000000..bb22371
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_echo_udp_sendto_recvfrom.c
@@ -0,0 +1,316 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+static int setup_echo_srv_udp_ipv4(void **state)
+{
+ torture_setup_echo_srv_udp_ipv4(state);
+
+ return 0;
+}
+
+#ifdef HAVE_IPV6
+static int setup_echo_srv_udp_ipv6(void **state)
+{
+ torture_setup_echo_srv_udp_ipv6(state);
+
+ return 0;
+}
+#endif
+
+static int teardown(void **state)
+{
+ torture_teardown_echo_srv(state);
+
+ return 0;
+}
+
+static void test_sendto_recvfrom_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ for (i = 0; i < 10; i++) {
+ char ip[INET_ADDRSTRLEN] = {0};
+ const char *a;
+ struct torture_address srv_in = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ &addr.sa.s,
+ addr.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ &srv_in.sa.s,
+ &srv_in.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ a = inet_ntop(AF_INET, &srv_in.sa.in.sin_addr, ip, sizeof(ip));
+ assert_non_null(a);
+ assert_string_equal(a, torture_server_address(AF_INET));
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ &addr.sa.s,
+ addr.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ NULL,
+ NULL);
+ assert_int_not_equal(ret, -1);
+
+ close(s);
+}
+
+#ifdef HAVE_IPV6
+static void test_sendto_recvfrom_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+ char send_buf[64] = {0};
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int i;
+ int s;
+
+ (void) state; /* unused */
+
+ s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ addr.sa.in6.sin6_family = AF_INET6;
+ addr.sa.in6.sin6_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET6,
+ torture_server_address(AF_INET6),
+ &addr.sa.in6.sin6_addr);
+ assert_int_equal(rc, 1);
+
+ for (i = 0; i < 10; i++) {
+ char ip[INET6_ADDRSTRLEN] = {0};
+ const char *a;
+ struct torture_address srv_in6 = {
+ .sa_socklen = sizeof(struct sockaddr_in6),
+ };
+
+ snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ &addr.sa.s,
+ addr.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ &srv_in6.sa.s,
+ &srv_in6.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ a = inet_ntop(AF_INET6, &srv_in6.sa.in6.sin6_addr, ip, sizeof(ip));
+ assert_non_null(a);
+ assert_string_equal(a, torture_server_address(AF_INET6));
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+ }
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ &addr.sa.s,
+ addr.sa_socklen);
+ assert_int_not_equal(ret, -1);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ NULL,
+ NULL);
+ assert_int_not_equal(ret, -1);
+
+ close(s);
+}
+#endif
+
+static void test_connect_sendto_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ char send_buf[] = "packet.0";
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ /* Now, connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ &addr.sa.s,
+ addr.sa_socklen);
+ assert_return_code(ret, errno);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ NULL,
+ 0);
+ assert_return_code(ret, errno);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+
+ close(s);
+}
+
+static void test_connect_sendto_null_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_in),
+ };
+ char send_buf[] = "packet.0";
+ char recv_buf[64] = {0};
+ ssize_t ret;
+ int rc;
+ int s;
+
+ (void) state; /* unused */
+
+ addr.sa.in.sin_family = AF_INET;
+ addr.sa.in.sin_port = htons(torture_server_port());
+
+ rc = inet_pton(AF_INET,
+ torture_server_address(AF_INET),
+ &addr.sa.in.sin_addr);
+ assert_int_equal(rc, 1);
+
+ s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ assert_int_not_equal(s, -1);
+
+ /* Now, connect */
+ rc = connect(s, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ ret = sendto(s,
+ send_buf,
+ sizeof(send_buf),
+ 0,
+ NULL,
+ 0);
+ assert_return_code(ret, errno);
+
+ ret = recvfrom(s,
+ recv_buf,
+ sizeof(recv_buf),
+ 0,
+ NULL,
+ 0);
+ assert_return_code(ret, errno);
+
+ assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+
+ close(s);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest sendto_tests[] = {
+ cmocka_unit_test_setup_teardown(test_sendto_recvfrom_ipv4,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+#ifdef HAVE_IPV6
+ cmocka_unit_test_setup_teardown(test_sendto_recvfrom_ipv6,
+ setup_echo_srv_udp_ipv6,
+ teardown),
+#endif
+ cmocka_unit_test_setup_teardown(test_connect_sendto_ipv4,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+ cmocka_unit_test_setup_teardown(test_connect_sendto_null_ipv4,
+ setup_echo_srv_udp_ipv4,
+ teardown),
+ };
+
+ rc = cmocka_run_group_tests(sendto_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_ioctl.c b/tests/deckard/contrib/libswrap/tests/test_ioctl.c
new file mode 100644
index 0000000..aebff91
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_ioctl.c
@@ -0,0 +1,110 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+#include <unistd.h>
+
+static int setup(void **state)
+{
+ char test_tmpdir[256];
+ const char *p;
+
+ (void) state; /* unused */
+
+ snprintf(test_tmpdir, sizeof(test_tmpdir), "/tmp/test_socket_wrapper_XXXXXX");
+
+ p = mkdtemp(test_tmpdir);
+ assert_non_null(p);
+
+ *state = strdup(p);
+ setenv("SOCKET_WRAPPER_DIR", p, 1);
+ setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "11", 1);
+
+ return 0;
+}
+
+static int teardown(void **state)
+{
+ char remove_cmd[PATH_MAX] = {0};
+ char *s = (char *)*state;
+ int rc;
+
+ if (s == NULL) {
+ return -1;
+ }
+
+ snprintf(remove_cmd, sizeof(remove_cmd), "rm -rf %s", s);
+ free(s);
+
+ rc = system(remove_cmd);
+ if (rc < 0) {
+ fprintf(stderr, "%s failed: %s", remove_cmd, strerror(errno));
+ }
+
+ return rc;
+}
+
+static void test_swrap_socket(void **state)
+{
+ int rc;
+
+ (void) state; /* unused */
+
+ rc = socket(1337, 1337, 0);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EAFNOSUPPORT);
+
+ rc = socket(AF_INET, 1337, 0);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EPROTONOSUPPORT);
+
+ rc = socket(AF_INET, SOCK_DGRAM, 10);
+ assert_int_equal(rc, -1);
+ assert_int_equal(errno, EPROTONOSUPPORT);
+}
+
+static void test_swrap_ioctl_sock(void **state)
+{
+ int fd;
+#ifdef SIOCGPGRP
+ int rc;
+ int grp = -127;
+#endif
+
+ (void) state; /* unused */
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ assert_int_not_equal(fd, -1);
+
+#ifdef SIOCGPGRP
+ rc = ioctl(fd, SIOCGPGRP, &grp);
+ assert_int_equal(rc, 0);
+
+ assert_int_not_equal(grp, -127);
+#endif
+
+ close(fd);
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest ioctl_tests[] = {
+ cmocka_unit_test_setup_teardown(test_swrap_socket, setup, teardown),
+ cmocka_unit_test_setup_teardown(test_swrap_ioctl_sock, setup, teardown),
+ };
+
+ rc = cmocka_run_group_tests(ioctl_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_sendmsg_recvmsg_fd.c b/tests/deckard/contrib/libswrap/tests/test_sendmsg_recvmsg_fd.c
new file mode 100644
index 0000000..30c9861
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_sendmsg_recvmsg_fd.c
@@ -0,0 +1,116 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+
+static void test_sendmsg_recvmsg_fd(void **state)
+{
+ int sv[2];
+ int child_fd, parent_fd;
+ int rc;
+ pid_t pid;
+
+ (void) state; /* unused */
+
+ rc = socketpair(AF_LOCAL, SOCK_STREAM, 0, sv);
+ assert_int_not_equal(rc, -1);
+
+ parent_fd = sv[0];
+ child_fd = sv[1];
+
+ pid = fork();
+ assert_int_not_equal(pid, -1);
+
+ if (pid == 0) {
+ /* Child */
+ struct msghdr child_msg;
+ char cmsgbuf[CMSG_SPACE(sizeof(int))];
+ struct cmsghdr *cmsg;
+ int rcv_fd;
+ char buf[8];
+ int i;
+
+ memset(&child_msg, 0, sizeof(child_msg));
+ child_msg.msg_control = cmsgbuf;
+ child_msg.msg_controllen = sizeof(cmsgbuf);
+
+ do {
+ errno = 0;
+ rc = recvmsg(child_fd, &child_msg, 0);
+ } while (errno == EAGAIN || errno == EWOULDBLOCK);
+ assert_int_not_equal(rc, -1);
+
+ cmsg = CMSG_FIRSTHDR(&child_msg);
+ assert_non_null(cmsg);
+ assert_int_equal(cmsg->cmsg_type, SCM_RIGHTS);
+
+ memcpy(&rcv_fd, CMSG_DATA(cmsg), sizeof(rcv_fd));
+ assert_int_not_equal(rcv_fd, -1);
+
+ rc = read(rcv_fd, buf, sizeof(buf));
+ assert_int_not_equal(rc, -1);
+ for (i = 0; i < 8; i++) {
+ assert_int_equal(buf[i], 0);
+ }
+ exit(0);
+ } else {
+ /* Parent */
+ int pass_fd;
+ struct msghdr parent_msg;
+ struct cmsghdr *cmsg;
+ char cmsgbuf[CMSG_SPACE(sizeof(pass_fd))];
+ char byte = '!';
+ struct iovec iov;
+ int cs;
+
+ pass_fd = open("/dev/zero", O_RDONLY);
+ assert_int_not_equal(pass_fd, -1);
+
+ iov.iov_base = &byte;
+ iov.iov_len = 1;
+
+ memset(&parent_msg, 0, sizeof(parent_msg));
+ parent_msg.msg_iov = &iov;
+ parent_msg.msg_iovlen = 1;
+ parent_msg.msg_control = cmsgbuf;
+ parent_msg.msg_controllen = sizeof(cmsgbuf);
+
+ cmsg = CMSG_FIRSTHDR(&parent_msg);
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = SCM_RIGHTS;
+ cmsg->cmsg_len = CMSG_LEN(sizeof(pass_fd));
+
+ memcpy(CMSG_DATA(cmsg), &pass_fd, sizeof(pass_fd));
+ parent_msg.msg_controllen = cmsg->cmsg_len;
+
+ rc = sendmsg(parent_fd, &parent_msg, 0);
+ assert_int_not_equal(rc, -1);
+
+ alarm(5); /* 5 seconds timeout for the child */
+ rc = waitpid(pid, &cs, 0);
+ assert_int_not_equal(rc, -1);
+ }
+}
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_sendmsg_recvmsg_fd),
+ };
+
+ rc = cmocka_run_group_tests(tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_swrap_unit.c b/tests/deckard/contrib/libswrap/tests/test_swrap_unit.c
new file mode 100644
index 0000000..469aa24
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_swrap_unit.c
@@ -0,0 +1,120 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "config.h"
+
+#include "socket_wrapper.c"
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+
+/**
+ * test wrap_sendmsg_filter_cmsghdr()
+ *
+ * Prepare a message with two cmsg:
+ * - the first cmsg is a char buf with the string "Hello World"
+ * - the second cmsg is a char buf with the string "!\n"
+ *
+ * Both cmsgs will be copied without modification by
+ * wrap_sendmsg_filter_cmsghdr(), so we can check that the msg
+ * controllen, the cmsg sizes and the payload are the same.
+ *
+ * We use an not existing cmsg_type which triggers cmsg copying.
+ */
+static void test_sendmsg_cmsg(void **state)
+{
+ int rc = 0;
+ char byte = '!';
+ struct iovec iov;
+ struct msghdr msg = { 0 };
+ struct cmsghdr *cmsg;
+ char *cmsgbuf;
+ int cmsgbuf_size;
+ const char *s1 = "Hello World";
+ const int s1_len = strlen(s1);
+ const char *s2 = "!\n";
+ const int s2_len = strlen(s2);
+ uint8_t *cmbuf = NULL;
+ size_t cmlen = 0;
+
+ (void)state; /* unused */
+
+ iov.iov_base = &byte;
+ iov.iov_len = 1;
+
+ /*
+ * Prepare cmsgbuf and msg
+ */
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ cmsgbuf_size = CMSG_SPACE(s1_len) + CMSG_SPACE(s2_len);
+ cmsgbuf = calloc(cmsgbuf_size, sizeof(char));
+ assert_non_null(cmsgbuf);
+ msg.msg_control = cmsgbuf;
+ msg.msg_controllen = cmsgbuf_size;
+
+ /*
+ * Prepare first cmsg with string "Hello World"
+ */
+ cmsg = CMSG_FIRSTHDR(&msg);
+ assert_non_null(cmsg);
+
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = ~0 - 1;
+ cmsg->cmsg_len = CMSG_LEN(s1_len);
+ memcpy(CMSG_DATA(cmsg), s1, s1_len);
+
+ /*
+ * Prepare second cmsg with string "!\n"
+ */
+ cmsg = CMSG_NXTHDR(&msg, cmsg);
+ assert_non_null(cmsg);
+
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = ~0 - 2;
+ cmsg->cmsg_len = CMSG_LEN(s2_len);
+ memcpy(CMSG_DATA(cmsg), s2, s2_len);
+
+ /*
+ * Now call swrap_sendmsg_filter_cmsghdr() on the msg
+ */
+ rc = swrap_sendmsg_filter_cmsghdr(&msg, &cmbuf, &cmlen);
+ assert_return_code(rc, errno);
+ assert_int_equal(cmlen, msg.msg_controllen);
+
+ /*
+ * Insert filtered cmsgbug into msg and validate cmsgs.
+ */
+ msg.msg_control = cmbuf;
+
+ cmsg = CMSG_FIRSTHDR(&msg);
+ assert_non_null(cmsg);
+ assert_int_equal(cmsg->cmsg_len, CMSG_LEN(s1_len));
+ assert_memory_equal(CMSG_DATA(cmsg), s1, s1_len);
+
+ cmsg = CMSG_NXTHDR(&msg, cmsg);
+ assert_non_null(cmsg);
+ assert_int_equal(cmsg->cmsg_len, CMSG_LEN(s2_len));
+ assert_memory_equal(CMSG_DATA(cmsg), s2, s2_len);
+
+ free(cmbuf);
+ free(cmsgbuf);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest unit_tests[] = {
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+ cmocka_unit_test(test_sendmsg_cmsg),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(unit_tests, NULL, NULL);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/test_tcp_listen.c b/tests/deckard/contrib/libswrap/tests/test_tcp_listen.c
new file mode 100644
index 0000000..5641c47
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/test_tcp_listen.c
@@ -0,0 +1,115 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "config.h"
+#include "torture.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_RPC_RPC_H
+#include <rpc/rpc.h>
+#endif
+
+static int setup(void **state)
+{
+ torture_setup_socket_dir(state);
+
+ return 0;
+}
+
+static int teardown(void **state)
+{
+ torture_teardown_socket_dir(state);
+
+ return 0;
+}
+
+static void test_listen_unbound_ipv4(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s1;
+ int s2;
+
+ (void) state; /* unused */
+
+ s1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s1, errno);
+
+ rc = listen(s1, SOMAXCONN);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s1, &addr.sa.s, &addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(addr.sa_socklen, sizeof(struct sockaddr_in));
+ assert_in_range(ntohs(addr.sa.in.sin_port), 1024, 65535);
+
+ s2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s2, errno);
+
+ rc = connect(s2, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s1);
+ close(s2);
+}
+
+#ifdef HAVE_IPV6
+static void test_listen_unbound_ipv6(void **state)
+{
+ struct torture_address addr = {
+ .sa_socklen = sizeof(struct sockaddr_storage),
+ };
+ int rc;
+ int s1;
+ int s2;
+
+ (void) state; /* unused */
+
+ s1 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s1, errno);
+
+ rc = listen(s1, SOMAXCONN);
+ assert_return_code(rc, errno);
+
+ rc = getsockname(s1, &addr.sa.s, &addr.sa_socklen);
+ assert_return_code(rc, errno);
+ assert_int_equal(addr.sa_socklen, sizeof(struct sockaddr_in6));
+ assert_in_range(ntohs(addr.sa.in6.sin6_port), 1024, 65535);
+
+ s2 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+ assert_return_code(s2, errno);
+
+ rc = connect(s2, &addr.sa.s, addr.sa_socklen);
+ assert_return_code(rc, errno);
+
+ close(s1);
+ close(s2);
+}
+#endif /* HAVE_IPV6 */
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest tcp_listen_tests[] = {
+ cmocka_unit_test(test_listen_unbound_ipv4),
+#ifdef HAVE_IPV6
+ cmocka_unit_test(test_listen_unbound_ipv6),
+#endif /* HAVE_IPV6 */
+ };
+
+ rc = cmocka_run_group_tests(tcp_listen_tests, setup, teardown);
+
+ return rc;
+}
diff --git a/tests/deckard/contrib/libswrap/tests/torture.c b/tests/deckard/contrib/libswrap/tests/torture.c
new file mode 100644
index 0000000..d3ad84a
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/torture.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) Andreas Schneider 2013 <asn@samba.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * 3. Neither the name of the author 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 AUTHOR 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 AUTHOR 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.
+ */
+
+#include "config.h"
+
+#include "torture.h"
+
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <stdbool.h>
+
+#define TORTURE_ECHO_SRV_IPV4 "127.0.0.10"
+/* socket wrapper IPv6 prefix fd00::5357:5fxx */
+#define TORTURE_ECHO_SRV_IPV6 "fd00::5357:5f0a"
+#define TORTURE_ECHO_SRV_PORT 7
+
+#define TORTURE_SOCKET_DIR "/tmp/w_XXXXXX"
+#define TORTURE_ECHO_SRV_PIDFILE "echo_srv.pid"
+#define TORTURE_PCAP_FILE "socket_trace.pcap"
+
+const char *torture_server_address(int family)
+{
+ switch (family) {
+ case AF_INET: {
+ const char *ip4 = getenv("TORTURE_SERVER_ADDRESS_IPV4");
+
+ if (ip4 != NULL && ip4[0] != '\0') {
+ return ip4;
+ }
+
+ return TORTURE_ECHO_SRV_IPV4;
+ }
+#ifdef HAVE_IPV6
+ case AF_INET6: {
+ const char *ip6 = getenv("TORTURE_SERVER_ADDRESS_IPV6");
+
+ if (ip6 != NULL && ip6[0] != '\0') {
+ return ip6;
+ }
+
+ return TORTURE_ECHO_SRV_IPV6;
+ }
+#endif
+ default:
+ return NULL;
+ }
+
+ return NULL;
+}
+
+int torture_server_port(void)
+{
+ char *env = getenv("TORTURE_SERVER_PORT");
+
+ if (env != NULL && env[0] != '\0' && strlen(env) < 6) {
+ int port = atoi(env);
+
+ if (port > 0 && port < 65536) {
+ return port;
+ }
+ }
+
+ return TORTURE_ECHO_SRV_PORT;
+}
+
+void torture_setup_socket_dir(void **state)
+{
+ struct torture_state *s;
+ const char *p;
+ size_t len;
+
+ s = malloc(sizeof(struct torture_state));
+ assert_non_null(s);
+
+ s->socket_dir = strdup(TORTURE_SOCKET_DIR);
+ assert_non_null(s->socket_dir);
+
+ p = mkdtemp(s->socket_dir);
+ assert_non_null(p);
+
+ /* pcap file */
+ len = strlen(p) + 1 + strlen(TORTURE_PCAP_FILE) + 1;
+
+ s->pcap_file = malloc(len);
+ assert_non_null(s->pcap_file);
+
+ snprintf(s->pcap_file, len, "%s/%s", p, TORTURE_PCAP_FILE);
+
+ /* pid file */
+ len = strlen(p) + 1 + strlen(TORTURE_ECHO_SRV_PIDFILE) + 1;
+
+ s->srv_pidfile = malloc(len);
+ assert_non_null(s->srv_pidfile);
+
+ snprintf(s->srv_pidfile, len, "%s/%s", p, TORTURE_ECHO_SRV_PIDFILE);
+
+ setenv("SOCKET_WRAPPER_DIR", p, 1);
+ setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "170", 1);
+ setenv("SOCKET_WRAPPER_PCAP_FILE", s->pcap_file, 1);
+
+ *state = s;
+}
+
+static void torture_setup_echo_srv_ip(void **state,
+ const char *ip,
+ int port,
+ int type)
+{
+ struct torture_state *s;
+ char start_echo_srv[1024] = {0};
+ const char *t;
+ int count = 0;
+ int rc;
+
+ torture_setup_socket_dir(state);
+
+ s = *state;
+
+ switch (type) {
+ case SOCK_STREAM:
+ t = "-t";
+ break;
+ case SOCK_DGRAM:
+ t = "-u";
+ break;
+ default:
+ t = "";
+ break;
+ }
+
+ /* set default iface for the server */
+ setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "10", 1);
+
+ snprintf(start_echo_srv, sizeof(start_echo_srv),
+ "%s/tests/echo_srv -b %s -p %d -D %s --pid %s",
+ BINARYDIR, ip, port, t, s->srv_pidfile);
+
+ rc = system(start_echo_srv);
+ assert_int_equal(rc, 0);
+
+ do {
+ struct stat sb;
+
+ count++;
+ if (count > 100) {
+ break;
+ }
+
+ rc = stat(s->srv_pidfile, &sb);
+ usleep(200);
+ } while (rc != 0);
+ assert_int_equal(rc, 0);
+
+ /* set default iface for the client */
+ setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "170", 1);
+}
+
+void torture_setup_echo_srv_udp_ipv4(void **state)
+{
+ torture_setup_echo_srv_ip(state,
+ "0.0.0.0",
+ torture_server_port(),
+ SOCK_DGRAM);
+}
+
+void torture_setup_echo_srv_udp_ipv6(void **state)
+{
+ torture_setup_echo_srv_ip(state,
+ "::",
+ torture_server_port(),
+ SOCK_DGRAM);
+}
+
+void torture_setup_echo_srv_tcp_ipv4(void **state)
+{
+ torture_setup_echo_srv_ip(state,
+ "0.0.0.0",
+ torture_server_port(),
+ SOCK_STREAM);
+}
+
+void torture_setup_echo_srv_tcp_ipv6(void **state)
+{
+ torture_setup_echo_srv_ip(state,
+ "::",
+ torture_server_port(),
+ SOCK_STREAM);
+}
+
+void torture_teardown_socket_dir(void **state)
+{
+ struct torture_state *s = *state;
+ char *env = getenv("TORTURE_SKIP_CLEANUP");
+ char remove_cmd[1024] = {0};
+ int rc;
+
+ if (env != NULL && env[0] == '1') {
+ fprintf(stderr, ">>> Skipping cleanup of %s", s->socket_dir);
+ } else {
+ snprintf(remove_cmd, sizeof(remove_cmd), "rm -rf %s", s->socket_dir);
+
+ rc = system(remove_cmd);
+ if (rc < 0) {
+ fprintf(stderr, "%s failed: %s", remove_cmd, strerror(errno));
+ }
+ }
+
+ free(s->socket_dir);
+ free(s->pcap_file);
+ free(s->srv_pidfile);
+ free(s);
+}
+
+void torture_teardown_echo_srv(void **state)
+{
+ struct torture_state *s = *state;
+ char buf[8] = {0};
+ long int tmp;
+ ssize_t rc;
+ pid_t pid;
+ int fd;
+ bool is_running = true;
+ int count;
+
+ /* read the pidfile */
+ fd = open(s->srv_pidfile, O_RDONLY);
+ if (fd < 0) {
+ goto done;
+ }
+
+ rc = read(fd, buf, sizeof(buf));
+ close(fd);
+ if (rc <= 0) {
+ goto done;
+ }
+
+ buf[sizeof(buf) - 1] = '\0';
+
+ tmp = strtol(buf, NULL, 10);
+ if (tmp == 0 || tmp > 0xFFFF || errno == ERANGE) {
+ goto done;
+ }
+
+ pid = (pid_t)(tmp & 0xFFFF);
+
+ for (count = 0; count < 10; count++) {
+ /* Make sure the daemon goes away! */
+ kill(pid, SIGTERM);
+
+ usleep(200);
+
+ rc = kill(pid, 0);
+ if (rc != 0) {
+ is_running = false;
+ break;
+ }
+ }
+
+ if (is_running) {
+ fprintf(stderr,
+ "WARNING the echo server is still running!\n");
+ }
+
+done:
+ torture_teardown_socket_dir(state);
+}
+
+void torture_generate_random_buffer(uint8_t *out, int len)
+{
+ int i;
+
+ srand(time(NULL));
+
+ for (i = 0; i < len; i++) {
+ out[i] = (uint8_t)rand();
+ }
+}
diff --git a/tests/deckard/contrib/libswrap/tests/torture.h b/tests/deckard/contrib/libswrap/tests/torture.h
new file mode 100644
index 0000000..921195d
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/torture.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) Andreas Schneider 2013 <asn@samba.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * 3. Neither the name of the author 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 AUTHOR 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 AUTHOR 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.
+ */
+
+#ifndef _TORTURE_H
+#define _TORTURE_H
+
+#include "config.h"
+
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <stdint.h>
+#include <string.h>
+
+struct torture_address {
+ socklen_t sa_socklen;
+ union {
+ struct sockaddr s;
+ struct sockaddr_in in;
+#ifdef HAVE_IPV6
+ struct sockaddr_in6 in6;
+#endif
+ struct sockaddr_un un;
+ struct sockaddr_storage ss;
+ } sa;
+};
+
+struct torture_state {
+ char *socket_dir;
+ char *pcap_file;
+ char *srv_pidfile;
+};
+
+#ifndef ZERO_STRUCT
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
+#endif
+
+const char *torture_server_address(int domain);
+int torture_server_port(void);
+
+void torture_setup_socket_dir(void **state);
+void torture_setup_echo_srv_udp_ipv4(void **state);
+void torture_setup_echo_srv_udp_ipv6(void **state);
+
+void torture_setup_echo_srv_tcp_ipv4(void **state);
+void torture_setup_echo_srv_tcp_ipv6(void **state);
+
+void torture_teardown_socket_dir(void **state);
+void torture_teardown_echo_srv(void **state);
+
+void torture_generate_random_buffer(uint8_t *out, int len);
+#endif /* _TORTURE_H */
diff --git a/tests/deckard/contrib/libswrap/tests/valgrind.supp b/tests/deckard/contrib/libswrap/tests/valgrind.supp
new file mode 100644
index 0000000..9857825
--- /dev/null
+++ b/tests/deckard/contrib/libswrap/tests/valgrind.supp
@@ -0,0 +1,16 @@
+### GLIBC
+{
+ glibc_dlopen_alloc
+ Memcheck:Leak
+ fun:calloc
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.2.5
+}
+
+{
+ glibc_dlclose_alloc
+ Memcheck:Leak
+ fun:calloc
+ fun:_dlerror_run
+ fun:dlclose
+}
diff --git a/tests/deckard/deckard.py b/tests/deckard/deckard.py
new file mode 100755
index 0000000..6b75c70
--- /dev/null
+++ b/tests/deckard/deckard.py
@@ -0,0 +1,432 @@
+#!/usr/bin/env python3
+from datetime import datetime
+import errno
+import ipaddress
+import logging
+import logging.config
+import os
+import shutil
+import socket
+import subprocess
+import tempfile
+import time
+from typing import Set # noqa
+
+import dpkt
+import jinja2
+
+from pydnstest import scenario, testserver
+
+
+# path to Deckard files
+INSTALLDIR = os.path.dirname(os.path.abspath(__file__))
+# relative to working directory
+TRUST_ANCHOR_SUBDIR = 'ta'
+
+
+class DeckardUnderLoadError(Exception):
+ pass
+
+
+class IfaceManager:
+ """
+ Network interface allocation manager
+
+ Keeps mapping between 'name', interface number, and IP address.
+ """
+ def __init__(self, sockfamily):
+ """
+ Parameters:
+ sockfamily Address family used in given test scenatio
+ (a constant from socket module)
+ """
+ if sockfamily not in {socket.AF_INET, socket.AF_INET6}:
+ raise NotImplementedError("address family not supported '%i'" % sockfamily)
+ self.sockfamily = sockfamily
+ self.free = list(range(40, 10, -1)) # range accepted by libswrap
+ self.name2iface = {}
+
+ def allocate(self, name):
+ """
+ Map name to a free interface number.
+ """
+ if name in self.name2iface:
+ raise ValueError('duplicate interface name %s' % name)
+ iface = str(self.free.pop())
+ self.name2iface[name] = iface
+ return iface
+
+ def getiface(self, name):
+ """
+ Map name to allocated interface number.
+
+ Returns:
+ Interface number as string (so it can be assigned to os.environ)
+ """
+ return self.name2iface[name]
+
+ def getipaddr(self, name):
+ """
+ Get default IP address assigned to interface allocated to given name.
+
+ Returns:
+ Address from address family specified during IfaceManager init.
+ """
+ iface = self.getiface(name)
+ if self.sockfamily == socket.AF_INET:
+ addr_local_pattern = "127.0.0.{}"
+ elif self.sockfamily == socket.AF_INET6:
+ addr_local_pattern = "fd00::5357:5f{:02X}"
+ return addr_local_pattern.format(int(iface))
+
+ def getalladdrs(self):
+ """
+ Get mapping from all names to all IP addresses.
+
+ Returns:
+ {name: IP address}
+ """
+ return {name: self.getipaddr(name)
+ for name in self.name2iface}
+
+
+def write_timestamp_file(path, tst):
+ time_file = open(path, 'w')
+ time_file.write(datetime.fromtimestamp(tst).strftime('@%Y-%m-%d %H:%M:%S'))
+ time_file.flush()
+ time_file.close()
+
+
+def setup_common_env(ctx):
+ """
+ Setup environment shared between Deckard and binaries under test.
+
+ Environment for child processes must be based on on.environ as modified
+ by this function.
+
+ Returns:
+ path to working directory
+ """
+ # working directory
+ if "SOCKET_WRAPPER_DIR" in os.environ:
+ tmpdir = os.environ["SOCKET_WRAPPER_DIR"]
+ if os.path.lexists(tmpdir):
+ raise ValueError('SOCKET_WRAPPER_DIR "%s" must not exist' % tmpdir)
+ else:
+ tmpdir = tempfile.mkdtemp(suffix='', prefix='tmpdeckard')
+
+ # Set up libfaketime
+ os.environ["FAKETIME_NO_CACHE"] = "1"
+ os.environ["FAKETIME_TIMESTAMP_FILE"] = '%s/.time' % tmpdir
+ # fake initial time
+ write_timestamp_file(os.environ["FAKETIME_TIMESTAMP_FILE"],
+ ctx.get('_OVERRIDE_TIMESTAMP', time.time()))
+
+ # Set up socket_wrapper
+ os.environ["SOCKET_WRAPPER_DIR"] = tmpdir
+ os.environ["SOCKET_WRAPPER_PCAP_FILE"] = '%s/deckard.pcap' % tmpdir
+
+ return tmpdir
+
+
+def setup_daemon_env(prog_cfg, tmpdir):
+ """ Set up test environment and config """
+ name = prog_cfg['name']
+ log = logging.getLogger('deckard.daemon.%s.setup_env' % name)
+ # Set up child process env() to use socket wrapper interface
+ child_env = os.environ.copy()
+ child_env['SOCKET_WRAPPER_DEFAULT_IFACE'] = prog_cfg['iface']
+ prog_cfg['dir'] = os.path.join(tmpdir, name)
+ log.debug('directory: %s', prog_cfg['dir'])
+ child_env['SOCKET_WRAPPER_PCAP_FILE'] = '%s/pcap' % prog_cfg['dir']
+
+ return child_env
+
+
+def setup_network(sockfamily, prog_cfgs):
+ """Allocate fake interfaces and IP addresses to all entities.
+
+ Returns:
+ - SOCKET_WRAPPER_DEFAULT_IFACE will be set in os.environ
+ - Dict suitable for usage in Jinja2 templates will be returned
+ {
+ ROOT_ADDR: <DeckardIP>,
+ IPADDRS: {name: <IPaddress>}
+ }
+ """
+ net_config = {}
+ # assign interfaces and IP addresses to all involved programs
+ ifacemgr = IfaceManager(sockfamily)
+ # fake interface for Deckard itself
+ deckard_iface = ifacemgr.allocate('deckard')
+ os.environ['SOCKET_WRAPPER_DEFAULT_IFACE'] = deckard_iface
+ net_config['ROOT_ADDR'] = ifacemgr.getipaddr('deckard')
+
+ for prog_cfg in prog_cfgs['programs']:
+ prog_cfg['iface'] = ifacemgr.allocate(prog_cfg['name'])
+ prog_cfg['ipaddr'] = ifacemgr.getipaddr(prog_cfg['name'])
+ net_config['IPADDRS'] = ifacemgr.getalladdrs()
+
+ return net_config
+
+
+def _fixme_prebind_hack(sockfamily, childaddr):
+ """
+ Prebind to sockets to create necessary files
+
+ @TODO: this is probably a workaround for socket_wrapper bug
+ """
+ if 'NOPRELOAD' not in os.environ:
+ for sock_type in (socket.SOCK_STREAM, socket.SOCK_DGRAM):
+ sock = socket.socket(sockfamily, sock_type)
+ sock.setsockopt(sockfamily, socket.SO_REUSEADDR, 1)
+ sock.bind((childaddr, 53))
+ if sock_type & socket.SOCK_STREAM:
+ sock.listen(5)
+
+
+def create_trust_anchor_files(ta_files, work_dir):
+ """
+ Write trust anchor files in specified working directory.
+
+ Params:
+ ta_files Dict {domain name: [TA lines]}
+ Returns:
+ List of absolute filesystem paths to TA files.
+ """
+ full_paths = []
+ for domain, ta_lines in ta_files.items():
+ file_name = u'{}.key'.format(domain)
+ full_path = os.path.realpath(
+ os.path.join(work_dir, TRUST_ANCHOR_SUBDIR, file_name))
+ full_paths.append(full_path)
+ dir_path = os.path.dirname(full_path)
+ try:
+ os.makedirs(dir_path)
+ except OSError as ex:
+ if ex.errno != errno.EEXIST:
+ raise
+ with open(full_path, "w") as ta_file:
+ ta_file.writelines('{0}\n'.format(l) for l in ta_lines)
+ return full_paths
+
+
+def setup_daemon_files(prog_cfg, template_ctx, ta_files):
+ name = prog_cfg['name']
+ # add program-specific variables
+ subst = template_ctx.copy()
+ subst['DAEMON_NAME'] = name
+
+ subst['WORKING_DIR'] = prog_cfg['dir']
+ os.mkdir(prog_cfg['dir'])
+ subst['SELF_ADDR'] = prog_cfg['ipaddr']
+
+ # daemons might write to TA files so every daemon gets its own copy
+ subst['TRUST_ANCHOR_FILES'] = create_trust_anchor_files(
+ ta_files, prog_cfg['dir'])
+
+ # generate configuration files
+ j2template_loader = jinja2.FileSystemLoader(searchpath=os.getcwd())
+ print(os.path.abspath(os.getcwd()))
+ j2template_env = jinja2.Environment(loader=j2template_loader)
+ logging.getLogger('deckard.daemon.%s.template' % name).debug(subst)
+
+ assert len(prog_cfg['templates']) == len(prog_cfg['configs'])
+ for template_name, config_name in zip(prog_cfg['templates'], prog_cfg['configs']):
+ j2template = j2template_env.get_template(template_name)
+ cfg_rendered = j2template.render(subst)
+ with open(os.path.join(prog_cfg['dir'], config_name), 'w') as output:
+ output.write(cfg_rendered)
+
+ _fixme_prebind_hack(template_ctx['_SOCKET_FAMILY'], subst['SELF_ADDR'])
+
+
+def run_daemon(cfg, environ):
+ """Start binary and return its process object"""
+ name = cfg['name']
+ proc = None
+ cfg['log'] = os.path.join(cfg['dir'], 'server.log')
+ daemon_log_file = open(cfg['log'], 'w')
+ cfg['args'] = args = [cfg['binary']] + cfg['additional']
+ logging.getLogger('deckard.daemon.%s.env' % name).debug('%s', environ)
+ logging.getLogger('deckard.daemon.%s.argv' % name).debug('%s', args)
+ try:
+ proc = subprocess.Popen(args, stdout=daemon_log_file, stderr=subprocess.STDOUT,
+ cwd=cfg['dir'], env=environ, start_new_session=True)
+ except subprocess.CalledProcessError:
+ logger = logging.getLogger('deckard.daemon_log.%s' % name)
+ logger.exception("Can't start '%s'", args)
+ raise
+ return proc
+
+
+def conncheck_daemon(process, cfg, sockfamily):
+ """Wait until the server accepts TCP clients"""
+ sock = socket.socket(sockfamily, socket.SOCK_STREAM)
+ tstart = datetime.now()
+ while True:
+ time.sleep(0.1)
+ if (datetime.now() - tstart).total_seconds() > 5:
+ raise RuntimeError("Server took too long to respond")
+ # Check if the process is running
+ if process.poll() is not None:
+ msg = 'process died "%s", logs in "%s"' % (cfg['name'], cfg['dir'])
+ logger = logging.getLogger('deckard.daemon_log.%s' % cfg['name'])
+ logger.critical(msg)
+ logger.error(open(cfg['log']).read())
+ raise subprocess.CalledProcessError(process.returncode, cfg['args'], msg)
+ try:
+ sock.connect((cfg['ipaddr'], 53))
+ except socket.error:
+ continue
+ break
+ sock.close()
+
+
+def process_file(path, qmin, prog_cfgs):
+ """Parse scenario from a file object and create workdir."""
+ # Parse scenario
+ case, cfg_text = scenario.parse_file(os.path.realpath(path))
+ cfg_ctx, ta_files = scenario.parse_config(cfg_text, qmin, INSTALLDIR)
+ template_ctx = setup_network(cfg_ctx['_SOCKET_FAMILY'], prog_cfgs)
+ # merge variables from scenario with generated network variables (scenario has priority)
+ template_ctx.update(cfg_ctx)
+ # Deckard will communicate with first program
+ prog_under_test = prog_cfgs['programs'][0]['name']
+ prog_under_test_ip = template_ctx['IPADDRS'][prog_under_test]
+
+ # get working directory and environment variables
+ tmpdir = setup_common_env(cfg_ctx)
+ shutil.copy2(path, os.path.join(tmpdir))
+ try:
+ daemons = setup_daemons(tmpdir, prog_cfgs, template_ctx, ta_files)
+ run_testcase(daemons,
+ case,
+ template_ctx['ROOT_ADDR'],
+ template_ctx['_SOCKET_FAMILY'],
+ prog_under_test_ip)
+ if prog_cfgs.get('noclean'):
+ logging.getLogger('deckard.hint').info(
+ 'test working directory %s', tmpdir)
+ else:
+ shutil.rmtree(tmpdir)
+ except Exception:
+ logging.getLogger('deckard.hint').error(
+ 'test failed, inspect working directory %s', tmpdir)
+ raise
+
+
+def setup_daemons(tmpdir, prog_cfgs, template_ctx, ta_files):
+ """Configure daemons and run the test"""
+ # Setup daemon environment
+ daemons = []
+ for prog_cfg in prog_cfgs['programs']:
+ daemon_env = setup_daemon_env(prog_cfg, tmpdir)
+ setup_daemon_files(prog_cfg, template_ctx, ta_files)
+ daemon_proc = run_daemon(prog_cfg, daemon_env)
+ daemons.append({'proc': daemon_proc, 'cfg': prog_cfg})
+ try:
+ conncheck_daemon(daemon_proc, prog_cfg, template_ctx['_SOCKET_FAMILY'])
+ except: # noqa -- bare except might be valid here?
+ daemon_proc.terminate()
+ raise
+ return daemons
+
+
+def check_for_icmp():
+ """ Checks Deckards's PCAP for ICMP packets """
+ # Deckard's responses to resolvers might be delayed due to load which
+ # leads the resolver to close the port and to the test failing in the
+ # end. We partially detect these by checking the PCAP for ICMP packets.
+ path = os.environ["SOCKET_WRAPPER_PCAP_FILE"]
+ udp_seen = False
+ with open(path, "rb") as f:
+ pcap = dpkt.pcap.Reader(f)
+ for _, packet in pcap:
+ try:
+ ip = dpkt.ip.IP(packet)
+ except dpkt.dpkt.UnpackError:
+ ip = dpkt.ip6.IP6(packet)
+ if isinstance(ip.data, dpkt.udp.UDP):
+ udp_seen = True
+
+ if udp_seen:
+ if isinstance(ip.data, (dpkt.icmp.ICMP, dpkt.icmp6.ICMP6)):
+ raise DeckardUnderLoadError("Deckard is under load. "
+ "Other errors might be false negatives. "
+ "Consider retrying the job later.")
+ return False
+
+
+def check_for_reply_steps(case: scenario.Scenario) -> bool:
+ return any(s.type == "REPLY" for s in case.steps)
+
+
+def check_for_unknown_servers(case: scenario.Scenario, daemon: dict) -> None:
+ """ Checks Deckards's PCAP for packets going to servers not present in scenario """
+ path = os.path.join(daemon["cfg"]["dir"], "pcap")
+ asked_servers = set()
+ with open(path, "rb") as f:
+ pcap = dpkt.pcap.Reader(f)
+ for _, packet in pcap:
+ try:
+ ip = dpkt.ip.IP(packet)
+ except dpkt.dpkt.UnpackError:
+ ip = dpkt.ip6.IP6(packet)
+ # pylint: disable=no-member
+ dest = ipaddress.ip_address(int.from_bytes(ip.dst, byteorder="big"))
+ # pylint: enable=no-member
+
+ # Socket wrapper asigns (random) link local addresses to the binary under test
+ # and Deckard itself. We have to filter them out of the pcap.
+ if dest.is_global:
+ asked_servers.add(dest)
+
+ scenario_ips = set() # type: Set[str]
+ for r in case.ranges:
+ scenario_ips |= r.addresses
+
+ scenario_servers = {ipaddress.ip_address(ip) for ip in scenario_ips}
+
+ servers_not_in_scenario = asked_servers - scenario_servers
+
+ if servers_not_in_scenario:
+ if not check_for_reply_steps(case):
+ raise RuntimeError("Binary in test asked an IP address not present in scenario %s"
+ % servers_not_in_scenario)
+
+
+def run_testcase(daemons, case, root_addr, addr_family, prog_under_test_ip):
+ """Run actual test and raise exception if the test failed"""
+ server = testserver.TestServer(case, root_addr, addr_family)
+ server.start()
+
+ try:
+ server.play(prog_under_test_ip)
+ except ValueError as e:
+ if not check_for_icmp():
+ raise e
+ finally:
+ server.stop()
+
+ if check_for_reply_steps(case):
+ logging.warning("%s has REPLY steps in it. These are known to fail randomly. "
+ "Errors might be false positives.", case.file)
+
+ for daemon in daemons:
+ daemon['proc'].terminate()
+ daemon['proc'].wait()
+ daemon_logger_log = logging.getLogger('deckard.daemon_log.%s' % daemon['cfg']['name'])
+ with open(daemon['cfg']['log']) as logf:
+ for line in logf:
+ daemon_logger_log.debug(line.strip())
+ ignore_exit = daemon["cfg"].get('ignore_exit_code', False)
+ if daemon['proc'].returncode != 0 and not ignore_exit:
+ raise ValueError('process %s terminated with return code %s'
+ % (daemon['cfg']['name'], daemon['proc'].returncode))
+ check_for_unknown_servers(case, daemon)
+
+ # Do not clear files if the server crashed (for analysis)
+ if server.undefined_answers > 0:
+ if not check_for_icmp():
+ raise ValueError('the scenario does not define all necessary answers (see error log)')
diff --git a/tests/deckard/deckard_pytest.ini b/tests/deckard/deckard_pytest.ini
new file mode 100644
index 0000000..df9378d
--- /dev/null
+++ b/tests/deckard/deckard_pytest.ini
@@ -0,0 +1,7 @@
+[pytest]
+log_print = true
+python_files=deckard_pytest.py
+norecursedirs=*
+log_cli=true
+log_level=WARNING
+
diff --git a/tests/deckard/deckard_pytest.py b/tests/deckard/deckard_pytest.py
new file mode 100755
index 0000000..3c5f4b8
--- /dev/null
+++ b/tests/deckard/deckard_pytest.py
@@ -0,0 +1,67 @@
+import logging
+import os
+import subprocess
+import random
+import sys
+import time
+
+import pytest
+
+import deckard
+
+
+def set_coverage_env(path, qmin):
+ """Sets up enviroment variables so code coverage utility can work."""
+ if os.environ.get("COVERAGE"):
+ exports = subprocess.check_output([os.environ["COVERAGE_ENV_SCRIPT"],
+ os.environ["DAEMONSRCDIR"],
+ os.environ["COVERAGE_STATSDIR"],
+ path + "-qmin-" + str(qmin)]).decode()
+ for export in exports.split():
+ key, value = export.split("=", 1)
+ value = value.strip('"')
+ os.environ[key] = value
+
+
+def check_platform():
+ if sys.platform == 'windows':
+ pytest.exit('Not supported at all on Windows')
+
+
+# Suppress extensive Augeas logging
+logging.getLogger("augeas").setLevel(logging.ERROR)
+
+
+check_platform()
+
+
+def run_test(path, qmin, config, max_retries, retries=0):
+ set_coverage_env(path, qmin)
+ try:
+ del os.environ["SOCKET_WRAPPER_DIR"]
+ except KeyError:
+ pass
+ try:
+ deckard.process_file(path, qmin, config)
+ except deckard.DeckardUnderLoadError as e:
+ if retries < max_retries:
+ logging.error("Deckard under load. Retrying…")
+ # Exponential backoff
+ time.sleep((2 ** retries) + random.random())
+ run_test(path, qmin, config, max_retries, retries + 1)
+ else:
+ raise e
+
+
+def test_passes_qmin_on(scenario, max_retries):
+ if scenario.qmin is True or scenario.qmin is None:
+ run_test(scenario.path, True, scenario.config, max_retries)
+ else:
+ pytest.skip("Query minimization is off in test config")
+
+
+def test_passes_qmin_off(scenario, max_retries):
+ if scenario.qmin is False or scenario.qmin is None:
+ run_test(scenario.path, False, scenario.config, max_retries)
+ else:
+ pytest.skip("Query minimization is on in test config")
diff --git a/tests/deckard/doc/devel_guide.rst b/tests/deckard/doc/devel_guide.rst
new file mode 100644
index 0000000..a93b79d
--- /dev/null
+++ b/tests/deckard/doc/devel_guide.rst
@@ -0,0 +1,25 @@
+Notes for Deckard developers
+============================
+
+socket wrapper library (cwrap)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Detailed instructions on using cwrap you can be found here_
+
+cwrap environment is managed by Deckard. Default values are sufficient, do not touch the environment unless you are trying to debug something. Variables available for direct use are:
+
+- ``SOCKET_WRAPPER_DIR`` is a generic working directory. It defaults
+ to a new temporary directory with randomly generated name,
+ prefixed by ``tmpdeckard``. When a test fails, the work directory can contain useful
+ information for post-mortem analysis. You can explicitly set ``SOCKET_WRAPPER_DIR``
+ to a custom path for more convenient analysis.
+- ``SOCKET_WRAPPER_DEBUGLEVEL`` is not set by default.
+
+Deckard automatically sets ``SOCKET_WRAPPER_PCAP_FILE`` to create separate PCAP files in working directory for Deckard itself and each daemon. Feel free to inspect them.
+
+.. _here: https://git.samba.org/?p=socket_wrapper.git;a=blob;f=doc/socket_wrapper.1.txt;hb=HEAD
+
+
+libfaketime
+^^^^^^^^^^^
+Run-time changes to ``FAKETIME_`` environment variables might not be picked up by running process if ``FAKETIME_NO_CACHE=1`` variable is not set before the process starts.
diff --git a/tests/deckard/doc/scenario_example.rst b/tests/deckard/doc/scenario_example.rst
new file mode 100644
index 0000000..7fb6f3e
--- /dev/null
+++ b/tests/deckard/doc/scenario_example.rst
@@ -0,0 +1,337 @@
+Scenario example
+=================
+iter_ns_badaa.rpl
+::
+
+ ; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ CONFIG_END
+
+ SCENARIO_BEGIN Test iterator with NS falsely declaring referral answer as authoritative.
+
+ ; 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
+ ; False declaration here
+ REPLY QR AA NOERROR
+ SECTION QUESTION
+ MORECOWBELL. IN A
+ SECTION AUTHORITY
+ MORECOWBELL. IN NS a.gtld-servers.net.
+ SECTION ADDITIONAL
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR NOERROR
+ SECTION QUESTION
+ a.gtld-servers.net. IN A
+ SECTION ANSWER
+ a.gtld-servers.net. IN A 192.5.6.30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR NOERROR
+ SECTION QUESTION
+ a.gtld-servers.net. IN AAAA
+ SECTION AUTHORITY
+ . SOA bla bla 1 2 3 4 5
+ 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 copy_query
+ REPLY QR AA NOERROR
+ SECTION QUESTION
+ CATALYST.MORECOWBELL. IN A
+ SECTION ANSWER
+ CATALYST.MORECOWBELL. IN A 10.20.30.40
+ SECTION AUTHORITY
+ CATALYST.MORECOWBELL. IN NS a.gtld-servers.net.
+ ENTRY_END
+
+ RANGE_END
+
+ STEP 1 QUERY
+ ENTRY_BEGIN
+ REPLY RD
+ SECTION QUESTION
+ catalyst.morecowbell. IN A
+ ENTRY_END
+
+ ; recursion happens here.
+ STEP 10 CHECK_ANSWER
+ ENTRY_BEGIN
+ MATCH all
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+ catalyst.morecowbell. IN A
+ SECTION ANSWER
+ catalyst.morecowbell. IN A 10.20.30.40
+ ENTRY_END
+
+ SCENARIO_END
+
+Execution flow :
+
+First, STEP 1 QUERY will be performed.
+
+Python sends query to Resolver
+::
+
+ id 31296
+ opcode QUERY
+ rcode NOERROR
+ flags RD
+ edns 1
+ eflags
+ payload 1280
+ ;QUESTION
+ catalyst.morecowbell. IN A
+ ;ANSWER
+ ;AUTHORITY
+ ;ADDITIONAL
+
+At this scenario stub-addr is set to 193.0.14.129, thus Resolver have been configured to use address
+193.0.14.129 as a root server. So it sends query to Python fake server which listen at address 193.0.14.129
+
+::
+
+ > [plan] plan 'catalyst.morecowbell.' type 'A'
+ [resl] => using root hints
+ [resl] => querying: '193.0.14.129' score: 10 zone cut: '.' m12n: 'CaTALYSt.MoReCoWBEll.' type: 'A'
+
+
+::
+
+ id 7367
+ opcode QUERY
+ rcode NOERROR
+ flags
+ edns 0
+ payload 1452
+ ;QUESTION
+ CaTALYSt.MoReCoWBEll. IN A
+ ;ANSWER
+ ;AUTHORITY
+ ;ADDITIONAL
+
+Python fake server starts range analyzing to make answer.
+Let's look at first range
+::
+
+ RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+
+STEP ID is equal 1, so it matches the condition n1 <= step id <= n2
+Next, ADDRESS field is equal to 193.0.14.129. Since query was directed
+specifically to 193.0.14.129, this range will be used.
+
+Next, Python walks through list of entries to choose eligible entry.
+First entry at this range requires comparison of "opcode qtype qname" field list.
+Since opcode is QUERY, first comparison is true.
+Next, qtype field at question section is equal NS.
+But qtype field at question section of incoming query is A.
+So this comparison failed and this entry will be rejected.
+
+Next entry requires comparison of opcode and subdomain fields.
+As we seen, opcode matches.
+Let's look at domain names.
+ENTRY datablock:
+::
+
+ SECTION QUESTION
+ MORECOWBELL. IN A
+
+Incoming query :
+::
+
+ ;QUESTION
+ CaTALYSt.MoReCoWBEll. IN A
+
+So, subdomain matches and second entry of first range used as answer pattern.
+Python fake server sends answer to Resolver :
+::
+
+ id 7367
+ opcode QUERY
+ rcode NOERROR
+ flags QR AA
+ edns 0
+ payload 1280
+ ;QUESTION
+ CaTALYSt.MoReCoWBEll. IN A
+ ;ANSWER
+ ;AUTHORITY
+ MORECOWBELL. 3600 IN NS a.gtld-servers.net.
+ ;ADDITIONAL
+ a.gtld-servers.net. 3600 IN A 192.5.6.30
+
+Note that additional section contains IP address. Because new address is found,
+Python fake server immediately starts listening on this address.
+Resolver sends next query to 192.5.6.30:
+
+::
+
+ [iter] <= referral response, follow
+ [ pc ] => answer cached for TTL=900
+ [resl] => querying: '192.5.6.30' score: 10 zone cut: 'morecowbell.' m12n: 'catalyst.mOREcoWBEll.' type: 'A'
+
+
+::
+
+ id 58167
+ opcode QUERY
+ rcode NOERROR
+ flags
+ edns 0
+ payload 1452
+ ;QUESTION
+ catalyst.mOREcoWBEll. IN A
+ ;ANSWER
+ ;AUTHORITY
+ ;ADDITIONAL
+
+Since query is directed to 192.5.6.30,
+this range will be analyzed :
+::
+
+ ; a.gtld-servers.net.
+ RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+
+It has a single entry, which requires "opcode qtype qname" field list to be compared.
+Opcode and qtype fields are the same as fields in incoming query.
+Let's compare qname.
+ENTRY datablock :
+::
+
+ SECTION QUESTION
+ CATALYST.MORECOWBELL. IN A
+
+Incoming query :
+::
+
+ ;QUESTION
+ catalyst.mOREcoWBEll. IN A
+
+So, qname also the same. All fields matches and Python server sends answer
+derived from this entry :
+::
+
+ id 58167
+ opcode QUERY
+ rcode NOERROR
+ flags QR AA
+ edns 0
+ payload 1280
+ ;QUESTION
+ cAtaLyst.MoRECowBEll. IN A
+ ;ANSWER
+ CATALYST.MORECOWBELL. 3600 IN A 10.20.30.40
+ ;AUTHORITY
+ CATALYST.MORECOWBELL. 3600 IN NS a.gtld-servers.net.
+ ;ADDITIONAL
+
+Here Python found new address 10.20.30.40 and starts listening.
+Next queries and answers :
+
+::
+
+ [iter] <= referral response, follow
+ [plan] plan 'a.gtld-servers.net.' type 'AAAA'
+ [resl] => using root hints
+ [resl] => querying: '193.0.14.129' score: 54 zone cut: '.' m12n: 'A.Gtld-sERverS.nEt.' type: 'AAAA'
+
+
+query; Resolver ---> Python (193.0.14.129)
+::
+
+ id 13810
+ opcode QUERY
+ rcode NOERROR
+ flags
+ edns 0
+ payload 1452
+ ;QUESTION
+ A.Gtld-sERverS.nEt. IN AAAA
+ ;ANSWER
+ ;AUTHORITY
+ ;ADDITIONAL
+
+answer; Python ---> Resolver
+::
+
+ id 13810
+ opcode QUERY
+ rcode NOERROR
+ flags QR
+ edns 0
+ payload 1280
+ ;QUESTION
+ A.gTld-serveRS.NET. IN AAAA
+ ;ANSWER
+ ;AUTHORITY
+ . 3600 IN SOA bla. bla. 1 2 3 4 5
+ ;ADDITIONAL
+
+
+at this point Resolver returns answer to query from STEP 1 QUERY.
+
+::
+
+ [iter] <= rcode: NOERROR
+ [ pc ] => answer cached for TTL=900
+ [ rc ] => satisfied from cache
+ [iter] <= rcode: NOERROR
+ [resl] finished: 4, queries: 2, mempool: 16400 B
+
+
+::
+
+ opcode QUERY
+ rcode NOERROR
+ flags QR RD RA
+ edns 0
+ payload 4096
+ ;QUESTION
+ catalyst.morecowbell. IN A
+ ;ANSWER
+ catalyst.morecowbell. 3600 IN A 10.20.30.40
+ ;AUTHORITY
+ ;ADDITIONAL
+
+Now STEP 10 will be performed. Is has a single entry which contains
+**MATCH all** clause. **MATCH all** means set of dns flags must be equal and
+all sections presented in ENTRY must be equal to ones in answer.
+Incoming answer has next flags were set: **QR RD AA**. ENTRY datablock contains
+**REPLY QR RD RA NOERROR** clause. As we see, flags set is equal. Also, we can
+see equality of question and answer sections of both dns messages.
+
+So, Python got expected answer and test is passed.
+
diff --git a/tests/deckard/doc/scenario_guide.rst b/tests/deckard/doc/scenario_guide.rst
new file mode 100644
index 0000000..e588968
--- /dev/null
+++ b/tests/deckard/doc/scenario_guide.rst
@@ -0,0 +1,431 @@
+Deckard scenario guide
+======================
+.. contents::
+
+On the highest level, Deckard scenario consists of three parts (in this order):
+
+- scenario-specific configuration in the header,
+- declarative description of the simulated network environment,
+- sequence of test steps.
+
+The scenario is stored as ASCII encoded text file with following structure:
+
+.. code-block::
+
+ ; configuration part starts on beginning of the file
+ ; comments start with semicolon
+ CONFIG_END
+
+ SCENARIO_BEGIN ; SCENARIO block combines declarative description and sequence of steps
+
+
+ ; declarative description of network environment starts here
+ RANGE_BEGIN a b
+ ENTRY_BEGIN
+ ; entries inside RANGE block describe DNS messages
+ ; used as answers from simulated network
+ ENTRY_END
+ RANGE_END
+
+
+ ; sequence of test steps begins here
+ STEP x QUERY ; this is step number x
+ ENTRY_BEGIN
+ ; ENTRY inside STEP may describe DNS message sent as query
+ ENTRY_END
+
+ STEP y CHECK_ANSWER ; arbitrary number of steps is allowed
+ ENTRY_BEGIN
+ ; also, ENTRY inside STEP may describe DNS message with expected answer
+ ENTRY_END
+ SCENARIO_END
+
+The scenario is processed as follows:
+
+- Deckard parses configuration block and generates configuration files for binaries under test
+- binaries are executed in an isolated network environment
+- Deckard walks through all ``STEP`` blocks and sends queries to the binary under test, and checks answers it receives
+- when a binary attempts to contact another server, Deckard intercepts the communication and replies with scripted answer as defined in ``RANGE`` blocks
+
+To better understand this structure, we will walk-through from sequential steps through declarative description up to scenario-specific configuration.
+
+Scenario
+--------
+Scenario part starts with ``SCENARIO_BEGIN`` and ends with ``SCENARIO_END`` statements, which are present after ``CONFIG_END`` keyword. ``SCENARIO_BEGIN`` keyword must be followed by scenario description:
+
+.. code-block::
+
+ SCENARIO_BEGIN Test basic query minimization www.example.com.
+ ...
+ SCENARIO_END
+
+
+
+Test steps (``STEP``)
+---------------------
+One ``STEP`` describes one action during scenario execution. It might be action like send next query to binary under test, send reply to binary under test, change faked system time, or check the last answer. Sequence of two steps might look like this:
+
+.. code-block::
+
+ STEP 1 QUERY ; send query specified in the following ENTRY to the binary
+ ENTRY_BEGIN ; ENTRY defines content of DNS message
+ REPLY RD
+ SECTION QUESTION
+ www.example.com. IN A
+ ENTRY_END
+
+ STEP 10 CHECK_ANSWER ; check that answer to the previous query matches following ENTRY
+ ENTRY_BEGIN
+ MATCH all ; MATCH specifies what fields in answer have to match the ENTRY
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. IN CNAME www.next.com.
+ www.next.com. IN A 10.20.30.40
+ SECTION AUTHORITY
+ SECTION ADDITIONAL
+ ENTRY_END
+
+
+Most important parts of a step are:
+
+- id - number specifying order in which steps are executed, e.g. ``1`` or ``10``
+- type - action to execute, e.g. ``QUERY`` or ``CHECK_ANSWER``
+- entry - DNS message content, while meaning of the message depends on the step *type*
+
+One ``STEP`` block starts with ``STEP`` keyword and continues until one of {``STEP``,
+``RANGE``, ``END_SCENARIO``} keywords is found.
+
+Format
+^^^^^^
+
+.. code-block::
+
+ STEP id type [additional data]
+
+- id - step identifier, a positive integer value; all steps must have
+ different id's. This value used within RANGE block, see above.
+- type - step type; can be ``QUERY`` | ``REPLY`` | ``CHECK_ANSWER`` | ``TIME_PASSES ELAPSE`` *seconds*
+
+ - QUERY - send query defined by associated ``ENTRY`` to binary under test
+ - CHECK_ANSWER - check if last received answer matches associated ``ENTRY``
+ - TIME_PASSES ELAPSE - move faked system time for binary under test by number of *seconds* to future
+ - REPLY - *use of this type is discouraged*; it defines one-shot reply to query from binary under test
+
+.. warning::
+ - ``REPLY`` type is useful only if you know exact order of queries sent *by the binary under test*
+ - steps of this type are used only when no matching ``RANGE`` datablock exists
+ - priority of ``REPLY`` type is going to change in future
+
+
+.. _entry:
+
+DNS messages (normal ``ENTRY``)
+-------------------------------
+One ``ENTRY`` describes one DNS message plus additional metadata, depending on intended use of the entry. There are three possible uses of entry which require little bit different entry format. An entry might define:
+
+#. *query message* to be sent in ``STEP QUERY``
+#. *expected message* to be compared with a message received from binary in ``STEP CHECK_ANSWER``
+#. *answer template message* to be used for simulating answers from network in ``RANGE`` block
+
+Particular use of data in an ``ENTRY`` depends on context and is different
+for ``STEP`` types and ``RANGE`` blocks, see details below.
+
+In any case, entry starts with ``ENTRY_BEGIN`` and ends with ``ENTRY_END`` keywords and share ``REPLY`` and ``SECTION`` definitions.
+Some fields in DNS messages have default values which can be overriden by explicit specification.
+
+Format of query messages (for ``STEP QUERY``)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+``STEP QUERY`` requires a DNS message which will be sent by Deckard to the binary under test. Structure of the entry is:
+
+.. code-block::
+
+ STEP <n> QUERY
+ ENTRY_BEGIN
+ REPLY <OPCODE flags> ; REPLY is a bad keyword name, OPCODE and flags will be sent out!
+ SECTION QUESTION ; it is possible to replace QUESTION section or omit it
+ <name> <class> <type> ; to simulate weird queries
+ ENTRY_END
+
+The message will be assigned a random message ID, converted into DNS wire format, and sent to the binary under test.
+
+.. warning:: The keyword ``REPLY`` in fact defines value of flags in the outgoing message. The confusing name is here for compatibility with the original ``testbound``.
+
+
+Format of expected messages (for ``STEP CHECK_ANSWER``)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+``STEP CHECK_ANSWER`` requires a DNS message which will be compared with a reply received from the binary under test. Structure of the entry describing the expected message is:
+
+.. code-block::
+
+ ENTRY_BEGIN
+ MATCH <match element list> ; MATCH elements define what message fields will be compared
+ REPLY <OPCODE RCODE flags> ; REPLY field here defines expected OPCODE, RCODE as well as flags!
+ SECTION QUESTION
+ <name> <class> <type> ; to simulate weird queries
+ SECTION <type2>
+ <RR sets>
+ ENTRY_END
+
+Deckard will compare messages according to *<match element list>*. Any mismatch between *received* message and the *expected* message (specified by the entry) will result in test failure. (See chapter `entry matching`_.)
+
+
+Format of answer templates (for ``RANGE``)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Entries in ``RANGE`` blocks are used to answer queries *from binaries under test*. E.g. if a DNS resolver under test sends query ``. IN NS`` to a simulated server, Deckard will use matching entry associated with the simulated server for reply. Entry used for answer is selected using the same `entry matching`_ logic as with ``STEP CHECK_ANSWER``. The difference is that entry is automatically modified before sending out the answer. These modifications are specified by ``ADJUST`` and ``REPLY`` keywords. It's also possible to not send any reply using the ``ADJUST do_not_answer`` option. See chapters `entry adjusting`_ and `entry flags`_.
+
+.. code-block::
+
+ ENTRY_BEGIN
+ MATCH <match element list> ; all MATCH elements must match before using this answer template
+ ADJUST <adjust element list> ; ADJUST fields will be modified before answering
+ REPLY <OPCODE RCODE flags> ; OPCODE, RCODE, and flags to be set in the outgoing answer
+ SECTION <type1>
+ <RR sets>
+ SECTION <type2>
+ <RR sets>
+ ENTRY_END
+
+
+.. _`entry matching`:
+
+Entry matching
+^^^^^^^^^^^^^^
+Entries present in Deckard scenario define values *expected* in DNS messages. The *expected* values are compared with values in messages *received* from the network. Entry matches only if all specified elements match.
+
+.. code-block::
+
+ MATCH <match element list>
+
+*<match element list>* is a space-separated list of elements in *expected* and *received* messages to be compared. Supported elements are:
+
+============ =========================================================================================
+element DNS message fields and additional rules
+============ =========================================================================================
+opcode ``OPCODE`` as `defined in IANA registry <https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5>`_
+
+ - *expected* message ``OPCODE`` is defined by ``REPLY`` keyword
+
+qtype RR type in question section [qmatch]_
+qname name in question section (case insensitive) [qmatch]_
+qcase name in question section (case sensitive) [qmatch]_
+subdomain name in question section of the *received* message is a subdomain of the name in *expected* question section
+ (case insensitive, exact match accepted) [qmatch]_
+flags all `defined flags <https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-12>`_
+ in message header: ``QR AA TC RD RA AD CD``
+
+ - it does not match on ``DO`` flag which resides in EDNS header flags
+ - *expected* message flags are defined by ``REPLY`` keyword
+
+rcode extended response code (``RCODE`` value
+ `combined from message header and EDNS header <https://tools.ietf.org/html/rfc6891#section-6.1.3>`_)
+
+ - *expected* message ``RCODE`` is defined by ``REPLY`` keyword
+
+question equivalent to ``qtype qname``
+answer whole ANSWER section [sectmatch]_
+authority whole AUTHORITY section [sectmatch]_
+additional whole ADDITIONAL section [sectmatch]_
+edns EDNS `version <https://tools.ietf.org/html/rfc6891#section-6.1.3>`_ and
+ EDNS `payload <https://tools.ietf.org/html/rfc6891#section-6.1.2>`_ size
+nsid `NSID <https://tools.ietf.org/html/rfc5001>`_ presence and value
+all equivalent to ``opcode qtype qname flags rcode answer authority additional``
+============ =========================================================================================
+
+.. [qmatch] *Expected* values are defined by QUESTION section in the entry. If the *expected* QUESTION section is empty, the conditions is ignored. Only values from the first (qname, qclass, qtype) tuple are checked. Question matching is case insensitive (except for ``qcase``).
+
+.. [sectmatch] Number of records must match. Owner names are case-insensitive and TTL is ignored. RR data are compared according to type-specific rules. Each RR present in the *expected* message must be present in the *received* message and vice versa.
+
+
+.. _`entry adjusting`:
+
+Entry adjusting
+^^^^^^^^^^^^^^^
+.. code-block::
+
+ ADJUST <adjust element list>
+
+An entry used as a template to prepare an answer to an incoming query might be preprocessed.
+Adjust element list defines what fields will be modified:
+
+============= ===========================================================================================
+element modification to the DNS message
+============= ===========================================================================================
+copy_id query id + query domain name will be copied from incoming message [copy_id_bug]_
+copy_query whole question section will be copied from incoming message
+raw_id query id will be copied into the first two bytes of RAW answer
+do_not_answer no response will be sent at all
+============= ===========================================================================================
+
+.. [copy_id_bug] https://gitlab.labs.nic.cz/knot/deckard/issues/9
+
+
+.. _`entry flags`:
+
+Entry flags
+^^^^^^^^^^^
+.. code-block::
+
+ REPLY <RCODE flags>
+
+*<RCODE flags>* is space-separated RCODE and list of flags in the entry. Usage of these flags depend on entry context.
+
+Supported values:
+
+ - NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMP, REFUSED, YXDOMAIN, YXRRSET, NXRRSET, NOTAUTH, NOTZONE, BADVERS - standard rcodes
+ - QR, AA, TC, RD, RA, AD, CD - i.e. standard dns flags
+ - DO - enable 'DNSSEC desired' flag
+
+.. warning:: The keyword ``REPLY`` has different meaning depending on the ``ENTRY`` context.
+
+
+Entry RR sections
+^^^^^^^^^^^^^^^^^
+An entry might specify content of DNS message sections QUESTION, ANSWER, AUTHORITY, and ADDITIONAL. Syntax is of resource records is the same as in zone file. Format:
+
+.. code-block::
+
+ SECTION QUESTION
+ <owner name> [class] <RR type> ; QUESTION is special
+ SECTION <ANSWER/AUTHORITY/ADDITIONAL>
+ <owner name> [TTL] [class] <RR type> <RR data> ; same as in zone file
+ ...
+ <owner name> [TTL] [class] <RR type> <RR data>
+
+Example:
+
+.. code-block::
+
+ SECTION QUESTION
+ www.example.com. IN A
+ SECTION ANSWER
+ www.example.com. IN A 10.20.30.40
+ SECTION AUTHORITY
+ example.com. IN NS ns.example.com.
+ SECTION ADDITIONAL
+ ns.example.com. IN A 1.2.3.4
+
+
+Default values for DNS messages
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+========== ===========================================================================================
+feature default value
+========== ===========================================================================================
+EDNS version 0 with buffer size 4096 B
+REPLY QUERY, NOERROR
+========== ===========================================================================================
+
+
+Entry with RAW data
+^^^^^^^^^^^^^^^^^^^
+An entry might have special section named ``RAW``. This section is used only for sending raw,
+potentially invalid DNS messages. The section contains a single-line data interpreted as hexadecimal string.
+Data decoded from this string will be sent to binary under test without any changes.
+
+Deckard does not expect any answer to RAW queries, so ``STEP CHECK_ANSWER`` is not needed.
+Main intent of this behavior is to check if binary under test is
+able to process valid queries after getting series badly formed packets.
+
+It is also possible to use ``RAW`` in conjuction with ``SECTION`` for the
+purpose of responding with raw data to a query that matches the ``SECTION``.
+It's possible to modify raw data to use query's ID by using ``ADJUST raw_id``.
+
+One ``ENTRY`` can contain only one ``RAW`` section.
+
+Example
+
+.. code-block::
+
+ ENTRY_BEGIN
+ RAW
+ b5c9ca3d50104320f4120000000000000000
+ ENTRY_END
+
+
+
+Mock answers (``RANGE``)
+------------------------
+When Deckard receives a query *from binary under test*, it searches for mock answers.
+A set of mock answers for particular set of IP addresses and ID range is described using ``RANGE``
+block starting with ``RANGE_BEGIN`` keyword. The ``RANGE`` contains mock DNS messages represented
+as ENTRY_ blocks which specify `entry matching`_ conditions along with `entry adjusting`_ actions and `entry flags`_ specification.
+
+Format:
+
+.. code-block::
+
+ ; comment before the range, e.g. K.ROOT-SERVERS.NET.
+ RANGE_BEGIN 0 100 ; this RANGE is valid for STEP IDs <0, 100>
+ ADDRESS 193.0.14.129 ; IP address simulated by this range
+ ;ADDRESS 192.0.2.222 ; multiple IP addresses are allowed
+
+ ENTRY_BEGIN ; first ENTRY in this range
+ MATCH opcode qtype qname ; use this entry only if all these match the query
+ ADJUST copy_id ; adjust message ID before senting the answer
+ REPLY QR NOERROR ; answer with RCODE NOERROR and QR flag set
+ SECTION QUESTION
+ . IN NS ; MATCH qname qtype are compared with this value
+ SECTION ANSWER ; all this will be copied verbatim to the answer
+ . IN NS K.ROOT-SERVERS.NET.
+ SECTION ADDITIONAL
+ K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ ENTRY_END
+
+ ENTRY_BEGIN ; second ENTRY in this range
+ ...
+ ENTRY_END
+
+ RANGE_END
+
+When Deckard receives a query *from binary under test*, it searches for an eligible range. When an eligible range is found, it searches inside the range to find a mock answer. In detail, it works like this:
+
+#. Deckard searches for an eligible ``RANGE`` block. Following two conditions must be fulfilled:
+
+ - current ``STEP ID`` is inside ID range specified by ``RANGE_BEGIN`` keyword.
+ - target IP address of the query is in set of IP addresses specified using ``ADDRESS`` keywords
+
+#. If an eligible range is found, Deckard examines all entries in the range and evaluate all ``MATCH`` conditions associated with entries.
+#. An entry where all MATCH conditions are fulfilled is used as template for the mock answer. (See `entry matching`_.)
+#. Mock answer is modified according to ``ADJUST`` and ``REPLY`` keywords. (See `entry adjusting`_ actions and `entry flags`_ specification.)
+#. The modified answer message is sent to the binary under test.
+
+Valid scenario must specify answers for all queries generated by the binary under test. The test will fail if no answer is found in the eligible range or if no eligible range is defined.
+
+.. note:: Behavior of the binary under test, including queries it generates, depends on its configuration. For example enabling or disabling query name minimization will change minimal set of queries which a test scenario has to describe using ``RANGE`` blocks.
+
+.. tip:: It is recommended to construct scenarios that support multiple configurations and possibly software implementations. This leads to higher number of entries in ``RANGE`` blocks but provides robustness against changes in particular implementation. E.g. a scenario for DNS resolver testing can be developed using multiple DNS resolver implementations and combine entries for all of them inside single scenario. With this approach a small change in a resolver implementation will likely not require further changes to the scenario.
+
+
+Configuration (``CONFIG_END``)
+------------------------------
+Configuration block affects behavior of the binary under test. Deckard transforms configuration block into configuration for the binary under test.
+
+Format is list of "key: value" pairs, one pair per line. There is no explicit start keyword, configuration block starts immediately at scenario file begin and ends with keyword ``CONFIG_END``.
+
+.. code-block::
+
+ ; config options
+ query-minimization: on
+ stub-addr: 193.0.14.129 ; K.ROOT-SERVERS.NET.
+ trust-anchor: ". 3600 IN DS 10000 13 4 ABCDEF0123456789"
+ val-override-date: "1442323400"
+ CONFIG_END
+
+========================== ======= =====================================================================
+config option default meaning
+========================== ======= =====================================================================
+do-not-query-localhost on on = queries cannot be sent to 127.0.0.1/8 or ::1/128 addresses
+domain-insecure (none) domain name specifying DNS sub-tree with explicitly disabled DNSSEC validation
+force-ipv6 off use a IPv6 address as ``stub-addr``
+harden-glue on additional checks on glue addresses
+query-minimization on RFC 7816 query algorithm enabled; default inherited from QMIN environment variable
+stub-addr (none) IP address for resolver priming queries (RFC 8109)
+trust-anchor (none) owner name with its DS records (this option can be repeated multiple times)
+val-override-date (none) system time reported to binary under the test; format ``YYYYMMDDHHMMSS``, so ``20120420235959`` means ``Fri Apr 20 23:59:59 2012``
+val-override-timestamp (none) system time reported to binary under the test: format POSIX timestamp
+========================== ======= =====================================================================
+
+Examples
+--------
+See `scenatio example <scenario_example.rst>`_. The example there is a bit terse but still valid.
diff --git a/tests/deckard/doc/user_guide.rst b/tests/deckard/doc/user_guide.rst
new file mode 100644
index 0000000..b6e379f
--- /dev/null
+++ b/tests/deckard/doc/user_guide.rst
@@ -0,0 +1,297 @@
+.. sectnum::
+
+How to use Deckard
+==================
+.. contents::
+
+Deckard runs one or more binaries in isolated network which is described by so-called *scenario*.
+There are four components in play:
+
+- Deckard itself (test orchestrator)
+- binary under test (your own)
+- configuration for the binary (generated by Deckard from *template* and *YaML configuration*, i.e. ``.j2`` and ``.yaml`` files)
+- environment description and test data (Deckard *scenario*, i.e. ``.rpl`` file)
+
+It is easy to run tests if everything is already prepared and running tests gets harder
+as number of components you have to prepare yourself raises.
+
+Let's start with the easiest case:
+
+First run
+---------
+Easiest way to run Deckard is using one of the prepared Shell scripts in Deckard repository (``{kresd,unbound,pdns}_run.sh`` for Knot Resolver, Unbound and PowerDNS Recursor respectively).
+
+Please note that Deckard depends on a couple of modified C libraries.
+These will be automatically downloaded and compiled on first run, so do not be surprised when you see
+output from Git and C compiler:
+
+.. code-block::
+
+ $ ./kresd_run.sh
+ Submodule 'contrib/libfaketime' (https://github.com/wolfcw/libfaketime.git) registered for path 'contrib/libfaketime'
+ Submodule 'contrib/libswrap' (https://gitlab.labs.nic.cz/labs/socket_wrapper.git) registered for path 'contrib/libswrap'
+ [...]
+ -- The C compiler identification is GNU 6.3.1
+ [...]
+ [ 50%] Building C object src/CMakeFiles/socket_wrapper.dir/socket_wrapper.c.o
+ [...]
+ [100%] Built target socket_wrapper
+ …
+
+For details see `README <../README.rst>`_.
+
+Deckard uses `pytest` to generate and run the tests as well as collect the results.
+Output is therefore generated by `pytest` as well (``.`` for passed test, ``F`` for failed test and ``s`` for skipped test) and will look something like this:
+
+.. code-block::
+
+ $ ./kresd_run.sh
+ ........s...s...s....................ssss...s.ss.............ssss..s..ss [ 24%]
+ ssss.....sssssssssssssss.sssss.......ssssss.ss...s..s.ss.sss.s.s........ [ 49%]
+ .............ssss....................................................... [ 73%]
+ ........................................................................ [ 98%]
+ .... [100%]
+ 229 passed, 62 skipped in 76.50 seconds
+
+.. note:: There is a lot of tests skipped because we run them with query minimization both on and off and some of the scenarios work only with query minimization on (or off respectively). For details see `Scenario guide#Configuration <scenario_guide.rst#configuration-config-end>`_.
+
+ Time elapsed which is printed by `py.test` is often not acurate (or even negative). `py.test` is confused about our time shifting shenanigans done with ``libfaketime``. We can overcome this by using ``-n`` command line argument. See below.
+
+
+Command line arguments
+----------------------
+As mentioned above we use `py.test` to run the tests so all possible command line arguments for the ``*run.sh`` scripts can be seen by running ``py.test -h`` in the root of Deckard repository.
+
+Here is a list of the most useful ones:
+
+- ``-n number`` – runs the testing in parallel with ``number`` of processes (this requires `pytest-xdist` to be installed)
+- ``-k EXPRESSION`` – only run tests which match the given substring expression (e.g. ``./kresd_run -k "world_"`` will only run the scenarios with `world_` in their file name.
+- ``--collectonly`` – only print the names of selected tests, no tests will be run
+- ``--log-level DEBUG`` – print all debug information for failed tests
+- ``--scenarios path`` – specifies where to look for `.rpl` files (``sets/resolver`` is the default)
+
+YaML configuration
+------------------
+All ``*_run.sh`` scripts internally call the ``run.sh`` script and pass command line arguments to it. For example:
+
+.. code-block::
+
+ # running ./kresd_run.sh -n 4 -k "iter_" will result in running
+ ./run.sh --config configs/kresd.yaml -n 4 -k "iter_"
+
+As you can see, path to YaML configuration file is passed to ``run.sh``. You can edit one of the prepared ones stored in `configs/` or write your own.
+
+Commented contents of ``kresd.yaml`` follows:
+
+.. code-block:: yaml
+
+ programs:
+ - name: kresd # path to binary under test
+ binary: kresd
+ additional: # list additional parameters for binary under test (e.g. path to configuration files)
+ - -f
+ - "1" # CAUTION: All parameters must be strings.
+ templates:
+ - template/kresd.j2 # list of Jinja2_ template files to generate configuration files
+ configs:
+ - config # list of names of configuration files to be generated from Jinja2_ templates
+ noclean: True # optional, do not remove working dir after a successful test
+
+- 'configs' files will be generated from respective files in 'templates' list
+- i.e. the first file in 'configs' list is the result of processing of the first file from 'templates' list and so on
+- generated files are stored in a new working directory created by Deckard for each binary
+
+Most often it is sufficient to use these files for basic configuration changes. Read next section for details about config file templates.
+
+Running multiple binaries
+^^^^^^^^^^^^^^^^^^^^^^^^^
+You can specify multiple programs to run in the YaML configuration. Deckard executes all binaries using parameters from the file. This is handy for testing interoperability of multiple binaries, e.g. when one program is configured as DNS recursor and other program is using it as forwarder.
+
+The YAML file contains **ordered** list of binaries and their parameters. Deckard will send queries to the binary listed first.
+
+.. code-block:: yaml
+
+ programs:
+ - name: forwarding # name of this Knot Resolver instance
+ binary: kresd # kresd is first so it will receive queries from Deckard
+ additional: []
+ templates:
+ - template/kresd_fwd.j2 # this template uses variable IPADDRS['recursor']
+ configs:
+ - config
+ - name: recursor # name of this Unbound instance
+ binary: unbound
+ additional:
+ - -d
+ - -c
+ - unbound.conf
+ templates:
+ - template/unbound.j2
+ - template/hints_zone.j2 # this template uses variable ROOT_ADDR
+ configs:
+ - unbound.conf
+ - hints.zone
+ - ta.keys
+
+In this setup it is necessary to configure one binary to contact the other. IP addresses assigned by Deckard at run-time are accessible using ``IPADDRS`` `template variables`_ and symbolic names assigned to binaries in the YAML file. For example, template ``kresd_fwd.j2`` can use IP address of binary named ``recursor`` like this:
+
+.. code-block:: lua
+
+ policy.add(policy.all(policy.FORWARD("{{IPADDRS['recursor']}}")))
+
+When all preparations are finished, run Deckard using following syntax:
+
+.. code-block:: bash
+
+ $ ./run.sh --config path/to/config.yaml
+
+.. note:: You can run multiple configs in one test instance. Just be aware that ``--scenarios`` must be provided for each config.
+
+.. code-block::
+
+ # This will run scenarios from `scenarios1` folder with configuration from `config1.yaml` and `scenarios2.yaml` with `config2.yaml` respectively.
+ $ ./run.sh --config path/to/config1.yaml --scenarios path/to/scenarios1 --config path/to/config2.yaml --scenarios path/to/scenarios2
+
+
+
+
+Using an existing scenarios with custom configuration template
+--------------------------------------------------------------
+
+It some cases it is necessary to modify or create new template files. Typically this is needed when:
+
+- there are no templates for particular binary (e.g. if you want to test a brand new program)
+- an existing template hardcodes some configuration and you want to change it
+
+Deckard uses the Jinja2_ templating engine (like Ansible or Salt) and supplies several variables that you can use in templates. For simplicity you can imagine that all occurrences of ``{{variable}}`` in template are replaced with value of the *variable*. See Jinja2_ documentation for further details.
+
+Here is an example of template for Unbound:
+
+.. code-block:: jinja
+
+ server:
+ directory: "" # do not leave current working directory
+ chroot: ""
+ pidfile: ""
+ username: ""
+
+ interface: {{SELF_ADDR}} # Deckard will assign an address
+ interface-automatic: no
+ access-control: ::0/0 allow # accept queries from Deckard
+
+ do-daemonize: no # log to stdout & stderr
+ use-syslog: no
+ verbosity: 3 # be verbose, it is handy for debugging
+ val-log-level: 2
+ log-queries: yes
+
+ {% if QMIN == "false" %} # Jinja2 condition
+ qname-minimisation: no # a constant inside condition
+ {% else %}
+ qname-minimisation: yes
+ {% endif %}
+ harden-glue: no # hardcoded constant, use a variable instead!
+
+ root-hints: "hints.zone" # reference to other files in working directory
+ trust-anchor-file: "ta.keys" # use separate template to generate these
+
+This configuration snippet refers to files ``hints.zone`` and ``ta.keys`` which need to be generated as well. Each file uses own template file. An template for ``hints.zone`` might look like this:
+
+.. code-block:: jinja
+
+ # this is hints file which directs resolver to query
+ # fake root server simulated by Deckard
+ . 3600000 NS K.ROOT-SERVERS.NET.
+ # IP address version depends on scenario setting, handle IPv4 & IPv6
+ {% if ':' in ROOT_ADDR %}
+ K.ROOT-SERVERS.NET. 3600000 AAAA {{ROOT_ADDR}}
+ {% else %}
+ K.ROOT-SERVERS.NET. 3600000 A {{ROOT_ADDR}}
+ {% endif %}
+
+Templates can use any of following variables:
+
+.. _`template variables`:
+
+List of variables for templates
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Addresses:
+
+- ``DAEMON_NAME`` - user-specified symbolic name of particular binary under test, e.g. ``recursor``
+- ``IPADDRS`` - dictionary with ``{symbolic name: IP address}`` mapping
+
+ - it is handy for cases where configuration for one binary under test has to refer to another binary under test
+
+- ``ROOT_ADDR`` - fake root server hint (Deckard is listening here; port is not expressed, must be 53)
+
+ - IP version depends on settings in particular scenario
+ - templates must handle IPv4 and IPv6 as well
+
+- ``SELF_ADDR`` - address assigned to the binary under test (port is not expressed, must be 53)
+
+Path variables:
+
+- ``INSTALL_DIR`` - path to directory containing file ``deckard.py``
+- ``WORKING_DIR`` - working directory for binary under test, each binary gets its own directory
+
+DNS specifics:
+
+- ``DO_NOT_QUERY_LOCALHOST`` [bool]_ - allows or disallows querying local addresses
+- ``HARDEN_GLUE`` [bool]_ - enables or disables additional checks on glue addresses
+- ``QMIN`` [bool]_ - enables or disables query minimization respectively
+- ``TRUST_ANCHORS`` - list of trust anchors in form of a DS records, see `scenario guide <doc/scenario_guide.rst>`_
+- ``NEGATIVE_TRUST_ANCHORS`` - list of domain names with explicitly disabled DNSSEC validation
+
+.. [bool] boolean expressed as string ``true``/``false``
+
+It's okay if you don't use all of the variables, but expect some tests to fail. E.g. if you don't set the ``TRUST_ANCHORS``,
+then the DNSSEC tests will not work properly.
+
+
+Debugging scenario execution
+----------------------------
+Output from a failed test looks like this:
+
+.. code-block::
+
+ $ ./kresd_run.sh
+ =========================================== FAILURES ===========================================
+ _____ test_passes_qmin_off[Scenario(path='sets/resolver/val_ta_sentinel.rpl', qmin=False)] _____
+ [...]
+ E ValueError: val_ta_sentinel.rpl step 212 char position 15875, "rcode": expected 'SERVFAIL',
+ E got 'NOERROR' in the response:
+ E id 54873
+ E opcode QUERY
+ E rcode NOERROR
+ E flags QR RD RA AD
+ E edns 0
+ E payload 4096
+ E ;QUESTION
+ E _is-ta-bd19.test. IN A
+ E ;ANSWER
+ E _is-ta-bd19.test. 5 IN A 192.0.2.1
+ E ;AUTHORITY
+ E ;ADDITIONAL
+
+ pydnstest/scenario.py:888: ValueError
+
+In this example, the test step ``212`` in scenario ``sets/resolver/val_ta_sentinel.rpl`` is failing with query-minimisation off. The binary under test did not produce expected answer, so either the test scenario or binary is wrong. If we were debugging this example, we would have to open file ``val_ta_sentinel.rpl`` on character postition ``15875`` and use our brains :-).
+
+Tips:
+
+- details about scenario format are in `the scenario guide <scenario_guide.rst>`_
+- network traffic from each binary is logged in PCAP format to a file in working directory
+- standard output and error from each binary is logged into log file in working directory
+- working directory can be explicitly specified in environment variable ``SOCKET_WRAPPER_DIR``
+- command line argument ``--log-level DEBUG`` forces extra verbose logging, including logs from all binaries and packets handled by Deckard
+
+
+Writting own scenarios
+----------------------
+See `the scenario guide <scenario_guide.rst>`_.
+
+
+
+
+
+.. _`Jinja2`: http://jinja.pocoo.org/
diff --git a/tests/deckard/getdns_run.sh b/tests/deckard/getdns_run.sh
new file mode 100755
index 0000000..2dc7313
--- /dev/null
+++ b/tests/deckard/getdns_run.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+# Below a summary of tests that failed including a reason for the failure.
+# It might be wise to move these out of the way before testing with getdns.
+# Or provide alternatives.
+#
+# Tests known to fail can be moved out of the way:
+#
+# mkdir sets/resolver.out-of-the-way; for t in `grep '^##' getdns_run.sh | sed 's/^## //g'` ; do mv sets/resolver/$t sets/resolver.out-of-the-way; done
+#
+#
+# OPT-OUT is INSECURE
+# ===================
+# These fail because getdns will give answers to proven opt-out NSEC3 spans
+# the INSECURE status, but will include the DNSSEC data still:
+#
+## val_nsec3_b1_nameerror.rpl val_nsec3_b4_wild.rpl val_nsec3_b5_wcnodata.rpl
+## val_nsec3_b5_wcnodata_nowc.rpl val_nsec3_noopt_ref.out
+#
+#
+# Dependent on specific unbound configuration
+# ===========================================
+# These fail because they set specific unbound options in the
+# "; config options" section. We might consider facilitating this in getdns
+# at some point.
+#
+## iter_cycle_noh.rpl iter_ns_spoof.rpl
+#
+#
+# Knot resolver specific behaviour
+# ================================
+# These fail because it tests specific behaviour which is not the only "right"
+# way to do it correct.
+#
+## iter_lame_nosoa.rpl
+#
+#
+# Modules
+# =======
+# These fail because it tests certain modules that getdns does not have (yet).
+#
+## module_dns64.rpl module_policy_pass_deny.rpl
+## module_hint_static.rpl module_policy_rpz.rpl
+## module_policy_deny_all.rpl module_policy_tc.rpl
+## module_policy_deny_suff_comm.rpl module_renumber.rpl
+## module_policy_deny_suff_patt.rpl module_view_addr.rpl
+## module_policy_forward.rpl module_view_tsig.rpl
+#
+#
+# To investigate
+# ==============
+# These tests don't work, but we need to investigate what's wrong.
+#
+## iter_cname_badauth.rpl iter_minim_nonempty.rpl
+## iter_escape_bailiwick.rpl iter_minim_ns.rpl
+## iter_formerr.rpl iter_validate_extradata.rpl
+## iter_lame_root.rpl iter_validate.rpl
+## iter_minim_a_nxdomain.rpl nsec3_wildcard_no_data_response.rpl
+## iter_minim_a.rpl val_nsec3_optout_unsec_cache.rpl
+
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/getdns.yaml "$@"
diff --git a/tests/deckard/knotd_master_run.sh b/tests/deckard/knotd_master_run.sh
new file mode 100755
index 0000000..9a61f3c
--- /dev/null
+++ b/tests/deckard/knotd_master_run.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+echo 'INFO: Tests require Knot compiled with ./configure --enable-recvmmsg=no'
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/knotd_master.yaml "$@"
diff --git a/tests/deckard/knotd_slave_run.sh b/tests/deckard/knotd_slave_run.sh
new file mode 100755
index 0000000..239cef1
--- /dev/null
+++ b/tests/deckard/knotd_slave_run.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+echo 'INFO: Tests require Knot compiled with ./configure --enable-recvmmsg=no'
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/knotd_slave.yaml "$@"
diff --git a/tests/deckard/kresd_run.sh b/tests/deckard/kresd_run.sh
new file mode 100755
index 0000000..5fd93e1
--- /dev/null
+++ b/tests/deckard/kresd_run.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/kresd.yaml "$@"
diff --git a/tests/deckard/pdns_run.sh b/tests/deckard/pdns_run.sh
new file mode 100755
index 0000000..bb1900e
--- /dev/null
+++ b/tests/deckard/pdns_run.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/pdns.yaml "$@"
diff --git a/tests/deckard/platform.mk b/tests/deckard/platform.mk
new file mode 100644
index 0000000..4a96c71
--- /dev/null
+++ b/tests/deckard/platform.mk
@@ -0,0 +1,27 @@
+# Evaluate library
+define have_lib
+ifeq ($$(strip $$($(1)_LIBS)),)
+ HAS_$(1) := no
+else
+ HAS_$(1) := yes
+endif
+endef
+
+# Find library (pkg-config)
+define find_lib
+ $(call find_alt,$(1),$(1),$(2))
+endef
+
+# Find library alternative (pkg-config)
+define find_alt
+ ifeq ($$(strip $$($(1)_LIBS)),)
+ ifneq ($(strip $(3)),)
+ $(1)_VER := $(shell pkg-config --atleast-version=$(3) $(2) && echo $(3))
+ endif
+ ifeq ($(strip $(3)),$$($(1)_VER))
+ $(1)_CFLAGS := $(shell pkg-config --cflags $(2) --silence-errors)
+ $(1)_LIBS := $(shell pkg-config --libs $(2) --silence-errors)
+ endif
+ endif
+ $(call have_lib,$(1),$(3))
+endef
diff --git a/tests/deckard/pydnstest/__init__.py b/tests/deckard/pydnstest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/deckard/pydnstest/__init__.py
diff --git a/tests/deckard/pydnstest/augwrap.py b/tests/deckard/pydnstest/augwrap.py
new file mode 100644
index 0000000..20e7857
--- /dev/null
+++ b/tests/deckard/pydnstest/augwrap.py
@@ -0,0 +1,227 @@
+#!/usr/bin/python3
+
+# Copyright (C) 2017
+
+import posixpath
+import logging
+import os
+import collections
+
+from augeas import Augeas
+
+AUGEAS_LOAD_PATH = '/augeas/load/'
+AUGEAS_FILES_PATH = '/files/'
+AUGEAS_ERROR_PATH = '//error'
+
+log = logging.getLogger('augeas')
+
+
+def join(*paths):
+ """
+ join two Augeas tree paths
+
+ FIXME: Beware: // is normalized to /
+ """
+ norm_paths = [posixpath.normpath(path) for path in paths]
+ # first path must be absolute
+ assert norm_paths[0][0] == '/'
+ new_paths = [norm_paths[0]]
+ # relativize all other paths so join works as expected
+ for path in norm_paths[1:]:
+ if path.startswith('/'):
+ path = path[1:]
+ new_paths.append(path)
+ new_path = posixpath.join(*new_paths)
+ log.debug("join: new_path %s", new_path)
+ return posixpath.normpath(new_path)
+
+
+class AugeasWrapper:
+ """python-augeas higher-level wrapper.
+
+ Load single augeas lens and configuration file.
+ Exposes configuration file as AugeasNode object with dict-like interface.
+
+ AugeasWrapper can be used in with statement in the same way as file does.
+ """
+
+ def __init__(self, confpath, lens, root=None, loadpath=None,
+ flags=Augeas.NO_MODL_AUTOLOAD | Augeas.NO_LOAD | Augeas.ENABLE_SPAN):
+ """Parse configuration file using given lens.
+
+ Params:
+ confpath (str): Absolute path to the configuration file
+ lens (str): Name of module containing Augeas lens
+ root: passed down to original Augeas
+ flags: passed down to original Augeas
+ loadpath: passed down to original Augeas
+ flags: passed down to original Augeas
+ """
+ log.debug('loadpath: %s', loadpath)
+ log.debug('confpath: %s', confpath)
+ self._aug = Augeas(root=root, loadpath=loadpath, flags=flags)
+
+ # /augeas/load/{lens}
+ aug_load_path = join(AUGEAS_LOAD_PATH, lens)
+ # /augeas/load/{lens}/lens = {lens}.lns
+ self._aug.set(join(aug_load_path, 'lens'), '%s.lns' % lens)
+ # /augeas/load/{lens}/incl[0] = {confpath}
+ self._aug.set(join(aug_load_path, 'incl[0]'), confpath)
+ self._aug.load()
+
+ errors = self._aug.match(AUGEAS_ERROR_PATH)
+ if errors:
+ err_msg = '\n'.join(
+ ["{}: {}".format(e, self._aug.get(e)) for e in errors]
+ )
+ raise RuntimeError(err_msg)
+
+ path = join(AUGEAS_FILES_PATH, confpath)
+ paths = self._aug.match(path)
+ if len(paths) != 1:
+ raise ValueError('path %s did not match exactly once' % path)
+ self.tree = AugeasNode(self._aug, path)
+ self._loaded = True
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.save()
+ self.close()
+
+ def save(self):
+ """Save Augeas tree to its original file."""
+ assert self._loaded
+ try:
+ self._aug.save()
+ except IOError as exc:
+ log.exception(exc)
+ for err_path in self._aug.match('//error'):
+ log.error('%s: %s', err_path,
+ self._aug.get(os.path.join(err_path, 'message')))
+ raise
+
+ def close(self):
+ """
+ close Augeas library
+
+ After calling close() the object must not be used anymore.
+ """
+ assert self._loaded
+ self._aug.close()
+ del self._aug
+ self._loaded = False
+
+ def match(self, path):
+ """Yield AugeasNodes matching given expression."""
+ assert self._loaded
+ assert path
+ log.debug('tree match %s', path)
+ for matched_path in self._aug.match(path):
+ yield AugeasNode(self._aug, matched_path)
+
+
+class AugeasNode(collections.MutableMapping):
+ """One Augeas tree node with dict-like interface."""
+
+ def __init__(self, aug, path):
+ """
+ Args:
+ aug (AugeasWrapper or Augeas): Augeas library instance
+ path (str): absolute path in Augeas tree matching single node
+
+ BEWARE: There are no sanity checks of given path for performance reasons.
+ """
+ assert aug
+ assert path
+ assert path.startswith('/')
+ self._aug = aug
+ self._path = path
+ self._span = None
+
+ @property
+ def path(self):
+ """canonical path in Augeas tree, read-only"""
+ return self._path
+
+ @property
+ def value(self):
+ """
+ get value of this node in Augeas tree
+ """
+ value = self._aug.get(self._path)
+ log.debug('tree get: %s = %s', self._path, value)
+ return value
+
+ @value.setter
+ def value(self, value):
+ """
+ set value of this node in Augeas tree
+ """
+ log.debug('tree set: %s = %s', self._path, value)
+ self._aug.set(self._path, value)
+
+ @property
+ def span(self):
+ if self._span is None:
+ self._span = "char position %s" % self._aug.span(self._path)[5]
+ return self._span
+
+ @property
+ def char(self):
+ return self._aug.span(self._path)[5]
+
+ def __len__(self):
+ """
+ number of items matching this path
+
+ It is always 1 after __init__() but it may change
+ as Augeas tree changes.
+ """
+ return len(self._aug.match(self._path))
+
+ def __getitem__(self, key):
+ if isinstance(key, int):
+ # int is a shortcut to write [int]
+ target_path = '%s[%s]' % (self._path, key)
+ else:
+ target_path = self._path + key
+ log.debug('tree getitem: target_path %s', target_path)
+ paths = self._aug.match(target_path)
+ if len(paths) != 1:
+ raise KeyError('path %s did not match exactly once' % target_path)
+ return AugeasNode(self._aug, target_path)
+
+ def __delitem__(self, key):
+ log.debug('tree delitem: %s + %s', self._path, key)
+ target_path = self._path + key
+ log.debug('tree delitem: target_path %s', target_path)
+ self._aug.remove(target_path)
+
+ def __setitem__(self, key, value):
+ assert isinstance(value, AugeasNode)
+ target_path = self.path + key
+ self._aug.copy(value.path, target_path)
+
+ def __iter__(self):
+ self_path_len = len(self._path)
+ assert self_path_len > 0
+
+ log.debug('tree iter: %s', self._path)
+ for new_path in self._aug.match(self._path):
+ if len(new_path) == self_path_len:
+ yield ''
+ else:
+ yield new_path[self_path_len - 1:]
+
+ def match(self, subpath):
+ """Yield AugeasNodes matching given sub-expression."""
+ assert subpath.startswith("/")
+ match_path = "%s%s" % (self._path, subpath)
+ log.debug('tree match %s: %s', match_path, self._path)
+ for matched_path in self._aug.match(match_path):
+ yield AugeasNode(self._aug, matched_path)
+
+ def __repr__(self):
+ return 'AugeasNode(%s)' % self._path
diff --git a/tests/deckard/pydnstest/deckard.aug b/tests/deckard/pydnstest/deckard.aug
new file mode 100644
index 0000000..9e2d167
--- /dev/null
+++ b/tests/deckard/pydnstest/deckard.aug
@@ -0,0 +1,94 @@
+module Deckard =
+ autoload xfm
+
+let del_str = Util.del_str
+
+let space = del /[ \t]+/ " "
+let tab = del /[ \t]+/ "\t"
+let ws = del /[\t ]*/ ""
+let word = /[^\t\n\/; ]+/
+
+let comment = del /[;]/ ";" . [label "comment" . store /[^\n]+/]
+
+let eol = del /([ \t]*([;][^\n]*)?\n)+/ "\n" . Util.indent
+let comment_or_eol = ws . comment? . del_str "\n" . del /([ \t]*([;][^\n]*)?\n)*/ "" . Util.indent
+
+
+(*let comment_or_eol = [ label "#comment" . counter "comment" . (ws . [del /[;#]/ ";" . label "" . store /[^\n]*/ ]? . del_str "\n")]+ . Util.indent
+*)
+
+
+let domain_re = (/[^.\t\n\/; ]+(\.[^.\t\n\/; ]+)*\.?/ | ".") - "SECTION" (*quick n dirty, sorry to whoever will ever own SECTION TLD*)
+let class_re = /CLASS[0-9]+/ | "IN" | "CH" | "HS" | "NONE" | "ANY"
+let domain = [ label "domain" . store domain_re ]
+let ttl = [label "ttl" . store /[0-9]+/]
+let class = [label "class" . store class_re ]
+let type = [label "type" . store ((/[^0-9;\n \t][^\t\n\/; ]*/) - class_re) ]
+(* RFC 3597 section 5 rdata syntax is "\# 1 ab"*)
+let data_re = /((\\#[ \t])?[^ \t\n;][^\n;]*[^ \t\n;])|[^ \t\n;]/ (*Can not start nor end with whitespace but can have whitespace in the middle. Disjunction is there so we match strings of length one.*)
+let data = [label "data" . store data_re ]
+
+let ip_re = /[0-9a-f.:]+/
+let hex_re = /[0-9a-fA-F]+/
+
+
+let match_option = "opcode" | "qtype" | "qcase" | "qname" | "subdomain" | "flags" | "rcode" | "question" | "answer" | "authority" | "additional" | "all" | "edns"
+let adjust_option = "copy_id" | "copy_query" | "raw_id" | "do_not_answer"
+let reply_option = "QR" | "TC" | "AA" | "AD" | "RD" | "RA" | "CD" | "DO" | "NOERROR" | "FORMERR" | "SERVFAIL" | "NXDOMAIN" | "NOTIMP" | "REFUSED" | "YXDOMAIN" | "YXRRSET" | "NXRRSET" | "NOTAUTH" | "NOTZONE" | "BADVERS" | "BADSIG" | "BADKEY" | "BADTIME" | "BADMODE" | "BADNAME" | "BADALG" | "BADTRUNC" | "BADCOOKIE"
+let step_option = "REPLY" | "QUERY" | "CHECK_ANSWER" | "CHECK_OUT_QUERY" | /TIME_PASSES[ \t]+ELAPSE/
+
+let mandatory = [del_str "MANDATORY" . label "mandatory" . value "true" . comment_or_eol]
+let tsig = [del_str "TSIG" . label "tsig" . space . [label "keyname" . store word] . space . [label "secret" . store word] . comment_or_eol]
+
+let match = (mandatory | tsig)* . [ label "match_present" . value "true" . del_str "MATCH" ] . [space . label "match" . store match_option ]+ . comment_or_eol
+let adjust = (mandatory | tsig)* . del_str "ADJUST" . [space . label "adjust" . store adjust_option ]+ . comment_or_eol
+let reply = (mandatory | tsig)* . del ("REPLY" | "FLAGS") "REPLY" . [space . label "reply" . store reply_option ]+ . comment_or_eol
+
+
+let question = [label "record" . domain . tab . (class . tab)? . type . comment_or_eol ]
+let record = [label "record" . domain . tab . (ttl . tab)? . (class . tab)? . type . tab . data . comment_or_eol]
+
+let section_question = [ label "question" . del_str "SECTION QUESTION" .
+ comment_or_eol . question? ]
+let section_answer = [ label "answer" . del_str "SECTION ANSWER" .
+ comment_or_eol . record* ]
+let section_authority = [ label "authority" . del_str "SECTION AUTHORITY" .
+ comment_or_eol . record* ]
+let section_additional = [ label "additional" . del_str "SECTION ADDITIONAL" .
+ comment_or_eol . record* ]
+let sections = [label "section" . section_question? . section_answer? . section_authority? . section_additional?]
+let raw = [del_str "RAW" . comment_or_eol . label "raw" . store hex_re ] . comment_or_eol
+
+(* This is quite dirty hack to match every combination of options given to entry since 'let dnsmsg = ((match | adjust | reply | mandatory | tsig)* . sections)' just is not possible *)
+
+let dnsmsg = (match . (adjust . reply? | reply . adjust?)? | adjust . (match . reply? | reply . match?)? | reply . (match . adjust? | adjust . match?)?)? . (mandatory | tsig)* . sections
+
+let entry = [label "entry" . del_str "ENTRY_BEGIN" . comment_or_eol . dnsmsg . raw? . del_str "ENTRY_END" . eol]
+
+let single_address = [ label "address" . space . store ip_re ]
+
+let addresses = [label "address" . counter "address" . [seq "address" . del_str "ADDRESS" . space . store ip_re . comment_or_eol]+]
+
+let range = [label "range" . del_str "RANGE_BEGIN" . space . [ label "from" . store /[0-9]+/] . space .
+ [ label "to" . store /[0-9]+/] . single_address? . comment_or_eol . addresses? . entry* . del_str "RANGE_END" . eol]
+
+let step = [label "step" . del_str "STEP" . space . store /[0-9]+/ . space . [label "type" . store step_option] . [space . label "timestamp" . store /[0-9]+/]? . comment_or_eol .
+ entry? ]
+
+let config_record = /[^\n]*/ - ("CONFIG_END" | /STEP.*/ | /SCENARIO.*/ | /RANGE.*/ | /ENTRY.*/)
+
+let config = [ label "config" . counter "config" . [seq "config" . store config_record . del_str "\n"]* . del_str "CONFIG_END" . comment_or_eol ]
+
+let guts = (step | range )*
+
+let scenario = [label "scenario" . del_str "SCENARIO_BEGIN" . space . store data_re . comment_or_eol . guts . del_str "SCENARIO_END" . eol]
+
+let lns = config? . scenario
+
+(* TODO: REPLAY step *)
+(* TODO: store all comments into the tree instead of ignoring them *)
+
+(*let filter = incl "/home/test/*.rpl"*)
+let filter = incl "/home/sbalazik/nic/deckard/git/sets/resolver/*.rpl"
+
+let xfm = transform lns filter
diff --git a/tests/deckard/pydnstest/empty.rpl b/tests/deckard/pydnstest/empty.rpl
new file mode 100644
index 0000000..295d5a5
--- /dev/null
+++ b/tests/deckard/pydnstest/empty.rpl
@@ -0,0 +1,20 @@
+stub-addr: 127.0.0.10
+CONFIG_END
+
+SCENARIO_BEGIN empty replies
+
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.10
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+SECTION QUESTION
+. IN A
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/pydnstest/matchpart.py b/tests/deckard/pydnstest/matchpart.py
new file mode 100644
index 0000000..294e64c
--- /dev/null
+++ b/tests/deckard/pydnstest/matchpart.py
@@ -0,0 +1,238 @@
+"""matchpart is used to compare two DNS messages using a single criterion"""
+
+from typing import ( # noqa
+ Any, Hashable, Sequence, Tuple, Union)
+
+import dns.edns
+import dns.rcode
+import dns.set
+
+MismatchValue = Union[str, Sequence[Any]]
+
+
+class DataMismatch(Exception):
+ def __init__(self, exp_val, got_val):
+ super().__init__()
+ self.exp_val = exp_val
+ self.got_val = got_val
+
+ @staticmethod
+ def format_value(value: MismatchValue) -> str:
+ if isinstance(value, list):
+ return ' '.join([str(val) for val in value])
+ else:
+ return str(value)
+
+ def __str__(self) -> str:
+ return 'expected "{}" got "{}"'.format(
+ self.format_value(self.exp_val),
+ self.format_value(self.got_val))
+
+ def __eq__(self, other):
+ return (isinstance(other, DataMismatch)
+ and self.exp_val == other.exp_val
+ and self.got_val == other.got_val)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ @property
+ def key(self) -> Tuple[Hashable, Hashable]:
+ def make_hashable(value):
+ if isinstance(value, (list, dns.set.Set)):
+ value = (make_hashable(item) for item in value)
+ value = tuple(value)
+ return value
+
+ return (make_hashable(self.exp_val), make_hashable(self.got_val))
+
+ def __hash__(self) -> int:
+ return hash(self.key)
+
+
+def compare_val(exp, got):
+ """Compare arbitraty objects, throw exception if different. """
+ if exp != got:
+ raise DataMismatch(exp, got)
+ return True
+
+
+def compare_rrs(expected, got):
+ """ Compare lists of RR sets, throw exception if different. """
+ for rr in expected:
+ if rr not in got:
+ raise DataMismatch(expected, got)
+ for rr in got:
+ if rr not in expected:
+ raise DataMismatch(expected, got)
+ if len(expected) != len(got):
+ raise DataMismatch(expected, got)
+ return True
+
+
+def compare_rrs_types(exp_val, got_val, skip_rrsigs):
+ """sets of RR types in both sections must match"""
+ def rr_ordering_key(rrset):
+ if rrset.covers:
+ return rrset.covers, 1 # RRSIGs go to the end of RRtype list
+ else:
+ return rrset.rdtype, 0
+
+ def key_to_text(rrtype, rrsig):
+ if not rrsig:
+ return dns.rdatatype.to_text(rrtype)
+ else:
+ return 'RRSIG(%s)' % dns.rdatatype.to_text(rrtype)
+
+ if skip_rrsigs:
+ exp_val = (rrset for rrset in exp_val
+ if rrset.rdtype != dns.rdatatype.RRSIG)
+ got_val = (rrset for rrset in got_val
+ if rrset.rdtype != dns.rdatatype.RRSIG)
+
+ exp_types = frozenset(rr_ordering_key(rrset) for rrset in exp_val)
+ got_types = frozenset(rr_ordering_key(rrset) for rrset in got_val)
+ if exp_types != got_types:
+ exp_types = tuple(key_to_text(*i) for i in sorted(exp_types))
+ got_types = tuple(key_to_text(*i) for i in sorted(got_types))
+ raise DataMismatch(exp_types, got_types)
+
+
+def check_question(question):
+ if len(question) > 2:
+ raise NotImplementedError("More than one record in QUESTION SECTION.")
+
+
+def match_opcode(exp, got):
+ return compare_val(exp.opcode(),
+ got.opcode())
+
+
+def match_qtype(exp, got):
+ check_question(exp.question)
+ check_question(got.question)
+ if not exp.question and not got.question:
+ return True
+ if not exp.question:
+ raise DataMismatch("<empty question>", got.question[0].rdtype)
+ if not got.question:
+ raise DataMismatch(exp.question[0].rdtype, "<empty question>")
+ return compare_val(exp.question[0].rdtype,
+ got.question[0].rdtype)
+
+
+def match_qname(exp, got):
+ check_question(exp.question)
+ check_question(got.question)
+ if not exp.question and not got.question:
+ return True
+ if not exp.question:
+ raise DataMismatch("<empty question>", got.question[0].name)
+ if not got.question:
+ raise DataMismatch(exp.question[0].name, "<empty question>")
+ return compare_val(exp.question[0].name,
+ got.question[0].name)
+
+
+def match_qcase(exp, got):
+ check_question(exp.question)
+ check_question(got.question)
+ if not exp.question and not got.question:
+ return True
+ if not exp.question:
+ raise DataMismatch("<empty question>", got.question[0].name.labels)
+ if not got.question:
+ raise DataMismatch(exp.question[0].name.labels, "<empty question>")
+ return compare_val(exp.question[0].name.labels,
+ got.question[0].name.labels)
+
+
+def match_subdomain(exp, got):
+ if not exp.question:
+ return True
+ if got.question:
+ qname = got.question[0].name
+ else:
+ qname = dns.name.root
+ if exp.question[0].name.is_superdomain(qname):
+ return True
+ raise DataMismatch(exp, got)
+
+
+def match_flags(exp, got):
+ return compare_val(dns.flags.to_text(exp.flags),
+ dns.flags.to_text(got.flags))
+
+
+def match_rcode(exp, got):
+ return compare_val(dns.rcode.to_text(exp.rcode()),
+ dns.rcode.to_text(got.rcode()))
+
+
+def match_answer(exp, got):
+ return compare_rrs(exp.answer,
+ got.answer)
+
+
+def match_answertypes(exp, got):
+ return compare_rrs_types(exp.answer,
+ got.answer, skip_rrsigs=True)
+
+
+def match_answerrrsigs(exp, got):
+ return compare_rrs_types(exp.answer,
+ got.answer, skip_rrsigs=False)
+
+
+def match_authority(exp, got):
+ return compare_rrs(exp.authority,
+ got.authority)
+
+
+def match_additional(exp, got):
+ return compare_rrs(exp.additional,
+ got.additional)
+
+
+def match_edns(exp, got):
+ if got.edns != exp.edns:
+ raise DataMismatch(exp.edns,
+ got.edns)
+ if got.payload != exp.payload:
+ raise DataMismatch(exp.payload,
+ got.payload)
+
+
+def match_nsid(exp, got):
+ nsid_opt = None
+ for opt in exp.options:
+ if opt.otype == dns.edns.NSID:
+ nsid_opt = opt
+ break
+ # Find matching NSID
+ for opt in got.options:
+ if opt.otype == dns.edns.NSID:
+ if not nsid_opt:
+ raise DataMismatch(None, opt.data)
+ if opt == nsid_opt:
+ return True
+ else:
+ raise DataMismatch(nsid_opt.data, opt.data)
+ if nsid_opt:
+ raise DataMismatch(nsid_opt.data, None)
+ return True
+
+
+MATCH = {"opcode": match_opcode, "qtype": match_qtype, "qname": match_qname, "qcase": match_qcase,
+ "subdomain": match_subdomain, "flags": match_flags, "rcode": match_rcode,
+ "answer": match_answer, "answertypes": match_answertypes,
+ "answerrrsigs": match_answerrrsigs, "authority": match_authority,
+ "additional": match_additional, "edns": match_edns,
+ "nsid": match_nsid}
+
+
+def match_part(exp, got, code):
+ try:
+ return MATCH[code](exp, got)
+ except KeyError:
+ raise NotImplementedError('unknown match request "%s"' % code)
diff --git a/tests/deckard/pydnstest/scenario.py b/tests/deckard/pydnstest/scenario.py
new file mode 100644
index 0000000..5e0661b
--- /dev/null
+++ b/tests/deckard/pydnstest/scenario.py
@@ -0,0 +1,1058 @@
+# FIXME pylint: disable=too-many-lines
+from abc import ABC
+import binascii
+import calendar
+from datetime import datetime
+import errno
+import logging
+import os
+import posixpath
+import random
+import socket
+import string
+import struct
+import time
+from typing import Optional
+
+import dns.dnssec
+import dns.message
+import dns.name
+import dns.rcode
+import dns.rrset
+import dns.tsigkeyring
+
+import pydnstest.augwrap
+import pydnstest.matchpart
+
+
+def str2bool(v):
+ """ Return conversion of JSON-ish string value to boolean. """
+ return v.lower() in ('yes', 'true', 'on', '1')
+
+
+# Global statistics
+g_rtt = 0.0
+g_nqueries = 0
+
+
+def recvfrom_msg(stream, raw=False):
+ """
+ Receive DNS message from TCP/UDP socket.
+
+ Returns:
+ if raw == False: (DNS message object, peer address)
+ if raw == True: (blob, peer address)
+ """
+ if stream.type & socket.SOCK_DGRAM:
+ data, addr = stream.recvfrom(4096)
+ elif stream.type & socket.SOCK_STREAM:
+ data = stream.recv(2)
+ if not data:
+ return None, None
+ msg_len = struct.unpack_from("!H", data)[0]
+ data = b""
+ received = 0
+ while received < msg_len:
+ next_chunk = stream.recv(4096)
+ if not next_chunk:
+ return None, None
+ data += next_chunk
+ received += len(next_chunk)
+ addr = stream.getpeername()[0]
+ else:
+ raise NotImplementedError("[recvfrom_msg]: unknown socket type '%i'" % stream.type)
+ if raw:
+ return data, addr
+ else:
+ msg = dns.message.from_wire(data, one_rr_per_rrset=True)
+ return msg, addr
+
+
+def sendto_msg(stream, message, addr=None):
+ """ Send DNS/UDP/TCP message. """
+ try:
+ if stream.type & socket.SOCK_DGRAM:
+ if addr is None:
+ stream.send(message)
+ else:
+ stream.sendto(message, addr)
+ elif stream.type & socket.SOCK_STREAM:
+ data = struct.pack("!H", len(message)) + message
+ stream.send(data)
+ else:
+ raise NotImplementedError("[sendto_msg]: unknown socket type '%i'" % stream.type)
+ except socket.error as ex:
+ if ex.errno != errno.ECONNREFUSED: # TODO Investigate how this can happen
+ raise
+
+
+def replay_rrs(rrs, nqueries, destination, args=None):
+ """ Replay list of queries and report statistics. """
+ if args is None:
+ args = []
+ navail, queries = len(rrs), []
+ chunksize = 16
+ for i in range(nqueries if 'RAND' in args else navail):
+ rr = rrs[i % navail]
+ name = rr.name
+ if 'RAND' in args:
+ prefix = ''.join([random.choice(string.ascii_letters + string.digits)
+ for _ in range(8)])
+ name = prefix + '.' + rr.name.to_text()
+ msg = dns.message.make_query(name, rr.rdtype, rr.rdclass)
+ if 'DO' in args:
+ msg.want_dnssec(True)
+ queries.append(msg.to_wire())
+ # Make a UDP connected socket to the destination
+ family = socket.AF_INET6 if ':' in destination[0] else socket.AF_INET
+ sock = socket.socket(family, socket.SOCK_DGRAM)
+ sock.connect(destination)
+ sock.setblocking(False)
+ # Play the query set
+ # @NOTE: this is only good for relative low-speed replay
+ rcvbuf = bytearray('\x00' * 512)
+ nsent, nrcvd, nwait, navail = 0, 0, 0, len(queries)
+ fdset = [sock]
+ import select
+ while nsent - nwait < nqueries:
+ to_read, to_write, _ = select.select(fdset, fdset if nwait < chunksize else [], [], 0.5)
+ if to_write:
+ try:
+ while nsent < nqueries and nwait < chunksize:
+ sock.send(queries[nsent % navail])
+ nwait += 1
+ nsent += 1
+ except socket.error:
+ pass # EINVAL
+ if to_read:
+ try:
+ while nwait > 0:
+ sock.recv_into(rcvbuf)
+ nwait -= 1
+ nrcvd += 1
+ except socket.error:
+ pass
+ if not to_write and not to_read:
+ nwait = 0 # Timeout, started dropping packets
+ break
+ return nsent, nrcvd
+
+
+class DNSBlob(ABC):
+ def to_wire(self) -> bytes:
+ raise NotImplementedError
+
+ def __str__(self) -> str:
+ return '<DNSBlob>'
+
+
+class DNSMessage(DNSBlob):
+ def __init__(self, message: dns.message.Message) -> None:
+ assert message is not None
+ self.message = message
+
+ def to_wire(self) -> bytes:
+ return self.message.to_wire(max_size=65535)
+
+ def __str__(self) -> str:
+ return str(self.message)
+
+
+class DNSReply(DNSMessage):
+ def __init__(
+ self,
+ message: dns.message.Message,
+ query: Optional[dns.message.Message] = None,
+ copy_id: bool = False,
+ copy_query: bool = False
+ ) -> None:
+ super().__init__(message)
+ if copy_id or copy_query:
+ if query is None:
+ raise ValueError("query must be provided to adjust copy_id/copy_query")
+ self.adjust_reply(query, copy_id, copy_query)
+
+ def adjust_reply(
+ self,
+ query: dns.message.Message,
+ copy_id: bool = True,
+ copy_query: bool = True
+ ) -> None:
+ answer = dns.message.from_wire(self.message.to_wire(),
+ xfr=self.message.xfr,
+ one_rr_per_rrset=True)
+ answer.use_edns(query.edns, query.ednsflags, options=self.message.options)
+ if copy_id:
+ answer.id = query.id
+ # Copy letter-case if the template has QD
+ if answer.question:
+ answer.question[0].name = query.question[0].name
+ if copy_query:
+ answer.question = query.question
+ # Re-set, as the EDNS might have reset the ext-rcode
+ answer.set_rcode(self.message.rcode())
+
+ # sanity check: adjusted answer should be almost the same
+ assert len(answer.answer) == len(self.message.answer)
+ assert len(answer.authority) == len(self.message.authority)
+ assert len(answer.additional) == len(self.message.additional)
+ self.message = answer
+
+
+class DNSReplyRaw(DNSBlob):
+ def __init__(
+ self,
+ wire: bytes,
+ query: Optional[dns.message.Message] = None,
+ copy_id: bool = False
+ ) -> None:
+ assert wire is not None
+ self.wire = wire
+ if copy_id:
+ self.adjust_reply(query, copy_id)
+
+ def adjust_reply(
+ self,
+ query: dns.message.Message,
+ copy_id: bool = True
+ ) -> None:
+ if copy_id:
+ if len(self.wire) < 2:
+ raise ValueError(
+ 'wire data must contain at least 2 bytes to adjust query id')
+ raw_answer = bytearray(self.wire)
+ struct.pack_into('!H', raw_answer, 0, query.id)
+ self.wire = bytes(raw_answer)
+
+ def to_wire(self) -> bytes:
+ return self.wire
+
+ def __str__(self) -> str:
+ return '<DNSReplyRaw>'
+
+
+class DNSReplyServfail(DNSMessage):
+ def __init__(self, query: dns.message.Message) -> None:
+ message = dns.message.make_response(query)
+ message.set_rcode(dns.rcode.SERVFAIL)
+ super().__init__(message)
+
+
+class Entry:
+ """
+ Data entry represents scripted message and extra metadata,
+ notably match criteria and reply adjustments.
+ """
+
+ # Globals
+ default_ttl = 3600
+ default_cls = 'IN'
+ default_rc = 'NOERROR'
+
+ def __init__(self, node):
+ """ Initialize data entry. """
+ self.node = node
+ self.origin = '.'
+ self.message = dns.message.Message()
+ self.message.use_edns(edns=0, payload=4096)
+ self.fired = 0
+
+ # RAW
+ self.raw_data = None # type: Optional[bytes]
+ self.is_raw_data_entry = self.process_raw()
+
+ # MATCH
+ self.match_fields = self.process_match()
+
+ # FLAGS
+ self.process_reply_line()
+
+ # ADJUST
+ self.adjust_fields = {m.value for m in node.match("/adjust")}
+
+ # MANDATORY
+ try:
+ self.mandatory = list(node.match("/mandatory"))[0]
+ except (KeyError, IndexError):
+ self.mandatory = None
+
+ # TSIG
+ self.process_tsig()
+
+ # SECTIONS & RECORDS
+ self.sections = self.process_sections()
+
+ def process_raw(self):
+ try:
+ self.raw_data = binascii.unhexlify(self.node["/raw"].value)
+ return True
+ except KeyError:
+ return False
+
+ def process_match(self):
+ try:
+ self.node["/match_present"]
+ except KeyError:
+ return None
+
+ fields = set(m.value for m in self.node.match("/match"))
+
+ if 'all' in fields:
+ fields.remove("all")
+ fields |= set(["opcode", "qtype", "qname", "flags",
+ "rcode", "answer", "authority", "additional"])
+
+ if 'question' in fields:
+ fields.remove("question")
+ fields |= set(["qtype", "qname"])
+
+ return fields
+
+ def process_reply_line(self):
+ """Extracts flags, rcode and opcode from given node and adjust dns message accordingly"""
+ self.fields = [f.value for f in self.node.match("/reply")]
+ if 'DO' in self.fields:
+ self.message.want_dnssec(True)
+ opcode = self.get_opcode(fields=self.fields)
+ rcode = self.get_rcode(fields=self.fields)
+ self.message.flags = self.get_flags(fields=self.fields)
+ if rcode is not None:
+ self.message.set_rcode(rcode)
+ if opcode is not None:
+ self.message.set_opcode(opcode)
+
+ def process_tsig(self):
+ try:
+ tsig = list(self.node.match("/tsig"))[0]
+ tsig_keyname = tsig["/keyname"].value
+ tsig_secret = tsig["/secret"].value
+ keyring = dns.tsigkeyring.from_text({tsig_keyname: tsig_secret})
+ self.message.use_tsig(keyring=keyring, keyname=tsig_keyname)
+ except (KeyError, IndexError):
+ pass
+
+ def process_sections(self):
+ sections = set()
+ for section in self.node.match("/section/*"):
+ section_name = posixpath.basename(section.path)
+ sections.add(section_name)
+ for record in section.match("/record"):
+ owner = record['/domain'].value
+ if not owner.endswith("."):
+ owner += self.origin
+ try:
+ ttl = dns.ttl.from_text(record['/ttl'].value)
+ except KeyError:
+ ttl = self.default_ttl
+ try:
+ rdclass = dns.rdataclass.from_text(record['/class'].value)
+ except KeyError:
+ rdclass = dns.rdataclass.from_text(self.default_cls)
+ rdtype = dns.rdatatype.from_text(record['/type'].value)
+ rr = dns.rrset.from_text(owner, ttl, rdclass, rdtype)
+ if section_name != "question":
+ rd = record['/data'].value.split()
+ if rd:
+ if rdtype == dns.rdatatype.DS:
+ rd[1] = str(dns.dnssec.algorithm_from_text(rd[1]))
+ rd = dns.rdata.from_text(rr.rdclass, rr.rdtype, ' '.join(
+ rd), origin=dns.name.from_text(self.origin), relativize=False)
+ rr.add(rd)
+ if section_name == 'question':
+ if rr.rdtype == dns.rdatatype.AXFR:
+ self.message.xfr = True
+ self.message.question.append(rr)
+ elif section_name == 'answer':
+ self.message.answer.append(rr)
+ elif section_name == 'authority':
+ self.message.authority.append(rr)
+ elif section_name == 'additional':
+ self.message.additional.append(rr)
+ return sections
+
+ def __str__(self):
+ txt = 'ENTRY_BEGIN\n'
+ if not self.is_raw_data_entry:
+ txt += 'MATCH {0}\n'.format(' '.join(self.match_fields))
+ txt += 'ADJUST {0}\n'.format(' '.join(self.adjust_fields))
+ txt += 'REPLY {rcode} {flags}\n'.format(
+ rcode=dns.rcode.to_text(self.message.rcode()),
+ flags=' '.join([dns.flags.to_text(self.message.flags),
+ dns.flags.edns_to_text(self.message.ednsflags)])
+ )
+ for sect_name in ['question', 'answer', 'authority', 'additional']:
+ sect = getattr(self.message, sect_name)
+ if not sect:
+ continue
+ txt += 'SECTION {n}\n'.format(n=sect_name.upper())
+ for rr in sect:
+ txt += str(rr)
+ txt += '\n'
+ if self.is_raw_data_entry:
+ txt += 'RAW\n'
+ if self.raw_data:
+ txt += binascii.hexlify(self.raw_data)
+ else:
+ txt += 'NULL'
+ txt += '\n'
+ txt += 'ENTRY_END\n'
+ return txt
+
+ @classmethod
+ def get_flags(cls, fields):
+ """From `fields` extracts and returns flags"""
+ flags = []
+ for code in fields:
+ try:
+ dns.flags.from_text(code) # throws KeyError on failure
+ flags.append(code)
+ except KeyError:
+ pass
+ return dns.flags.from_text(' '.join(flags))
+
+ @classmethod
+ def get_rcode(cls, fields):
+ """
+ From `fields` extracts and returns rcode.
+ Throws `ValueError` if there are more then one rcodes
+ """
+ rcodes = []
+ for code in fields:
+ try:
+ rcodes.append(dns.rcode.from_text(code))
+ except dns.rcode.UnknownRcode:
+ pass
+ if len(rcodes) > 1:
+ raise ValueError("Parse failed, too many rcode values.", rcodes)
+ if not rcodes:
+ return None
+ return rcodes[0]
+
+ @classmethod
+ def get_opcode(cls, fields):
+ """
+ From `fields` extracts and returns opcode.
+ Throws `ValueError` if there are more then one opcodes
+ """
+ opcodes = []
+ for code in fields:
+ try:
+ opcodes.append(dns.opcode.from_text(code))
+ except dns.opcode.UnknownOpcode:
+ pass
+ if len(opcodes) > 1:
+ raise ValueError("Parse failed, too many opcode values.")
+ if not opcodes:
+ return None
+ return opcodes[0]
+
+ def match(self, msg):
+ """ Compare scripted reply to given message based on match criteria. """
+ for code in self.match_fields:
+ try:
+ pydnstest.matchpart.match_part(self.message, msg, code)
+ except pydnstest.matchpart.DataMismatch as ex:
+ errstr = '%s in the response:\n%s' % (str(ex), msg.to_text())
+ # TODO: cisla radku
+ raise ValueError("%s, \"%s\": %s" % (self.node.span, code, errstr))
+
+ def cmp_raw(self, raw_value):
+ assert self.is_raw_data_entry
+ expected = None
+ if self.raw_data is not None:
+ expected = binascii.hexlify(self.raw_data)
+ got = None
+ if raw_value is not None:
+ got = binascii.hexlify(raw_value)
+ if expected != got:
+ raise ValueError("raw message comparsion failed: expected %s got %s" % (expected, got))
+
+ def reply(self, query) -> Optional[DNSBlob]:
+ if 'do_not_answer' in self.adjust_fields:
+ return None
+ if self.is_raw_data_entry:
+ copy_id = 'raw_data' in self.adjust_fields
+ assert self.raw_data is not None
+ return DNSReplyRaw(self.raw_data, query, copy_id)
+ copy_id = 'copy_id' in self.adjust_fields
+ copy_query = 'copy_query' in self.adjust_fields
+ return DNSReply(self.message, query, copy_id, copy_query)
+
+ def set_edns(self, fields):
+ """ Set EDNS version and bufsize. """
+ version = 0
+ bufsize = 4096
+ if fields and fields[0].isdigit():
+ version = int(fields.pop(0))
+ if fields and fields[0].isdigit():
+ bufsize = int(fields.pop(0))
+ if bufsize == 0:
+ self.message.use_edns(False)
+ return
+ opts = []
+ for v in fields:
+ k, v = tuple(v.split('=')) if '=' in v else (v, True)
+ if k.lower() == 'nsid':
+ opts.append(dns.edns.GenericOption(dns.edns.NSID, '' if v is True else v))
+ if k.lower() == 'subnet':
+ net = v.split('/')
+ subnet_addr = net[0]
+ family = socket.AF_INET6 if ':' in subnet_addr else socket.AF_INET
+ addr = socket.inet_pton(family, subnet_addr)
+ prefix = len(addr) * 8
+ if len(net) > 1:
+ prefix = int(net[1])
+ addr = addr[0: (prefix + 7) / 8]
+ if prefix % 8 != 0: # Mask the last byte
+ addr = addr[:-1] + chr(ord(addr[-1]) & 0xFF << (8 - prefix % 8))
+ opts.append(dns.edns.GenericOption(8, struct.pack(
+ "!HBB", 1 if family == socket.AF_INET else 2, prefix, 0) + addr))
+ self.message.use_edns(edns=version, payload=bufsize, options=opts)
+
+
+class Range:
+ """
+ Range represents a set of scripted queries valid for given step range.
+ """
+ log = logging.getLogger('pydnstest.scenario.Range')
+
+ def __init__(self, node):
+ """ Initialize reply range. """
+ self.node = node
+ self.a = int(node['/from'].value)
+ self.b = int(node['/to'].value)
+ assert self.a <= self.b
+
+ address = node["/address"].value
+ self.addresses = {address} if address is not None else set()
+ self.addresses |= {a.value for a in node.match("/address/*")}
+ self.stored = [Entry(n) for n in node.match("/entry")]
+ self.args = {}
+ self.received = 0
+ self.sent = 0
+
+ def __del__(self):
+ self.log.info('[ RANGE %d-%d ] %s received: %d sent: %d',
+ self.a, self.b, self.addresses, self.received, self.sent)
+
+ def __str__(self):
+ txt = '\nRANGE_BEGIN {a} {b}\n'.format(a=self.a, b=self.b)
+ for addr in self.addresses:
+ txt += ' ADDRESS {0}\n'.format(addr)
+
+ for entry in self.stored:
+ txt += '\n'
+ txt += str(entry)
+ txt += 'RANGE_END\n\n'
+ return txt
+
+ def eligible(self, ident, address):
+ """ Return true if this range is eligible for fetching reply. """
+ if self.a <= ident <= self.b:
+ return (None is address
+ or set() == self.addresses
+ or address in self.addresses)
+ return False
+
+ def reply(self, query: dns.message.Message) -> Optional[DNSBlob]:
+ """Get answer for given query (adjusted if needed)."""
+ self.received += 1
+ for candidate in self.stored:
+ try:
+ candidate.match(query)
+ resp = candidate.reply(query)
+ # Probabilistic loss
+ if 'LOSS' in self.args:
+ if random.random() < float(self.args['LOSS']):
+ return DNSReplyServfail(query)
+ self.sent += 1
+ candidate.fired += 1
+ return resp
+ except ValueError:
+ pass
+ return DNSReplyServfail(query)
+
+
+class StepLogger(logging.LoggerAdapter): # pylint: disable=too-few-public-methods
+ """
+ Prepent Step identification before each log message.
+ """
+ def process(self, msg, kwargs):
+ return '[STEP %s %s] %s' % (self.extra['id'], self.extra['type'], msg), kwargs
+
+
+class Step:
+ """
+ Step represents one scripted action in a given moment,
+ each step has an order identifier, type and optionally data entry.
+ """
+ require_data = ['QUERY', 'CHECK_ANSWER', 'REPLY']
+
+ def __init__(self, node):
+ """ Initialize single scenario step. """
+ self.node = node
+ self.id = int(node.value)
+ self.type = node["/type"].value
+ self.log = StepLogger(logging.getLogger('pydnstest.scenario.Step'),
+ {'id': self.id, 'type': self.type})
+ try:
+ self.delay = int(node["/timestamp"].value)
+ except KeyError:
+ pass
+ self.data = [Entry(n) for n in node.match("/entry")]
+ self.queries = []
+ self.has_data = self.type in Step.require_data
+ self.answer = None
+ self.raw_answer = None
+ self.repeat_if_fail = 0
+ self.pause_if_fail = 0
+ self.next_if_fail = -1
+
+ # TODO Parser currently can't parse CHECK_ANSWER args, player doesn't understand them anyway
+ # if type == 'CHECK_ANSWER':
+ # for arg in extra_args:
+ # param = arg.split('=')
+ # try:
+ # if param[0] == 'REPEAT':
+ # self.repeat_if_fail = int(param[1])
+ # elif param[0] == 'PAUSE':
+ # self.pause_if_fail = float(param[1])
+ # elif param[0] == 'NEXT':
+ # self.next_if_fail = int(param[1])
+ # except Exception as e:
+ # raise Exception('step %d - wrong %s arg: %s' % (self.id, param[0], str(e)))
+
+ def __str__(self):
+ txt = '\nSTEP {i} {t}'.format(i=self.id, t=self.type)
+ if self.repeat_if_fail:
+ txt += ' REPEAT {v}'.format(v=self.repeat_if_fail)
+ elif self.pause_if_fail:
+ txt += ' PAUSE {v}'.format(v=self.pause_if_fail)
+ elif self.next_if_fail != -1:
+ txt += ' NEXT {v}'.format(v=self.next_if_fail)
+ # if self.args:
+ # txt += ' '
+ # txt += ' '.join(self.args)
+ txt += '\n'
+
+ for data in self.data:
+ # from IPython.core.debugger import Tracer
+ # Tracer()()
+ txt += str(data)
+ return txt
+
+ def play(self, ctx):
+ """ Play one step from a scenario. """
+ if self.type == 'QUERY':
+ self.log.info('')
+ self.log.debug(self.data[0].message.to_text())
+ # Parse QUERY-specific parameters
+ choice, tcp, source = None, False, None
+ return self.__query(ctx, tcp=tcp, choice=choice, source=source)
+ elif self.type == 'CHECK_OUT_QUERY': # ignore
+ self.log.info('')
+ return None
+ elif self.type == 'CHECK_ANSWER' or self.type == 'ANSWER':
+ self.log.info('')
+ return self.__check_answer(ctx)
+ elif self.type == 'TIME_PASSES ELAPSE':
+ self.log.info('')
+ return self.__time_passes()
+ elif self.type == 'REPLY' or self.type == 'MOCK':
+ self.log.info('')
+ return None
+ # Parser currently doesn't support step types LOG, REPLAY and ASSERT.
+ # No test uses them.
+ # elif self.type == 'LOG':
+ # if not ctx.log:
+ # raise Exception('scenario has no log interface')
+ # return ctx.log.match(self.args)
+ # elif self.type == 'REPLAY':
+ # self.__replay(ctx)
+ # elif self.type == 'ASSERT':
+ # self.__assert(ctx)
+ else:
+ raise NotImplementedError('step %03d type %s unsupported' % (self.id, self.type))
+
+ def __check_answer(self, ctx):
+ """ Compare answer from previously resolved query. """
+ if not self.data:
+ raise ValueError("response definition required")
+ expected = self.data[0]
+ if expected.is_raw_data_entry is True:
+ self.log.debug("raw answer: %s", ctx.last_raw_answer.to_text())
+ expected.cmp_raw(ctx.last_raw_answer)
+ else:
+ if ctx.last_answer is None:
+ raise ValueError("no answer from preceding query")
+ self.log.debug("answer: %s", ctx.last_answer.to_text())
+ expected.match(ctx.last_answer)
+
+ # def __replay(self, ctx, chunksize=8):
+ # nqueries = len(self.queries)
+ # if len(self.args) > 0 and self.args[0].isdigit():
+ # nqueries = int(self.args.pop(0))
+ # destination = ctx.client[ctx.client.keys()[0]]
+ # self.log.info('replaying %d queries to %s@%d (%s)',
+ # nqueries, destination[0], destination[1], ' '.join(self.args))
+ # if 'INTENSIFY' in os.environ:
+ # nqueries *= int(os.environ['INTENSIFY'])
+ # tstart = datetime.now()
+ # nsent, nrcvd = replay_rrs(self.queries, nqueries, destination, self.args)
+ # # Keep/print the statistics
+ # rtt = (datetime.now() - tstart).total_seconds() * 1000
+ # pps = 1000 * nrcvd / rtt
+ # self.log.debug('sent: %d, received: %d (%d ms, %d p/s)', nsent, nrcvd, rtt, pps)
+ # tag = None
+ # for arg in self.args:
+ # if arg.upper().startswith('PRINT'):
+ # _, tag = tuple(arg.split('=')) if '=' in arg else (None, 'replay')
+ # if tag:
+ # self.log.info('[ REPLAY ] test: %s pps: %5d time: %4d sent: %5d received: %5d',
+ # tag.ljust(11), pps, rtt, nsent, nrcvd)
+
+ def __query(self, ctx, tcp=False, choice=None, source=None):
+ """
+ Send query and wait for an answer (if the query is not RAW).
+
+ The received answer is stored in self.answer and ctx.last_answer.
+ """
+ if not self.data:
+ raise ValueError("query definition required")
+ if self.data[0].is_raw_data_entry is True:
+ data_to_wire = self.data[0].raw_data
+ else:
+ # Don't use a message copy as the EDNS data portion is not copied.
+ data_to_wire = self.data[0].message.to_wire()
+ if choice is None or not choice:
+ choice = list(ctx.client.keys())[0]
+ if choice not in ctx.client:
+ raise ValueError('step %03d invalid QUERY target: %s' % (self.id, choice))
+ # Create socket to test subject
+ sock = None
+ destination = ctx.client[choice]
+ family = socket.AF_INET6 if ':' in destination[0] else socket.AF_INET
+ sock = socket.socket(family, socket.SOCK_STREAM if tcp else socket.SOCK_DGRAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ if tcp:
+ sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)
+ sock.settimeout(3)
+ if source:
+ sock.bind((source, 0))
+ sock.connect(destination)
+ # Send query to client and wait for response
+ tstart = datetime.now()
+ while True:
+ try:
+ sendto_msg(sock, data_to_wire)
+ break
+ except OSError as ex:
+ # ENOBUFS, throttle sending
+ if ex.errno == errno.ENOBUFS:
+ time.sleep(0.1)
+ # Wait for a response for a reasonable time
+ answer = None
+ if not self.data[0].is_raw_data_entry:
+ while True:
+ if (datetime.now() - tstart).total_seconds() > 5:
+ raise RuntimeError("Server took too long to respond")
+ try:
+ answer, _ = recvfrom_msg(sock, True)
+ break
+ except OSError as ex:
+ if ex.errno == errno.ENOBUFS:
+ time.sleep(0.1)
+ # Track RTT
+ rtt = (datetime.now() - tstart).total_seconds() * 1000
+ global g_rtt, g_nqueries
+ g_nqueries += 1
+ g_rtt += rtt
+ # Remember last answer for checking later
+ self.raw_answer = answer
+ ctx.last_raw_answer = answer
+ if self.raw_answer is not None:
+ self.answer = dns.message.from_wire(self.raw_answer, one_rr_per_rrset=True)
+ else:
+ self.answer = None
+ ctx.last_answer = self.answer
+
+ def __time_passes(self):
+ """ Modify system time. """
+ file_old = os.environ["FAKETIME_TIMESTAMP_FILE"]
+ file_next = os.environ["FAKETIME_TIMESTAMP_FILE"] + ".next"
+ with open(file_old, 'r') as time_file:
+ line = time_file.readline().strip()
+ t = time.mktime(datetime.strptime(line, '@%Y-%m-%d %H:%M:%S').timetuple())
+ t += self.delay
+ with open(file_next, 'w') as time_file:
+ time_file.write(datetime.fromtimestamp(t).strftime('@%Y-%m-%d %H:%M:%S') + "\n")
+ time_file.flush()
+ os.replace(file_next, file_old)
+
+ # def __assert(self, ctx):
+ # """ Assert that a passed expression evaluates to True. """
+ # result = eval(' '.join(self.args), {'SCENARIO': ctx, 'RANGE': ctx.ranges})
+ # # Evaluate subexpressions for clarity
+ # subexpr = []
+ # for expr in self.args:
+ # try:
+ # ee = eval(expr, {'SCENARIO': ctx, 'RANGE': ctx.ranges})
+ # subexpr.append(str(ee))
+ # except:
+ # subexpr.append(expr)
+ # assert result is True, '"%s" assertion fails (%s)' % (
+ # ' '.join(self.args), ' '.join(subexpr))
+
+
+class Scenario:
+ log = logging.getLogger('pydnstest.scenatio.Scenario')
+
+ def __init__(self, node, filename):
+ """ Initialize scenario with description. """
+ self.node = node
+ self.info = node.value
+ self.file = filename
+ self.ranges = [Range(n) for n in node.match("/range")]
+ self.current_range = None
+ self.steps = [Step(n) for n in node.match("/step")]
+ self.current_step = None
+ self.client = {}
+
+ def __str__(self):
+ txt = 'SCENARIO_BEGIN'
+ if self.info:
+ txt += ' {0}'.format(self.info)
+ txt += '\n'
+ for range_ in self.ranges:
+ txt += str(range_)
+ for step in self.steps:
+ txt += str(step)
+ txt += "\nSCENARIO_END"
+ return txt
+
+ def reply(self, query: dns.message.Message, address=None) -> Optional[DNSBlob]:
+ """Generate answer packet for given query."""
+ current_step_id = self.current_step.id
+ # Unknown address, select any match
+ # TODO: workaround until the server supports stub zones
+ all_addresses = set() # type: ignore
+ for rng in self.ranges:
+ all_addresses.update(rng.addresses)
+ if address not in all_addresses:
+ address = None
+ # Find current valid query response range
+ for rng in self.ranges:
+ if rng.eligible(current_step_id, address):
+ self.current_range = rng
+ return rng.reply(query)
+ # Find any prescripted one-shot replies
+ for step in self.steps:
+ if step.id < current_step_id or step.type != 'REPLY':
+ continue
+ try:
+ candidate = step.data[0]
+ candidate.match(query)
+ step.data.remove(candidate)
+ return candidate.reply(query)
+ except (IndexError, ValueError):
+ pass
+ return DNSReplyServfail(query)
+
+ def play(self, paddr):
+ """ Play given scenario. """
+ # Store test subject => address mapping
+ self.client = paddr
+
+ step = None
+ i = 0
+ while i < len(self.steps):
+ step = self.steps[i]
+ self.current_step = step
+ try:
+ step.play(self)
+ except ValueError as ex:
+ if step.repeat_if_fail > 0:
+ self.log.info("[play] step %d: exception - '%s', retrying step %d (%d left)",
+ step.id, ex, step.next_if_fail, step.repeat_if_fail)
+ step.repeat_if_fail -= 1
+ if step.pause_if_fail > 0:
+ time.sleep(step.pause_if_fail)
+ if step.next_if_fail != -1:
+ next_steps = [j for j in range(len(self.steps)) if self.steps[
+ j].id == step.next_if_fail]
+ if not next_steps:
+ raise ValueError('step %d: wrong NEXT value "%d"' %
+ (step.id, step.next_if_fail))
+ next_step = next_steps[0]
+ if next_step < len(self.steps):
+ i = next_step
+ else:
+ raise ValueError('step %d: Can''t branch to NEXT value "%d"' %
+ (step.id, step.next_if_fail))
+ continue
+ else:
+ raise ValueError('%s step %d %s' % (self.file, step.id, str(ex)))
+ i += 1
+
+ for r in self.ranges:
+ for e in r.stored:
+ if e.mandatory and e.fired == 0:
+ # TODO: cisla radku
+ raise ValueError('Mandatory section at %s not fired' % e.mandatory.span)
+
+
+def get_next(file_in, skip_empty=True):
+ """ Return next token from the input stream. """
+ while True:
+ line = file_in.readline()
+ if not line:
+ return False
+ quoted, escaped = False, False
+ for i, char in enumerate(line):
+ if char == '\\':
+ escaped = not escaped
+ if not escaped and char == '"':
+ quoted = not quoted
+ if char == ';' and not quoted:
+ line = line[0:i]
+ break
+ if char != '\\':
+ escaped = False
+ tokens = ' '.join(line.strip().split()).split()
+ if not tokens:
+ if skip_empty:
+ continue
+ else:
+ return '', []
+ op = tokens.pop(0)
+ return op, tokens
+
+
+def parse_config(scn_cfg, qmin, installdir): # FIXME: pylint: disable=too-many-statements
+ """
+ Transform scene config (key, value) pairs into dict filled with defaults.
+ Returns tuple:
+ context dict: {Jinja2 variable: value}
+ trust anchor dict: {domain: [TA lines for particular domain]}
+ """
+ # defaults
+ do_not_query_localhost = True
+ harden_glue = True
+ sockfamily = 0 # auto-select value for socket.getaddrinfo
+ trust_anchor_list = []
+ trust_anchor_files = {}
+ negative_ta_list = []
+ stub_addr = None
+ override_timestamp = None
+
+ features = {}
+ feature_list_delimiter = ';'
+ feature_pair_delimiter = '='
+
+ for k, v in scn_cfg:
+ # Enable selectively for some tests
+ if k == 'do-not-query-localhost':
+ do_not_query_localhost = str2bool(v)
+ elif k == 'domain-insecure':
+ negative_ta_list.append(v)
+ elif k == 'harden-glue':
+ harden_glue = str2bool(v)
+ elif k == 'query-minimization':
+ qmin = str2bool(v)
+ elif k == 'trust-anchor':
+ trust_anchor = v.strip('"\'')
+ trust_anchor_list.append(trust_anchor)
+ domain = dns.name.from_text(trust_anchor.split()[0]).canonicalize()
+ if domain not in trust_anchor_files:
+ trust_anchor_files[domain] = []
+ trust_anchor_files[domain].append(trust_anchor)
+ elif k == 'val-override-timestamp':
+ override_timestamp_str = v.strip('"\'')
+ override_timestamp = int(override_timestamp_str)
+ elif k == 'val-override-date':
+ override_date_str = v.strip('"\'')
+ ovr_yr = override_date_str[0:4]
+ ovr_mnt = override_date_str[4:6]
+ ovr_day = override_date_str[6:8]
+ ovr_hr = override_date_str[8:10]
+ ovr_min = override_date_str[10:12]
+ ovr_sec = override_date_str[12:]
+ override_date_str_arg = '{0} {1} {2} {3} {4} {5}'.format(
+ ovr_yr, ovr_mnt, ovr_day, ovr_hr, ovr_min, ovr_sec)
+ override_date = time.strptime(override_date_str_arg, "%Y %m %d %H %M %S")
+ override_timestamp = calendar.timegm(override_date)
+ elif k == 'stub-addr':
+ stub_addr = v.strip('"\'')
+ elif k == 'features':
+ feature_list = v.split(feature_list_delimiter)
+ try:
+ for f_item in feature_list:
+ if f_item.find(feature_pair_delimiter) != -1:
+ f_key, f_value = [x.strip()
+ for x
+ in f_item.split(feature_pair_delimiter, 1)]
+ else:
+ f_key = f_item.strip()
+ f_value = ""
+ features[f_key] = f_value
+ except KeyError as ex:
+ raise KeyError("can't parse features (%s) in config section (%s)" % (v, str(ex)))
+ elif k == 'feature-list':
+ try:
+ f_key, f_value = [x.strip() for x in v.split(feature_pair_delimiter, 1)]
+ if f_key not in features:
+ features[f_key] = []
+ f_value = f_value.replace("{{INSTALL_DIR}}", installdir)
+ features[f_key].append(f_value)
+ except KeyError as ex:
+ raise KeyError("can't parse feature-list (%s) in config section (%s)"
+ % (v, str(ex)))
+ elif k == 'force-ipv6' and v.upper() == 'TRUE':
+ sockfamily = socket.AF_INET6
+ else:
+ raise NotImplementedError('unsupported CONFIG key "%s"' % k)
+
+ ctx = {
+ "DO_NOT_QUERY_LOCALHOST": str(do_not_query_localhost).lower(),
+ "NEGATIVE_TRUST_ANCHORS": negative_ta_list,
+ "FEATURES": features,
+ "HARDEN_GLUE": str(harden_glue).lower(),
+ "INSTALL_DIR": installdir,
+ "QMIN": str(qmin).lower(),
+ "TRUST_ANCHORS": trust_anchor_list,
+ "TRUST_ANCHOR_FILES": trust_anchor_files.keys()
+ }
+ if stub_addr:
+ ctx['ROOT_ADDR'] = stub_addr
+ # determine and verify socket family for specified root address
+ gai = socket.getaddrinfo(stub_addr, 53, sockfamily, 0,
+ socket.IPPROTO_UDP, socket.AI_NUMERICHOST)
+ assert len(gai) == 1
+ sockfamily = gai[0][0]
+ if not sockfamily:
+ sockfamily = socket.AF_INET # default to IPv4
+ ctx['_SOCKET_FAMILY'] = sockfamily
+ if override_timestamp:
+ ctx['_OVERRIDE_TIMESTAMP'] = override_timestamp
+ return (ctx, trust_anchor_files)
+
+
+def parse_file(path):
+ """ Parse scenario from a file. """
+
+ aug = pydnstest.augwrap.AugeasWrapper(
+ confpath=path, lens='Deckard', loadpath=os.path.dirname(__file__))
+ node = aug.tree
+ config = []
+ for line in [c.value for c in node.match("/config/*")]:
+ if line:
+ if not line.startswith(';'):
+ if '#' in line:
+ line = line[0:line.index('#')]
+ # Break to key-value pairs
+ # e.g.: ['minimization', 'on']
+ kv = [x.strip() for x in line.split(':', 1)]
+ if len(kv) >= 2:
+ config.append(kv)
+ scenario = Scenario(node["/scenario"], posixpath.basename(node.path))
+ return scenario, config
diff --git a/tests/deckard/pydnstest/tests/__init__.py b/tests/deckard/pydnstest/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/deckard/pydnstest/tests/__init__.py
diff --git a/tests/deckard/pydnstest/tests/test_parse_config.py b/tests/deckard/pydnstest/tests/test_parse_config.py
new file mode 100644
index 0000000..0668760
--- /dev/null
+++ b/tests/deckard/pydnstest/tests/test_parse_config.py
@@ -0,0 +1,17 @@
+""" This is unittest file for parse methods in scenario.py """
+import os
+
+from pydnstest.scenario import parse_config
+
+
+def test_parse_config__trust_anchor():
+ """Checks if trust-anchors are separated into files according to domain."""
+ anchor1 = u'domain1.com.\t3600\tIN\tDS\t11901 7 1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ anchor2 = u'domain2.net.\t3600\tIN\tDS\t59835 7 1 cccccccccccccccccccccccccccccccccccccccc'
+ anchor3 = u'domain1.com.\t3600\tIN\tDS\t11902 7 1 1111111111111111111111111111111111111111'
+ anchors = [[u'trust-anchor', u'"{}"'.format(anchor1)],
+ [u'trust-anchor', u'"{}"'.format(anchor2)],
+ [u'trust-anchor', u'"{}"'.format(anchor3)]]
+ args = (anchors, True, os.getcwd())
+ _, ta_files = parse_config(*args)
+ assert sorted(ta_files.values()) == sorted([[anchor1, anchor3], [anchor2]])
diff --git a/tests/deckard/pydnstest/tests/test_scenario.py b/tests/deckard/pydnstest/tests/test_scenario.py
new file mode 100644
index 0000000..454cb5c
--- /dev/null
+++ b/tests/deckard/pydnstest/tests/test_scenario.py
@@ -0,0 +1,55 @@
+""" This is unittest file for scenario.py """
+
+import pytest
+
+from pydnstest.scenario import Entry
+
+RCODE_FLAGS = ['NOERROR', 'FORMERR', 'SERVFAIL', 'NXDOMAIN', 'NOTIMP', 'REFUSED', 'YXDOMAIN',
+ 'YXRRSET', 'NXRRSET', 'NOTAUTH', 'NOTZONE', 'BADVERS']
+OPCODE_FLAGS = ['QUERY', 'IQUERY', 'STATUS', 'NOTIFY', 'UPDATE']
+FLAGS = ['QR', 'TC', 'AA', 'AD', 'RD', 'RA', 'CD']
+
+
+def test_entry__get_flags():
+ """Checks if all rcodes and opcodes are filtered out"""
+ expected_flags = Entry.get_flags(FLAGS)
+ for flag in RCODE_FLAGS + OPCODE_FLAGS:
+ rcode_flags = Entry.get_flags(FLAGS + [flag])
+ assert rcode_flags == expected_flags, \
+ 'Entry._get_flags does not filter out "{flag}"'.format(flag=flag)
+
+
+def test_entry__get_rcode():
+ """
+ Checks if the error is raised for multiple rcodes
+ checks if None is returned for no rcode
+ checks if flags and opcode are filtered out
+ """
+ with pytest.raises(ValueError):
+ Entry.get_rcode(RCODE_FLAGS[:2])
+
+ assert Entry.get_rcode(FLAGS) is None
+ assert Entry.get_rcode([]) is None
+
+ for rcode in RCODE_FLAGS:
+ given_rcode = Entry.get_rcode(FLAGS + OPCODE_FLAGS + [rcode])
+ assert given_rcode is not None, 'Entry.get_rcode does not recognize {rcode}'.format(
+ rcode=rcode)
+
+
+def test_entry__get_opcode():
+ """
+ Checks if the error is raised for multiple opcodes
+ checks if None is returned for no opcode
+ checks if flags and opcode are filtered out
+ """
+ with pytest.raises(ValueError):
+ Entry.get_opcode(OPCODE_FLAGS[:2])
+
+ assert Entry.get_opcode(FLAGS) is None
+ assert Entry.get_opcode([]) is None
+
+ for opcode in OPCODE_FLAGS:
+ given_rcode = Entry.get_opcode(FLAGS + RCODE_FLAGS + [opcode])
+ assert given_rcode is not None, 'Entry.get_opcode does not recognize {opcode}'.format(
+ opcode=opcode)
diff --git a/tests/deckard/pydnstest/testserver.py b/tests/deckard/pydnstest/testserver.py
new file mode 100644
index 0000000..8767644
--- /dev/null
+++ b/tests/deckard/pydnstest/testserver.py
@@ -0,0 +1,278 @@
+import argparse
+import itertools
+import logging
+import os
+import signal
+import selectors
+import socket
+import sys
+import threading
+import time
+
+import dns.message
+import dns.rdatatype
+
+from pydnstest import scenario
+
+
+class TestServer:
+ """ This simulates UDP DNS server returning scripted or mirror DNS responses. """
+
+ def __init__(self, test_scenario, root_addr, addr_family):
+ """ Initialize server instance. """
+ self.thread = None
+ self.srv_socks = []
+ self.client_socks = []
+ self.connections = []
+ self.active = False
+ self.active_lock = threading.Lock()
+ self.condition = threading.Condition()
+ self.scenario = test_scenario
+ self.addr_map = []
+ self.start_iface = 2
+ self.cur_iface = self.start_iface
+ self.kroot_local = root_addr
+ self.addr_family = addr_family
+ self.undefined_answers = 0
+
+ def __del__(self):
+ """ Cleanup after deletion. """
+ with self.active_lock:
+ active = self.active
+ if active:
+ self.stop()
+
+ def start(self, port=53):
+ """ Synchronous start """
+ with self.active_lock:
+ if self.active:
+ raise Exception('TestServer already started')
+ with self.active_lock:
+ self.active = True
+ addr, _ = self.start_srv((self.kroot_local, port), self.addr_family)
+ self.start_srv(addr, self.addr_family, socket.IPPROTO_TCP)
+ self._bind_sockets()
+
+ def stop(self):
+ """ Stop socket server operation. """
+ with self.active_lock:
+ self.active = False
+ if self.thread:
+ self.thread.join()
+ for conn in self.connections:
+ conn.close()
+ for srv_sock in self.srv_socks:
+ srv_sock.close()
+ for client_sock in self.client_socks:
+ client_sock.close()
+ self.client_socks = []
+ self.srv_socks = []
+ self.connections = []
+ self.scenario = None
+
+ def address(self):
+ """ Returns opened sockets list """
+ addrlist = []
+ for s in self.srv_socks:
+ addrlist.append(s.getsockname())
+ return addrlist
+
+ def handle_query(self, client):
+ """
+ Receive query from client socket and send an answer.
+
+ Returns:
+ True if client socket should be closed by caller
+ False if client socket should be kept open
+ """
+ log = logging.getLogger('pydnstest.testserver.handle_query')
+ server_addr = client.getsockname()[0]
+ query, client_addr = scenario.recvfrom_msg(client)
+ if query is None:
+ return False
+ log.debug('server %s received query from %s: %s', server_addr, client_addr, query)
+
+ message = self.scenario.reply(query, server_addr)
+ if not message:
+ log.debug('ignoring')
+ return True
+ elif isinstance(message, scenario.DNSReplyServfail):
+ self.undefined_answers += 1
+ self.scenario.current_step.log.error(
+ 'server %s has no response for question %s, answering with SERVFAIL',
+ server_addr,
+ '; '.join([str(rr) for rr in query.question]))
+ else:
+ log.debug('response: %s', message)
+
+ scenario.sendto_msg(client, message.to_wire(), client_addr)
+ return True
+
+ def query_io(self):
+ """ Main server process """
+ self.undefined_answers = 0
+ with self.active_lock:
+ if not self.active:
+ raise Exception("[query_io] Test server not active")
+ while True:
+ with self.condition:
+ self.condition.notify()
+ with self.active_lock:
+ if not self.active:
+ break
+ objects = self.srv_socks + self.connections
+ sel = selectors.DefaultSelector()
+ for obj in objects:
+ sel.register(obj, selectors.EVENT_READ)
+ items = sel.select(0.1)
+ for key, event in items:
+ sock = key.fileobj
+ if event & selectors.EVENT_READ:
+ if sock in self.srv_socks:
+ if sock.proto == socket.IPPROTO_TCP:
+ conn, _ = sock.accept()
+ self.connections.append(conn)
+ else:
+ self.handle_query(sock)
+ elif sock in self.connections:
+ if not self.handle_query(sock):
+ sock.close()
+ self.connections.remove(sock)
+ else:
+ raise Exception(
+ "[query_io] Socket IO internal error {}, exit"
+ .format(sock.getsockname()))
+ else:
+ raise Exception("[query_io] Socket IO error {}, exit"
+ .format(sock.getsockname()))
+
+ def start_srv(self, address, family, proto=socket.IPPROTO_UDP):
+ """ Starts listening thread if necessary """
+ assert address
+ assert address[0] # host
+ assert address[1] # port
+ assert family
+ assert proto
+ if family == socket.AF_INET6:
+ if not socket.has_ipv6:
+ raise NotImplementedError("[start_srv] IPv6 is not supported by socket {0}"
+ .format(socket))
+ elif family != socket.AF_INET:
+ raise NotImplementedError("[start_srv] unsupported protocol family {0}".format(family))
+
+ if proto == socket.IPPROTO_TCP:
+ socktype = socket.SOCK_STREAM
+ elif proto == socket.IPPROTO_UDP:
+ socktype = socket.SOCK_DGRAM
+ else:
+ raise NotImplementedError("[start_srv] unsupported protocol {0}".format(proto))
+
+ if self.thread is None:
+ self.thread = threading.Thread(target=self.query_io)
+ self.thread.start()
+ with self.condition:
+ self.condition.wait()
+
+ for srv_sock in self.srv_socks:
+ if (srv_sock.family == family
+ and srv_sock.getsockname() == address
+ and srv_sock.proto == proto):
+ return srv_sock.getsockname()
+
+ sock = socket.socket(family, socktype, proto)
+ sock.bind(address)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ if proto == socket.IPPROTO_TCP:
+ sock.listen(5)
+ self.srv_socks.append(sock)
+ sockname = sock.getsockname()
+ return sockname, proto
+
+ def _bind_sockets(self):
+ """
+ Bind test server to port 53 on all addresses referenced by test scenario.
+ """
+ # Bind to test servers
+ for r in self.scenario.ranges:
+ for addr in r.addresses:
+ family = socket.AF_INET6 if ':' in addr else socket.AF_INET
+ self.start_srv((addr, 53), family)
+
+ # Bind addresses in ad-hoc REPLYs
+ for s in self.scenario.steps:
+ if s.type == 'REPLY':
+ reply = s.data[0].message
+ for rr in itertools.chain(reply.answer,
+ reply.additional,
+ reply.question,
+ reply.authority):
+ for rd in rr:
+ if rd.rdtype == dns.rdatatype.A:
+ self.start_srv((rd.address, 53), socket.AF_INET)
+ elif rd.rdtype == dns.rdatatype.AAAA:
+ self.start_srv((rd.address, 53), socket.AF_INET6)
+
+ def play(self, subject_addr):
+ self.scenario.play({'': (subject_addr, 53)})
+
+
+def empty_test_case():
+ """
+ Return (scenario, config) pair which answers to any query on 127.0.0.10.
+ """
+ # Mirror server
+ empty_test_path = os.path.dirname(os.path.realpath(__file__)) + "/empty.rpl"
+ test_config = {'ROOT_ADDR': '127.0.0.10',
+ '_SOCKET_FAMILY': socket.AF_INET}
+ return scenario.parse_file(empty_test_path)[0], test_config
+
+
+def standalone_self_test():
+ """
+ Self-test code
+
+ Usage:
+ LD_PRELOAD=libsocket_wrapper.so SOCKET_WRAPPER_DIR=/tmp $PYTHON -m pydnstest.testserver --help
+ """
+ logging.basicConfig(level=logging.DEBUG)
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument('--scenario', help='absolute path to test scenario',
+ required=False)
+ argparser.add_argument('--step', help='step # in the scenario (default: first)',
+ required=False, type=int)
+ args = argparser.parse_args()
+ if args.scenario:
+ test_scenario, test_config_text = scenario.parse_file(args.scenario)
+ test_config, _ = scenario.parse_config(test_config_text, True, os.getcwd())
+ else:
+ test_scenario, test_config = empty_test_case()
+
+ if args.step:
+ for step in test_scenario.steps:
+ if step.id == args.step:
+ test_scenario.current_step = step
+ if not test_scenario.current_step:
+ raise ValueError('step ID %s not found in scenario' % args.step)
+ else:
+ test_scenario.current_step = test_scenario.steps[0]
+
+ server = TestServer(test_scenario, test_config['ROOT_ADDR'], test_config['_SOCKET_FAMILY'])
+ server.start()
+
+ logging.info("[==========] Mirror server running at %s", server.address())
+
+ def kill(signum, frame): # pylint: disable=unused-argument
+ logging.info("[==========] Shutdown.")
+ server.stop()
+ sys.exit(128 + signum)
+
+ signal.signal(signal.SIGINT, kill)
+ signal.signal(signal.SIGTERM, kill)
+
+ while True:
+ time.sleep(0.5)
+
+
+if __name__ == '__main__':
+ # this is done to avoid creating global variables
+ standalone_self_test()
diff --git a/tests/deckard/pylintrc b/tests/deckard/pylintrc
new file mode 100644
index 0000000..62f7f28
--- /dev/null
+++ b/tests/deckard/pylintrc
@@ -0,0 +1,26 @@
+[MESSAGES CONTROL]
+
+disable=
+ missing-docstring,
+ too-few-public-methods,
+ too-many-arguments,
+ too-many-locals,
+ too-many-branches,
+ too-many-instance-attributes,
+ fixme,
+ unused-import, # checked by flake8
+ line-too-long, # checked by flake8
+ invalid-name,
+ global-statement,
+ no-else-return,
+ bad-continuation,
+
+
+[SIMILARITIES]
+min-similarity-lines=6
+ignore-comments=yes
+ignore-docstrings=yes
+ignore-imports=no
+
+[DESIGN]
+max-parents=10
diff --git a/tests/deckard/requirements.txt b/tests/deckard/requirements.txt
new file mode 100644
index 0000000..59ec275
--- /dev/null
+++ b/tests/deckard/requirements.txt
@@ -0,0 +1,7 @@
+dnspython>=1.15
+dpkt
+Jinja2>=2.8
+PyYAML
+python-augeas
+pytest>=3.4
+pytest-xdist
diff --git a/tests/deckard/rplint.py b/tests/deckard/rplint.py
new file mode 100755
index 0000000..c0aa6e9
--- /dev/null
+++ b/tests/deckard/rplint.py
@@ -0,0 +1,335 @@
+#!/usr/bin/env python3
+
+import itertools
+import os
+import sys
+from typing import Any, Callable, Iterable, Iterator, Optional, List, Union, Set # noqa
+
+import pydnstest.augwrap
+import pydnstest.matchpart
+import pydnstest.scenario
+
+Element = Union["Entry", "Step", pydnstest.scenario.Range]
+
+RCODES = {"NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED", "YXDOMAIN", "YXRRSET",
+ "NXRRSET", "NOTAUTH", "NOTZONE", "BADVERS", "BADSIG", "BADKEY", "BADTIME", "BADMODE",
+ "BADNAME", "BADALG", "BADTRUNC", "BADCOOKIE"}
+FLAGS = {"QR", "AA", "TC", "RD", "RA", "AD", "CD"}
+SECTIONS = {"question", "answer", "authority", "additional"}
+
+
+class RplintError(ValueError):
+ def __init__(self, fails):
+ msg = ""
+ for fail in fails:
+ msg += str(fail) + "\n"
+ super().__init__(msg)
+
+
+def get_line_number(file: str, char_number: int) -> int:
+ pos = 0
+ for number, line in enumerate(open(file)):
+ pos += len(line)
+ if pos >= char_number:
+ return number + 2
+ return 0
+
+
+def is_empty(iterable: Iterator[Any]) -> bool:
+ try:
+ next(iterable)
+ except StopIteration:
+ return True
+ return False
+
+
+class Entry:
+ def __init__(self, node: pydnstest.augwrap.AugeasNode) -> None:
+ self.match = {m.value for m in node.match("/match")}
+ self.adjust = {a.value for a in node.match("/adjust")}
+ self.authority = list(node.match("/section/authority/record"))
+ self.reply = {r.value for r in node.match("/reply")}
+ self.records = list(node.match("/section/*/record"))
+ self.node = node
+
+
+class Step:
+ def __init__(self, node: pydnstest.augwrap.AugeasNode) -> None:
+ self.node = node
+ self.type = node["/type"].value
+ try:
+ self.entry = Entry(node["/entry"]) # type: Optional[Entry]
+ except KeyError:
+ self.entry = None
+
+
+class RplintFail:
+ def __init__(self, test: "RplintTest",
+ element: Optional[Element] = None,
+ etc: str = "") -> None:
+ self.path = test.path
+ self.element = element # type: Optional[Element]
+ self.line = get_line_number(self.path, element.node.char if element is not None else 0)
+ self.etc = etc
+ self.check = None # type: Optional[Callable[[RplintTest], List[RplintFail]]]
+
+ def __str__(self):
+ if self.etc:
+ return "{}:{} {}: {} ({})".format(os.path.basename(self.path), self.line,
+ self.check.__name__, self.check.__doc__, self.etc)
+ return "{}:{} {}: {}".format(os.path.basename(self.path), self.line, self.check.__name__,
+ self.check.__doc__)
+
+
+class RplintTest:
+ def __init__(self, path: str) -> None:
+ aug = pydnstest.augwrap.AugeasWrapper(confpath=os.path.realpath(path),
+ lens='Deckard',
+ loadpath=os.path.join(os.path.dirname(__file__),
+ 'pydnstest'))
+ self.node = aug.tree
+ self.name = os.path.basename(path)
+ self.path = path
+
+ _, self.config = pydnstest.scenario.parse_file(os.path.realpath(path))
+ self.range_entries = [Entry(node) for node in self.node.match("/scenario/range/entry")]
+ self.steps = [Step(node) for node in self.node.match("/scenario/step")]
+ self.step_entries = [step.entry for step in self.steps if step.entry is not None]
+ self.entries = self.range_entries + self.step_entries
+
+ self.ranges = [pydnstest.scenario.Range(n) for n in self.node.match("/scenario/range")]
+
+ self.fails = None # type: Optional[List[RplintFail]]
+ self.checks = [
+ entry_more_than_one_rcode,
+ entry_no_qname_qtype_copy_query,
+ # Commented out for now until we implement selective turning off of checks
+ # entry_ns_in_authority,
+ range_overlapping_ips,
+ range_shadowing_match_rules,
+ step_check_answer_no_match,
+ step_query_match,
+ step_section_unchecked,
+ step_unchecked_match,
+ step_unchecked_rcode,
+ scenario_ad_or_rrsig_no_ta,
+ scenario_timestamp,
+ config_trust_anchor_trailing_period_missing,
+ step_duplicate_id,
+ ]
+
+ def run_checks(self) -> bool:
+ """returns True iff all tests passed"""
+ self.fails = []
+ for check in self.checks:
+ fails = check(self)
+ for fail in fails:
+ fail.check = check
+ self.fails += fails
+
+ if self.fails == []:
+ return True
+ return False
+
+ def print_fails(self) -> None:
+ if self.fails is None:
+ raise RuntimeError("Maybe you should run some test first…")
+ for fail in self.fails:
+ print(fail)
+
+
+def config_trust_anchor_trailing_period_missing(test: RplintTest) -> List[RplintFail]:
+ """Trust-anchor option in configuration contains domain without trailing period"""
+ for conf in test.config:
+ if conf[0] == "trust-anchor":
+ if conf[1].split()[0][-1] != ".":
+ return [RplintFail(test, etc=conf[1])]
+ return []
+
+
+def scenario_timestamp(test: RplintTest) -> List[RplintFail]:
+ """RRSSIG record present in test but no val-override-date or val-override-timestamp in config"""
+ rrsigs = []
+ for entry in test.entries:
+ for record in entry.records:
+ if record["/type"].value == "RRSIG":
+ rrsigs.append(RplintFail(test, entry))
+ if rrsigs:
+ for k in test.config:
+ if k[0] == "val-override-date" or k[0] == "val-override-timestamp":
+ return []
+ return rrsigs
+
+
+def entry_no_qname_qtype_copy_query(test: RplintTest) -> List[RplintFail]:
+ """ENTRY without qname and qtype in MATCH and without copy_query in ADJUST"""
+ fails = []
+ for entry in test.range_entries:
+ if "question" not in entry.match and ("qname" not in entry.match or
+ "qtype" not in entry.match):
+ if "copy_query" not in entry.adjust:
+ fails.append(RplintFail(test, entry))
+ return fails
+
+
+def entry_ns_in_authority(test: RplintTest) -> List[RplintFail]:
+ """ENTRY has authority section with NS records, consider using MATCH subdomain"""
+ fails = []
+ for entry in test.range_entries:
+ if entry.authority and "subdomain" not in entry.match:
+ for record in entry.authority:
+ if record["/type"].value == "NS":
+ fails.append(RplintFail(test, entry))
+ return fails
+
+
+def entry_more_than_one_rcode(test: RplintTest) -> List[RplintFail]:
+ """ENTRY has more than one rcode in MATCH"""
+ fails = []
+ for entry in test.entries:
+ if len(RCODES & entry.reply) > 1:
+ fails.append(RplintFail(test, entry))
+ return fails
+
+
+def scenario_ad_or_rrsig_no_ta(test: RplintTest) -> List[RplintFail]:
+ """AD or RRSIG present in test but no trust-anchor present in config"""
+ dnssec = []
+ for entry in test.entries:
+ if "AD" in entry.reply or "AD" in entry.match:
+ dnssec.append(RplintFail(test, entry))
+ else:
+ for record in entry.records:
+ if record["/type"].value == "RRSIG":
+ dnssec.append(RplintFail(test, entry))
+
+ if dnssec:
+ for k in test.config:
+ if k[0] == "trust-anchor":
+ return []
+ return dnssec
+
+
+def step_query_match(test: RplintTest) -> List[RplintFail]:
+ """STEP QUERY has a MATCH rule"""
+ return [RplintFail(test, step) for step in test.steps if step.type == "QUERY" and
+ step.entry and step.entry.match]
+
+
+def step_check_answer_no_match(test: RplintTest) -> List[RplintFail]:
+ """ENTRY in STEP CHECK_ANSWER has no MATCH rule"""
+ return [RplintFail(test, step) for step in test.steps if step.type == "CHECK_ANSWER" and
+ step.entry and not step.entry.match]
+
+
+def step_unchecked_rcode(test: RplintTest) -> List[RplintFail]:
+ """ENTRY specifies rcode but STEP MATCH does not check for it."""
+ fails = []
+ for step in test.steps:
+ if step.type == "CHECK_ANSWER" and step.entry and "all" not in step.entry.match:
+ if step.entry.reply & RCODES and "rcode" not in step.entry.match:
+ fails.append(RplintFail(test, step.entry))
+ return fails
+
+
+def step_unchecked_match(test: RplintTest) -> List[RplintFail]:
+ """ENTRY specifies flags but MATCH does not check for them"""
+ fails = []
+ for step in test.steps:
+ if step.type == "CHECK_ANSWER":
+ entry = step.entry
+ if entry and "all" not in entry.match and entry.reply - RCODES and \
+ "flags" not in entry.match:
+ fails.append(RplintFail(test, entry, str(entry.reply - RCODES)))
+ return fails
+
+
+def step_section_unchecked(test: RplintTest) -> List[RplintFail]:
+ """ENTRY has non-empty sections but MATCH does not check for all of them"""
+ fails = []
+ for step in test.steps:
+ if step.type == "CHECK_ANSWER" and step.entry and "all" not in step.entry.match:
+ for section in SECTIONS:
+ if not is_empty(step.node.match("/entry/section/" + section + "/*")):
+ if section not in step.entry.match:
+ fails.append(RplintFail(test, step.entry, section))
+ return fails
+
+
+def range_overlapping_ips(test: RplintTest) -> List[RplintFail]:
+ """RANGE has common IPs with some previous overlapping RANGE"""
+ fails = []
+ for r1, r2 in itertools.combinations(test.ranges, 2):
+ # If the ranges overlap
+ if min(r1.b, r2.b) >= max(r1.a, r2.a):
+ if r1.addresses & r2.addresses:
+ info = "previous range on line %d" % get_line_number(test.path, r1.node.char)
+ fails.append(RplintFail(test, r2, info))
+ return fails
+
+
+def range_shadowing_match_rules(test: RplintTest) -> List[RplintFail]:
+ """ENTRY has no effect since one of previous entries has the same or broader match rules"""
+ fails = []
+ for r in test.ranges:
+ for e1, e2 in itertools.combinations(r.stored, 2):
+ try:
+ e1.match(e2.message)
+ except ValueError:
+ pass
+ else:
+ info = "previous entry on line %d" % get_line_number(test.path, e1.node.char)
+ if e1.match_fields > e2.match_fields:
+ continue
+ if "subdomain" not in e1.match_fields and "subdomain" in e2.match_fields:
+ continue
+ fails.append(RplintFail(test, e2, info))
+ return fails
+
+
+def step_duplicate_id(test: RplintTest) -> List[RplintFail]:
+ """STEP has the same ID as one of previous ones"""
+ fails = []
+ step_numbers = set() # type: Set[int]
+ for step in test.steps:
+ if step.node.value in step_numbers:
+ fails.append(RplintFail(test, step))
+ else:
+ step_numbers.add(step.node.value)
+ return fails
+
+
+# TODO: This will make sense after we fix how we handle defaults in deckard.aug and scenario.py
+# We might just not use defaults altogether as testbound does
+# if "copy_id" not in adjust:
+# entry_error(test, entry, "copy_id should be in ADJUST")
+
+def test_run_rplint(rpl_path: str) -> None:
+ t = RplintTest(rpl_path)
+ passed = t.run_checks()
+ if not passed:
+ raise RplintError(t.fails)
+
+
+def main():
+ try:
+ test_path = sys.argv[1]
+ except IndexError:
+ print("usage: %s <path to rpl file>" % sys.argv[0])
+ sys.exit(2)
+ if not os.path.isfile(test_path):
+ print("rplint.py works on single file only.")
+ print("Use rplint.sh with --scenarios=<directory with rpls> to run on rpls.")
+ sys.exit(2)
+ print("Linting %s" % test_path)
+ t = RplintTest(test_path)
+ passed = t.run_checks()
+ t.print_fails()
+
+ if passed:
+ sys.exit(0)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/deckard/rplint.sh b/tests/deckard/rplint.sh
new file mode 100755
index 0000000..ccdc435
--- /dev/null
+++ b/tests/deckard/rplint.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -x
+set -o errexit -o nounset
+MAKEDIR="$(dirname "$0")"
+python3 -m pytest -c "${MAKEDIR}/rplint_pytest.ini" ${TESTS:+"--scenarios=${TESTS}"} "$@"
diff --git a/tests/deckard/rplint_pytest.ini b/tests/deckard/rplint_pytest.ini
new file mode 100644
index 0000000..400f4ad
--- /dev/null
+++ b/tests/deckard/rplint_pytest.ini
@@ -0,0 +1,4 @@
+[pytest]
+log_print = False
+python_files=rplint.py
+norecursedirs=*
diff --git a/tests/deckard/run.sh b/tests/deckard/run.sh
new file mode 100755
index 0000000..2d1a33c
--- /dev/null
+++ b/tests/deckard/run.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+MAKEDIR="$(dirname "$0")"
+# build env.sh only if needed
+# it is handy if someone is executing run.sh in parallel
+test ! -f "${MAKEDIR}/env.sh" && make depend -C "${MAKEDIR}"
+source "${MAKEDIR}/env.sh"
+
+# compatibility with old TESTS= env variable
+# add --scenarios= only if the variable TESTS is non-empty
+python3 -m pytest -c "${MAKEDIR}/deckard_pytest.ini" --tb=short -q ${VERBOSE:+"--log-level=DEBUG"} "${MAKEDIR}" ${DECKARDFLAGS:-} ${TESTS:+"--scenarios=${TESTS}"} "$@"
diff --git a/tests/deckard/sets/knotd/master/example.com.zone b/tests/deckard/sets/knotd/master/example.com.zone
new file mode 100644
index 0000000..ee51895
--- /dev/null
+++ b/tests/deckard/sets/knotd/master/example.com.zone
@@ -0,0 +1,22 @@
+$ORIGIN example.com.
+$TTL 3600
+
+@ SOA dns1.example.com. hostmaster.example.com. (
+ 2010111213 ; serial
+ 6h ; refresh
+ 1h ; retry
+ 1w ; expire
+ 1d ) ; minimum
+
+ NS dns1
+ NS dns2
+ MX 10 mail
+
+dns1 A 192.0.2.1
+ AAAA 2001:DB8::1
+
+dns2 A 192.0.2.2
+ AAAA 2001:DB8::2
+
+mail A 192.0.2.3
+ AAAA 2001:DB8::3
diff --git a/tests/deckard/sets/knotd/master/iter_ns.rpl b/tests/deckard/sets/knotd/master/iter_ns.rpl
new file mode 100644
index 0000000..089dec1
--- /dev/null
+++ b/tests/deckard/sets/knotd/master/iter_ns.rpl
@@ -0,0 +1,28 @@
+ stub-addr: 192.0.2.10
+CONFIG_END
+
+SCENARIO_BEGIN Simple knotd query.
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com IN NS
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS dns1.example.com.
+example.com. 3600 IN NS dns2.example.com.
+SECTION ADDITIONAL
+dns1.example.com. 3600 IN A 192.0.2.1
+dns1.example.com. 3600 IN AAAA 2001:DB8::1
+dns2.example.com. 3600 IN A 192.0.2.2
+dns2.example.com. 3600 IN AAAA 2001:DB8::2
+ENTRY_END
+
diff --git a/tests/deckard/sets/knotd/slave/iter_ns.rpl b/tests/deckard/sets/knotd/slave/iter_ns.rpl
new file mode 100644
index 0000000..3015d08
--- /dev/null
+++ b/tests/deckard/sets/knotd/slave/iter_ns.rpl
@@ -0,0 +1,78 @@
+ stub-addr: 192.0.2.10
+CONFIG_END
+
+SCENARIO_BEGIN Simple knotd query.
+
+RANGE_BEGIN 0 100
+ADDRESS 192.0.2.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.com. IN AXFR
+SECTION ANSWER
+example.com. 3600 IN SOA dns1.example.com. hostmaster.example.com. 2010111213 21600 3600 604800 86400
+example.com. 3600 IN NS dns1.example.com.
+example.com. 3600 IN NS dns2.example.com.
+example.com. 3600 IN MX 10 mail.example.com.
+dns1.example.com. 3600 IN A 192.0.2.1
+dns1.example.com. 3600 IN AAAA 2001:DB8::1
+dns2.example.com. 3600 IN A 192.0.2.2
+dns2.example.com. 3600 IN AAAA 2001:DB8::2
+mail.example.com. 3600 IN A 192.0.2.3
+mail.example.com. 3600 IN AAAA 2001:DB8::3
+example.com. 3600 IN SOA dns1.example.com. hostmaster.example.com. 2010111213 21600 3600 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.com. IN SOA
+SECTION ANSWER
+example.com. 3600 IN SOA dns1.example.com. hostmaster.example.com. 2010111213 21600 3600 604800 86400
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com IN SOA
+ENTRY_END
+
+STEP 20 CHECK_ANSWER REPEAT=3 PAUSE=1 NEXT=10
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+example.com IN SOA
+SECTION ANSWER
+example.com. 3600 IN SOA dns1.example.com. hostmaster.example.com. 2010111213 21600 3600 604800 86400
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com IN NS
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS dns1.example.com.
+example.com. 3600 IN NS dns2.example.com.
+SECTION ADDITIONAL
+dns1.example.com. 3600 IN A 192.0.2.1
+dns1.example.com. 3600 IN AAAA 2001:DB8::1
+dns2.example.com. 3600 IN A 192.0.2.2
+dns2.example.com. 3600 IN AAAA 2001:DB8::2
+ENTRY_END
+
diff --git a/tests/deckard/sets/resolver/LICENSE b/tests/deckard/sets/resolver/LICENSE
new file mode 100644
index 0000000..1859c09
--- /dev/null
+++ b/tests/deckard/sets/resolver/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2007, 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.
diff --git a/tests/deckard/sets/resolver/black_data.rpl b/tests/deckard/sets/resolver/black_data.rpl
new file mode 100644
index 0000000..80da4e1
--- /dev/null
+++ b/tests/deckard/sets/resolver/black_data.rpl
@@ -0,0 +1,300 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 34385 7 1 32E1CF5B4E0089080FF6DDC4A48CEE63E88101D6 "
+val-override-date: "20181130121750"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with blacklist for data response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN A
+SECTION ANSWER
+ns.blabla.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+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 NS ns.blabla.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+; no ns.blabla.com, try that later
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101749 20181130101749 34385 example.com. hMeEUjDsEFCHHAzHnCKeBg1j9lMvQROaOx8I0mLqMvuLWaxcjpkxNL5W J4GOZbQuAZRQSCPUpZoR6PXazY/2Iiqaa6VsHBKYlUKOMkqOJBkEs19L PCFUlTFZ8Ayv4eN6OR2BzDdHv0o38Cu6OBQul/hyEmpIX2g03aO1cpGT 3s0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101749 20181130101749 34385 example.com. F5OQnNGBxu5PjpUClx48y03pqOFnKIVYDzCdVWquRlXj3kaIDgHipesg oTs2e7cd9/P6MtSRWumr9FQNs1+L0gcfs/YIzuHBeoBH3LG5zZ4qpbs9 Z1Ay7yrxLIritwayyQnZMd9hlUFYLzNLxpL1cjMl/865r0lA3aVajmcv SYc= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcNjFHsWLbEHq/G2EjKS2pq/bGsWy6NtwBW7IcP4stnCF+a3cBpJ MZpR78GnL+YxpQYj0IyasgziAGTI/tgiTyY2qatR+6OaqebJkVbJDFx5 g0Ts1VrUk/4Z/G5tm0RMZxXxWMjjIy3wnET3Bt3dvUSI/tcTs5CUegnM MNrcMbG3 ;{id = 2854 (zsk), size = 1688b}
+; make priming query succeed
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101749 20181130101749 34385 example.com. cbYR1BnWMDItEpJqSz9L+D7XC/Zl6wnkhOA3+Z8ikZivBMfAu3OSFLWA Wu1SyiBFU+ooZ8v4/vVWN/IAkqt2CGvXeiWweiifegZEENjeAQCh8Jzw qTBf43yXwPeIpN2DpAoS+UxKbSOYhhSwBahoRefgZl7iEo3lg6TdoaOl y+U= ;{id = 2854}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854}
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.blabla.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854}
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. aFxyCGziQusXsW6tz5yQdklAv+PvoEHP1cC8IkJqo9YnMcSdoFHbZALs XFlbNRl2uwPnthKOIPZf89/pXNX3o19aq4LzfPOEiOkylboTiKmgLVyi WhqYKkJtK1B9SVn/dZN4VnmSNtrcmHi5EERl/aTEM7nfIT3jG4a/ORz6 IHY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101749 20181130101749 34385 example.com. hMeEUjDsEFCHHAzHnCKeBg1j9lMvQROaOx8I0mLqMvuLWaxcjpkxNL5W J4GOZbQuAZRQSCPUpZoR6PXazY/2Iiqaa6VsHBKYlUKOMkqOJBkEs19L PCFUlTFZ8Ayv4eN6OR2BzDdHv0o38Cu6OBQul/hyEmpIX2g03aO1cpGT 3s0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.blabla.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101749 20181130101749 34385 example.com. hMeEUjDsEFCHHAzHnCKeBg1j9lMvQROaOx8I0mLqMvuLWaxcjpkxNL5W J4GOZbQuAZRQSCPUpZoR6PXazY/2Iiqaa6VsHBKYlUKOMkqOJBkEs19L PCFUlTFZ8Ayv4eN6OR2BzDdHv0o38Cu6OBQul/hyEmpIX2g03aO1cpGT 3s0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101749 20181130101749 34385 example.com. F5OQnNGBxu5PjpUClx48y03pqOFnKIVYDzCdVWquRlXj3kaIDgHipesg oTs2e7cd9/P6MtSRWumr9FQNs1+L0gcfs/YIzuHBeoBH3LG5zZ4qpbs9 Z1Ay7yrxLIritwayyQnZMd9hlUFYLzNLxpL1cjMl/865r0lA3aVajmcv SYc= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcNjFHsWLbEHq/G2EjKS2pq/bGsWy6NtwBW7IcP4stnCF+a3cBpJ MZpR78GnL+YxpQYj0IyasgziAGTI/tgiTyY2qatR+6OaqebJkVbJDFx5 g0Ts1VrUk/4Z/G5tm0RMZxXxWMjjIy3wnET3Bt3dvUSI/tcTs5CUegnM MNrcMbG3 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101749 20181130101749 34385 example.com. cbYR1BnWMDItEpJqSz9L+D7XC/Zl6wnkhOA3+Z8ikZivBMfAu3OSFLWA Wu1SyiBFU+ooZ8v4/vVWN/IAkqt2CGvXeiWweiifegZEENjeAQCh8Jzw qTBf43yXwPeIpN2DpAoS+UxKbSOYhhSwBahoRefgZl7iEo3lg6TdoaOl y+U= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101749 20181130101749 34385 example.com. hMeEUjDsEFCHHAzHnCKeBg1j9lMvQROaOx8I0mLqMvuLWaxcjpkxNL5W J4GOZbQuAZRQSCPUpZoR6PXazY/2Iiqaa6VsHBKYlUKOMkqOJBkEs19L PCFUlTFZ8Ayv4eN6OR2BzDdHv0o38Cu6OBQul/hyEmpIX2g03aO1cpGT 3s0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. GoDRZGoKPMI48wT/JYtif460cxOjvcdpRm+mjHsKQ9GrMPf3lCuWfY9H 1cB5eeo0yxUW7euIOiKgMD9zsKaafoca1VxXgRp4DaBGgEu59AQI8ot1 FRqYwKUme8v723ZcTpaW4g2e3x2MdVs5F8HtNAII+u+MbPAhNBCzy7rk GbM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101749 20181130101749 34385 example.com. hMeEUjDsEFCHHAzHnCKeBg1j9lMvQROaOx8I0mLqMvuLWaxcjpkxNL5W J4GOZbQuAZRQSCPUpZoR6PXazY/2Iiqaa6VsHBKYlUKOMkqOJBkEs19L PCFUlTFZ8Ayv4eN6OR2BzDdHv0o38Cu6OBQul/hyEmpIX2g03aO1cpGT 3s0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. aFxyCGziQusXsW6tz5yQdklAv+PvoEHP1cC8IkJqo9YnMcSdoFHbZALs XFlbNRl2uwPnthKOIPZf89/pXNX3o19aq4LzfPOEiOkylboTiKmgLVyi WhqYKkJtK1B9SVn/dZN4VnmSNtrcmHi5EERl/aTEM7nfIT3jG4a/ORz6 IHY= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101749 20181130101749 34385 example.com. aFxyCGziQusXsW6tz5yQdklAv+PvoEHP1cC8IkJqo9YnMcSdoFHbZALs XFlbNRl2uwPnthKOIPZf89/pXNX3o19aq4LzfPOEiOkylboTiKmgLVyi WhqYKkJtK1B9SVn/dZN4VnmSNtrcmHi5EERl/aTEM7nfIT3jG4a/ORz6 IHY= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; remove pending ns.blabla.com AAAA msg
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/black_dnskey.rpl b/tests/deckard/sets/resolver/black_dnskey.rpl
new file mode 100644
index 0000000..ae91109
--- /dev/null
+++ b/tests/deckard/sets/resolver/black_dnskey.rpl
@@ -0,0 +1,508 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 62867 7 1 FD75C8B653BF8FECB755D16AC0DF400B33043881 "
+val-override-date: "20181130121751"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with blacklist for DNSKEY response
+; DNSKEY not for prime but further down the chain of trust
+; data response also needs a blacklist action.
+
+; 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 A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN A
+SECTION ANSWER
+ns.blabla.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.foo.com. IN A
+SECTION ANSWER
+ns.foo.com. IN A 1.2.4.7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.foo.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+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 NS ns.blabla.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+; no ns.blabla.com, try that later
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101751 20181130101751 62867 example.com. l15h4pHl98ot8mRBklpnoFYwYmqmoz/iWC/tS8q0bkurxZivPdmvt63C DjHpH8vv36fnO0s89btfC3eIBnDX5miuaiLbxqINmxpxDYgy3/TN+DWT VfjiWAPfaFkfwedx8oHHWwO0O7DEjrnbaqTI+5BJW7LOVYSMLNx7nFjg 490= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101751 20181130101751 62867 example.com. RHlNZwaJDQlK7ptDtIq0/V+QBXNIv0F5NTYnJoxDRmUdE3dMqsTxS6jC RIV6U2T609yLL+6elv4WtkLyfSVLlN/DO1TAPzPeWstx5VHvPS3beBn7 0FmcTWvj7vEJlmVfQEn8KeEDsOrThvBCgGjHJ/ottlz0VCL4KHJQfqXx ewA= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdMz5YCS6AnlK5Id93IA0wp8aFVHsecJNWYjPNOIdN1G0FufP8z7 yVfdWef/Lmj7VzrpHq9a+HlJ1396SCr6FYbm4Wg0nx4KxF4/dXKpIRYw HWdQiwxAu/bqixy1Yklz1HaljKenSQxEsy0dbRv+GQM65whuNui0Uk/D P1bgZsW9 ;{id = 2854 (zsk), size = 1688b}
+; make priming query succeed
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101751 20181130101751 62867 example.com. wSoXZPx8cm7DDDLM8cN7Guzh3kSSCkVgmhBSNzs9kPT/fOfz8nUyeBaf saOeU19aPuSKWFxLKiUCxy1Nwtcyax6HIeYgDVBsZ0iNxV5SD6znoJlY f/vLg/43c3e/CLSSCuWM/4DA9fZNyBrthX7BgcZdnHY5D9TVsTAskp4b 97w= ;{id = 2854}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854}
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.blabla.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854}
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854}
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. byNMYNt2pVPZe/Or/iLKGuxmkYlSzh2T+zq2SUMbgDKBgAXQGeZaYHIm ypvZzbmxGtXJfFK0vT1VexagQasf8WSGbZD5O3B8oSDuQ+0Dos9JYRBp q16dhOU+rGgBaBDPfF1WNP2V9kmMRkYOP+3MhxRyynywzIrlu+uMb5sw EOI= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101751 20181130101751 62867 example.com. l15h4pHl98ot8mRBklpnoFYwYmqmoz/iWC/tS8q0bkurxZivPdmvt63C DjHpH8vv36fnO0s89btfC3eIBnDX5miuaiLbxqINmxpxDYgy3/TN+DWT VfjiWAPfaFkfwedx8oHHWwO0O7DEjrnbaqTI+5BJW7LOVYSMLNx7nFjg 490= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 12981 5 1 626AD6C14D2BE93B5EDF1C8A2FFCBC5447666CF3
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101751 20181130101751 62867 example.com. bwKyS7x0t/By9YxMmwnJSIkMZEYQu7MPW4MmIZqB6/2amawL0r16mBKe fhuamuH2CdYvzoSdYqjk4+8xZ9YyhzLI4Fmd4nE2XznoCDc+/GG4QH4R eH3e+GEXtyRnmZgANk845pYYJ2n4TcE3F3OwG7AIP6ol8I8k17g9RfGT w2I= ;{id = 2854}
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN DS 12981 5 1 626AD6C14D2BE93B5EDF1C8A2FFCBC5447666CF3
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101751 20181130101751 62867 example.com. bwKyS7x0t/By9YxMmwnJSIkMZEYQu7MPW4MmIZqB6/2amawL0r16mBKe fhuamuH2CdYvzoSdYqjk4+8xZ9YyhzLI4Fmd4nE2XznoCDc+/GG4QH4R eH3e+GEXtyRnmZgANk845pYYJ2n4TcE3F3OwG7AIP6ol8I8k17g9RfGT w2I= ;{id = 2854}
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.blabla.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101751 20181130101751 62867 example.com. l15h4pHl98ot8mRBklpnoFYwYmqmoz/iWC/tS8q0bkurxZivPdmvt63C DjHpH8vv36fnO0s89btfC3eIBnDX5miuaiLbxqINmxpxDYgy3/TN+DWT VfjiWAPfaFkfwedx8oHHWwO0O7DEjrnbaqTI+5BJW7LOVYSMLNx7nFjg 490= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101751 20181130101751 62867 example.com. RHlNZwaJDQlK7ptDtIq0/V+QBXNIv0F5NTYnJoxDRmUdE3dMqsTxS6jC RIV6U2T609yLL+6elv4WtkLyfSVLlN/DO1TAPzPeWstx5VHvPS3beBn7 0FmcTWvj7vEJlmVfQEn8KeEDsOrThvBCgGjHJ/ottlz0VCL4KHJQfqXx ewA= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdMz5YCS6AnlK5Id93IA0wp8aFVHsecJNWYjPNOIdN1G0FufP8z7 yVfdWef/Lmj7VzrpHq9a+HlJ1396SCr6FYbm4Wg0nx4KxF4/dXKpIRYw HWdQiwxAu/bqixy1Yklz1HaljKenSQxEsy0dbRv+GQM65whuNui0Uk/D P1bgZsW9 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101751 20181130101751 62867 example.com. wSoXZPx8cm7DDDLM8cN7Guzh3kSSCkVgmhBSNzs9kPT/fOfz8nUyeBaf saOeU19aPuSKWFxLKiUCxy1Nwtcyax6HIeYgDVBsZ0iNxV5SD6znoJlY f/vLg/43c3e/CLSSCuWM/4DA9fZNyBrthX7BgcZdnHY5D9TVsTAskp4b 97w= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101751 20181130101751 62867 example.com. l15h4pHl98ot8mRBklpnoFYwYmqmoz/iWC/tS8q0bkurxZivPdmvt63C DjHpH8vv36fnO0s89btfC3eIBnDX5miuaiLbxqINmxpxDYgy3/TN+DWT VfjiWAPfaFkfwedx8oHHWwO0O7DEjrnbaqTI+5BJW7LOVYSMLNx7nFjg 490= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. nJSkzyA17he6wGm7+lLbzVsblvW+zsWx5LctUfEeHOkaJ6YqvrZ2yuKl ePHbVN5yO5czQEHa8arTAhh6lSZNFAz1QijkCX/HW8VHzQgUnCjncAvE nf6ab3vVx25Ggr5E3TqJnyH62AP0qZbTZfc3dBYT1F9tQC5LUebW8Xes EBU= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101751 20181130101751 62867 example.com. l15h4pHl98ot8mRBklpnoFYwYmqmoz/iWC/tS8q0bkurxZivPdmvt63C DjHpH8vv36fnO0s89btfC3eIBnDX5miuaiLbxqINmxpxDYgy3/TN+DWT VfjiWAPfaFkfwedx8oHHWwO0O7DEjrnbaqTI+5BJW7LOVYSMLNx7nFjg 490= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101751 20181130101751 62867 example.com. byNMYNt2pVPZe/Or/iLKGuxmkYlSzh2T+zq2SUMbgDKBgAXQGeZaYHIm ypvZzbmxGtXJfFK0vT1VexagQasf8WSGbZD5O3B8oSDuQ+0Dos9JYRBp q16dhOU+rGgBaBDPfF1WNP2V9kmMRkYOP+3MhxRyynywzIrlu+uMb5sw EOI= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 12981 5 1 626AD6C14D2BE93B5EDF1C8A2FFCBC5447666CF3
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101751 20181130101751 62867 example.com. bwKyS7x0t/By9YxMmwnJSIkMZEYQu7MPW4MmIZqB6/2amawL0r16mBKe fhuamuH2CdYvzoSdYqjk4+8xZ9YyhzLI4Fmd4nE2XznoCDc+/GG4QH4R eH3e+GEXtyRnmZgANk845pYYJ2n4TcE3F3OwG7AIP6ol8I8k17g9RfGT w2I= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN DS 12981 5 1 626AD6C14D2BE93B5EDF1C8A2FFCBC5447666CF3
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101751 20181130101751 62867 example.com. bwKyS7x0t/By9YxMmwnJSIkMZEYQu7MPW4MmIZqB6/2amawL0r16mBKe fhuamuH2CdYvzoSdYqjk4+8xZ9YyhzLI4Fmd4nE2XznoCDc+/GG4QH4R eH3e+GEXtyRnmZgANk845pYYJ2n4TcE3F3OwG7AIP6ol8I8k17g9RfGT w2I= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.4.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAbrzxhWzLVhOSmsCj1rysaYFaF6NLfPmXdhjppCOzDb2LxQUZ5tE yiTKViI/ZUSMDKKLk1IdDGpIniYzx3vrUQ7KzA+p8p/XR3qvD8T496Us mdAB/8Dflk5mK36kRCBp5GEKI+yz1R5Z5VolpZFnIuRLB/hXJlt7EzDz zcFMIgzT ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. piLZqA+rmQur/BRNwZ5dVdqehHNP4Egt16bO/qdYL7UE/GRfwWWImAKQ Z924Lmk7qrZfF8+a16+R6YgVQJoUX+qqVNSdjTyC4NT0IKx82qdamZSZ dTVktU5cCeE5A1WhXQHq4zcwO+EQaCyOEUf+X+wMtYkGQBjpcWP5rui8 KPM= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. YVs4zyrUqmkkbSsCNDKsisAfl4+R/0Ozg8kLqlWjwkd7QTcfu4WsOZUk johg9ESaatO13/isxiqa3W2dD6W+68LnxSflkppanaMBZYRfMmiFf3Fr u3tf4cNFk7KoGt7WL4svoeW8qnkxyKZk16ro6whu6RGO7tpv+mXrIvLZ /1A= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. nhOqrjoDipjtxEH1NcbqQ9whB09kjjWlrYPNoRx9M1Es7x67D5JLvLdP MaCo//BnF9COEXFwlAq/Gg+MJ2I7ge7b+kJMYFxoSUSg+6zD8pP5RuOv 6wxdc+OtTuB/zY3qNpwQZPGhJC5ruBRFQuPsX8JXJXwHAadZcQ3KX+Vq xQc= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN A
+SECTION ANSWER
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. nhOqrjoDipjtxEH1NcbqQ9whB09kjjWlrYPNoRx9M1Es7x67D5JLvLdP MaCo//BnF9COEXFwlAq/Gg+MJ2I7ge7b+kJMYFxoSUSg+6zD8pP5RuOv 6wxdc+OtTuB/zY3qNpwQZPGhJC5ruBRFQuPsX8JXJXwHAadZcQ3KX+Vq xQc= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION AUTHORITY
+ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A
+ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 5 20181230101751 20181130101751 12981 sub.example.com. ESWHtKvRk0CTvXrjV0AGQ0GM3ygY020B+A4GrVPsZa6DwqnTCff13R1M SQ8u+yl71YPh+5HFMbIOFdYoPMSPvU3FyOCwPK/4Mo0z86QT5nkjx6X3 T4YLX+LRfLJ+sqJtRIyA7Mjg7xIratVCa+RYrxbYbXHwSkBScQDKdew9 g5E= ;{id = 30899}
+sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5
+sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. HGuneHQjhKCum7m/PdpryrXY4ASNLfnZS38i+CnJXopIY8CWfaRDeU/k fpj9cBRzGafJAbef4ePxLqTNgWsmzQPZaIFsVIu/vjTMj5JVYmHYcvk/ SyAcQzGV4iqes/8T9z7iQTpDbWH3bD8vZdccdTRAfWi1Tl6t4+phCYVj lAI= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 10.20.30.40
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. YYrHYSUaXA+cM1tLnfVLmVuZPugapKRSUYG/DrYzm0UQ08nuvptESpcz 6ZAP5DP9oPuoHiwPd+rvdwOtX3dWj1BfPDQ0RfAlkHMPXR2Sez3p5kI7 XNuo/FDMs337F52eij9iWSDTzgzeeBusqJPfJMRwao1THKAmDbFsvTne qpQ= ;{id = 30899}
+ENTRY_END
+
+RANGE_END
+
+; ns.foo.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.4.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAbrzxhWzLVhOSmsCj1rysaYFaF6NLfPmXdhjppCOzDb2LxQUZ5tE yiTKViI/ZUSMDKKLk1IdDGpIniYzx3vrUQ7KzA+p8p/XR3qvD8T496Us mdAB/8Dflk5mK36kRCBp5GEKI+yz1R5Z5VolpZFnIuRLB/hXJlt7EzDz zcFMIgzT ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. piLZqA+rmQur/BRNwZ5dVdqehHNP4Egt16bO/qdYL7UE/GRfwWWImAKQ Z924Lmk7qrZfF8+a16+R6YgVQJoUX+qqVNSdjTyC4NT0IKx82qdamZSZ dTVktU5cCeE5A1WhXQHq4zcwO+EQaCyOEUf+X+wMtYkGQBjpcWP5rui8 KPM= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. YVs4zyrUqmkkbSsCNDKsisAfl4+R/0Ozg8kLqlWjwkd7QTcfu4WsOZUk johg9ESaatO13/isxiqa3W2dD6W+68LnxSflkppanaMBZYRfMmiFf3Fr u3tf4cNFk7KoGt7WL4svoeW8qnkxyKZk16ro6whu6RGO7tpv+mXrIvLZ /1A= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. nhOqrjoDipjtxEH1NcbqQ9whB09kjjWlrYPNoRx9M1Es7x67D5JLvLdP MaCo//BnF9COEXFwlAq/Gg+MJ2I7ge7b+kJMYFxoSUSg+6zD8pP5RuOv 6wxdc+OtTuB/zY3qNpwQZPGhJC5ruBRFQuPsX8JXJXwHAadZcQ3KX+Vq xQc= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN A
+SECTION ANSWER
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. nhOqrjoDipjtxEH1NcbqQ9whB09kjjWlrYPNoRx9M1Es7x67D5JLvLdP MaCo//BnF9COEXFwlAq/Gg+MJ2I7ge7b+kJMYFxoSUSg+6zD8pP5RuOv 6wxdc+OtTuB/zY3qNpwQZPGhJC5ruBRFQuPsX8JXJXwHAadZcQ3KX+Vq xQc= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION AUTHORITY
+ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A
+ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 5 20181230101751 20181130101751 12981 sub.example.com. ESWHtKvRk0CTvXrjV0AGQ0GM3ygY020B+A4GrVPsZa6DwqnTCff13R1M SQ8u+yl71YPh+5HFMbIOFdYoPMSPvU3FyOCwPK/4Mo0z86QT5nkjx6X3 T4YLX+LRfLJ+sqJtRIyA7Mjg7xIratVCa+RYrxbYbXHwSkBScQDKdew9 g5E= ;{id = 30899}
+sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5
+sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20181230101751 20181130101751 12981 sub.example.com. HGuneHQjhKCum7m/PdpryrXY4ASNLfnZS38i+CnJXopIY8CWfaRDeU/k fpj9cBRzGafJAbef4ePxLqTNgWsmzQPZaIFsVIu/vjTMj5JVYmHYcvk/ SyAcQzGV4iqes/8T9z7iQTpDbWH3bD8vZdccdTRAfWi1Tl6t4+phCYVj lAI= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 10.20.30.40
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. YYrHYSUaXA+cM1tLnfVLmVuZPugapKRSUYG/DrYzm0UQ08nuvptESpcz 6ZAP5DP9oPuoHiwPd+rvdwOtX3dWj1BfPDQ0RfAlkHMPXR2Sez3p5kI7 XNuo/FDMs337F52eij9iWSDTzgzeeBusqJPfJMRwao1THKAmDbFsvTne qpQ= ;{id = 30899}
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 10.20.30.40
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101751 20181130101751 12981 sub.example.com. YYrHYSUaXA+cM1tLnfVLmVuZPugapKRSUYG/DrYzm0UQ08nuvptESpcz 6ZAP5DP9oPuoHiwPd+rvdwOtX3dWj1BfPDQ0RfAlkHMPXR2Sez3p5kI7 XNuo/FDMs337F52eij9iWSDTzgzeeBusqJPfJMRwao1THKAmDbFsvTne qpQ= ;{id = 30899}
+ENTRY_END
+
+; remove pending ns.blabla.com AAAA msg
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/black_ds.rpl b/tests/deckard/sets/resolver/black_ds.rpl
new file mode 100644
index 0000000..978cb23
--- /dev/null
+++ b/tests/deckard/sets/resolver/black_ds.rpl
@@ -0,0 +1,418 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 14258 7 1 302A703D2FFDA8133175342B41DCA895E435127E "
+val-override-date: "20181130121755"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with blacklist for DS response
+
+; 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 A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN A
+SECTION ANSWER
+ns.blabla.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+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 NS ns.blabla.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+; no ns.blabla.com, try that later
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101755 20181130101755 14258 example.com. TNep4HmQC9pyzvYZmfK3dtYLZ1wsDoVp9IuIe+Wsg94hQLWoVOnWCka1 u5KkOHalzUtwKA8bhO9PxViMkuxJzzUFNmuKVA+bZHi1wCvD5jgkC1Lq YN+ZKno6BS3LIQb9DoEHsgwuTz96K18+dXw8An9SAL2ovo+1UCb8p576 jY4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101755 20181130101755 14258 example.com. MdF5+Lt55oT5mRBOVu3pgdzPpDcXGj/B1OmH/ZKM+M/PavxyoI74HUXX 2MJUaa4D0T2t5EuvFnie54ts6+yQbOqqVAw7/0wEDjnG0x7AyGMocsI9 sncRGe5cF4DAidhLaXUjEh7isWTaMK4x7CZUMSSgQCM1iBnhzh78XIBy aEo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAat4hP1sUv+0zcKCDkb0Bj2Lg4irrLl884ks+sFXcdS9lwFIsWoD C4i91QW1AQk6/ajuxJ5fqUT0GRiQAlmsqmFFnPpUtpf2YAQh3Scfe1dg xhluZjUQfrjKpob0vwqcZK9gbMfPjygdZSkgdhOga7Ru0vQKCTj+lfTg jIwNsQgX ;{id = 2854 (zsk), size = 1688b}
+; make priming query succeed
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101755 20181130101755 14258 example.com. ZeB6Y/3u/MPCxdJmrn5A5/JN0/z5ueHGXJsi9/EBe43o9TN+/CotY4Lu 9/4t45Sb3qmpJyW8Y5Jch267TUTuFe++hfaYXO3ytBRmHgaFinoDg0ca MXPdYUa1RqL2NGHCZmBnQbSuL/9wWAk1KEpKpugNlhPM4iGfbulzR0FK CMg= ;{id = 2854}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854}
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.blabla.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854}
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854}
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. OIh7nTI2GlTjlgoOmmH3XWO69HN9yK61kg9JS3oFNJcWhTUolF/YwFTV 4NL3xYixn2XVRh7YppvYqviK8C5fxP8kYnNn2gijdWC19bTqbjON/d7f n79Fj6yHjQWftVVIclF+d2o7yDhjwPwtsako8FMbeYFcQ+QdSMTvLw8D czE= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101755 20181130101755 14258 example.com. TNep4HmQC9pyzvYZmfK3dtYLZ1wsDoVp9IuIe+Wsg94hQLWoVOnWCka1 u5KkOHalzUtwKA8bhO9PxViMkuxJzzUFNmuKVA+bZHi1wCvD5jgkC1Lq YN+ZKno6BS3LIQb9DoEHsgwuTz96K18+dXw8An9SAL2ovo+1UCb8p576 jY4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 34461 5 1 40F060ED2F80CC6C1D7DC32A7A8926D15E2F96C7
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101755 20181130101755 14258 example.com. Mf7vpHZblSANjCrSIUHXdZ4a8gKy8OXu7TQH9r/CSJ5y01ha9IMgHwEt i5bmQRTPAZjp0DsmFQZAyqW6zu9HXI4o/dtvg1kqNJnQQoGmlKv87OG6 +yVuydaRudH17v9ETVxlaGg+qdYdN+RtlpDcfb5VQvUMXX4xT01gVLtc wLY= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN DS 34461 5 1 40F060ED2F80CC6C1D7DC32A7A8926D15E2F96C7
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101755 20181130101755 14258 example.com. Mf7vpHZblSANjCrSIUHXdZ4a8gKy8OXu7TQH9r/CSJ5y01ha9IMgHwEt i5bmQRTPAZjp0DsmFQZAyqW6zu9HXI4o/dtvg1kqNJnQQoGmlKv87OG6 +yVuydaRudH17v9ETVxlaGg+qdYdN+RtlpDcfb5VQvUMXX4xT01gVLtc wLY= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.blabla.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101755 20181130101755 14258 example.com. TNep4HmQC9pyzvYZmfK3dtYLZ1wsDoVp9IuIe+Wsg94hQLWoVOnWCka1 u5KkOHalzUtwKA8bhO9PxViMkuxJzzUFNmuKVA+bZHi1wCvD5jgkC1Lq YN+ZKno6BS3LIQb9DoEHsgwuTz96K18+dXw8An9SAL2ovo+1UCb8p576 jY4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101755 20181130101755 14258 example.com. MdF5+Lt55oT5mRBOVu3pgdzPpDcXGj/B1OmH/ZKM+M/PavxyoI74HUXX 2MJUaa4D0T2t5EuvFnie54ts6+yQbOqqVAw7/0wEDjnG0x7AyGMocsI9 sncRGe5cF4DAidhLaXUjEh7isWTaMK4x7CZUMSSgQCM1iBnhzh78XIBy aEo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAat4hP1sUv+0zcKCDkb0Bj2Lg4irrLl884ks+sFXcdS9lwFIsWoD C4i91QW1AQk6/ajuxJ5fqUT0GRiQAlmsqmFFnPpUtpf2YAQh3Scfe1dg xhluZjUQfrjKpob0vwqcZK9gbMfPjygdZSkgdhOga7Ru0vQKCTj+lfTg jIwNsQgX ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101755 20181130101755 14258 example.com. ZeB6Y/3u/MPCxdJmrn5A5/JN0/z5ueHGXJsi9/EBe43o9TN+/CotY4Lu 9/4t45Sb3qmpJyW8Y5Jch267TUTuFe++hfaYXO3ytBRmHgaFinoDg0ca MXPdYUa1RqL2NGHCZmBnQbSuL/9wWAk1KEpKpugNlhPM4iGfbulzR0FK CMg= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101755 20181130101755 14258 example.com. TNep4HmQC9pyzvYZmfK3dtYLZ1wsDoVp9IuIe+Wsg94hQLWoVOnWCka1 u5KkOHalzUtwKA8bhO9PxViMkuxJzzUFNmuKVA+bZHi1wCvD5jgkC1Lq YN+ZKno6BS3LIQb9DoEHsgwuTz96K18+dXw8An9SAL2ovo+1UCb8p576 jY4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. IwIqfkUTC6i4BvdOLg51xRwq6PBThrC54g5XrEAizTg9H7w55qbEes/9 +ojie/elleI3WydgCNbSFC4Ax/4wsmOF4RwN0qbG0s38FHZVtuI5PANs QB40JZJftnaW2KVSyr5WiwyaRJFsootBULdUF3XjGG89oo+EF7gnm2Tz GhI= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101755 20181130101755 14258 example.com. TNep4HmQC9pyzvYZmfK3dtYLZ1wsDoVp9IuIe+Wsg94hQLWoVOnWCka1 u5KkOHalzUtwKA8bhO9PxViMkuxJzzUFNmuKVA+bZHi1wCvD5jgkC1Lq YN+ZKno6BS3LIQb9DoEHsgwuTz96K18+dXw8An9SAL2ovo+1UCb8p576 jY4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101755 20181130101755 14258 example.com. OIh7nTI2GlTjlgoOmmH3XWO69HN9yK61kg9JS3oFNJcWhTUolF/YwFTV 4NL3xYixn2XVRh7YppvYqviK8C5fxP8kYnNn2gijdWC19bTqbjON/d7f n79Fj6yHjQWftVVIclF+d2o7yDhjwPwtsako8FMbeYFcQ+QdSMTvLw8D czE= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 34461 5 1 40F060ED2F80CC6C1D7DC32A7A8926D15E2F96C7
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101755 20181130101755 14258 example.com. Mf7vpHZblSANjCrSIUHXdZ4a8gKy8OXu7TQH9r/CSJ5y01ha9IMgHwEt i5bmQRTPAZjp0DsmFQZAyqW6zu9HXI4o/dtvg1kqNJnQQoGmlKv87OG6 +yVuydaRudH17v9ETVxlaGg+qdYdN+RtlpDcfb5VQvUMXX4xT01gVLtc wLY= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN DS 34461 5 1 40F060ED2F80CC6C1D7DC32A7A8926D15E2F96C7
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101755 20181130101755 14258 example.com. Mf7vpHZblSANjCrSIUHXdZ4a8gKy8OXu7TQH9r/CSJ5y01ha9IMgHwEt i5bmQRTPAZjp0DsmFQZAyqW6zu9HXI4o/dtvg1kqNJnQQoGmlKv87OG6 +yVuydaRudH17v9ETVxlaGg+qdYdN+RtlpDcfb5VQvUMXX4xT01gVLtc wLY= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.4.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAcJc2r+SCY+fkRzchGj7gEfuutF+Gwt7H0/4EnOKxIwlf0LthG7p 9xyHAuEGFN9aSkVyg0S/edWEODCGL583yRXnaJ6Ryc90H1SfSX1Wytdd XrBENgFI/B2vf4IZxm4tutwJwvMh8CXhMIGGhRzROIwijNB+eABCKu6z duD8nxL1 ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101754 20181130101754 34461 sub.example.com. CbEKDlQCkG0clRptCLxKpUt6yiydTYdLmjwocdAcJOZ2MMI0joFuyPvV 89+l5xzSsvhA9CLLD5COcIhymMUtNLqF87GmnvtN/NSBTSQoOA+Ujr7t 3zp0FOWNasL/xIuORU7HBZvXq9saCjwnuRckXCouTop01Fr25ht+jYfj A6o= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.foo.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101754 20181130101754 34461 sub.example.com. hZbI8UiV3LAHw6Rchr6vYqHkuURNG7fAzlQAvxxdqyHQKNd1EUZwPulE knjiklD+Ke5kk4PEWQaWlmBlfmhOkYA3bdLeDKIMi9jsVTPLAwUmPZOV uAMbvnrEvnqdxTHNRgtwoDD/20mMJqaNEmGLayc1Yf5zmOMQQ+m68DGx Ths= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101754 20181130101754 34461 sub.example.com. J48RT+8rS2wShNJabUbeeKSsXi7v808iOwI0UQbAGg4QXzKIgDZR32dy ClKPkSAId20AfrGotJWz1kJyUAH7EDD9BVpX7PlF5BKfTJD0VRmBu+FF BSarqtziyTaNRsQwzgf74Gj2xRQmEfiGwLSyX1SXNC1sl4Wv+tGnH8M1 VOU= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN A
+SECTION ANSWER
+ns.sub.example.com. IN A 1.2.4.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101754 20181130101754 34461 sub.example.com. J48RT+8rS2wShNJabUbeeKSsXi7v808iOwI0UQbAGg4QXzKIgDZR32dy ClKPkSAId20AfrGotJWz1kJyUAH7EDD9BVpX7PlF5BKfTJD0VRmBu+FF BSarqtziyTaNRsQwzgf74Gj2xRQmEfiGwLSyX1SXNC1sl4Wv+tGnH8M1 VOU= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION AUTHORITY
+ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A
+ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 5 20181230101754 20181130101754 34461 sub.example.com. Jsa5cpk3YApRVWatd1d3E7g6Rh1iqyxw8IzY9hBX5HkxBm0gaRZ0B7F3 np27mEtQi7Ca7dYzjhMAPJtki5AwFhG9TQq3nEm9mhFQy4M5JdqnKcPX uIy7QZAhlBgg3EiFlMER/VHWWTGie1aOdS11EW9uAoLP3jGxRuVod9YK Vno= ;{id = 30899}
+sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5
+sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20181230101754 20181130101754 34461 sub.example.com. gRW+r5SnhDYodC44XwY0qc4M5AV7f2UsX0BMdxnBc6BOoo/TwmWfY1YU TCf50YQMfE/aoRrFpnzy/IMFHzgzWiWMBYgQ07jZFaYaT21JV90orXnA PEmAQ7BTwnvEA7kM6uNAYVYJeE5sh0/ILZ+HpCVh+oHC3GX2BCcEUK4p F0o= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 10.20.30.40
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101754 20181130101754 34461 sub.example.com. vKBtMjGLMImbm4KKVDbVeiShF7NWxnoSKKVEefhpH7x/sG8xKK2v3LYV Fc0KX+kPTYrXJCEQiwMPNqH4YdldjH3OEVP5C1oOIx3EoB+nRwFIHBxu JjoS/7XV/tdDqJ17FIOCDsARmWbLz6tJteFwRZyLvaozVNDl0z8VHAQB 7cE= ;{id = 30899}
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 10.20.30.40
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101754 20181130101754 34461 sub.example.com. vKBtMjGLMImbm4KKVDbVeiShF7NWxnoSKKVEefhpH7x/sG8xKK2v3LYV Fc0KX+kPTYrXJCEQiwMPNqH4YdldjH3OEVP5C1oOIx3EoB+nRwFIHBxu JjoS/7XV/tdDqJ17FIOCDsARmWbLz6tJteFwRZyLvaozVNDl0z8VHAQB 7cE= ;{id = 30899}
+ENTRY_END
+
+; remove pending ns.blabla.com AAAA msg
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/black_ent.rpl b/tests/deckard/sets/resolver/black_ent.rpl
new file mode 100644
index 0000000..05d9d58
--- /dev/null
+++ b/tests/deckard/sets/resolver/black_ent.rpl
@@ -0,0 +1,451 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 5459 7 1 40E1D493C25150C341D3AB775BCF908C857DDF7D "
+val-override-date: "20181130121757"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with blacklist for ENT response
+; 'ENT' Empty Non Terminal
+; which needs a valid NSEC(3) proof.
+
+; 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 A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN A
+SECTION ANSWER
+ns.blabla.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+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 NS ns.blabla.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+; no ns.blabla.com, try that later
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101756 20181130101756 5459 example.com. MGpbBGEQk6CQ0GBHNByUfF9s7kXOl2Qflh74erA5oFkrlK0/fJFRAkMb Edgmrs4FjvrlJJ1Gi5BWqv0avoyPUWVhwYz15VhjJjXP6jLuVn1j/EnT J5t55UU6hGf2R9NHvLRdeebJDOMryVW+1r9UWQYuabdCkxtnT+xcw9Or nDs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101756 20181130101756 5459 example.com. WM9C+vSGlYtmk/wVLfWyqGwo4vbo8fGaD7DoGnJGFpICmoM8v7mcs4Pd UyZv9CPBMy9gYNM1wWcNVofQu2IC5gUgEpkuhluJji5BeocqOGzIuHW+ AVIHJjN4m9z12swsCrAq71vO+UEfWqPO4JOu40vVkSsDiaINYd8FRWkr yfg= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAaQAmPhsPdOjFE6SGc95hYvPxUHoNkUetYpu81j7j9WXUsvn8Y6M DrHOnLrVd9uV7+1Aj2nkLY+6BvLxsPcp3yBO7UPB6Mv1ZfYCP0D7qCcs Jg6NjLWD5+2owvglTk7XveTztZLFIgDGo2sxZ4/wKE2fhsmh6/Hn7GiW ySEwHURb ;{id = 2854 (zsk), size = 1688b}
+; make priming query succeed
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101756 20181130101756 5459 example.com. Pfl3n2c2oppL26sSLAFSTTkOken2ZlU+bJwpH3ipCz6BTCIm8zHjk/u7 IPyX6RiKEgVwUKEoNIXSYxkZg4Q2OHOINwRhARgQR5XOZaVN9s4acmYK yPcZHteq2YChTbLreIj4xGgoIIzW9G3e98FAvgzMyMw7b8s6678hLA7S EW8= ;{id = 2854}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854}
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.blabla.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854}
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854}
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. UJ98Ev1G8XsVXX6xqSkSeqhDauNtAK1fnTgt1qdGf1+TFJuqPjHmEBr3 I8u381FKJaGPF2ZKH+A5oSPy6jPLQLe4TipFgnTZptq4IZ53holOKlx9 RSjz5kovs5wYafSeBBM+cjX6LJogyP8vrnPuSJ/Z8Uk2+Ojhd1j7sR2C PwY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101756 20181130101756 5459 example.com. MGpbBGEQk6CQ0GBHNByUfF9s7kXOl2Qflh74erA5oFkrlK0/fJFRAkMb Edgmrs4FjvrlJJ1Gi5BWqv0avoyPUWVhwYz15VhjJjXP6jLuVn1j/EnT J5t55UU6hGf2R9NHvLRdeebJDOMryVW+1r9UWQYuabdCkxtnT+xcw9Or nDs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+ENTRY_END
+
+; ENT request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+rub.example.com. IN NSEC sub.sub.example.com. RRSIG NSEC A
+rub.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101756 20181130101756 5459 example.com. LxXDGCPOA5KoYz7wy2512fZqTzWTdfRdL2VQU6+v+k39hMpVvBbRbW3R 8X1YFrbl+gKMbzhtH3kKkjibwlKethd71p8xZKwIw4df1u3kdJygijuH +BvwG6jCIzF8wBLh8Uuv14KJOybmqJXzUdVKAU9MyQNvnfJk+Ekdj/sY MEw= ;{id = 2854}
+; extraneous DS
+sub.sub.example.com. IN NSEC tub.example.com. RRSIG NSEC DS
+sub.sub.example.com. 3600 IN RRSIG NSEC 7 4 3600 20181230101756 20181130101756 5459 example.com. RoMochVq8vIslggd50/mnc5rV+OKchIZPUdrVjVpGZjsieh50UoM1+bV ChGrxwDNUYvs7vzztSaZ+oyBErPiGzkK6/nUQ5P8fhxMyPMaFrCNtHCC +tZsImjSbiwVm3bLpdcoNEDRHjiVb0Y7ztScMQji2QyN6iFLPrXXXNaW HXU= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN DS
+SECTION ANSWER
+sub.sub.example.com. 3600 IN DS 14511 5 1 9C23483B120C7BCAB7E9BD00BCA7F30B38F92E1A
+sub.sub.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101756 20181130101756 5459 example.com. jkShmezNgvdoBxXKSiTVnmofgublfIQPCqrHwEDMCzs1WbIJWWEmzmxX 7dzupiSnVPlVQfKLXzEbSqM/QGxmU/bBn2lUAYNLpM2kFm85TVEXCLf8 u12NeWbBupsr1UctfzF2WtaUGxVfDZ+J86ka3qqQnmYYYAbz4MlnKvyQ p5c= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN NS
+SECTION AUTHORITY
+sub.sub.example.com. IN NS ns.sub.sub.example.com.
+sub.sub.example.com. IN NS ns.foo.com.
+sub.sub.example.com. 3600 IN DS 14511 5 1 9C23483B120C7BCAB7E9BD00BCA7F30B38F92E1A
+sub.sub.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101756 20181130101756 5459 example.com. jkShmezNgvdoBxXKSiTVnmofgublfIQPCqrHwEDMCzs1WbIJWWEmzmxX 7dzupiSnVPlVQfKLXzEbSqM/QGxmU/bBn2lUAYNLpM2kFm85TVEXCLf8 u12NeWbBupsr1UctfzF2WtaUGxVfDZ+J86ka3qqQnmYYYAbz4MlnKvyQ p5c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.blabla.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101756 20181130101756 5459 example.com. MGpbBGEQk6CQ0GBHNByUfF9s7kXOl2Qflh74erA5oFkrlK0/fJFRAkMb Edgmrs4FjvrlJJ1Gi5BWqv0avoyPUWVhwYz15VhjJjXP6jLuVn1j/EnT J5t55UU6hGf2R9NHvLRdeebJDOMryVW+1r9UWQYuabdCkxtnT+xcw9Or nDs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101756 20181130101756 5459 example.com. WM9C+vSGlYtmk/wVLfWyqGwo4vbo8fGaD7DoGnJGFpICmoM8v7mcs4Pd UyZv9CPBMy9gYNM1wWcNVofQu2IC5gUgEpkuhluJji5BeocqOGzIuHW+ AVIHJjN4m9z12swsCrAq71vO+UEfWqPO4JOu40vVkSsDiaINYd8FRWkr yfg= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAaQAmPhsPdOjFE6SGc95hYvPxUHoNkUetYpu81j7j9WXUsvn8Y6M DrHOnLrVd9uV7+1Aj2nkLY+6BvLxsPcp3yBO7UPB6Mv1ZfYCP0D7qCcs Jg6NjLWD5+2owvglTk7XveTztZLFIgDGo2sxZ4/wKE2fhsmh6/Hn7GiW ySEwHURb ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101756 20181130101756 5459 example.com. Pfl3n2c2oppL26sSLAFSTTkOken2ZlU+bJwpH3ipCz6BTCIm8zHjk/u7 IPyX6RiKEgVwUKEoNIXSYxkZg4Q2OHOINwRhARgQR5XOZaVN9s4acmYK yPcZHteq2YChTbLreIj4xGgoIIzW9G3e98FAvgzMyMw7b8s6678hLA7S EW8= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101756 20181130101756 5459 example.com. MGpbBGEQk6CQ0GBHNByUfF9s7kXOl2Qflh74erA5oFkrlK0/fJFRAkMb Edgmrs4FjvrlJJ1Gi5BWqv0avoyPUWVhwYz15VhjJjXP6jLuVn1j/EnT J5t55UU6hGf2R9NHvLRdeebJDOMryVW+1r9UWQYuabdCkxtnT+xcw9Or nDs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. aAhY236a0BQlJUnglecaUzphiHPw9ozBTu5v4Lx2ppQLqUZf4AXPgetm 5WjHUVJIqU9e0AwyHiqq3vKK6kDrUcdtI3Ygyn9O5WgCeGUd1UNXrx9h 2SLESwVt5MWFfFP3M0vKwgWrvWS4eZKD6Uc1VUm5tzIo5VRb6Q839qGw yKU= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101756 20181130101756 5459 example.com. MGpbBGEQk6CQ0GBHNByUfF9s7kXOl2Qflh74erA5oFkrlK0/fJFRAkMb Edgmrs4FjvrlJJ1Gi5BWqv0avoyPUWVhwYz15VhjJjXP6jLuVn1j/EnT J5t55UU6hGf2R9NHvLRdeebJDOMryVW+1r9UWQYuabdCkxtnT+xcw9Or nDs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101756 20181130101756 5459 example.com. UJ98Ev1G8XsVXX6xqSkSeqhDauNtAK1fnTgt1qdGf1+TFJuqPjHmEBr3 I8u381FKJaGPF2ZKH+A5oSPy6jPLQLe4TipFgnTZptq4IZ53holOKlx9 RSjz5kovs5wYafSeBBM+cjX6LJogyP8vrnPuSJ/Z8Uk2+Ojhd1j7sR2C PwY= ;{id = 2854}
+ENTRY_END
+
+; ENT request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+rub.example.com. IN NSEC sub.sub.example.com. RRSIG NSEC A
+rub.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101756 20181130101756 5459 example.com. LxXDGCPOA5KoYz7wy2512fZqTzWTdfRdL2VQU6+v+k39hMpVvBbRbW3R 8X1YFrbl+gKMbzhtH3kKkjibwlKethd71p8xZKwIw4df1u3kdJygijuH +BvwG6jCIzF8wBLh8Uuv14KJOybmqJXzUdVKAU9MyQNvnfJk+Ekdj/sY MEw= ;{id = 2854}
+; extraneous DS
+sub.sub.example.com. IN NSEC tub.example.com. RRSIG NSEC DS
+sub.sub.example.com. 3600 IN RRSIG NSEC 7 4 3600 20181230101756 20181130101756 5459 example.com. RoMochVq8vIslggd50/mnc5rV+OKchIZPUdrVjVpGZjsieh50UoM1+bV ChGrxwDNUYvs7vzztSaZ+oyBErPiGzkK6/nUQ5P8fhxMyPMaFrCNtHCC +tZsImjSbiwVm3bLpdcoNEDRHjiVb0Y7ztScMQji2QyN6iFLPrXXXNaW HXU= ;{id = 2854}
+ENTRY_END
+
+; DS request
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN DS
+SECTION ANSWER
+sub.sub.example.com. 3600 IN DS 14511 5 1 9C23483B120C7BCAB7E9BD00BCA7F30B38F92E1A
+sub.sub.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101756 20181130101756 5459 example.com. jkShmezNgvdoBxXKSiTVnmofgublfIQPCqrHwEDMCzs1WbIJWWEmzmxX 7dzupiSnVPlVQfKLXzEbSqM/QGxmU/bBn2lUAYNLpM2kFm85TVEXCLf8 u12NeWbBupsr1UctfzF2WtaUGxVfDZ+J86ka3qqQnmYYYAbz4MlnKvyQ p5c= ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN NS
+SECTION AUTHORITY
+sub.sub.example.com. IN NS ns.sub.sub.example.com.
+sub.sub.example.com. IN NS ns.foo.com.
+sub.sub.example.com. 3600 IN DS 14511 5 1 9C23483B120C7BCAB7E9BD00BCA7F30B38F92E1A
+sub.sub.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101756 20181130101756 5459 example.com. jkShmezNgvdoBxXKSiTVnmofgublfIQPCqrHwEDMCzs1WbIJWWEmzmxX 7dzupiSnVPlVQfKLXzEbSqM/QGxmU/bBn2lUAYNLpM2kFm85TVEXCLf8 u12NeWbBupsr1UctfzF2WtaUGxVfDZ+J86ka3qqQnmYYYAbz4MlnKvyQ p5c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.sub.example.com. IN A 1.2.4.6
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.4.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAabTZ4z4UwwLP6+/SGL9K8q35Xrmey7BMhj0ljyMLM3SGf+2syaV eLubZDwaFf6mO7/hc4HOVrXsdl9mWm8kvuKj8zcj/hi26dcUUfd4OAyR Fy1qrnyutzHJkB/9Ahau0/ORuQXAAstUaQERk1u2RQI2u/iWmuEN5o1H Tf4CUruX ;{id = 30899 (zsk), size = 512b}
+sub.sub.example.com. 3600 IN RRSIG DNSKEY 5 4 3600 20181230101756 20181130101756 14511 sub.sub.example.com. jTL8Io/JECEwS06P0rTJquZjpFzONP/UKmSPscICI+yI6aOLc+Fa1ig9 OC+XLfBmbnpN/W+KAtpJGwkDzFiXMWLB+Q3BnAVnqQvsDHv0CKIDyN4k Vo7rVqMuDM5bFYsoPhojltZ+2ZP/m6c/ylxwj5Yr0tuRpJSiyj4rEKRv Ohs= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.sub.example.com. IN NS
+SECTION ANSWER
+sub.sub.example.com. IN NS ns.sub.sub.example.com.
+sub.sub.example.com. IN NS ns.foo.com.
+sub.sub.example.com. 3600 IN RRSIG NS 5 4 3600 20181230101756 20181130101756 14511 sub.sub.example.com. I4VuZ180mFDV4B2YK7gWXaFYYxJE+Mt4X12/azYSudLBesx/NR99GYNc dQbrE03JEGvDRmTataRE1za7RdpR7HkJfUfY+2Wa/CtmdIvLkxnDkK0G AexLq0ws8ozntfMdrI1Ahz9mMj8/tifrlvNSMA0ifjtmjENZX0HyBuYX OwI= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.sub.example.com. IN A 1.2.4.6
+ns.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20181230101756 20181130101756 14511 sub.sub.example.com. eWvgi1EsYq54z+3NIjhwoeq+qGmJ/5GUnXAE024QLD8J/a1fN1QB4WR4 awo3UuhPeYd3LHntFQ1LuJDcxqLwT2C4c7mN/EQu39zrnlKwJS2kOyAo eolcUtsEkmf37VY3ZpUXviQZlOtJfEXaAajWeksXMeVAmzuO9l0SOD1O QzQ= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.sub.example.com. IN A
+SECTION ANSWER
+ns.sub.sub.example.com. IN A 1.2.4.6
+ns.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20181230101756 20181130101756 14511 sub.sub.example.com. eWvgi1EsYq54z+3NIjhwoeq+qGmJ/5GUnXAE024QLD8J/a1fN1QB4WR4 awo3UuhPeYd3LHntFQ1LuJDcxqLwT2C4c7mN/EQu39zrnlKwJS2kOyAo eolcUtsEkmf37VY3ZpUXviQZlOtJfEXaAajWeksXMeVAmzuO9l0SOD1O QzQ= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.sub.example.com. IN AAAA
+SECTION AUTHORITY
+ns.sub.sub.example.com. IN NSEC nt.sub.sub.example.com. NSEC RRSIG A
+ns.sub.sub.example.com. 3600 IN RRSIG NSEC 5 5 5 20181230101756 20181130101756 14511 sub.sub.example.com. HcRO6gIx6vkwVAXfGG/OmN7eBBbzjEy1Em3iOwsZT0SuCzcPWJOMS/n2 HnocrKbR/k4seuodrppyUF3nfDcGWJ85gC7HprofbJNgmjVJSErb6Y2Q eGzDf7SJULRKLX5lHmqYY7UUWHmAQKjnnrN7SSnCb8RigPi1DcGUlS5N GzU= ;{id = 30899}
+sub.sub.example.com. IN SOA sub.sub.example.com. hostmaster.sub.sub.example.com. 1 2 3 4 5
+sub.sub.example.com. 3600 IN RRSIG SOA 5 4 3600 20181230101756 20181130101756 14511 sub.sub.example.com. etcKdUzigtePis7MO2hVK0runIUOnpCD59J+2ne554YZk7OYi68IIoZB wvmeJoz6nqEu2V0ciZflj8gX9DAHDqV+mTWSr8ZXqp800hJkbxJ66C7q Q7M+bfMq8QN3+JwjosvjGBYmR6s6AMA/AmgYNA/mN1pCjkY4LpDMDmYU Mks= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.sub.example.com. IN A
+SECTION ANSWER
+www.sub.sub.example.com. IN A 10.20.30.40
+www.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20181230101756 20181130101756 14511 sub.sub.example.com. iOC5Z07Y0wVz7U9rRUqUNZeBopg2GVInGSR7qfn6bhSrvygmhKdayL1Y SZ3urbmXRrv3syTb61Iqy4N6Di2Swj4sLmdUaSobyIzWAQ6XZwKHXBRc 5yDjigDXSR7TTMSSSzQpYtR1P3tIFT5Ppdp4xAiX0CgjQlDs29fPUaQ9 Vx4= ;{id = 30899}
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.sub.example.com. IN A
+SECTION ANSWER
+www.sub.sub.example.com. IN A 10.20.30.40
+www.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20181230101756 20181130101756 14511 sub.sub.example.com. iOC5Z07Y0wVz7U9rRUqUNZeBopg2GVInGSR7qfn6bhSrvygmhKdayL1Y SZ3urbmXRrv3syTb61Iqy4N6Di2Swj4sLmdUaSobyIzWAQ6XZwKHXBRc 5yDjigDXSR7TTMSSSzQpYtR1P3tIFT5Ppdp4xAiX0CgjQlDs29fPUaQ9 Vx4= ;{id = 30899}
+ENTRY_END
+
+; remove pending ns.blabla.com AAAA msg
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/black_prime.rpl b/tests/deckard/sets/resolver/black_prime.rpl
new file mode 100644
index 0000000..0cc2d28
--- /dev/null
+++ b/tests/deckard/sets/resolver/black_prime.rpl
@@ -0,0 +1,300 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 62942 7 1 04D720E4CAB3C4AC2049BE5EE7599BF920269624 "
+val-override-date: "20181130121801"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with blacklist for prime response
+; the data response needs a blacklist action as well, since it also
+; comes from an 'expired signatures' name server.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN A
+SECTION ANSWER
+ns.blabla.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+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 NS ns.blabla.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+; no ns.blabla.com, try that later
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101800 20181130101800 62942 example.com. j4fGEdXawCQcg5K+EPIlU4ekUeIqvDSxV7ZaPsC2P4IxJaLpCUMQJk54 aF+XCCpedBTbAoe8WBws/mxySdY2CYt0WfUjUhl6hWt+sINX8XXoH87O NKidHTC7z+/lzzEYoqMEJxCc7KdNxM3Y+6QaHshZzg4NYFiw5P62oOev NaE= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdBMHE0Pz/DMrzxL+gmpcUrQJr7lLVUreB+a1rQrMicGVF/5/88V Hu+kDKaPvRHq4x22Ja8ZMmiNrfozQWoszAzhMlupQX1vXF44aSZbElqZ DNYhLyIaC8xBUPJ3qrcBPZOILu/2ylTx3xXfSPDVoX2L8fqODOOIjCim lumwbb5H ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101800 20181130101800 62942 example.com. KECGylKgZL/1kcEKkulqQF7XlT8kCswdtvH3coWkCBGGprMYZ5sJKGP9 mk8lcEXG9vXujUz++YtJ2l1U23MMAr8stnoJ0xRlTMO2VwoLlTnW68ng F12n5eeQs7GNq1hDz6xnLAF0flpI8qfTIABqnw8M7LmYoqEbwNHPtVDt nfE= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. cN4kzlqQDlhENCeWp7RaqU6N0CaVPCgOJLpdkVh7+Q6swyKe/Ponmgia SZ44kBtXXt91EIsaJgDU/Rhwq7zCmHT1XOHGNdNjPfHdOAOjtL42rVKU lnhS0rjcFn4SN9zgE1kiQIiu3zgIlkimNaL6JqgtUpbaIrTE6Ol9PMWU 6v8= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.blabla.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101800 20181130101800 62942 example.com. j4fGEdXawCQcg5K+EPIlU4ekUeIqvDSxV7ZaPsC2P4IxJaLpCUMQJk54 aF+XCCpedBTbAoe8WBws/mxySdY2CYt0WfUjUhl6hWt+sINX8XXoH87O NKidHTC7z+/lzzEYoqMEJxCc7KdNxM3Y+6QaHshZzg4NYFiw5P62oOev NaE= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdBMHE0Pz/DMrzxL+gmpcUrQJr7lLVUreB+a1rQrMicGVF/5/88V Hu+kDKaPvRHq4x22Ja8ZMmiNrfozQWoszAzhMlupQX1vXF44aSZbElqZ DNYhLyIaC8xBUPJ3qrcBPZOILu/2ylTx3xXfSPDVoX2L8fqODOOIjCim lumwbb5H ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101800 20181130101800 62942 example.com. KECGylKgZL/1kcEKkulqQF7XlT8kCswdtvH3coWkCBGGprMYZ5sJKGP9 mk8lcEXG9vXujUz++YtJ2l1U23MMAr8stnoJ0xRlTMO2VwoLlTnW68ng F12n5eeQs7GNq1hDz6xnLAF0flpI8qfTIABqnw8M7LmYoqEbwNHPtVDt nfE= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. KDQYC0xU8LVsNTK2uldzRU89po6ti/vnp94h9lo7TYI7Z+lGtBIXK23H nFL4/DBbcAChUB0xTeXRm6LHt3lI2M/cpGCQ7fcByBzv7cFDeIuJ3BZ9 ufbJBkmTmw9292zjMoDqP+9tGgSIDV3amJdP39C0VC1qhOjG+crIlEKB XIg= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.blabla.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101800 20181130101800 62942 example.com. qmB12jqvKtMSxWX+8K3dKRRvFHxAcxe0bHtpZjiFn9dpUpsvo/CZ2nSV rrZ53C6WRIKA0i7Z2Q7CzeKjnOpXqVXfZ2rZyFaWQs23AbXLAIhpoG+7 g+9xCRkXED5kgkCjsyg5CmzFx5G68bZj9IOZNna/ZNfij8vaiJPO3IW9 mmM= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. cN4kzlqQDlhENCeWp7RaqU6N0CaVPCgOJLpdkVh7+Q6swyKe/Ponmgia SZ44kBtXXt91EIsaJgDU/Rhwq7zCmHT1XOHGNdNjPfHdOAOjtL42rVKU lnhS0rjcFn4SN9zgE1kiQIiu3zgIlkimNaL6JqgtUpbaIrTE6Ol9PMWU 6v8= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101800 20181130101800 62942 example.com. cN4kzlqQDlhENCeWp7RaqU6N0CaVPCgOJLpdkVh7+Q6swyKe/Ponmgia SZ44kBtXXt91EIsaJgDU/Rhwq7zCmHT1XOHGNdNjPfHdOAOjtL42rVKU lnhS0rjcFn4SN9zgE1kiQIiu3zgIlkimNaL6JqgtUpbaIrTE6Ol9PMWU 6v8= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; remove pending ns.blabla.com AAAA msg
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA DO NOERROR
+SECTION QUESTION
+ns.blabla.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+com. IN SOA com. com. 2009100100 28800 7200 604800 3600
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_badglue.rpl b/tests/deckard/sets/resolver/iter_badglue.rpl
new file mode 100644
index 0000000..131a8a9
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_badglue.rpl
@@ -0,0 +1,272 @@
+stub-addr: 1.1.1.1
+CONFIG_END
+
+SCENARIO_BEGIN Test not using cached glue records
+
+;root server
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS ns.com.
+SECTION ADDITIONAL
+ns.com. IN A 2.2.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS ns.net.
+SECTION ADDITIONAL
+ns.net IN A 3.3.3.3
+ENTRY_END
+RANGE_END
+
+;ns.com.
+RANGE_BEGIN 0 100
+ ADDRESS 2.2.2.2
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. IN NS ns.com.
+SECTION ADDITIONAL
+ns.com. IN A 2.2.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns.com. IN A
+SECTION ANSWER
+ns.com. IN A 2.2.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns.com. IN AAAA
+SECTION AUTHORITY
+com. IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+a.com. IN NS
+SECTION AUTHORITY
+a.com. IN NS ns-a.net. ; out-of-bailwick nameservers
+a.com. IN NS ns-obsolete.net.
+SECTION ADDITIONAL
+ns-a.net. IN A 4.4.4.4
+ns-obsolete.net. IN A 6.6.6.6 ; dead address in glue records
+ENTRY_END
+RANGE_END
+
+;ns.net.
+RANGE_BEGIN 0 100
+ ADDRESS 3.3.3.3
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS ns.net.
+SECTION ADDITIONAL
+ns.net. IN A 3.3.3.3
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns.net. IN A
+SECTION ANSWER
+ns.net. IN A 3.3.3.3
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns.net. IN AAAA
+SECTION AUTHORITY
+net. IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+net. 900 IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+ns-a.net. IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+net. 900 IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns-a.net. IN A
+SECTION ANSWER
+ns-a.net. IN A 4.4.4.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns-obsolete.net. IN A
+SECTION ANSWER
+ns-obsolete.net. IN A 9.9.9.9 ; working address
+ENTRY_END
+
+; no IPv6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns-a.net. IN AAAA
+SECTION AUTHORITY
+net. 900 IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+ns-obsolete.net. IN AAAA
+SECTION AUTHORITY
+net. 900 IN SOA . . 1487352364 1800 900 604800 86400
+ENTRY_END
+RANGE_END
+
+;ns-a.net
+RANGE_BEGIN 0 100
+ ADDRESS 4.4.4.4
+ ADDRESS 9.9.9.9
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+a.com. IN NS
+SECTION ANSWER
+a.com. IN NS ns-a.net. ; out-of-bailwick nameservers
+a.com. IN NS ns-obsolete.net.
+SECTION ADDITIONAL
+ns-a.net. IN A 4.4.4.4
+ns-obsolete.net. IN A 9.9.9.9 ; the new (functional) address
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+; phony target used to pollute resolver's cache
+www.a.com. IN A
+SECTION ANSWER
+www.a.com. IN A 5.5.5.5
+ENTRY_END
+RANGE_END
+
+; ask for phony target to pollute resolver's cache
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.a.com. IN A
+ENTRY_END
+
+; we don't actually care about this answer
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.a.com. IN A
+SECTION ANSWER
+www.a.com. IN A 5.5.5.5
+ENTRY_END
+
+; check if obsolete data from glue records is returned to the client
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns-obsolete.net. IN A
+ENTRY_END
+
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns-obsolete.net. IN A
+SECTION ANSWER
+ns-obsolete.net. IN A 9.9.9.9 ; 6.6.6.6 should not be here
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_badraw.rpl b/tests/deckard/sets/resolver/iter_badraw.rpl
new file mode 100644
index 0000000..0653b76
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_badraw.rpl
@@ -0,0 +1,18699 @@
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN raw queries from inbound.
+
+STEP 10 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004aa200000204059801010402
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+RAW
+b5c9ca3d50104320f4120000000000000000
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+RAW
+b5c9ca3d5018432054550000009010c0000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 40 QUERY
+ENTRY_BEGIN
+RAW
+b5c9ca4b50114312f37f0000000000000000
+ENTRY_END
+
+STEP 50 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400026fc00000204059801010402
+ENTRY_END
+
+STEP 60 QUERY
+ENTRY_BEGIN
+RAW
+b5c9ca4c50104312f37e0000000000000000
+ENTRY_END
+
+STEP 70 QUERY
+ENTRY_BEGIN
+RAW
+b5ca72d85010432027d10000000000000000
+ENTRY_END
+
+STEP 80 QUERY
+ENTRY_BEGIN
+RAW
+b5ca72d8501843209a9300000090ff40000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 90 QUERY
+ENTRY_BEGIN
+RAW
+b5ca72e650114312273e0000000000000000
+ENTRY_END
+
+STEP 100 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006b1b00000204059801010402
+ENTRY_END
+
+STEP 110 QUERY
+ENTRY_BEGIN
+RAW
+b5ca72e750104312273d0000000000000000
+ENTRY_END
+
+STEP 120 QUERY
+ENTRY_BEGIN
+RAW
+b5cb35d550104320a8f20000000000000000
+ENTRY_END
+
+STEP 130 QUERY
+ENTRY_BEGIN
+RAW
+b5cb35d550184320a275000000907880000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 140 QUERY
+ENTRY_BEGIN
+RAW
+b5cb35e350114312a85f0000000000000000
+ENTRY_END
+
+STEP 150 QUERY
+ENTRY_BEGIN
+RAW
+b5cb35e450104312a85e0000000000000000
+ENTRY_END
+
+STEP 160 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0362600000204057801010402
+ENTRY_END
+
+STEP 170 QUERY
+ENTRY_BEGIN
+RAW
+b5cf40235010fb906c0b0000000000000000
+ENTRY_END
+
+STEP 180 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000671b0000020405b401010402
+ENTRY_END
+
+STEP 190 QUERY
+ENTRY_BEGIN
+RAW
+b5cf40235018fb90fce000000090c500000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 200 QUERY
+ENTRY_BEGIN
+RAW
+b5d0233950104470b6550000000000000000
+ENTRY_END
+
+STEP 210 QUERY
+ENTRY_BEGIN
+RAW
+b5d023395018447066590000008e2a0f000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 220 QUERY
+ENTRY_BEGIN
+RAW
+b5cf40315011fb826b780000000000000000
+ENTRY_END
+
+STEP 230 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08db400000204057801010402
+ENTRY_END
+
+STEP 240 QUERY
+ENTRY_BEGIN
+RAW
+b5d0234750114462b5c40000000000000000
+ENTRY_END
+
+STEP 250 QUERY
+ENTRY_BEGIN
+RAW
+b5cf40325010fb826b770000000000000000
+ENTRY_END
+
+STEP 260 QUERY
+ENTRY_BEGIN
+RAW
+b5d0234850104462b5c30000000000000000
+ENTRY_END
+
+STEP 270 QUERY
+ENTRY_BEGIN
+RAW
+b5d0e1385010fb9022830000000000000000
+ENTRY_END
+
+STEP 280 QUERY
+ENTRY_BEGIN
+RAW
+b5d0e1385018fb908a5800000090f000000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 290 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000dff20000020405b401010402
+ENTRY_END
+
+STEP 300 QUERY
+ENTRY_BEGIN
+RAW
+b5d0e1465011fb8221f00000000000000000
+ENTRY_END
+
+STEP 310 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0310300000204057801010402
+ENTRY_END
+
+STEP 320 QUERY
+ENTRY_BEGIN
+RAW
+b5d188c150104470c9a30000000000000000
+ENTRY_END
+
+STEP 330 QUERY
+ENTRY_BEGIN
+RAW
+b5d0e1475010fb8221ef0000000000000000
+ENTRY_END
+
+STEP 340 QUERY
+ENTRY_BEGIN
+RAW
+b5d188c1501844701fee0000008e84c9000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 350 QUERY
+ENTRY_BEGIN
+RAW
+b5d2225d5010fb9084ab0000000000000000
+ENTRY_END
+
+STEP 360 QUERY
+ENTRY_BEGIN
+RAW
+b4745fb5501144625f360000000000000000
+ENTRY_END
+
+STEP 370 QUERY
+ENTRY_BEGIN
+RAW
+b5d2225d5018fb909e01000000903e80000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 380 QUERY
+ENTRY_BEGIN
+RAW
+b5d188cf50114462c9120000000000000000
+ENTRY_END
+
+STEP 390 QUERY
+ENTRY_BEGIN
+RAW
+b5d188d050104462c9110000000000000000
+ENTRY_END
+
+STEP 400 QUERY
+ENTRY_BEGIN
+RAW
+b5d2226b5011fb8284180000000000000000
+ENTRY_END
+
+STEP 410 QUERY
+ENTRY_BEGIN
+RAW
+b5d2226c5010fb8284170000000000000000
+ENTRY_END
+
+STEP 420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ad730000020405b401010402
+ENTRY_END
+
+STEP 430 QUERY
+ENTRY_BEGIN
+RAW
+b5d3163f5010447009a50000000000000000
+ENTRY_END
+
+STEP 440 QUERY
+ENTRY_BEGIN
+RAW
+b4745fb6501044625f350000000000000000
+ENTRY_END
+
+STEP 450 QUERY
+ENTRY_BEGIN
+RAW
+b5d3163f5018447005350000008edf83000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 460 QUERY
+ENTRY_BEGIN
+RAW
+b5d3164d5011446209140000000000000000
+ENTRY_END
+
+STEP 470 QUERY
+ENTRY_BEGIN
+RAW
+b5d3164e5010446209130000000000000000
+ENTRY_END
+
+;STEP 480 QUERY
+;ENTRY_BEGIN
+;RAW
+;13f6000000010000000000001664696572656e61727473656e6f697374657277696a6b026e6c00000f0001c0
+;ENTRY_END
+
+STEP 490 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c81100000204055001010402
+ENTRY_END
+
+STEP 500 QUERY
+ENTRY_BEGIN
+RAW
+b5d6cf7c5010451069fe0000000000000000
+ENTRY_END
+
+STEP 510 QUERY
+ENTRY_BEGIN
+RAW
+b5d6cf7c501845104c27000000931280000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 520 QUERY
+ENTRY_BEGIN
+RAW
+b5d6cf8a5011450269680000000000000000
+ENTRY_END
+
+STEP 530 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400002c300000204055001010402
+ENTRY_END
+
+STEP 540 QUERY
+ENTRY_BEGIN
+RAW
+b5d6cf8b5010450269670000000000000000
+ENTRY_END
+
+STEP 550 QUERY
+ENTRY_BEGIN
+RAW
+b5d7afb650104510c4740000000000000000
+ENTRY_END
+
+STEP 560 QUERY
+ENTRY_BEGIN
+RAW
+b5d7afb650184510e85d00000093d1c0000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 570 QUERY
+ENTRY_BEGIN
+RAW
+b5d7afc450114502c3de0000000000000000
+ENTRY_END
+
+STEP 580 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000463d00000204055001010402
+ENTRY_END
+
+STEP 590 QUERY
+ENTRY_BEGIN
+RAW
+b5d7afc550104502c3dd0000000000000000
+ENTRY_END
+
+STEP 600 QUERY
+ENTRY_BEGIN
+RAW
+b5d8998b501045101e190000000000000000
+ENTRY_END
+
+STEP 610 QUERY
+ENTRY_BEGIN
+RAW
+b5d8998b5018451082c2000000939100000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 620 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf04e890000020405b401010402
+ENTRY_END
+
+STEP 630 QUERY
+ENTRY_BEGIN
+RAW
+b5d89999501145021d830000000000000000
+ENTRY_END
+
+STEP 640 QUERY
+ENTRY_BEGIN
+RAW
+b5d8999a501045021d820000000000000000
+ENTRY_END
+
+STEP 650 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400060f900000204055001010402
+ENTRY_END
+
+STEP 660 QUERY
+ENTRY_BEGIN
+RAW
+b5d95492501045107dcd0000000000000000
+ENTRY_END
+
+STEP 670 QUERY
+ENTRY_BEGIN
+RAW
+b5d954925018451062f6000000930f80000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 680 QUERY
+ENTRY_BEGIN
+RAW
+b5d954a0501145027d370000000000000000
+ENTRY_END
+
+STEP 690 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000784600000204055001010402
+ENTRY_END
+
+STEP 700 QUERY
+ENTRY_BEGIN
+RAW
+b5d954a1501045027d360000000000000000
+ENTRY_END
+
+STEP 710 QUERY
+ENTRY_BEGIN
+RAW
+b5da034150104510e66a0000000000000000
+ENTRY_END
+
+STEP 720 QUERY
+ENTRY_BEGIN
+RAW
+b5da03415018451059540000009382c0000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 730 QUERY
+ENTRY_BEGIN
+RAW
+b5da034f50114502e5d40000000000000000
+ENTRY_END
+
+STEP 740 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e0de00000204055001010402
+ENTRY_END
+
+;STEP 750 QUERY
+;ENTRY_BEGIN
+;RAW
+;1f64000000010000000000000e6875676f63617273797374656d73026e6c00000f000100
+;ENTRY_END
+
+STEP 760 QUERY
+ENTRY_BEGIN
+RAW
+b5da035050104502e5d30000000000000000
+ENTRY_END
+
+STEP 770 QUERY
+ENTRY_BEGIN
+RAW
+b5dadc785010451075cb0000000000000000
+ENTRY_END
+
+STEP 780 QUERY
+ENTRY_BEGIN
+RAW
+b5dadc78501845102975000000934200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000
+ENTRY_END
+
+STEP 790 QUERY
+ENTRY_BEGIN
+RAW
+b5dadc865011450275350000000000000000
+ENTRY_END
+
+STEP 800 QUERY
+ENTRY_BEGIN
+RAW
+b5dadc875010450275340000000000000000
+ENTRY_END
+
+STEP 810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf04ab80000020405b401010402
+ENTRY_END
+
+STEP 820 QUERY
+ENTRY_BEGIN
+RAW
+b5dd4b595010faf076350000000000000000
+ENTRY_END
+
+STEP 830 QUERY
+ENTRY_BEGIN
+RAW
+b5dd4b595018faf05667000000931680000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000
+ENTRY_END
+
+STEP 840 QUERY
+ENTRY_BEGIN
+RAW
+b5dd4b675011fae2759f0000000000000000
+ENTRY_END
+
+STEP 850 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf017e30000020405b401010402
+ENTRY_END
+
+STEP 860 QUERY
+ENTRY_BEGIN
+RAW
+b5dd4b685010fae2759e0000000000000000
+ENTRY_END
+
+STEP 870 QUERY
+ENTRY_BEGIN
+RAW
+b5de11195010faf07d9f0000000000000000
+ENTRY_END
+
+STEP 880 QUERY
+ENTRY_BEGIN
+RAW
+b5de11195018faf04852000000932d00000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000
+ENTRY_END
+
+STEP 890 QUERY
+ENTRY_BEGIN
+RAW
+b5de11275011fae27d090000000000000000
+ENTRY_END
+
+STEP 900 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0325f0000020405b401010402
+ENTRY_END
+
+STEP 910 QUERY
+ENTRY_BEGIN
+RAW
+b5de11285010fae27d080000000000000000
+ENTRY_END
+
+STEP 920 QUERY
+ENTRY_BEGIN
+RAW
+b5decd685010faf0dbcb0000000000000000
+ENTRY_END
+
+STEP 930 QUERY
+ENTRY_BEGIN
+RAW
+b5decd685018faf08b7e000000934800000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000
+ENTRY_END
+
+STEP 940 QUERY
+ENTRY_BEGIN
+RAW
+b5decd765011fae2db350000000000000000
+ENTRY_END
+
+STEP 950 QUERY
+ENTRY_BEGIN
+RAW
+b5decd775010fae2db340000000000000000
+ENTRY_END
+
+STEP 960 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ae090000020405ac01010402
+ENTRY_END
+
+STEP 970 QUERY
+ENTRY_BEGIN
+RAW
+b5e1b72b5010441069980000000000000000
+ENTRY_END
+
+STEP 980 QUERY
+ENTRY_BEGIN
+RAW
+b5e1b72b501844100ec700000094cb29000000010001000000000f313031333631323238313837342d330000f900010f313031333631323238313837342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 990 QUERY
+ENTRY_BEGIN
+RAW
+b5e1b7395011440269010000000000000000
+ENTRY_END
+
+STEP 1000 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000be8d0000020405ac01010402
+ENTRY_END
+
+STEP 1010 QUERY
+ENTRY_BEGIN
+RAW
+b5e1b73a5010440269000000000000000000
+ENTRY_END
+
+STEP 1020 QUERY
+ENTRY_BEGIN
+RAW
+b5e2af585010441081ee0000000000000000
+ENTRY_END
+
+STEP 1030 QUERY
+ENTRY_BEGIN
+RAW
+b5e2af58501844109df6000000945551000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 1040 QUERY
+ENTRY_BEGIN
+RAW
+b5e2af665011440281570000000000000000
+ENTRY_END
+
+STEP 1050 QUERY
+ENTRY_BEGIN
+RAW
+b5e2af675010440281560000000000000000
+ENTRY_END
+
+STEP 1060 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000cc0a0000020405b401010402
+ENTRY_END
+
+STEP 1070 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf089fb0000020405b401010402
+ENTRY_END
+
+STEP 1080 QUERY
+ENTRY_BEGIN
+RAW
+b5e6ab0d50104470935a0000000000000000
+ENTRY_END
+
+STEP 1090 QUERY
+ENTRY_BEGIN
+RAW
+b5e6ab0d5018447076b20000008998c8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 1100 QUERY
+ENTRY_BEGIN
+RAW
+b5e73d7d5010faf0c34a0000000000000000
+ENTRY_END
+
+STEP 1110 QUERY
+ENTRY_BEGIN
+RAW
+b5e73d7d5018faf01ee00000009431b8000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000
+ENTRY_END
+
+STEP 1120 QUERY
+ENTRY_BEGIN
+RAW
+b5e73d8b5011fae2c2b30000000000000000
+ENTRY_END
+
+STEP 1130 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf09e490000020405b401010402
+ENTRY_END
+
+STEP 1140 QUERY
+ENTRY_BEGIN
+RAW
+b5e6ab1b5011446292ce0000000000000000
+ENTRY_END
+
+STEP 1150 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d7b30000020405b401010402
+ENTRY_END
+
+STEP 1160 QUERY
+ENTRY_BEGIN
+RAW
+b5e73d8c5010fae2c2b20000000000000000
+ENTRY_END
+
+STEP 1170 QUERY
+ENTRY_BEGIN
+RAW
+b5e829da5010faf0eb3a0000000000000000
+ENTRY_END
+
+STEP 1180 QUERY
+ENTRY_BEGIN
+RAW
+b5e829da5018faf0c24a00000094b73e000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000
+ENTRY_END
+
+STEP 1190 QUERY
+ENTRY_BEGIN
+RAW
+b5e6ab1c5010446292cd0000000000000000
+ENTRY_END
+
+STEP 1200 QUERY
+ENTRY_BEGIN
+RAW
+b5e8ed83501044705c8b0000000000000000
+ENTRY_END
+
+STEP 1210 QUERY
+ENTRY_BEGIN
+RAW
+b5e829e85011fae2eaa30000000000000000
+ENTRY_END
+
+STEP 1220 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf067190000020405b401010402
+ENTRY_END
+
+STEP 1230 QUERY
+ENTRY_BEGIN
+RAW
+b5e8ed8350184470d094000000890918000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 1240 QUERY
+ENTRY_BEGIN
+RAW
+b5e829e95010fae2eaa20000000000000000
+ENTRY_END
+
+STEP 1250 QUERY
+ENTRY_BEGIN
+RAW
+b5e978885010faf0655b0000000000000000
+ENTRY_END
+
+STEP 1260 QUERY
+ENTRY_BEGIN
+RAW
+b5e978885018faf0052b00000094ee7e000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000
+ENTRY_END
+
+STEP 1270 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e51f00000204059801010402
+ENTRY_END
+
+STEP 1280 QUERY
+ENTRY_BEGIN
+RAW
+b5e8ed91501144625bff0000000000000000
+ENTRY_END
+
+STEP 1290 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400000aa0000020405b401010402
+ENTRY_END
+
+STEP 1300 QUERY
+ENTRY_BEGIN
+RAW
+b5e978965011fae264c40000000000000000
+ENTRY_END
+
+STEP 1310 QUERY
+ENTRY_BEGIN
+RAW
+b5ea6c7550104320ec370000000000000000
+ENTRY_END
+
+STEP 1320 QUERY
+ENTRY_BEGIN
+RAW
+b5e978975010fae264c30000000000000000
+ENTRY_END
+
+STEP 1330 QUERY
+ENTRY_BEGIN
+RAW
+b5e8ed92501044625bfe0000000000000000
+ENTRY_END
+
+STEP 1340 QUERY
+ENTRY_BEGIN
+RAW
+b5ea6c755018432081b900000090d180000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 1350 QUERY
+ENTRY_BEGIN
+RAW
+b5eb227d5010447050850000000000000000
+ENTRY_END
+
+STEP 1360 QUERY
+ENTRY_BEGIN
+RAW
+b5eb227d50184470f82900000089d57c000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 1370 QUERY
+ENTRY_BEGIN
+RAW
+b5ea6c8350114312eba40000000000000000
+ENTRY_END
+
+STEP 1380 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ad7200000204059801010402
+ENTRY_END
+
+STEP 1390 QUERY
+ENTRY_BEGIN
+RAW
+b5eb228b501144624ff90000000000000000
+ENTRY_END
+
+STEP 1400 QUERY
+ENTRY_BEGIN
+RAW
+b5ea6c8450104312eba30000000000000000
+ENTRY_END
+
+STEP 1410 QUERY
+ENTRY_BEGIN
+RAW
+b5ebebc85010432035360000000000000000
+ENTRY_END
+
+STEP 1420 QUERY
+ENTRY_BEGIN
+RAW
+b5ebebc850184320dd3800000090c000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 1430 QUERY
+ENTRY_BEGIN
+RAW
+b5eb228c501044624ff80000000000000000
+ENTRY_END
+
+STEP 1440 QUERY
+ENTRY_BEGIN
+RAW
+b5ebebd65011431234a30000000000000000
+ENTRY_END
+
+STEP 1450 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ce3800000204059801010402
+ENTRY_END
+
+STEP 1460 QUERY
+ENTRY_BEGIN
+RAW
+b5ebebd75010431234a20000000000000000
+ENTRY_END
+
+STEP 1470 QUERY
+ENTRY_BEGIN
+RAW
+b5ec666650104320db5d0000000000000000
+ENTRY_END
+
+STEP 1480 QUERY
+ENTRY_BEGIN
+RAW
+b5ec6666501843202b61000000901800000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000
+ENTRY_END
+
+STEP 1490 QUERY
+ENTRY_BEGIN
+RAW
+b5ec667450114312daca0000000000000000
+ENTRY_END
+
+STEP 1500 QUERY
+ENTRY_BEGIN
+RAW
+b5ec667550104312dac90000000000000000
+ENTRY_END
+
+STEP 1510 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000595000000204055001010402
+ENTRY_END
+
+STEP 1520 QUERY
+ENTRY_BEGIN
+RAW
+b5ee16d850104510b3c90000000000000000
+ENTRY_END
+
+STEP 1530 QUERY
+ENTRY_BEGIN
+RAW
+b5ee16d85018451089d00000008a63db000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000
+ENTRY_END
+
+STEP 1540 QUERY
+ENTRY_BEGIN
+RAW
+b5ee16e650114502b33c0000000000000000
+ENTRY_END
+
+STEP 1550 QUERY
+ENTRY_BEGIN
+RAW
+b5ee16e750104502b33b0000000000000000
+ENTRY_END
+
+STEP 1560 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b1fd00000204055001010402
+ENTRY_END
+
+STEP 1570 QUERY
+ENTRY_BEGIN
+RAW
+b5eecbbd5010451057910000000000000000
+ENTRY_END
+
+STEP 1580 QUERY
+ENTRY_BEGIN
+RAW
+b5eecbbd50184510b3ed0000008adf85000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000
+ENTRY_END
+
+STEP 1590 QUERY
+ENTRY_BEGIN
+RAW
+b5eecbcb5011450257040000000000000000
+ENTRY_END
+
+STEP 1600 QUERY
+ENTRY_BEGIN
+RAW
+b5eecbcc5010450257030000000000000000
+ENTRY_END
+
+STEP 1610 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000be5c00000204055001010402
+ENTRY_END
+
+STEP 1620 QUERY
+ENTRY_BEGIN
+RAW
+b5ef8d0d50104510a29f0000000000000000
+ENTRY_END
+
+STEP 1630 QUERY
+ENTRY_BEGIN
+RAW
+b5ef8d0d501845100bfa0000008ad287000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000
+ENTRY_END
+
+STEP 1640 QUERY
+ENTRY_BEGIN
+RAW
+b5ef8d1b50114502a2120000000000000000
+ENTRY_END
+
+STEP 1650 QUERY
+ENTRY_BEGIN
+RAW
+b5ef8d1c50104502a2110000000000000000
+ENTRY_END
+
+STEP 1660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c0510000020405b401010402
+ENTRY_END
+
+STEP 1670 QUERY
+ENTRY_BEGIN
+RAW
+b5f18dd25010faf0a9410000000000000000
+ENTRY_END
+
+STEP 1680 QUERY
+ENTRY_BEGIN
+RAW
+b5f18dd25018faf0e1bb0000008eeec4000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 1690 QUERY
+ENTRY_BEGIN
+RAW
+b5f18de05011fae2a8b00000000000000000
+ENTRY_END
+
+STEP 1700 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08ee30000020405b401010402
+ENTRY_END
+
+STEP 1710 QUERY
+ENTRY_BEGIN
+RAW
+b5f18de15010fae2a8af0000000000000000
+ENTRY_END
+
+STEP 1720 QUERY
+ENTRY_BEGIN
+RAW
+b5f277b05010faf08df40000000000000000
+ENTRY_END
+
+STEP 1730 QUERY
+ENTRY_BEGIN
+RAW
+b5f277b05018faf064b80000008e517c000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 1740 QUERY
+ENTRY_BEGIN
+RAW
+b5f277be5011fae28d630000000000000000
+ENTRY_END
+
+STEP 1750 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06fb10000020405b401010402
+ENTRY_END
+
+STEP 1760 QUERY
+ENTRY_BEGIN
+RAW
+b5f277bf5010fae28d620000000000000000
+ENTRY_END
+
+STEP 1770 QUERY
+ENTRY_BEGIN
+RAW
+b5f2f44d5010faf0f2240000000000000000
+ENTRY_END
+
+STEP 1780 QUERY
+ENTRY_BEGIN
+RAW
+b5f2f44d5018faf05e280000008ebc3c000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 1790 QUERY
+ENTRY_BEGIN
+RAW
+b5f2f45b5011fae2f1930000000000000000
+ENTRY_END
+
+STEP 1800 QUERY
+ENTRY_BEGIN
+RAW
+b5f2f45c5010fae2f1920000000000000000
+ENTRY_END
+
+;STEP 1810 QUERY
+;ENTRY_BEGIN
+;RAW
+;076a000000010000000000000e6875676f63617273797374656d73026e6c00000f000100
+;ENTRY_END
+
+STEP 1820 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0764800000204056401010402
+ENTRY_END
+
+STEP 1830 QUERY
+ENTRY_BEGIN
+RAW
+b5f550df5010fd5c996b0000000000000000
+ENTRY_END
+
+STEP 1840 QUERY
+ENTRY_BEGIN
+RAW
+b5f550df5018fd5c34450000008ed972000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 1850 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000df860000020405b401010402
+ENTRY_END
+
+STEP 1860 QUERY
+ENTRY_BEGIN
+RAW
+b5f550ed5011fd4e98da0000000000000000
+ENTRY_END
+
+STEP 1870 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf05a7600000204056401010402
+ENTRY_END
+
+STEP 1880 QUERY
+ENTRY_BEGIN
+RAW
+b5f5d4c8501044707d0c0000000000000000
+ENTRY_END
+
+STEP 1890 QUERY
+ENTRY_BEGIN
+RAW
+b5f5d4c850184470f2d3000000992a30000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 1900 QUERY
+ENTRY_BEGIN
+RAW
+b5f550ee5010fd4e98d90000000000000000
+ENTRY_END
+
+STEP 1910 QUERY
+ENTRY_BEGIN
+RAW
+b5f6a7075010fd5c27700000000000000000
+ENTRY_END
+
+STEP 1920 QUERY
+ENTRY_BEGIN
+RAW
+b5f6a7075018fd5c47b70000008e5506000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 1930 QUERY
+ENTRY_BEGIN
+RAW
+b5f5d4d6501144627c700000000000000000
+ENTRY_END
+
+STEP 1940 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033c60000020405b401010402
+ENTRY_END
+
+STEP 1950 QUERY
+ENTRY_BEGIN
+RAW
+b5f6a7155011fd4e26df0000000000000000
+ENTRY_END
+
+STEP 1960 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08f9300000204056401010402
+ENTRY_END
+
+STEP 1970 QUERY
+ENTRY_BEGIN
+RAW
+b5f5d4d7501044627c6f0000000000000000
+ENTRY_END
+
+STEP 1980 QUERY
+ENTRY_BEGIN
+RAW
+b5f74ebe5010447057540000000000000000
+ENTRY_END
+
+STEP 1990 QUERY
+ENTRY_BEGIN
+RAW
+b5f6a7165010fd4e26de0000000000000000
+ENTRY_END
+
+STEP 2000 QUERY
+ENTRY_BEGIN
+RAW
+b5f74ebe5018447031ec00000099c660000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 2010 QUERY
+ENTRY_BEGIN
+RAW
+b5f822bd5010fd5ce0d50000000000000000
+ENTRY_END
+
+STEP 2020 QUERY
+ENTRY_BEGIN
+RAW
+b5f822bd5018fd5cb3f20000008ea230000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 2030 QUERY
+ENTRY_BEGIN
+RAW
+b5f74ecc5011446256b80000000000000000
+ENTRY_END
+
+STEP 2040 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ebf80000020405b401010402
+ENTRY_END
+
+STEP 2050 QUERY
+ENTRY_BEGIN
+RAW
+b5f822cb5011fd4ee0440000000000000000
+ENTRY_END
+
+STEP 2060 QUERY
+ENTRY_BEGIN
+RAW
+b5f74ecd5010446256b70000000000000000
+ENTRY_END
+
+STEP 2070 QUERY
+ENTRY_BEGIN
+RAW
+b5f8bd2750104470a11c0000000000000000
+ENTRY_END
+
+STEP 2080 QUERY
+ENTRY_BEGIN
+RAW
+b5f8bd27501844703755000000990ac0000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 2090 QUERY
+ENTRY_BEGIN
+RAW
+b5f822cc5010fd4ee0430000000000000000
+ENTRY_END
+
+STEP 2100 QUERY
+ENTRY_BEGIN
+RAW
+b5f8bd3550114462a0800000000000000000
+ENTRY_END
+
+STEP 2110 QUERY
+ENTRY_BEGIN
+RAW
+b5f8bd3650104462a07f0000000000000000
+ENTRY_END
+
+STEP 2120 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e4bf0000020405b401010402
+ENTRY_END
+
+STEP 2130 QUERY
+ENTRY_BEGIN
+RAW
+b5f94cd4501044700a360000000000000000
+ENTRY_END
+
+STEP 2140 QUERY
+ENTRY_BEGIN
+RAW
+b5f94cd450184470a70a0000008ebfc0000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000
+ENTRY_END
+
+STEP 2150 QUERY
+ENTRY_BEGIN
+RAW
+b5f94ce25011446209a50000000000000000
+ENTRY_END
+
+STEP 2160 QUERY
+ENTRY_BEGIN
+RAW
+b5f94ce35010446209a40000000000000000
+ENTRY_END
+
+STEP 2170 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400012600000020405b401010402
+ENTRY_END
+
+STEP 2180 QUERY
+ENTRY_BEGIN
+RAW
+b5f9f08b50104470941e0000000000000000
+ENTRY_END
+
+STEP 2190 QUERY
+ENTRY_BEGIN
+RAW
+b5f9f08b50184470b7f40000008e39c0000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000
+ENTRY_END
+
+STEP 2200 QUERY
+ENTRY_BEGIN
+RAW
+b5f9f09950114462938d0000000000000000
+ENTRY_END
+
+STEP 2210 QUERY
+ENTRY_BEGIN
+RAW
+b5f9f09a50104462938c0000000000000000
+ENTRY_END
+
+STEP 2220 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400009cf0000020405b401010402
+ENTRY_END
+
+STEP 2230 QUERY
+ENTRY_BEGIN
+RAW
+b5fc831750104470f8fe0000000000000000
+ENTRY_END
+
+STEP 2240 QUERY
+ENTRY_BEGIN
+RAW
+b5fc83175018447044550000008e1240000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000
+ENTRY_END
+
+STEP 2250 QUERY
+ENTRY_BEGIN
+RAW
+b5fc832550114462f86d0000000000000000
+ENTRY_END
+
+STEP 2260 QUERY
+ENTRY_BEGIN
+RAW
+b5fc832650104462f86c0000000000000000
+ENTRY_END
+
+STEP 2270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400018250000020405ac01010402
+ENTRY_END
+
+STEP 2280 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf09f980000020405b401010402
+ENTRY_END
+
+STEP 2290 QUERY
+ENTRY_BEGIN
+RAW
+b5fde23c5010fbec33160000000000000000
+ENTRY_END
+
+STEP 2300 QUERY
+ENTRY_BEGIN
+RAW
+b5fd4fd4501044103aef0000000000000000
+ENTRY_END
+
+STEP 2310 QUERY
+ENTRY_BEGIN
+RAW
+b5fde23c5018fbece71a0000008d8180000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 2320 QUERY
+ENTRY_BEGIN
+RAW
+b5fd4fd45018441087bb00000094248d000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 2330 QUERY
+ENTRY_BEGIN
+RAW
+b5fde24a5011fbde32860000000000000000
+ENTRY_END
+
+STEP 2340 QUERY
+ENTRY_BEGIN
+RAW
+b5fd4fe2501144023a580000000000000000
+ENTRY_END
+
+STEP 2350 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0eeb60000020405b401010402
+ENTRY_END
+
+STEP 2360 QUERY
+ENTRY_BEGIN
+RAW
+b5fde24b5010fbde32850000000000000000
+ENTRY_END
+
+STEP 2370 QUERY
+ENTRY_BEGIN
+RAW
+b5fd4fe3501044023a570000000000000000
+ENTRY_END
+
+STEP 2380 QUERY
+ENTRY_BEGIN
+RAW
+b5feceaf5010fbec95c00000000000000000
+ENTRY_END
+
+STEP 2390 QUERY
+ENTRY_BEGIN
+RAW
+b5feceaf5018fbecfa450000008dd200000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 2400 QUERY
+ENTRY_BEGIN
+RAW
+b5fecebd5011fbde95300000000000000000
+ENTRY_END
+
+STEP 2410 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f3a80000020405b401010402
+ENTRY_END
+
+STEP 2420 QUERY
+ENTRY_BEGIN
+RAW
+b5fecebe5010fbde952f0000000000000000
+ENTRY_END
+
+STEP 2430 QUERY
+ENTRY_BEGIN
+RAW
+b5ff56835010fbec12de0000000000000000
+ENTRY_END
+
+STEP 2440 QUERY
+ENTRY_BEGIN
+RAW
+b5ff56835018fbec30e40000008d1880000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 2450 QUERY
+ENTRY_BEGIN
+RAW
+b5ff56915011fbde124e0000000000000000
+ENTRY_END
+
+STEP 2460 QUERY
+ENTRY_BEGIN
+RAW
+b5ff56925010fbde124d0000000000000000
+ENTRY_END
+
+STEP 2470 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0467900000204056401010402
+ENTRY_END
+
+STEP 2480 QUERY
+ENTRY_BEGIN
+RAW
+b6062f415010fd5c8b290000000000000000
+ENTRY_END
+
+STEP 2490 QUERY
+ENTRY_BEGIN
+RAW
+b6062f415018fd5c71600000008f9dd8000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000
+ENTRY_END
+
+STEP 2500 QUERY
+ENTRY_BEGIN
+RAW
+b6062f4f5011fd4e8a970000000000000000
+ENTRY_END
+
+STEP 2510 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b12900000204056401010402
+ENTRY_END
+
+STEP 2520 QUERY
+ENTRY_BEGIN
+RAW
+b6062f505010fd4e8a960000000000000000
+ENTRY_END
+
+STEP 2530 QUERY
+ENTRY_BEGIN
+RAW
+b6071d2d5010fd5c07ed0000000000000000
+ENTRY_END
+
+STEP 2540 QUERY
+ENTRY_BEGIN
+RAW
+b6071d2d5018fd5c32830000008f5a7a000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000
+ENTRY_END
+
+STEP 2550 QUERY
+ENTRY_BEGIN
+RAW
+b6071d3b5011fd4e075b0000000000000000
+ENTRY_END
+
+STEP 2560 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08f9300000204056401010402
+ENTRY_END
+
+STEP 2570 QUERY
+ENTRY_BEGIN
+RAW
+b6071d3c5010fd4e075a0000000000000000
+ENTRY_END
+
+STEP 2580 QUERY
+ENTRY_BEGIN
+RAW
+b607bf705010fd5c44130000000000000000
+ENTRY_END
+
+STEP 2590 QUERY
+ENTRY_BEGIN
+RAW
+b607bf705018fd5c5fe70000008f693c000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000
+ENTRY_END
+
+STEP 2600 QUERY
+ENTRY_BEGIN
+RAW
+b607bf7e5011fd4e43810000000000000000
+ENTRY_END
+
+STEP 2610 QUERY
+ENTRY_BEGIN
+RAW
+b607bf7f5010fd4e43800000000000000000
+ENTRY_END
+
+;STEP 2620 QUERY
+;ENTRY_BEGIN
+;RAW
+;0774000000010000000000000b7374617274706167696e61026e6c00000f000100
+;ENTRY_END
+
+STEP 2630 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000aa5b0000020405b401010402
+ENTRY_END
+
+STEP 2640 QUERY
+ENTRY_BEGIN
+RAW
+b6099d2a501044707f6b0000000000000000
+ENTRY_END
+
+STEP 2650 QUERY
+ENTRY_BEGIN
+RAW
+b6099d2a50184470d042000000994920000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda4403c1f2400030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 2660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf04e890000020405b401010402
+ENTRY_END
+
+STEP 2670 QUERY
+ENTRY_BEGIN
+RAW
+b6099d38501144627ecf0000000000000000
+ENTRY_END
+
+STEP 2680 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c30f0000020405b401010402
+ENTRY_END
+
+STEP 2690 QUERY
+ENTRY_BEGIN
+RAW
+b6099d39501044627ece0000000000000000
+ENTRY_END
+
+STEP 2700 QUERY
+ENTRY_BEGIN
+RAW
+b60a3e1850104470f7300000000000000000
+ENTRY_END
+
+STEP 2710 QUERY
+ENTRY_BEGIN
+RAW
+b60a3e1850184470acd800000099e550000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda4403c1f2400030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 2720 QUERY
+ENTRY_BEGIN
+RAW
+b60a3e2650114462f6940000000000000000
+ENTRY_END
+
+STEP 2730 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c42f0000020405b401010402
+ENTRY_END
+
+STEP 2740 QUERY
+ENTRY_BEGIN
+RAW
+b60a3e2750104462f6930000000000000000
+ENTRY_END
+
+STEP 2750 QUERY
+ENTRY_BEGIN
+RAW
+b60b1d975010447018d10000000000000000
+ENTRY_END
+
+STEP 2760 QUERY
+ENTRY_BEGIN
+RAW
+b60b1d97501844708c99000000992530000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda5403c1f2500030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000
+ENTRY_END
+
+STEP 2770 QUERY
+ENTRY_BEGIN
+RAW
+b60b1da55011446218350000000000000000
+ENTRY_END
+
+STEP 2780 QUERY
+ENTRY_BEGIN
+RAW
+b60b1da65010446218340000000000000000
+ENTRY_END
+
+;STEP 2790 QUERY
+;ENTRY_BEGIN
+;RAW
+;2bfa01000001000000000000056b6f726e6f026e6c00000f000100
+;ENTRY_END
+
+STEP 2800 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400088c600000204057a01010402
+ENTRY_END
+
+STEP 2810 QUERY
+ENTRY_BEGIN
+RAW
+b610654e501041b898290000000000000000
+ENTRY_END
+
+STEP 2820 QUERY
+ENTRY_BEGIN
+RAW
+b610654e501841b8139400000090d480000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000
+ENTRY_END
+
+STEP 2830 QUERY
+ENTRY_BEGIN
+RAW
+b610655c501141aa97960000000000000000
+ENTRY_END
+
+STEP 2840 QUERY
+ENTRY_BEGIN
+RAW
+b610655d501041aa97950000000000000000
+ENTRY_END
+
+STEP 2850 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008aa700000204057a01010402
+ENTRY_END
+
+STEP 2860 QUERY
+ENTRY_BEGIN
+RAW
+b6125547501041b8aa0f0000000000000000
+ENTRY_END
+
+STEP 2870 QUERY
+ENTRY_BEGIN
+RAW
+b6125547501841b804fb00000090f600000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000
+ENTRY_END
+
+STEP 2880 QUERY
+ENTRY_BEGIN
+RAW
+b6125555501141aaa97c0000000000000000
+ENTRY_END
+
+STEP 2890 QUERY
+ENTRY_BEGIN
+RAW
+b6125556501041aaa97b0000000000000000
+ENTRY_END
+
+STEP 2900 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e70d00000204057a01010402
+ENTRY_END
+
+STEP 2910 QUERY
+ENTRY_BEGIN
+RAW
+b6132124501041b83a980000000000000000
+ENTRY_END
+
+STEP 2920 QUERY
+ENTRY_BEGIN
+RAW
+b6132124501841b871c40000009019c0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000
+ENTRY_END
+
+STEP 2930 QUERY
+ENTRY_BEGIN
+RAW
+b6132132501141aa3a050000000000000000
+ENTRY_END
+
+STEP 2940 QUERY
+ENTRY_BEGIN
+RAW
+b6132133501041aa3a040000000000000000
+ENTRY_END
+
+STEP 2950 QUERY
+ENTRY_BEGIN
+RAW
+5b2f083d50040000c2170000000000000000
+ENTRY_END
+
+STEP 2960 QUERY
+ENTRY_BEGIN
+RAW
+0000000060025e38cd070000020405b40000
+ENTRY_END
+
+STEP 2970 QUERY
+ENTRY_BEGIN
+RAW
+b6185ae050102da004540000000000000000
+ENTRY_END
+
+STEP 2980 QUERY
+ENTRY_BEGIN
+RAW
+b6185ae050102da081160000008c4dd3000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd65403c4ee500030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000
+ENTRY_END
+
+STEP 2990 QUERY
+ENTRY_BEGIN
+RAW
+b6185aee501027ec096c0000000000000000
+ENTRY_END
+
+STEP 3000 QUERY
+ENTRY_BEGIN
+RAW
+b6185aee50112da003b70000000000000000
+ENTRY_END
+
+STEP 3010 QUERY
+ENTRY_BEGIN
+RAW
+b6185aee50102da003b70000000000000000
+ENTRY_END
+
+STEP 3020 QUERY
+ENTRY_BEGIN
+RAW
+0000000060025e3872b90000020405b40000
+ENTRY_END
+
+STEP 3030 QUERY
+ENTRY_BEGIN
+RAW
+b61b831350102da081cf0000000000000000
+ENTRY_END
+
+STEP 3040 QUERY
+ENTRY_BEGIN
+RAW
+b61b831350102da0dc970000008c6fcd000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd66403c4ee600030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000
+ENTRY_END
+
+STEP 3050 QUERY
+ENTRY_BEGIN
+RAW
+b61b8321501027ec86e70000000000000000
+ENTRY_END
+
+STEP 3060 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf093c900000204059801010402
+ENTRY_END
+
+STEP 3070 QUERY
+ENTRY_BEGIN
+RAW
+b61d400b5010fbb8c9700000000000000000
+ENTRY_END
+
+STEP 3080 QUERY
+ENTRY_BEGIN
+RAW
+b61d400b5018fbb85398000000946438000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e4403c4a640003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 3090 QUERY
+ENTRY_BEGIN
+RAW
+b61d40195011fbaac8d90000000000000000
+ENTRY_END
+
+STEP 3100 QUERY
+ENTRY_BEGIN
+RAW
+b61d401a5010fbaac8d80000000000000000
+ENTRY_END
+
+STEP 3110 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0abe200000204059801010402
+ENTRY_END
+
+STEP 3120 QUERY
+ENTRY_BEGIN
+RAW
+b6185aef50102da003b60000000000000000
+ENTRY_END
+
+STEP 3130 QUERY
+ENTRY_BEGIN
+RAW
+b61f52c65010fbb8cecc0000000000000000
+ENTRY_END
+
+STEP 3140 QUERY
+ENTRY_BEGIN
+RAW
+b61f52c65018fbb8714c000000944ae1000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e5403c4a650003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 3150 QUERY
+ENTRY_BEGIN
+RAW
+b61f52d45011fbaace350000000000000000
+ENTRY_END
+
+STEP 3160 QUERY
+ENTRY_BEGIN
+RAW
+b61f52d55010fbaace340000000000000000
+ENTRY_END
+
+STEP 3170 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06bd800000204059801010402
+ENTRY_END
+
+STEP 3180 QUERY
+ENTRY_BEGIN
+RAW
+b62004255010fbb8dd620000000000000000
+ENTRY_END
+
+STEP 3190 QUERY
+ENTRY_BEGIN
+RAW
+b62004255018fbb8ea1f00000094e0a3000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e5403c4a650003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 3200 QUERY
+ENTRY_BEGIN
+RAW
+b62004335011fbaadccb0000000000000000
+ENTRY_END
+
+STEP 3210 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf02c3a0000020405b401010402
+ENTRY_END
+
+STEP 3220 QUERY
+ENTRY_BEGIN
+RAW
+b62004345010fbaadcca0000000000000000
+ENTRY_END
+
+STEP 3230 QUERY
+ENTRY_BEGIN
+RAW
+b620f85c5010faf0aa700000000000000000
+ENTRY_END
+
+STEP 3240 QUERY
+ENTRY_BEGIN
+RAW
+b620f85c5018faf073ec00000095ab9c000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+;STEP 3250 QUERY
+;ENTRY_BEGIN
+;RAW
+;00780000000100000000000007736d756c776562026e6c00000f0001c0
+;ENTRY_END
+
+STEP 3260 QUERY
+ENTRY_BEGIN
+RAW
+b620f86a5011fae2a9d80000000000000000
+ENTRY_END
+
+STEP 3270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d0ad0000020405b401010402
+ENTRY_END
+
+STEP 3280 QUERY
+ENTRY_BEGIN
+RAW
+b620f86b5010fae2a9d70000000000000000
+ENTRY_END
+
+STEP 3290 QUERY
+ENTRY_BEGIN
+RAW
+b621d5c55010faf0717a0000000000000000
+ENTRY_END
+
+STEP 3300 QUERY
+ENTRY_BEGIN
+RAW
+b621d5c55018faf0905b000000955738000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+STEP 3310 QUERY
+ENTRY_BEGIN
+RAW
+b61b832150112da081320000000000000000
+ENTRY_END
+
+STEP 3320 QUERY
+ENTRY_BEGIN
+RAW
+b621d5d35011fae270e20000000000000000
+ENTRY_END
+
+STEP 3330 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf04b080000020405b401010402
+ENTRY_END
+
+STEP 3340 QUERY
+ENTRY_BEGIN
+RAW
+b621d5d45010fae270e10000000000000000
+ENTRY_END
+
+STEP 3350 QUERY
+ENTRY_BEGIN
+RAW
+0000000060025e38547f0000020405b40000
+ENTRY_END
+
+STEP 3360 QUERY
+ENTRY_BEGIN
+RAW
+b62289055010faf038940000000000000000
+ENTRY_END
+
+STEP 3370 QUERY
+ENTRY_BEGIN
+RAW
+b6234c9c50102da09a040000000000000000
+ENTRY_END
+
+STEP 3380 QUERY
+ENTRY_BEGIN
+RAW
+b62289055018faf0abd90000009502d4000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+STEP 3390 QUERY
+ENTRY_BEGIN
+RAW
+b62289135011fae237fc0000000000000000
+ENTRY_END
+
+STEP 3400 QUERY
+ENTRY_BEGIN
+RAW
+b62289145010fae237fb0000000000000000
+ENTRY_END
+
+STEP 3410 QUERY
+ENTRY_BEGIN
+RAW
+b6234c9c50102da027580000008c3b42000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd67403c4ee700030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000
+ENTRY_END
+
+STEP 3420 QUERY
+ENTRY_BEGIN
+RAW
+b6234caa501027ec9f1c0000000000000000
+ENTRY_END
+
+STEP 3430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f8cf0000020405b401010402
+ENTRY_END
+
+STEP 3440 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000deb700000204059801010402
+ENTRY_END
+
+STEP 3450 QUERY
+ENTRY_BEGIN
+RAW
+b62553b65010faf01ba80000000000000000
+ENTRY_END
+
+STEP 3460 QUERY
+ENTRY_BEGIN
+RAW
+b625d01e5010432081eb0000000000000000
+ENTRY_END
+
+STEP 3470 QUERY
+ENTRY_BEGIN
+RAW
+b625d01e50184320ce84000000850690000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 3480 QUERY
+ENTRY_BEGIN
+RAW
+b62553b65018faf087e70000009508d9000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+STEP 3490 QUERY
+ENTRY_BEGIN
+RAW
+b625d02c5011431281630000000000000000
+ENTRY_END
+
+STEP 3500 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000cc4600000204059801010402
+ENTRY_END
+
+STEP 3510 QUERY
+ENTRY_BEGIN
+RAW
+b625d02d5010431281620000000000000000
+ENTRY_END
+
+STEP 3520 QUERY
+ENTRY_BEGIN
+RAW
+b62553c45011fae21b100000000000000000
+ENTRY_END
+
+STEP 3530 QUERY
+ENTRY_BEGIN
+RAW
+b6267f7450104320c0230000000000000000
+ENTRY_END
+
+STEP 3540 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0ccf40000020405b401010402
+ENTRY_END
+
+STEP 3550 QUERY
+ENTRY_BEGIN
+RAW
+b6267f74501843201fcd00000085f480000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 3560 QUERY
+ENTRY_BEGIN
+RAW
+b6267f8250114312bf9b0000000000000000
+ENTRY_END
+
+STEP 3570 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033b600000204059801010402
+ENTRY_END
+
+STEP 3580 QUERY
+ENTRY_BEGIN
+RAW
+b62553c55010fae21b0f0000000000000000
+ENTRY_END
+
+STEP 3590 QUERY
+ENTRY_BEGIN
+RAW
+b6267f8350104312bf9a0000000000000000
+ENTRY_END
+
+STEP 3600 QUERY
+ENTRY_BEGIN
+RAW
+b629a6275010432000dd0000000000000000
+ENTRY_END
+
+STEP 3610 QUERY
+ENTRY_BEGIN
+RAW
+b629a62750184320d786000000857d80000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 3620 QUERY
+ENTRY_BEGIN
+RAW
+b629a6355011431200550000000000000000
+ENTRY_END
+
+STEP 3630 QUERY
+ENTRY_BEGIN
+RAW
+b61b832250102da081310000000000000000
+ENTRY_END
+
+STEP 3640 QUERY
+ENTRY_BEGIN
+RAW
+b627516b5010faf0f2150000000000000000
+ENTRY_END
+
+STEP 3650 QUERY
+ENTRY_BEGIN
+RAW
+b629a6365010431200540000000000000000
+ENTRY_END
+
+STEP 3660 QUERY
+ENTRY_BEGIN
+RAW
+b627516b5018faf0847000000095e1be000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc89403c4e090003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+STEP 3670 QUERY
+ENTRY_BEGIN
+RAW
+b62751795011fae2f17d0000000000000000
+ENTRY_END
+
+STEP 3680 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf094de0000020405b401010402
+ENTRY_END
+
+STEP 3690 QUERY
+ENTRY_BEGIN
+RAW
+b627517a5010fae2f17c0000000000000000
+ENTRY_END
+
+STEP 3700 QUERY
+ENTRY_BEGIN
+RAW
+b62a382a5010faf0d33d0000000000000000
+ENTRY_END
+
+STEP 3710 QUERY
+ENTRY_BEGIN
+RAW
+b62a382a5018faf0b9fc000000958d5a000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc89403c4e090003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000
+ENTRY_END
+
+STEP 3720 QUERY
+ENTRY_BEGIN
+RAW
+b62a38385011fae2d2a50000000000000000
+ENTRY_END
+
+STEP 3730 QUERY
+ENTRY_BEGIN
+RAW
+b62a38395010fae2d2a40000000000000000
+ENTRY_END
+
+STEP 3740 QUERY
+ENTRY_BEGIN
+RAW
+b6234caa50112da099670000000000000000
+ENTRY_END
+
+;STEP 3750 QUERY
+;ENTRY_BEGIN
+;RAW
+;17a00000000100000000000009726f7a656e62757267026e6c00000f000100
+;ENTRY_END
+
+STEP 3760 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000eb890000020405b401010402
+ENTRY_END
+
+STEP 3770 QUERY
+ENTRY_BEGIN
+RAW
+b62c80b350104470dced0000000000000000
+ENTRY_END
+
+STEP 3780 QUERY
+ENTRY_BEGIN
+RAW
+b62c80b3501844706614000000979708000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 3790 QUERY
+ENTRY_BEGIN
+RAW
+b62c80c150114462dc530000000000000000
+ENTRY_END
+
+STEP 3800 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000beea0000020405b401010402
+ENTRY_END
+
+STEP 3810 QUERY
+ENTRY_BEGIN
+RAW
+b6234cab50102da099660000000000000000
+ENTRY_END
+
+STEP 3820 QUERY
+ENTRY_BEGIN
+RAW
+b62c80c250104462dc520000000000000000
+ENTRY_END
+
+STEP 3830 QUERY
+ENTRY_BEGIN
+RAW
+b62f3e5b50104470f2a30000000000000000
+ENTRY_END
+
+STEP 3840 QUERY
+ENTRY_BEGIN
+RAW
+b62f3e5b50184470267d00000097ed56000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 3850 QUERY
+ENTRY_BEGIN
+RAW
+b62f3e6950114462f2090000000000000000
+ENTRY_END
+
+STEP 3860 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d4da0000020405b401010402
+ENTRY_END
+
+STEP 3870 QUERY
+ENTRY_BEGIN
+RAW
+b62f3e6a50104462f2080000000000000000
+ENTRY_END
+
+STEP 3880 QUERY
+ENTRY_BEGIN
+RAW
+b62fc881501044707e6d0000000000000000
+ENTRY_END
+
+STEP 3890 QUERY
+ENTRY_BEGIN
+RAW
+b62fc88150184470880000000097179d000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 3900 QUERY
+ENTRY_BEGIN
+RAW
+b62fc88f501144627dd30000000000000000
+ENTRY_END
+
+STEP 3910 QUERY
+ENTRY_BEGIN
+RAW
+b62fc890501044627dd20000000000000000
+ENTRY_END
+
+STEP 3920 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ace50000020405b401010402
+ENTRY_END
+
+STEP 3930 QUERY
+ENTRY_BEGIN
+RAW
+b630894a5010447095ae0000000000000000
+ENTRY_END
+
+STEP 3940 QUERY
+ENTRY_BEGIN
+RAW
+b630894a50184470b7ad00000097fe2f000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 3950 QUERY
+ENTRY_BEGIN
+RAW
+b63089585011446295140000000000000000
+ENTRY_END
+
+STEP 3960 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000dc510000020405b401010402
+ENTRY_END
+
+STEP 3970 QUERY
+ENTRY_BEGIN
+RAW
+b63089595010446295130000000000000000
+ENTRY_END
+
+STEP 3980 QUERY
+ENTRY_BEGIN
+RAW
+b63142c6501044700b9e0000000000000000
+ENTRY_END
+
+STEP 3990 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e78400000204056401010402
+ENTRY_END
+
+STEP 4000 QUERY
+ENTRY_BEGIN
+RAW
+b63142c650184470ef4d000000973d80000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 4010 QUERY
+ENTRY_BEGIN
+RAW
+b631e3bb501040b0794b0000000000000000
+ENTRY_END
+
+STEP 4020 QUERY
+ENTRY_BEGIN
+RAW
+b631e3bb501840b0823000000084dc00000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000
+ENTRY_END
+
+STEP 4030 QUERY
+ENTRY_BEGIN
+RAW
+b631e3c9501140a278c40000000000000000
+ENTRY_END
+
+STEP 4040 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000012100000204056401010402
+ENTRY_END
+
+STEP 4050 QUERY
+ENTRY_BEGIN
+RAW
+b63142d4501144620b040000000000000000
+ENTRY_END
+
+STEP 4060 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000cfba0000020405b401010402
+ENTRY_END
+
+STEP 4070 QUERY
+ENTRY_BEGIN
+RAW
+b631e3ca501040a278c30000000000000000
+ENTRY_END
+
+STEP 4080 QUERY
+ENTRY_BEGIN
+RAW
+b632940b501040b0e2960000000000000000
+ENTRY_END
+
+STEP 4090 QUERY
+ENTRY_BEGIN
+RAW
+b632940b501840b0167c00000084b300000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000
+ENTRY_END
+
+STEP 4100 QUERY
+ENTRY_BEGIN
+RAW
+b6329419501140a2e20f0000000000000000
+ENTRY_END
+
+STEP 4110 QUERY
+ENTRY_BEGIN
+RAW
+b63142d5501044620b030000000000000000
+ENTRY_END
+
+STEP 4120 QUERY
+ENTRY_BEGIN
+RAW
+b632941a501040a2e20e0000000000000000
+ENTRY_END
+
+STEP 4130 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004da000000204056401010402
+ENTRY_END
+
+STEP 4140 QUERY
+ENTRY_BEGIN
+RAW
+b63367f650104470d9d40000000000000000
+ENTRY_END
+
+STEP 4150 QUERY
+ENTRY_BEGIN
+RAW
+b6345892501040b06a8d0000000000000000
+ENTRY_END
+
+STEP 4160 QUERY
+ENTRY_BEGIN
+RAW
+b6345892501840b0dbf2000000847580000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000
+ENTRY_END
+
+STEP 4170 QUERY
+ENTRY_BEGIN
+RAW
+b63367f650184470f6430000009704c1000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 4180 QUERY
+ENTRY_BEGIN
+RAW
+b63458a0501140a26a060000000000000000
+ENTRY_END
+
+STEP 4190 QUERY
+ENTRY_BEGIN
+RAW
+b63458a1501040a26a050000000000000000
+ENTRY_END
+
+STEP 4200 QUERY
+ENTRY_BEGIN
+RAW
+b633680450114462d93a0000000000000000
+ENTRY_END
+
+STEP 4210 QUERY
+ENTRY_BEGIN
+RAW
+b633680550104462d9390000000000000000
+ENTRY_END
+
+STEP 4220 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff0045bd00000204055001010402
+ENTRY_END
+
+STEP 4230 QUERY
+ENTRY_BEGIN
+RAW
+b6392e195010ff008dba0000000000000000
+ENTRY_END
+
+STEP 4240 QUERY
+ENTRY_BEGIN
+RAW
+b6392e195018ff0004e90000008fedfc000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+;STEP 4250 QUERY
+;ENTRY_BEGIN
+;RAW
+;044f00000001000000000000076275726d656573026e6c00000f000100
+;ENTRY_END
+
+STEP 4260 QUERY
+ENTRY_BEGIN
+RAW
+b6392e275011fef28d280000000000000000
+ENTRY_END
+
+STEP 4270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff0080c700000204055001010402
+ENTRY_END
+
+STEP 4280 QUERY
+ENTRY_BEGIN
+RAW
+b6392e285010fef28d270000000000000000
+ENTRY_END
+
+STEP 4290 QUERY
+ENTRY_BEGIN
+RAW
+b63a092c5010ff00edb00000000000000000
+ENTRY_END
+
+STEP 4300 QUERY
+ENTRY_BEGIN
+RAW
+b63a092c5018ff0081700000008fd26c000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+STEP 4310 QUERY
+ENTRY_BEGIN
+RAW
+b63a093a5011fef2ed1e0000000000000000
+ENTRY_END
+
+STEP 4320 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff008e7500000204055001010402
+ENTRY_END
+
+STEP 4330 QUERY
+ENTRY_BEGIN
+RAW
+b63a093b5010fef2ed1d0000000000000000
+ENTRY_END
+
+STEP 4340 QUERY
+ENTRY_BEGIN
+RAW
+b63adcf25010ff0027980000000000000000
+ENTRY_END
+
+STEP 4350 QUERY
+ENTRY_BEGIN
+RAW
+b63adcf25018ff0091310000008ffc92000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+STEP 4360 QUERY
+ENTRY_BEGIN
+RAW
+b63add005011fef227060000000000000000
+ENTRY_END
+
+STEP 4370 QUERY
+ENTRY_BEGIN
+RAW
+b63add015010fef227050000000000000000
+ENTRY_END
+
+STEP 4380 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000aeff0000020405b401010402
+ENTRY_END
+
+STEP 4390 QUERY
+ENTRY_BEGIN
+RAW
+b63fd61a5010080087590000000000000000
+ENTRY_END
+
+STEP 4400 QUERY
+ENTRY_BEGIN
+RAW
+b63fd61a501044704ae90000000000000000
+ENTRY_END
+
+STEP 4410 QUERY
+ENTRY_BEGIN
+RAW
+b63fd61a50184470a0020000008f603e000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000
+ENTRY_END
+
+STEP 4420 QUERY
+ENTRY_BEGIN
+RAW
+b63fd628501144624a570000000000000000
+ENTRY_END
+
+STEP 4430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400083b30000020405b401010402
+ENTRY_END
+
+STEP 4440 QUERY
+ENTRY_BEGIN
+RAW
+b63fd629501044624a560000000000000000
+ENTRY_END
+
+STEP 4450 QUERY
+ENTRY_BEGIN
+RAW
+b6409f8850100800929e0000000000000000
+ENTRY_END
+
+STEP 4460 QUERY
+ENTRY_BEGIN
+RAW
+b6409f8850104470562e0000000000000000
+ENTRY_END
+
+STEP 4470 QUERY
+ENTRY_BEGIN
+RAW
+b6409f885018447052af0000008fbad6000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000
+ENTRY_END
+
+STEP 4480 QUERY
+ENTRY_BEGIN
+RAW
+b6409f9650114462559c0000000000000000
+ENTRY_END
+
+STEP 4490 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400034540000020405b401010402
+ENTRY_END
+
+STEP 4500 QUERY
+ENTRY_BEGIN
+RAW
+b6409f9750104462559b0000000000000000
+ENTRY_END
+
+STEP 4510 QUERY
+ENTRY_BEGIN
+RAW
+b64185ae501008005d180000000000000000
+ENTRY_END
+
+STEP 4520 QUERY
+ENTRY_BEGIN
+RAW
+b64185ae5010447020a80000000000000000
+ENTRY_END
+
+STEP 4530 QUERY
+ENTRY_BEGIN
+RAW
+b64185ae5018447000890000008fd776000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000
+ENTRY_END
+
+STEP 4540 QUERY
+ENTRY_BEGIN
+RAW
+b64185bc5011446220160000000000000000
+ENTRY_END
+
+STEP 4550 QUERY
+ENTRY_BEGIN
+RAW
+b64185bd5010446220150000000000000000
+ENTRY_END
+
+STEP 4560 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f7cc00000204056401010402
+ENTRY_END
+
+STEP 4570 QUERY
+ENTRY_BEGIN
+RAW
+b643986d5010fd5cd3130000000000000000
+ENTRY_END
+
+STEP 4580 QUERY
+ENTRY_BEGIN
+RAW
+b643986d5018fd5cc6f90000008e6466000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda1403c4f2100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 4590 QUERY
+ENTRY_BEGIN
+RAW
+b643987b5011fd4ed2820000000000000000
+ENTRY_END
+
+STEP 4600 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf01fca00000204056401010402
+ENTRY_END
+
+STEP 4610 QUERY
+ENTRY_BEGIN
+RAW
+b643987c5010fd4ed2810000000000000000
+ENTRY_END
+
+STEP 4620 QUERY
+ENTRY_BEGIN
+RAW
+b6441ee65010fd5c74970000000000000000
+ENTRY_END
+
+STEP 4630 QUERY
+ENTRY_BEGIN
+RAW
+b6441ee65018fd5ccbe40000008e0000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda2403c4f2200030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 4640 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b61d0000020405b401010402
+ENTRY_END
+
+STEP 4650 QUERY
+ENTRY_BEGIN
+RAW
+b6441ef45011fd4e74060000000000000000
+ENTRY_END
+
+STEP 4660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08df200000204056401010402
+ENTRY_END
+
+STEP 4670 QUERY
+ENTRY_BEGIN
+RAW
+b645129150104470158b0000000000000000
+ENTRY_END
+
+STEP 4680 QUERY
+ENTRY_BEGIN
+RAW
+b645129150184470ce2a000000975080000000010001000000000f313337343338393533343733382d330000f900010f313337343338393533343733382d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 4690 QUERY
+ENTRY_BEGIN
+RAW
+b6441ef55010fd4e74050000000000000000
+ENTRY_END
+
+STEP 4700 QUERY
+ENTRY_BEGIN
+RAW
+b645dd1c5010fd5c24880000000000000000
+ENTRY_END
+
+STEP 4710 QUERY
+ENTRY_BEGIN
+RAW
+b645dd1c5018fd5c00410000008e7b94000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda2403c4f2200030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 4720 QUERY
+ENTRY_BEGIN
+RAW
+b645129f5011446214f10000000000000000
+ENTRY_END
+
+STEP 4730 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a3460000020405b401010402
+ENTRY_END
+
+STEP 4740 QUERY
+ENTRY_BEGIN
+RAW
+b645dd2a5011fd4e23f70000000000000000
+ENTRY_END
+
+STEP 4750 QUERY
+ENTRY_BEGIN
+RAW
+b645dd2b5010fd4e23f60000000000000000
+ENTRY_END
+
+STEP 4760 QUERY
+ENTRY_BEGIN
+RAW
+b64512a05010446214f00000000000000000
+ENTRY_END
+
+STEP 4770 QUERY
+ENTRY_BEGIN
+RAW
+b646af605010447065e30000000000000000
+ENTRY_END
+
+STEP 4780 QUERY
+ENTRY_BEGIN
+RAW
+b646af60501844707b4300000097f4c0000000010001000000000f313337343338393533343733382d320000f900010f313337343338393533343733382d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 4790 QUERY
+ENTRY_BEGIN
+RAW
+b646af6e5011446265490000000000000000
+ENTRY_END
+
+STEP 4800 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400061b00000020405b401010402
+ENTRY_END
+
+STEP 4810 QUERY
+ENTRY_BEGIN
+RAW
+b646af6f5010446265480000000000000000
+ENTRY_END
+
+STEP 4820 QUERY
+ENTRY_BEGIN
+RAW
+b6473a8f50104470991d0000000000000000
+ENTRY_END
+
+STEP 4830 QUERY
+ENTRY_BEGIN
+RAW
+b6473a8f50184470b9bd00000097e980000000010001000000000f313337343338393533343733382d320000f900010f313337343338393533343733382d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000
+ENTRY_END
+
+STEP 4840 QUERY
+ENTRY_BEGIN
+RAW
+b6473a9d5011446298830000000000000000
+ENTRY_END
+
+STEP 4850 QUERY
+ENTRY_BEGIN
+RAW
+b6473a9e5010446298820000000000000000
+ENTRY_END
+
+STEP 4860 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e0620000020405b401010402
+ENTRY_END
+
+STEP 4870 QUERY
+ENTRY_BEGIN
+RAW
+b6498c2050104470c63c0000000000000000
+ENTRY_END
+
+STEP 4880 QUERY
+ENTRY_BEGIN
+RAW
+b6498c2050184470e776000000893428000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 4890 QUERY
+ENTRY_BEGIN
+RAW
+b6498c2e50114462c5b00000000000000000
+ENTRY_END
+
+STEP 4900 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ad0d0000020405b401010402
+ENTRY_END
+
+STEP 4910 QUERY
+ENTRY_BEGIN
+RAW
+b6498c2f50104462c5af0000000000000000
+ENTRY_END
+
+STEP 4920 QUERY
+ENTRY_BEGIN
+RAW
+b64a5b3a50104470c3cc0000000000000000
+ENTRY_END
+
+STEP 4930 QUERY
+ENTRY_BEGIN
+RAW
+b64a5b3a50184470cb9f000000894e90000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 4940 QUERY
+ENTRY_BEGIN
+RAW
+b64a5b4850114462c3400000000000000000
+ENTRY_END
+
+STEP 4950 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400026120000020405b401010402
+ENTRY_END
+
+STEP 4960 QUERY
+ENTRY_BEGIN
+RAW
+b64a5b4950104462c33f0000000000000000
+ENTRY_END
+
+STEP 4970 QUERY
+ENTRY_BEGIN
+RAW
+b64b06c050104470914a0000000000000000
+ENTRY_END
+
+STEP 4980 QUERY
+ENTRY_BEGIN
+RAW
+b64b06c050184470367d00000089b130000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 4990 QUERY
+ENTRY_BEGIN
+RAW
+b64b06ce5011446290be0000000000000000
+ENTRY_END
+
+STEP 5000 QUERY
+ENTRY_BEGIN
+RAW
+b64b06cf5010446290bd0000000000000000
+ENTRY_END
+
+STEP 5010 QUERY
+ENTRY_BEGIN
+RAW
+186e0000000100000000000006736d7470303603777873026e6c00000f000100
+ENTRY_END
+
+STEP 5020 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400028290000020405b401010402
+ENTRY_END
+
+STEP 5030 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d1f10000020405b401010402
+ENTRY_END
+
+STEP 5040 QUERY
+ENTRY_BEGIN
+RAW
+b64dd61350104470c40b0000000000000000
+ENTRY_END
+
+STEP 5050 QUERY
+ENTRY_BEGIN
+RAW
+b64ea29c50104470a14a0000000000000000
+ENTRY_END
+
+STEP 5060 QUERY
+ENTRY_BEGIN
+RAW
+b64ea29c501844707cb60000009574fc000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5070 QUERY
+ENTRY_BEGIN
+RAW
+b64dd61350184470dab1000000893cbc000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 5080 QUERY
+ENTRY_BEGIN
+RAW
+b64ea2aa50114462a0b20000000000000000
+ENTRY_END
+
+STEP 5090 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008bd00000020405b401010402
+ENTRY_END
+
+STEP 5100 QUERY
+ENTRY_BEGIN
+RAW
+b64dd62150114462c37f0000000000000000
+ENTRY_END
+
+STEP 5110 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000031c0000020405b401010402
+ENTRY_END
+
+STEP 5120 QUERY
+ENTRY_BEGIN
+RAW
+b64ea2ab50104462a0b10000000000000000
+ENTRY_END
+
+STEP 5130 QUERY
+ENTRY_BEGIN
+RAW
+b64f4bce50104470b1f60000000000000000
+ENTRY_END
+
+STEP 5140 QUERY
+ENTRY_BEGIN
+RAW
+b64f4bce50184470dc7f0000009526e0000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5150 QUERY
+ENTRY_BEGIN
+RAW
+b64dd62250104462c37e0000000000000000
+ENTRY_END
+
+STEP 5160 QUERY
+ENTRY_BEGIN
+RAW
+040b00000001000000000000116672616e6b656e656e76616e7765657274026e6c00000f000100
+ENTRY_END
+
+STEP 5170 QUERY
+ENTRY_BEGIN
+RAW
+b64fffa85010447075670000000000000000
+ENTRY_END
+
+STEP 5180 QUERY
+ENTRY_BEGIN
+RAW
+b64f4bdc50114462b15e0000000000000000
+ENTRY_END
+
+STEP 5190 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400091e30000020405b401010402
+ENTRY_END
+
+STEP 5200 QUERY
+ENTRY_BEGIN
+RAW
+b64fffa8501844702a6e000000899f5c000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 5210 QUERY
+ENTRY_BEGIN
+RAW
+b64f4bdd50104462b15d0000000000000000
+ENTRY_END
+
+STEP 5220 QUERY
+ENTRY_BEGIN
+RAW
+b6509596501044706e400000000000000000
+ENTRY_END
+
+STEP 5230 QUERY
+ENTRY_BEGIN
+RAW
+b65095965018447032c5000000958ce4000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5240 QUERY
+ENTRY_BEGIN
+RAW
+b64fffb65011446274db0000000000000000
+ENTRY_END
+
+STEP 5250 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c1350000020405b401010402
+ENTRY_END
+
+STEP 5260 QUERY
+ENTRY_BEGIN
+RAW
+b65095a4501144626da80000000000000000
+ENTRY_END
+
+STEP 5270 QUERY
+ENTRY_BEGIN
+RAW
+b65095a5501044626da70000000000000000
+ENTRY_END
+
+STEP 5280 QUERY
+ENTRY_BEGIN
+RAW
+b64fffb75010446274da0000000000000000
+ENTRY_END
+
+STEP 5290 QUERY
+ENTRY_BEGIN
+RAW
+b651696f50104470c9b80000000000000000
+ENTRY_END
+
+STEP 5300 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006ba70000020405b401010402
+ENTRY_END
+
+STEP 5310 QUERY
+ENTRY_BEGIN
+RAW
+b651696f501844701c200000008901fc000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000
+ENTRY_END
+
+STEP 5320 QUERY
+ENTRY_BEGIN
+RAW
+b652266c50104470b72c0000000000000000
+ENTRY_END
+
+STEP 5330 QUERY
+ENTRY_BEGIN
+RAW
+b652266c50184470065900000095013c000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5340 QUERY
+ENTRY_BEGIN
+RAW
+b651697d50114462c92c0000000000000000
+ENTRY_END
+
+STEP 5350 QUERY
+ENTRY_BEGIN
+RAW
+b652267a50114462b6940000000000000000
+ENTRY_END
+
+STEP 5360 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400080fc0000020405b401010402
+ENTRY_END
+
+STEP 5370 QUERY
+ENTRY_BEGIN
+RAW
+b652267b50104462b6930000000000000000
+ENTRY_END
+
+STEP 5380 QUERY
+ENTRY_BEGIN
+RAW
+b652bfd55010447033180000000000000000
+ENTRY_END
+
+STEP 5390 QUERY
+ENTRY_BEGIN
+RAW
+b651697e50104462c92b0000000000000000
+ENTRY_END
+
+STEP 5400 QUERY
+ENTRY_BEGIN
+RAW
+b652bfd550184470abf600000095d88a000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5410 QUERY
+ENTRY_BEGIN
+RAW
+b652bfe35011446232800000000000000000
+ENTRY_END
+
+STEP 5420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000729e0000020405b401010402
+ENTRY_END
+
+STEP 5430 QUERY
+ENTRY_BEGIN
+RAW
+b652bfe450104462327f0000000000000000
+ENTRY_END
+
+STEP 5440 QUERY
+ENTRY_BEGIN
+RAW
+b65534ff50104470af8d0000000000000000
+ENTRY_END
+
+STEP 5450 QUERY
+ENTRY_BEGIN
+RAW
+b65534ff50184470511e00000095afd8000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000
+ENTRY_END
+
+STEP 5460 QUERY
+ENTRY_BEGIN
+RAW
+b655350d50114462aef50000000000000000
+ENTRY_END
+
+STEP 5470 QUERY
+ENTRY_BEGIN
+RAW
+b655350e50104462aef40000000000000000
+ENTRY_END
+
+STEP 5480 QUERY
+ENTRY_BEGIN
+RAW
+000000005004faf0e84a0000000000000000
+ENTRY_END
+
+STEP 5490 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000385c0000020405b401010402
+ENTRY_END
+
+STEP 5500 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000905f00000204057a01010402
+ENTRY_END
+
+STEP 5510 QUERY
+ENTRY_BEGIN
+RAW
+b658c73e50104470e3080000000000000000
+ENTRY_END
+
+STEP 5520 QUERY
+ENTRY_BEGIN
+RAW
+b6596076501041b8a4510000000000000000
+ENTRY_END
+
+STEP 5530 QUERY
+ENTRY_BEGIN
+RAW
+b6596076501841b838880000009068f4000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000
+ENTRY_END
+
+STEP 5540 QUERY
+ENTRY_BEGIN
+RAW
+b658c73e501844701fbb000000879ffc000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000
+ENTRY_END
+
+STEP 5550 QUERY
+ENTRY_BEGIN
+RAW
+b6596084501141aaa3be0000000000000000
+ENTRY_END
+
+STEP 5560 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009c2d00000204057a01010402
+ENTRY_END
+
+STEP 5570 QUERY
+ENTRY_BEGIN
+RAW
+b6596085501041aaa3bd0000000000000000
+ENTRY_END
+
+STEP 5580 QUERY
+ENTRY_BEGIN
+RAW
+b659f314501041b81d810000000000000000
+ENTRY_END
+
+STEP 5590 QUERY
+ENTRY_BEGIN
+RAW
+b659f314501841b8513400000090ca78000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000
+ENTRY_END
+
+STEP 5600 QUERY
+ENTRY_BEGIN
+RAW
+b658c74c50114462e27e0000000000000000
+ENTRY_END
+
+STEP 5610 QUERY
+ENTRY_BEGIN
+RAW
+b659f322501141aa1cee0000000000000000
+ENTRY_END
+
+STEP 5620 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ec0c0000020405b401010402
+ENTRY_END
+
+STEP 5630 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004d1c00000204057a01010402
+ENTRY_END
+
+STEP 5640 QUERY
+ENTRY_BEGIN
+RAW
+b659f323501041aa1ced0000000000000000
+ENTRY_END
+
+STEP 5650 QUERY
+ENTRY_BEGIN
+RAW
+b65ba67a501041b81b080000000000000000
+ENTRY_END
+
+STEP 5660 QUERY
+ENTRY_BEGIN
+RAW
+b65ba67a501841b8ed37000000902bfc000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000
+ENTRY_END
+
+STEP 5670 QUERY
+ENTRY_BEGIN
+RAW
+b658c74d50104462e27d0000000000000000
+ENTRY_END
+
+STEP 5680 QUERY
+ENTRY_BEGIN
+RAW
+b65ba688501141aa1a750000000000000000
+ENTRY_END
+
+STEP 5690 QUERY
+ENTRY_BEGIN
+RAW
+b65ad9b55010447084400000000000000000
+ENTRY_END
+
+STEP 5700 QUERY
+ENTRY_BEGIN
+RAW
+b65ba689501041aa1a740000000000000000
+ENTRY_END
+
+STEP 5710 QUERY
+ENTRY_BEGIN
+RAW
+b65ad9b550184470c70a000000879be4000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000
+ENTRY_END
+
+STEP 5720 QUERY
+ENTRY_BEGIN
+RAW
+b65ad9c35011446283b60000000000000000
+ENTRY_END
+
+STEP 5730 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ebab0000020405b401010402
+ENTRY_END
+
+STEP 5740 QUERY
+ENTRY_BEGIN
+RAW
+b65ad9c45010446283b50000000000000000
+ENTRY_END
+
+STEP 5750 QUERY
+ENTRY_BEGIN
+RAW
+b65c2b0a5010447032890000000000000000
+ENTRY_END
+
+STEP 5760 QUERY
+ENTRY_BEGIN
+RAW
+b65c2b0a50184470796b0000008797cc000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000
+ENTRY_END
+
+STEP 5770 QUERY
+ENTRY_BEGIN
+RAW
+b65c2b185011446231ff0000000000000000
+ENTRY_END
+
+STEP 5780 QUERY
+ENTRY_BEGIN
+RAW
+b65c2b195010446231fe0000000000000000
+ENTRY_END
+
+STEP 5790 QUERY
+ENTRY_BEGIN
+RAW
+28ed00000001000000000000066d6978666978026e6c00000f000100
+ENTRY_END
+
+STEP 5800 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400069e100000204056401010402
+ENTRY_END
+
+STEP 5810 QUERY
+ENTRY_BEGIN
+RAW
+b6630195501040b0dd9c0000000000000000
+ENTRY_END
+
+STEP 5820 QUERY
+ENTRY_BEGIN
+RAW
+b6630195501840b030e7000000900ca7000000010001000000000f313136383233313130343533302d330000f900010f313136383233313130343533302d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000
+ENTRY_END
+
+STEP 5830 QUERY
+ENTRY_BEGIN
+RAW
+b66301a3501140a2dd090000000000000000
+ENTRY_END
+
+STEP 5840 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ecb600000204056401010402
+ENTRY_END
+
+STEP 5850 QUERY
+ENTRY_BEGIN
+RAW
+b66301a4501040a2dd080000000000000000
+ENTRY_END
+
+STEP 5860 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc00a4280000020405b401010402
+ENTRY_END
+
+STEP 5870 QUERY
+ENTRY_BEGIN
+RAW
+b663a87e501040b0b9880000000000000000
+ENTRY_END
+
+STEP 5880 QUERY
+ENTRY_BEGIN
+RAW
+b66453ed5010fc00c68a0000000000000000
+ENTRY_END
+
+STEP 5890 QUERY
+ENTRY_BEGIN
+RAW
+b66453ed5018fc0070e60000008abe78000000010001000000000e3939363433323431323639302d330000f900010e3939363433323431323639302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000
+ENTRY_END
+
+STEP 5900 QUERY
+ENTRY_BEGIN
+RAW
+b66453fb5011fbf2c5fd0000000000000000
+ENTRY_END
+
+STEP 5910 QUERY
+ENTRY_BEGIN
+RAW
+b663a87e501840b0d705000000904375000000010001000000000f313136383233313130343533302d320000f900010f313136383233313130343533302d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000
+ENTRY_END
+
+STEP 5920 QUERY
+ENTRY_BEGIN
+RAW
+b66453fc5010fbf2c5fc0000000000000000
+ENTRY_END
+
+STEP 5930 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc00de6d0000020405b401010402
+ENTRY_END
+
+STEP 5940 QUERY
+ENTRY_BEGIN
+RAW
+b6654c635010fc0008590000000000000000
+ENTRY_END
+
+STEP 5950 QUERY
+ENTRY_BEGIN
+RAW
+b663a88c501140a2b8f50000000000000000
+ENTRY_END
+
+STEP 5960 QUERY
+ENTRY_BEGIN
+RAW
+b6654c635018fc00072d0000008a6c00000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000
+ENTRY_END
+
+STEP 5970 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002f9000000204056401010402
+ENTRY_END
+
+STEP 5980 QUERY
+ENTRY_BEGIN
+RAW
+b6654c715011fbf207cc0000000000000000
+ENTRY_END
+
+STEP 5990 QUERY
+ENTRY_BEGIN
+RAW
+b6654c725010fbf207cb0000000000000000
+ENTRY_END
+
+STEP 6000 QUERY
+ENTRY_BEGIN
+RAW
+b663a88d501040a2b8f40000000000000000
+ENTRY_END
+
+STEP 6010 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc0083840000020405b401010402
+ENTRY_END
+
+STEP 6020 QUERY
+ENTRY_BEGIN
+RAW
+b6663c2f501040b068ae0000000000000000
+ENTRY_END
+
+STEP 6030 QUERY
+ENTRY_BEGIN
+RAW
+b666fe1c5010fc00fbb40000000000000000
+ENTRY_END
+
+STEP 6040 QUERY
+ENTRY_BEGIN
+RAW
+b666fe1c5018fc007cc80000008ae9c0000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000
+ENTRY_END
+
+STEP 6050 QUERY
+ENTRY_BEGIN
+RAW
+b666fe2a5011fbf2fb270000000000000000
+ENTRY_END
+
+STEP 6060 QUERY
+ENTRY_BEGIN
+RAW
+b666fe2b5010fbf2fb260000000000000000
+ENTRY_END
+
+STEP 6070 QUERY
+ENTRY_BEGIN
+RAW
+b6663c2f501840b04f5d000000907a43000000010001000000000f313136383233313130343533302d320000f900010f313136383233313130343533302d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000
+ENTRY_END
+
+STEP 6080 QUERY
+ENTRY_BEGIN
+RAW
+b6663c3d501140a2681b0000000000000000
+ENTRY_END
+
+STEP 6090 QUERY
+ENTRY_BEGIN
+RAW
+b6663c3e501040a2681a0000000000000000
+ENTRY_END
+
+STEP 6100 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf02ae300000204057a01010402
+ENTRY_END
+
+STEP 6110 QUERY
+ENTRY_BEGIN
+RAW
+b66a29aa5010fbec764c0000000000000000
+ENTRY_END
+
+STEP 6120 QUERY
+ENTRY_BEGIN
+RAW
+b66a29aa5018fbeca98c0000008f5105000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 6130 QUERY
+ENTRY_BEGIN
+RAW
+b66a29b85011fbde75ba0000000000000000
+ENTRY_END
+
+STEP 6140 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a2200000020405b401010402
+ENTRY_END
+
+STEP 6150 QUERY
+ENTRY_BEGIN
+RAW
+b66a29b95010fbde75b90000000000000000
+ENTRY_END
+
+STEP 6160 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f29900000204057a01010402
+ENTRY_END
+
+STEP 6170 QUERY
+ENTRY_BEGIN
+RAW
+b66acd7f50104470467a0000000000000000
+ENTRY_END
+
+STEP 6180 QUERY
+ENTRY_BEGIN
+RAW
+b66acd7f50184470c7f40000008d352e000000010001000000000f313031333631323238313837342d330000f900010f313031333631323238313837342d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000
+ENTRY_END
+
+STEP 6190 QUERY
+ENTRY_BEGIN
+RAW
+b66acd8d5011446245ea0000000000000000
+ENTRY_END
+
+STEP 6200 QUERY
+ENTRY_BEGIN
+RAW
+b66bbecf5010fbeca8dc0000000000000000
+ENTRY_END
+
+STEP 6210 QUERY
+ENTRY_BEGIN
+RAW
+b66bbecf5018fbecf6930000008f378f000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 6220 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400067760000020405b401010402
+ENTRY_END
+
+STEP 6230 QUERY
+ENTRY_BEGIN
+RAW
+b66acd8e5010446245e90000000000000000
+ENTRY_END
+
+STEP 6240 QUERY
+ENTRY_BEGIN
+RAW
+b66bbedd5011fbdea84a0000000000000000
+ENTRY_END
+
+STEP 6250 QUERY
+ENTRY_BEGIN
+RAW
+b66c83605010447055ed0000000000000000
+ENTRY_END
+
+STEP 6260 QUERY
+ENTRY_BEGIN
+RAW
+b66c83605018447026c40000008de6d2000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000
+ENTRY_END
+
+STEP 6270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d34200000204057a01010402
+ENTRY_END
+
+STEP 6280 QUERY
+ENTRY_BEGIN
+RAW
+b66c836e50114462555d0000000000000000
+ENTRY_END
+
+STEP 6290 QUERY
+ENTRY_BEGIN
+RAW
+b66bbede5010fbdea8490000000000000000
+ENTRY_END
+
+STEP 6300 QUERY
+ENTRY_BEGIN
+RAW
+b66d191c5010fbec2f370000000000000000
+ENTRY_END
+
+STEP 6310 QUERY
+ENTRY_BEGIN
+RAW
+b66d191c5018fbecc6460000008fee36000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 6320 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000810b0000020405b401010402
+ENTRY_END
+
+STEP 6330 QUERY
+ENTRY_BEGIN
+RAW
+b66c836f50104462555c0000000000000000
+ENTRY_END
+
+STEP 6340 QUERY
+ENTRY_BEGIN
+RAW
+b66da42b501044704eb60000000000000000
+ENTRY_END
+
+STEP 6350 QUERY
+ENTRY_BEGIN
+RAW
+b66da42b501844706de90000008d9876000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000
+ENTRY_END
+
+STEP 6360 QUERY
+ENTRY_BEGIN
+RAW
+b66d192a5011fbde2ea50000000000000000
+ENTRY_END
+
+STEP 6370 QUERY
+ENTRY_BEGIN
+RAW
+b66da439501144624e260000000000000000
+ENTRY_END
+
+STEP 6380 QUERY
+ENTRY_BEGIN
+RAW
+b66d192b5010fbde2ea40000000000000000
+ENTRY_END
+
+STEP 6390 QUERY
+ENTRY_BEGIN
+RAW
+b66da43a501044624e250000000000000000
+ENTRY_END
+
+STEP 6400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e71c0000020405b401010402
+ENTRY_END
+
+STEP 6410 QUERY
+ENTRY_BEGIN
+RAW
+b66e311b5010faf02c470000000000000000
+ENTRY_END
+
+STEP 6420 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc00ee0b00000204057801010402
+ENTRY_END
+
+STEP 6430 QUERY
+ENTRY_BEGIN
+RAW
+b6719dda5010fc00c6370000000000000000
+ENTRY_END
+
+STEP 6440 QUERY
+ENTRY_BEGIN
+RAW
+b6719dda5018fc006c5e00000091d5b0000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000
+ENTRY_END
+
+STEP 6450 QUERY
+ENTRY_BEGIN
+RAW
+b6719de85011fbf2c5a30000000000000000
+ENTRY_END
+
+STEP 6460 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc00095d00000204057801010402
+ENTRY_END
+
+STEP 6470 QUERY
+ENTRY_BEGIN
+RAW
+b6719de95010fbf2c5a20000000000000000
+ENTRY_END
+
+STEP 6480 QUERY
+ENTRY_BEGIN
+RAW
+b6722e745010fc0050ee0000000000000000
+ENTRY_END
+
+STEP 6490 QUERY
+ENTRY_BEGIN
+RAW
+b6722e745018fc00071f00000091c7a6000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000
+ENTRY_END
+
+STEP 6500 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b5a300000204057a01010402
+ENTRY_END
+
+STEP 6510 QUERY
+ENTRY_BEGIN
+RAW
+b673057f501041b824730000000000000000
+ENTRY_END
+
+STEP 6520 QUERY
+ENTRY_BEGIN
+RAW
+b673057f501841b86c7200000095bcc0000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6530 QUERY
+ENTRY_BEGIN
+RAW
+b673058d501141aa23db0000000000000000
+ENTRY_END
+
+STEP 6540 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400032f400000204057a01010402
+ENTRY_END
+
+STEP 6550 QUERY
+ENTRY_BEGIN
+RAW
+b6722e825011fbf2505a0000000000000000
+ENTRY_END
+
+STEP 6560 QUERY
+ENTRY_BEGIN
+RAW
+b673058e501041aa23da0000000000000000
+ENTRY_END
+
+STEP 6570 QUERY
+ENTRY_BEGIN
+RAW
+b673a2cf501041b804730000000000000000
+ENTRY_END
+
+STEP 6580 QUERY
+ENTRY_BEGIN
+RAW
+b673a2cf501841b8d533000000953500000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6590 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc00bb6f00000204057801010402
+ENTRY_END
+
+STEP 6600 QUERY
+ENTRY_BEGIN
+RAW
+b673a2dd501141aa03db0000000000000000
+ENTRY_END
+
+STEP 6610 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004e5b00000204057a01010402
+ENTRY_END
+
+STEP 6620 QUERY
+ENTRY_BEGIN
+RAW
+b6722e835010fbf250590000000000000000
+ENTRY_END
+
+STEP 6630 QUERY
+ENTRY_BEGIN
+RAW
+b673a2de501041aa03da0000000000000000
+ENTRY_END
+
+STEP 6640 QUERY
+ENTRY_BEGIN
+RAW
+b674f779501041b8cb2e0000000000000000
+ENTRY_END
+
+STEP 6650 QUERY
+ENTRY_BEGIN
+RAW
+b674f779501841b823af00000095ad40000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6660 QUERY
+ENTRY_BEGIN
+RAW
+b674f787501141aaca960000000000000000
+ENTRY_END
+
+STEP 6670 QUERY
+ENTRY_BEGIN
+RAW
+b674219e5010fc000fd50000000000000000
+ENTRY_END
+
+STEP 6680 QUERY
+ENTRY_BEGIN
+RAW
+b674f788501041aaca950000000000000000
+ENTRY_END
+
+STEP 6690 QUERY
+ENTRY_BEGIN
+RAW
+b674219e5018fc0075b20000009117fa000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000
+ENTRY_END
+
+STEP 6700 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005e6e00000204057a01010402
+ENTRY_END
+
+STEP 6710 QUERY
+ENTRY_BEGIN
+RAW
+b6758667501041b84c530000000000000000
+ENTRY_END
+
+STEP 6720 QUERY
+ENTRY_BEGIN
+RAW
+b6758667501841b83393000000951d80000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6730 QUERY
+ENTRY_BEGIN
+RAW
+b67421ac5011fbf20f410000000000000000
+ENTRY_END
+
+STEP 6740 QUERY
+ENTRY_BEGIN
+RAW
+b6758675501141aa4bbb0000000000000000
+ENTRY_END
+
+STEP 6750 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000834f00000204057a01010402
+ENTRY_END
+
+STEP 6760 QUERY
+ENTRY_BEGIN
+RAW
+b6758676501041aa4bba0000000000000000
+ENTRY_END
+
+STEP 6770 QUERY
+ENTRY_BEGIN
+RAW
+b6764c30501041b8ab6a0000000000000000
+ENTRY_END
+
+STEP 6780 QUERY
+ENTRY_BEGIN
+RAW
+b6764c30501841b81b6b0000009595c0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6790 QUERY
+ENTRY_BEGIN
+RAW
+b67421ad5010fbf20f400000000000000000
+ENTRY_END
+
+STEP 6800 QUERY
+ENTRY_BEGIN
+RAW
+b6764c3e501141aaaad20000000000000000
+ENTRY_END
+
+STEP 6810 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b5d500000204057a01010402
+ENTRY_END
+
+STEP 6820 QUERY
+ENTRY_BEGIN
+RAW
+b6764c3f501041aaaad10000000000000000
+ENTRY_END
+
+STEP 6830 QUERY
+ENTRY_BEGIN
+RAW
+b676e889501041b841970000000000000000
+ENTRY_END
+
+STEP 6840 QUERY
+ENTRY_BEGIN
+RAW
+b676e889501841b83958000000950e00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000
+ENTRY_END
+
+STEP 6850 QUERY
+ENTRY_BEGIN
+RAW
+b676e897501141aa40ff0000000000000000
+ENTRY_END
+
+STEP 6860 QUERY
+ENTRY_BEGIN
+RAW
+b676e898501041aa40fe0000000000000000
+ENTRY_END
+
+STEP 6870 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400095d800000204056401010402
+ENTRY_END
+
+STEP 6880 QUERY
+ENTRY_BEGIN
+RAW
+b67b1e67501040b0eca90000000000000000
+ENTRY_END
+
+STEP 6890 QUERY
+ENTRY_BEGIN
+RAW
+b67b1e67501840b0d66800000089f180000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd03403c4e8300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000
+ENTRY_END
+
+STEP 6900 QUERY
+ENTRY_BEGIN
+RAW
+b67b1e75501140a2ec1d0000000000000000
+ENTRY_END
+
+STEP 6910 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000693a00000204056401010402
+ENTRY_END
+
+STEP 6920 QUERY
+ENTRY_BEGIN
+RAW
+b67b1e76501040a2ec1c0000000000000000
+ENTRY_END
+
+STEP 6930 QUERY
+ENTRY_BEGIN
+RAW
+b67bf069501040b0ee080000000000000000
+ENTRY_END
+
+STEP 6940 QUERY
+ENTRY_BEGIN
+RAW
+b67bf069501840b024c800000089a680000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd03403c4e8300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000
+ENTRY_END
+
+STEP 6950 QUERY
+ENTRY_BEGIN
+RAW
+b67bf077501140a2ed7c0000000000000000
+ENTRY_END
+
+STEP 6960 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000124a00000204056401010402
+ENTRY_END
+
+STEP 6970 QUERY
+ENTRY_BEGIN
+RAW
+b67bf078501040a2ed7b0000000000000000
+ENTRY_END
+
+STEP 6980 QUERY
+ENTRY_BEGIN
+RAW
+b67d7555501040b0122b0000000000000000
+ENTRY_END
+
+STEP 6990 QUERY
+ENTRY_BEGIN
+RAW
+b67d7555501840b0906a000000895d00000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd04403c4e8400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000
+ENTRY_END
+
+STEP 7000 QUERY
+ENTRY_BEGIN
+RAW
+b67d7563501140a2119f0000000000000000
+ENTRY_END
+
+STEP 7010 QUERY
+ENTRY_BEGIN
+RAW
+b67d7564501040a2119e0000000000000000
+ENTRY_END
+
+STEP 7020 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d9cd00000204051e01010402
+ENTRY_END
+
+STEP 7030 QUERY
+ENTRY_BEGIN
+RAW
+b67e3beb5010ffdc0e960000000000000000
+ENTRY_END
+
+STEP 7040 QUERY
+ENTRY_BEGIN
+RAW
+b67e3beb5018ffdc1df400000099934e000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000
+ENTRY_END
+
+STEP 7050 QUERY
+ENTRY_BEGIN
+RAW
+b67e3bf95011ffce0dfa0000000000000000
+ENTRY_END
+
+STEP 7060 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0182100000204051e01010402
+ENTRY_END
+
+STEP 7070 QUERY
+ENTRY_BEGIN
+RAW
+b67e3bfa5010ffce0df90000000000000000
+ENTRY_END
+
+STEP 7080 QUERY
+ENTRY_BEGIN
+RAW
+b67edec85010ffdcaa0b0000000000000000
+ENTRY_END
+
+STEP 7090 QUERY
+ENTRY_BEGIN
+RAW
+b67edec85018ffdc9cbb00000099b0fd000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000
+ENTRY_END
+
+STEP 7100 QUERY
+ENTRY_BEGIN
+RAW
+b67eded65011ffcea96f0000000000000000
+ENTRY_END
+
+STEP 7110 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf066bc00000204051e01010402
+ENTRY_END
+
+STEP 7120 QUERY
+ENTRY_BEGIN
+RAW
+b67eded75010ffcea96e0000000000000000
+ENTRY_END
+
+STEP 7130 QUERY
+ENTRY_BEGIN
+RAW
+b67fb3b25010ffdc23bc0000000000000000
+ENTRY_END
+
+STEP 7140 QUERY
+ENTRY_BEGIN
+RAW
+b67fb3b25018ffdca0cd00000099269c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000
+ENTRY_END
+
+STEP 7150 QUERY
+ENTRY_BEGIN
+RAW
+b67fb3c05011ffce23200000000000000000
+ENTRY_END
+
+STEP 7160 QUERY
+ENTRY_BEGIN
+RAW
+b67fb3c15010ffce231f0000000000000000
+ENTRY_END
+
+STEP 7170 QUERY
+ENTRY_BEGIN
+RAW
+b66e311b5018faf02f370000008d25c0000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd13403c4e9300030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 7180 QUERY
+ENTRY_BEGIN
+RAW
+b66e311b5018faf02f370000008d25c0000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd13403c4e9300030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 7190 QUERY
+ENTRY_BEGIN
+RAW
+b66e31295011fae22bb70000000000000000
+ENTRY_END
+
+STEP 7200 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0a80c0000020405b401010402
+ENTRY_END
+
+STEP 7210 QUERY
+ENTRY_BEGIN
+RAW
+b66e312a5010fae22bb60000000000000000
+ENTRY_END
+
+STEP 7220 QUERY
+ENTRY_BEGIN
+RAW
+b68303575010faf01ae60000000000000000
+ENTRY_END
+
+STEP 7230 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf091b40000020405b401010402
+ENTRY_END
+
+STEP 7240 QUERY
+ENTRY_BEGIN
+RAW
+b683c2c05010faf045240000000000000000
+ENTRY_END
+
+STEP 7250 QUERY
+ENTRY_BEGIN
+RAW
+b683c2c05018faf0f2860000008e4bdc000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c5403c564500030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 7260 QUERY
+ENTRY_BEGIN
+RAW
+b683c2ce5011fae244930000000000000000
+ENTRY_END
+
+STEP 7270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf044dc0000020405b401010402
+ENTRY_END
+
+STEP 7280 QUERY
+ENTRY_BEGIN
+RAW
+b683c2cf5010fae244920000000000000000
+ENTRY_END
+
+STEP 7290 QUERY
+ENTRY_BEGIN
+RAW
+b6844daf5010faf06d5c0000000000000000
+ENTRY_END
+
+STEP 7300 QUERY
+ENTRY_BEGIN
+RAW
+b6844daf5018faf0669c0000008e0100000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c5403c564500030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 7310 QUERY
+ENTRY_BEGIN
+RAW
+b6844dbd5011fae26ccb0000000000000000
+ENTRY_END
+
+STEP 7320 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf058a60000020405b401010402
+ENTRY_END
+
+STEP 7330 QUERY
+ENTRY_BEGIN
+RAW
+b6844dbe5010fae26cca0000000000000000
+ENTRY_END
+
+STEP 7340 QUERY
+ENTRY_BEGIN
+RAW
+b686ac6c5010faf022670000000000000000
+ENTRY_END
+
+STEP 7350 QUERY
+ENTRY_BEGIN
+RAW
+b686ac6c5018faf065460000008eb560000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c6403c564600030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000
+ENTRY_END
+
+STEP 7360 QUERY
+ENTRY_BEGIN
+RAW
+b686ac7a5011fae221d60000000000000000
+ENTRY_END
+
+STEP 7370 QUERY
+ENTRY_BEGIN
+RAW
+b686ac7b5010fae221d50000000000000000
+ENTRY_END
+
+STEP 7380 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bdaf0000020405b401010402
+ENTRY_END
+
+STEP 7390 QUERY
+ENTRY_BEGIN
+RAW
+b68abd075010447072610000000000000000
+ENTRY_END
+
+STEP 7400 QUERY
+ENTRY_BEGIN
+RAW
+b68abd0750184470b7c30000008d553b000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 7410 QUERY
+ENTRY_BEGIN
+RAW
+b68abd155011446271d10000000000000000
+ENTRY_END
+
+STEP 7420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c6270000020405b401010402
+ENTRY_END
+
+STEP 7430 QUERY
+ENTRY_BEGIN
+RAW
+b68abd165010446271d00000000000000000
+ENTRY_END
+
+STEP 7440 QUERY
+ENTRY_BEGIN
+RAW
+b68bafe25010447087fd0000000000000000
+ENTRY_END
+
+STEP 7450 QUERY
+ENTRY_BEGIN
+RAW
+b68bafe25018447063a10000008dbffa000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 7460 QUERY
+ENTRY_BEGIN
+RAW
+b68baff050114462876d0000000000000000
+ENTRY_END
+
+STEP 7470 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000803f0000020405b401010402
+ENTRY_END
+
+STEP 7480 QUERY
+ENTRY_BEGIN
+RAW
+b68baff150104462876c0000000000000000
+ENTRY_END
+
+STEP 7490 QUERY
+ENTRY_BEGIN
+RAW
+b68c3a0a50104470b7ec0000000000000000
+ENTRY_END
+
+STEP 7500 QUERY
+ENTRY_BEGIN
+RAW
+b68c3a0a501844701e530000008d3538000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 7510 QUERY
+ENTRY_BEGIN
+RAW
+b68c3a1850114462b75c0000000000000000
+ENTRY_END
+
+STEP 7520 QUERY
+ENTRY_BEGIN
+RAW
+b68c3a1950104462b75b0000000000000000
+ENTRY_END
+
+STEP 7530 QUERY
+ENTRY_BEGIN
+RAW
+000000006002223800990000020405b40000
+ENTRY_END
+
+STEP 7540 QUERY
+ENTRY_BEGIN
+RAW
+b68efdc55010223863f10000000000000000
+ENTRY_END
+
+STEP 7550 QUERY
+ENTRY_BEGIN
+RAW
+b68efdc550182238a3690000001d92300000000100000000000008736c61676572696a026e6c0000060001
+ENTRY_END
+
+STEP 7560 QUERY
+ENTRY_BEGIN
+RAW
+b68efe335010223863640000000000000000
+ENTRY_END
+
+STEP 7570 QUERY
+ENTRY_BEGIN
+RAW
+b68efe335011223863630000000000000000
+ENTRY_END
+
+STEP 7580 QUERY
+ENTRY_BEGIN
+RAW
+b68efe345010223863620000000000000000
+ENTRY_END
+
+STEP 7590 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bd7e0000020405b401010402
+ENTRY_END
+
+STEP 7600 QUERY
+ENTRY_BEGIN
+RAW
+b68f86c850104470a86a0000000000000000
+ENTRY_END
+
+STEP 7610 QUERY
+ENTRY_BEGIN
+RAW
+b68f86c8501844702e0000000092d500000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000
+ENTRY_END
+
+STEP 7620 QUERY
+ENTRY_BEGIN
+RAW
+b68f86d650114462a7d50000000000000000
+ENTRY_END
+
+STEP 7630 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000ff90000020405b401010402
+ENTRY_END
+
+STEP 7640 QUERY
+ENTRY_BEGIN
+RAW
+b68f86d750104462a7d40000000000000000
+ENTRY_END
+
+STEP 7650 QUERY
+ENTRY_BEGIN
+RAW
+b6902691501044705b1b0000000000000000
+ENTRY_END
+
+STEP 7660 QUERY
+ENTRY_BEGIN
+RAW
+b690269150184470c6b100000092f000000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000
+ENTRY_END
+
+STEP 7670 QUERY
+ENTRY_BEGIN
+RAW
+b690269f501144625a860000000000000000
+ENTRY_END
+
+STEP 7680 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400057280000020405b401010402
+ENTRY_END
+
+STEP 7690 QUERY
+ENTRY_BEGIN
+RAW
+b69026a0501044625a850000000000000000
+ENTRY_END
+
+STEP 7700 QUERY
+ENTRY_BEGIN
+RAW
+b69105e050104470c2fa0000000000000000
+ENTRY_END
+
+STEP 7710 QUERY
+ENTRY_BEGIN
+RAW
+b69105e050184470c511000000925980000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000
+ENTRY_END
+
+STEP 7720 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238210a0000020405b40000
+ENTRY_END
+
+STEP 7730 QUERY
+ENTRY_BEGIN
+RAW
+b69105ee50114462c2650000000000000000
+ENTRY_END
+
+;STEP 7740 QUERY
+;ENTRY_BEGIN
+;RAW
+;2c0901000001000000000000056b6f726e6f026e6c00000f000100
+;ENTRY_END
+
+STEP 7750 QUERY
+ENTRY_BEGIN
+RAW
+b691d4ec50102238ad380000000000000000
+ENTRY_END
+
+STEP 7760 QUERY
+ENTRY_BEGIN
+RAW
+b691d4ec501822387976000000264f0c00000001000000000000116f6e7477696b6b656c696e6773696e7374026e6c0000060001
+ENTRY_END
+
+STEP 7770 QUERY
+ENTRY_BEGIN
+RAW
+b69105ef50104462c2640000000000000000
+ENTRY_END
+
+STEP 7780 QUERY
+ENTRY_BEGIN
+RAW
+b691d55650102238aca60000000000000000
+ENTRY_END
+
+STEP 7790 QUERY
+ENTRY_BEGIN
+RAW
+b691d55650112238aca50000000000000000
+ENTRY_END
+
+STEP 7800 QUERY
+ENTRY_BEGIN
+RAW
+b691d55750102238aca40000000000000000
+ENTRY_END
+
+STEP 7810 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238543a0000020405b401010402
+ENTRY_END
+
+STEP 7820 QUERY
+ENTRY_BEGIN
+RAW
+00000000600222387a780000020405b40000
+ENTRY_END
+
+STEP 7830 QUERY
+ENTRY_BEGIN
+RAW
+b69320c750102238baca0000000000000000
+ENTRY_END
+
+STEP 7840 QUERY
+ENTRY_BEGIN
+RAW
+b69320c75018223807270000001c1125000000010000000000000774617861746965026e6c0000060001
+ENTRY_END
+
+STEP 7850 QUERY
+ENTRY_BEGIN
+RAW
+b693211d50102238ba560000000000000000
+ENTRY_END
+
+STEP 7860 QUERY
+ENTRY_BEGIN
+RAW
+b693211d50112238ba550000000000000000
+ENTRY_END
+
+STEP 7870 QUERY
+ENTRY_BEGIN
+RAW
+b693211e50102238ba540000000000000000
+ENTRY_END
+
+STEP 7880 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf036a60000020405b401010402
+ENTRY_END
+
+STEP 7890 QUERY
+ENTRY_BEGIN
+RAW
+b69592cf5010faf019f50000000000000000
+ENTRY_END
+
+STEP 7900 QUERY
+ENTRY_BEGIN
+RAW
+b69592cf5018faf0921a0000008e6b08000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc7403c4e4700030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 7910 QUERY
+ENTRY_BEGIN
+RAW
+b69592dd5011fae219640000000000000000
+ENTRY_END
+
+STEP 7920 QUERY
+ENTRY_BEGIN
+RAW
+b69592de5010fae219630000000000000000
+ENTRY_END
+
+STEP 7930 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f88d0000020405b401010402
+ENTRY_END
+
+STEP 7940 QUERY
+ENTRY_BEGIN
+RAW
+b696589b5010faf016100000000000000000
+ENTRY_END
+
+STEP 7950 QUERY
+ENTRY_BEGIN
+RAW
+b696589b5018faf0eca60000008e0d98000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc7403c4e4700030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 7960 QUERY
+ENTRY_BEGIN
+RAW
+b69658a95011fae2157f0000000000000000
+ENTRY_END
+
+STEP 7970 QUERY
+ENTRY_BEGIN
+RAW
+b69658aa5010fae2157e0000000000000000
+ENTRY_END
+
+STEP 7980 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d1d60000020405b401010402
+ENTRY_END
+
+STEP 7990 QUERY
+ENTRY_BEGIN
+RAW
+b6925a485010223870130000000000000000
+ENTRY_END
+
+STEP 8000 QUERY
+ENTRY_BEGIN
+RAW
+b6973bb55010faf00c3e0000000000000000
+ENTRY_END
+
+STEP 8010 QUERY
+ENTRY_BEGIN
+RAW
+b6973bb55018faf0ee6c0000008e0000000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc8403c4e4800030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 8020 QUERY
+ENTRY_BEGIN
+RAW
+b6925a48501822385efc00000096a91f000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf6403c4e760003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000
+ENTRY_END
+
+STEP 8030 QUERY
+ENTRY_BEGIN
+RAW
+b6973bc35011fae20bad0000000000000000
+ENTRY_END
+
+STEP 8040 QUERY
+ENTRY_BEGIN
+RAW
+b6973bc45010fae20bac0000000000000000
+ENTRY_END
+
+STEP 8050 QUERY
+ENTRY_BEGIN
+RAW
+b6925a565011222a6f7a0000000000000000
+ENTRY_END
+
+STEP 8060 QUERY
+ENTRY_BEGIN
+RAW
+000000007002223860470000020405b401010402
+ENTRY_END
+
+STEP 8070 QUERY
+ENTRY_BEGIN
+RAW
+b6925a575010222a6f790000000000000000
+ENTRY_END
+
+STEP 8080 QUERY
+ENTRY_BEGIN
+RAW
+b698080850102238ce5a0000000000000000
+ENTRY_END
+
+STEP 8090 QUERY
+ENTRY_BEGIN
+RAW
+b69808085018223875ef00000096f174000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf6403c4e760003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000
+ENTRY_END
+
+STEP 8100 QUERY
+ENTRY_BEGIN
+RAW
+000000006002223824c20000020405b40000
+ENTRY_END
+
+STEP 8110 QUERY
+ENTRY_BEGIN
+RAW
+b698ca5350102238bb820000000000000000
+ENTRY_END
+
+STEP 8120 QUERY
+ENTRY_BEGIN
+RAW
+b698ca535018223813cf000000236e56000000010000000000000e6761642d676f6f692d7665636874026e6c0000060001
+ENTRY_END
+
+STEP 8130 QUERY
+ENTRY_BEGIN
+RAW
+b698caba50102238baf60000000000000000
+ENTRY_END
+
+STEP 8140 QUERY
+ENTRY_BEGIN
+RAW
+b698caba50112238baf50000000000000000
+ENTRY_END
+
+STEP 8150 QUERY
+ENTRY_BEGIN
+RAW
+b698cabb50102238baf40000000000000000
+ENTRY_END
+
+STEP 8160 QUERY
+ENTRY_BEGIN
+RAW
+b69808165011222acdc10000000000000000
+ENTRY_END
+
+STEP 8170 QUERY
+ENTRY_BEGIN
+RAW
+00000000700222386f010000020405b401010402
+ENTRY_END
+
+STEP 8180 QUERY
+ENTRY_BEGIN
+RAW
+00000000600222389deb0000020405b40000
+ENTRY_END
+
+STEP 8190 QUERY
+ENTRY_BEGIN
+RAW
+b69becab5010223812510000000000000000
+ENTRY_END
+
+STEP 8200 QUERY
+ENTRY_BEGIN
+RAW
+b69becab50182238cab200000024e7b1000000010000000000000f68656d6572742d676f72696368656d026e6c0000060001
+ENTRY_END
+
+STEP 8210 QUERY
+ENTRY_BEGIN
+RAW
+b69bed135010223811c30000000000000000
+ENTRY_END
+
+STEP 8220 QUERY
+ENTRY_BEGIN
+RAW
+b69bed135011223811c20000000000000000
+ENTRY_END
+
+STEP 8230 QUERY
+ENTRY_BEGIN
+RAW
+b69bed145010223811c10000000000000000
+ENTRY_END
+
+STEP 8240 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238b4740000020405b40000
+ENTRY_END
+
+STEP 8250 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238b67e0000020405b40000
+ENTRY_END
+
+STEP 8260 QUERY
+ENTRY_BEGIN
+RAW
+b69cc8d1501022384cb30000000000000000
+ENTRY_END
+
+STEP 8270 QUERY
+ENTRY_BEGIN
+RAW
+b69cc8d1501822382c12000000209f3f000000010000000000000b76657a656c68656e6e6570026e6c0000060001
+ENTRY_END
+
+STEP 8280 QUERY
+ENTRY_BEGIN
+RAW
+b69d9e7350102238791a0000000000000000
+ENTRY_END
+
+STEP 8290 QUERY
+ENTRY_BEGIN
+RAW
+b69d9e7350182238ea300000001eaf1000000001000000000000096f6f672d726164696f026e6c0000060001
+ENTRY_END
+
+STEP 8300 QUERY
+ENTRY_BEGIN
+RAW
+b69cc935501022384c2d0000000000000000
+ENTRY_END
+
+STEP 8310 QUERY
+ENTRY_BEGIN
+RAW
+b69cc935501122384c2c0000000000000000
+ENTRY_END
+
+STEP 8320 QUERY
+ENTRY_BEGIN
+RAW
+b69d9ed55010223878980000000000000000
+ENTRY_END
+
+STEP 8330 QUERY
+ENTRY_BEGIN
+RAW
+b69d9ed55011223878970000000000000000
+ENTRY_END
+
+STEP 8340 QUERY
+ENTRY_BEGIN
+RAW
+b69808175010222acdc00000000000000000
+ENTRY_END
+
+STEP 8350 QUERY
+ENTRY_BEGIN
+RAW
+b69b68b4501022387c650000000000000000
+ENTRY_END
+
+STEP 8360 QUERY
+ENTRY_BEGIN
+RAW
+b69b68b450182238179600000096fbd8000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf7403c4e770003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000
+ENTRY_END
+
+STEP 8370 QUERY
+ENTRY_BEGIN
+RAW
+b69d9ed65010223878960000000000000000
+ENTRY_END
+
+STEP 8380 QUERY
+ENTRY_BEGIN
+RAW
+b69b68c25011222a7bcc0000000000000000
+ENTRY_END
+
+STEP 8390 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238f8440000020405b40000
+ENTRY_END
+
+STEP 8400 QUERY
+ENTRY_BEGIN
+RAW
+b69e234c5010223836070000000000000000
+ENTRY_END
+
+STEP 8410 QUERY
+ENTRY_BEGIN
+RAW
+b69e234c50182238a76e0000001cec240000000100000000000007646574616e6574026e6c0000060001
+ENTRY_END
+
+STEP 8420 QUERY
+ENTRY_BEGIN
+RAW
+b69e23a25010223835930000000000000000
+ENTRY_END
+
+STEP 8430 QUERY
+ENTRY_BEGIN
+RAW
+b69e23a25011223835920000000000000000
+ENTRY_END
+
+STEP 8440 QUERY
+ENTRY_BEGIN
+RAW
+b69e23a35010223835910000000000000000
+ENTRY_END
+
+STEP 8450 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238dcbc0000020405b40000
+ENTRY_END
+
+STEP 8460 QUERY
+ENTRY_BEGIN
+RAW
+b69ef086501022384d440000000000000000
+ENTRY_END
+
+STEP 8470 QUERY
+ENTRY_BEGIN
+RAW
+b69ef08650182238ae2500000022a14e000000010000000000000d726567627772667279736c616e026e6c0000060001
+ENTRY_END
+
+STEP 8480 QUERY
+ENTRY_BEGIN
+RAW
+b69ef0ec501022384cba0000000000000000
+ENTRY_END
+
+STEP 8490 QUERY
+ENTRY_BEGIN
+RAW
+b69ef0ec501122384cb90000000000000000
+ENTRY_END
+
+STEP 8500 QUERY
+ENTRY_BEGIN
+RAW
+b69ef0ed501022384cb80000000000000000
+ENTRY_END
+
+STEP 8510 QUERY
+ENTRY_BEGIN
+RAW
+b69b68c35010222a7bcb0000000000000000
+ENTRY_END
+
+STEP 8520 QUERY
+ENTRY_BEGIN
+RAW
+b68303575018faf04b560000008df340000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd16403c4e9600030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 8530 QUERY
+ENTRY_BEGIN
+RAW
+b68303575018faf04b560000008df340000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd16403c4e9600030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 8540 QUERY
+ENTRY_BEGIN
+RAW
+b68303655011fae21a560000000000000000
+ENTRY_END
+
+STEP 8550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf041b60000020405b401010402
+ENTRY_END
+
+STEP 8560 QUERY
+ENTRY_BEGIN
+RAW
+b68303665010fae21a550000000000000000
+ENTRY_END
+
+STEP 8570 QUERY
+ENTRY_BEGIN
+RAW
+b69faca65010faf00b240000000000000000
+ENTRY_END
+
+STEP 8580 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b3a50000020405b401010402
+ENTRY_END
+
+STEP 8590 QUERY
+ENTRY_BEGIN
+RAW
+b6a1a840501044707d070000000000000000
+ENTRY_END
+
+STEP 8600 QUERY
+ENTRY_BEGIN
+RAW
+b6a1a84050184470f4c200000089cc64000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 8610 QUERY
+ENTRY_BEGIN
+RAW
+b6a1a84e501144627c7b0000000000000000
+ENTRY_END
+
+STEP 8620 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ecb50000020405b401010402
+ENTRY_END
+
+STEP 8630 QUERY
+ENTRY_BEGIN
+RAW
+b6a1a84f501044627c7a0000000000000000
+ENTRY_END
+
+STEP 8640 QUERY
+ENTRY_BEGIN
+RAW
+b6a27e2c50104470e02a0000000000000000
+ENTRY_END
+
+STEP 8650 QUERY
+ENTRY_BEGIN
+RAW
+b6a27e2c501844708c830000008998c8000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 8660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400050a700000204055001010402
+ENTRY_END
+
+STEP 8670 QUERY
+ENTRY_BEGIN
+RAW
+b6a27e3a50114462df9e0000000000000000
+ENTRY_END
+
+STEP 8680 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b8ba0000020405b401010402
+ENTRY_END
+
+STEP 8690 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238473c0000020405b40000
+ENTRY_END
+
+STEP 8700 QUERY
+ENTRY_BEGIN
+RAW
+b6a2fbb450104510c58f0000000000000000
+ENTRY_END
+
+STEP 8710 QUERY
+ENTRY_BEGIN
+RAW
+b6a27e3b50104462df9d0000000000000000
+ENTRY_END
+
+STEP 8720 QUERY
+ENTRY_BEGIN
+RAW
+b6a2fbb4501845108d3c0000008b6710000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000
+ENTRY_END
+
+STEP 8730 QUERY
+ENTRY_BEGIN
+RAW
+b6a4048e50102238a3b60000000000000000
+ENTRY_END
+
+STEP 8740 QUERY
+ENTRY_BEGIN
+RAW
+b6a4048e5018223847ff000000213084000000010000000000000c636f7379636f6d7061676e79026e6c0000060001
+ENTRY_END
+
+STEP 8750 QUERY
+ENTRY_BEGIN
+RAW
+b6a3836950104470a6f10000000000000000
+ENTRY_END
+
+STEP 8760 QUERY
+ENTRY_BEGIN
+RAW
+b6a2fbc250114502c5010000000000000000
+ENTRY_END
+
+STEP 8770 QUERY
+ENTRY_BEGIN
+RAW
+b6a38369501844702ad200000089c140000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 8780 QUERY
+ENTRY_BEGIN
+RAW
+b6a404f350102238a32e0000000000000000
+ENTRY_END
+
+STEP 8790 QUERY
+ENTRY_BEGIN
+RAW
+b6a404f350112238a32d0000000000000000
+ENTRY_END
+
+STEP 8800 QUERY
+ENTRY_BEGIN
+RAW
+b6a2fbc350104502c5000000000000000000
+ENTRY_END
+
+STEP 8810 QUERY
+ENTRY_BEGIN
+RAW
+b6a404f450102238a32c0000000000000000
+ENTRY_END
+
+STEP 8820 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400097e000000204055001010402
+ENTRY_END
+
+STEP 8830 QUERY
+ENTRY_BEGIN
+RAW
+b6a3837750114462a6650000000000000000
+ENTRY_END
+
+STEP 8840 QUERY
+ENTRY_BEGIN
+RAW
+b6a4a43f50104510643c0000000000000000
+ENTRY_END
+
+STEP 8850 QUERY
+ENTRY_BEGIN
+RAW
+b6a4a43f50184510f6e30000008b9d16000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000
+ENTRY_END
+
+STEP 8860 QUERY
+ENTRY_BEGIN
+RAW
+b6a3837850104462a6640000000000000000
+ENTRY_END
+
+STEP 8870 QUERY
+ENTRY_BEGIN
+RAW
+b6a4a44d5011450263ae0000000000000000
+ENTRY_END
+
+STEP 8880 QUERY
+ENTRY_BEGIN
+RAW
+b6a4a44e5010450263ad0000000000000000
+ENTRY_END
+
+STEP 8890 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b33700000204055001010402
+ENTRY_END
+
+STEP 8900 QUERY
+ENTRY_BEGIN
+RAW
+b6a5493c50104510da950000000000000000
+ENTRY_END
+
+STEP 8910 QUERY
+ENTRY_BEGIN
+RAW
+b6a5493c5018451037370000008bd31c000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000
+ENTRY_END
+
+STEP 8920 QUERY
+ENTRY_BEGIN
+RAW
+b6a5494a50114502da070000000000000000
+ENTRY_END
+
+STEP 8930 QUERY
+ENTRY_BEGIN
+RAW
+b6a5494b50104502da060000000000000000
+ENTRY_END
+
+STEP 8940 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004ad60000020405b401010402
+ENTRY_END
+
+STEP 8950 QUERY
+ENTRY_BEGIN
+RAW
+b6a82dab501044708ec60000000000000000
+ENTRY_END
+
+STEP 8960 QUERY
+ENTRY_BEGIN
+RAW
+b6a82dab50184470944f0000008b9351000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa97403c4c1700030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000
+ENTRY_END
+
+STEP 8970 QUERY
+ENTRY_BEGIN
+RAW
+b6a82db9501144628e380000000000000000
+ENTRY_END
+
+STEP 8980 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000adc20000020405b401010402
+ENTRY_END
+
+STEP 8990 QUERY
+ENTRY_BEGIN
+RAW
+b6a82dba501044628e370000000000000000
+ENTRY_END
+
+STEP 9000 QUERY
+ENTRY_BEGIN
+RAW
+b6a8c206501044705d570000000000000000
+ENTRY_END
+
+STEP 9010 QUERY
+ENTRY_BEGIN
+RAW
+b6a8c206501844702ecc0000008bc965000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa97403c4c1700030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000
+ENTRY_END
+
+STEP 9020 QUERY
+ENTRY_BEGIN
+RAW
+b6a8c214501144625cc90000000000000000
+ENTRY_END
+
+STEP 9030 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c87d0000020405b401010402
+ENTRY_END
+
+STEP 9040 QUERY
+ENTRY_BEGIN
+RAW
+b6a8c215501044625cc80000000000000000
+ENTRY_END
+
+STEP 9050 QUERY
+ENTRY_BEGIN
+RAW
+b6a93e2050104470fbf70000000000000000
+ENTRY_END
+
+STEP 9060 QUERY
+ENTRY_BEGIN
+RAW
+b6a93e205018447049070000008b4bcb000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa98403c4c1800030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000
+ENTRY_END
+
+STEP 9070 QUERY
+ENTRY_BEGIN
+RAW
+b6a93e2e50114462fb690000000000000000
+ENTRY_END
+
+STEP 9080 QUERY
+ENTRY_BEGIN
+RAW
+b6a93e2f50104462fb680000000000000000
+ENTRY_END
+
+STEP 9090 QUERY
+ENTRY_BEGIN
+RAW
+b69cc936501022384c2b0000000000000000
+ENTRY_END
+
+STEP 9100 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0235a0000020405b401010402
+ENTRY_END
+
+STEP 9110 QUERY
+ENTRY_BEGIN
+RAW
+b6ab2c4f5010faf06d130000000000000000
+ENTRY_END
+
+STEP 9120 QUERY
+ENTRY_BEGIN
+RAW
+b6ab2c4f5018faf057b60000008ece11000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 9130 QUERY
+ENTRY_BEGIN
+RAW
+b6ab2c5d5011fae26c820000000000000000
+ENTRY_END
+
+STEP 9140 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d00e0000020405b401010402
+ENTRY_END
+
+STEP 9150 QUERY
+ENTRY_BEGIN
+RAW
+b6ab2c5e5010fae26c810000000000000000
+ENTRY_END
+
+STEP 9160 QUERY
+ENTRY_BEGIN
+RAW
+b6aba8ae5010faf09d680000000000000000
+ENTRY_END
+
+STEP 9170 QUERY
+ENTRY_BEGIN
+RAW
+b6aba8ae5018faf09fa00000008eb77d000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 9180 QUERY
+ENTRY_BEGIN
+RAW
+b6aba8bc5011fae29cd70000000000000000
+ENTRY_END
+
+STEP 9190 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0ca480000020405b401010402
+ENTRY_END
+
+STEP 9200 QUERY
+ENTRY_BEGIN
+RAW
+b6aba8bd5010fae29cd60000000000000000
+ENTRY_END
+
+STEP 9210 QUERY
+ENTRY_BEGIN
+RAW
+b6ac8a535010faf0b5fc0000000000000000
+ENTRY_END
+
+STEP 9220 QUERY
+ENTRY_BEGIN
+RAW
+b6ac8a535018faf07d360000008ef27b000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 9230 QUERY
+ENTRY_BEGIN
+RAW
+b6ac8a615011fae2b56b0000000000000000
+ENTRY_END
+
+STEP 9240 QUERY
+ENTRY_BEGIN
+RAW
+b6ac8a625010fae2b56a0000000000000000
+ENTRY_END
+
+STEP 9250 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d5990000020405b401010402
+ENTRY_END
+
+STEP 9260 QUERY
+ENTRY_BEGIN
+RAW
+b6ad439b5010faf008050000000000000000
+ENTRY_END
+
+STEP 9270 QUERY
+ENTRY_BEGIN
+RAW
+b6ad439b5018faf01c6c0000009404ed000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd46403c4ec60003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000
+ENTRY_END
+
+STEP 9280 QUERY
+ENTRY_BEGIN
+RAW
+b6ad43a95011fae2076e0000000000000000
+ENTRY_END
+
+STEP 9290 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c84e0000020405b401010402
+ENTRY_END
+
+STEP 9300 QUERY
+ENTRY_BEGIN
+RAW
+b6ad43aa5010fae2076d0000000000000000
+ENTRY_END
+
+STEP 9310 QUERY
+ENTRY_BEGIN
+RAW
+b6af01195010faf03d3a0000000000000000
+ENTRY_END
+
+STEP 9320 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf015f200000204057a01010402
+ENTRY_END
+
+STEP 9330 QUERY
+ENTRY_BEGIN
+RAW
+b6afec4b5010fbec9e740000000000000000
+ENTRY_END
+
+STEP 9340 QUERY
+ENTRY_BEGIN
+RAW
+b6afec4b5018fbec1c5700000091d900000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 9350 QUERY
+ENTRY_BEGIN
+RAW
+b6afec595011fbde9de00000000000000000
+ENTRY_END
+
+STEP 9360 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf040ad00000204057a01010402
+ENTRY_END
+
+STEP 9370 QUERY
+ENTRY_BEGIN
+RAW
+b6afec5a5010fbde9ddf0000000000000000
+ENTRY_END
+
+STEP 9380 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001ed00000020405b401010402
+ENTRY_END
+
+STEP 9390 QUERY
+ENTRY_BEGIN
+RAW
+b6b09cca5010fbec18b00000000000000000
+ENTRY_END
+
+STEP 9400 QUERY
+ENTRY_BEGIN
+RAW
+b6b09cca5018fbece393000000918d00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 9410 QUERY
+ENTRY_BEGIN
+RAW
+b6b17c0a5010447014580000000000000000
+ENTRY_END
+
+STEP 9420 QUERY
+ENTRY_BEGIN
+RAW
+b6b17c0a501844707e9d0000008bacbd000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000
+ENTRY_END
+
+STEP 9430 QUERY
+ENTRY_BEGIN
+RAW
+b6b09cd85011fbde181c0000000000000000
+ENTRY_END
+
+STEP 9440 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf085cb00000204057a01010402
+ENTRY_END
+
+STEP 9450 QUERY
+ENTRY_BEGIN
+RAW
+b6b09cd95010fbde181b0000000000000000
+ENTRY_END
+
+STEP 9460 QUERY
+ENTRY_BEGIN
+RAW
+b6b17c185011446213ca0000000000000000
+ENTRY_END
+
+STEP 9470 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f4030000020405b401010402
+ENTRY_END
+
+STEP 9480 QUERY
+ENTRY_BEGIN
+RAW
+b6b2661c5010fbec947a0000000000000000
+ENTRY_END
+
+STEP 9490 QUERY
+ENTRY_BEGIN
+RAW
+b6b2661c5018fbecab5e000000914100000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 9500 QUERY
+ENTRY_BEGIN
+RAW
+b6b17c195010446213c90000000000000000
+ENTRY_END
+
+STEP 9510 QUERY
+ENTRY_BEGIN
+RAW
+b6b3418b5010447024090000000000000000
+ENTRY_END
+
+STEP 9520 QUERY
+ENTRY_BEGIN
+RAW
+b6b3418b5018447033d70000008b0935000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000
+ENTRY_END
+
+STEP 9530 QUERY
+ENTRY_BEGIN
+RAW
+b6b2662a5011fbde93e60000000000000000
+ENTRY_END
+
+STEP 9540 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000c4d0000020405b401010402
+ENTRY_END
+
+STEP 9550 QUERY
+ENTRY_BEGIN
+RAW
+b6b3419950114462237b0000000000000000
+ENTRY_END
+
+STEP 9560 QUERY
+ENTRY_BEGIN
+RAW
+b6b2662b5010fbde93e50000000000000000
+ENTRY_END
+
+STEP 9570 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400045b80000020405b401010402
+ENTRY_END
+
+STEP 9580 QUERY
+ENTRY_BEGIN
+RAW
+b6b3419a50104462237a0000000000000000
+ENTRY_END
+
+STEP 9590 QUERY
+ENTRY_BEGIN
+RAW
+b6b4f31650104470c4300000000000000000
+ENTRY_END
+
+STEP 9600 QUERY
+ENTRY_BEGIN
+RAW
+b6b42daf50104470502d0000000000000000
+ENTRY_END
+
+STEP 9610 QUERY
+ENTRY_BEGIN
+RAW
+b6b4f3165018447077860000008b65ad000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000
+ENTRY_END
+
+STEP 9620 QUERY
+ENTRY_BEGIN
+RAW
+b6b42daf5018447031a50000008fb8e6000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 9630 QUERY
+ENTRY_BEGIN
+RAW
+b6b4f32450114462c3a20000000000000000
+ENTRY_END
+
+STEP 9640 QUERY
+ENTRY_BEGIN
+RAW
+b6b42dbd501144624f9b0000000000000000
+ENTRY_END
+
+STEP 9650 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400016260000020405b401010402
+ENTRY_END
+
+STEP 9660 QUERY
+ENTRY_BEGIN
+RAW
+b6b4f32550104462c3a10000000000000000
+ENTRY_END
+
+STEP 9670 QUERY
+ENTRY_BEGIN
+RAW
+b6b42dbe501044624f9a0000000000000000
+ENTRY_END
+
+STEP 9680 QUERY
+ENTRY_BEGIN
+RAW
+b6b57d3e501044700a760000000000000000
+ENTRY_END
+
+STEP 9690 QUERY
+ENTRY_BEGIN
+RAW
+b6b57d3e501844703aa10000008f6b34000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 9700 QUERY
+ENTRY_BEGIN
+RAW
+b6b57d4c5011446209e40000000000000000
+ENTRY_END
+
+STEP 9710 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002b9e0000020405b401010402
+ENTRY_END
+
+STEP 9720 QUERY
+ENTRY_BEGIN
+RAW
+b6b57d4d5010446209e30000000000000000
+ENTRY_END
+
+STEP 9730 QUERY
+ENTRY_BEGIN
+RAW
+b6b667875010447035a40000000000000000
+ENTRY_END
+
+STEP 9740 QUERY
+ENTRY_BEGIN
+RAW
+b6b66787501844704d880000008f837b000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 9750 QUERY
+ENTRY_BEGIN
+RAW
+b6b667955011446235120000000000000000
+ENTRY_END
+
+STEP 9760 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf07fea0000020405b401010402
+ENTRY_END
+
+STEP 9770 QUERY
+ENTRY_BEGIN
+RAW
+b6b8e7615010faf00e840000000000000000
+ENTRY_END
+
+STEP 9780 QUERY
+ENTRY_BEGIN
+RAW
+b6b8e7615018faf014680000009b3a67000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 9790 QUERY
+ENTRY_BEGIN
+RAW
+b6b8e76f5011fae20de60000000000000000
+ENTRY_END
+
+STEP 9800 QUERY
+ENTRY_BEGIN
+RAW
+b6b8e7705010fae20de50000000000000000
+ENTRY_END
+
+STEP 9810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f2b90000020405b401010402
+ENTRY_END
+
+STEP 9820 QUERY
+ENTRY_BEGIN
+RAW
+b6b964ca5010faf003ea0000000000000000
+ENTRY_END
+
+STEP 9830 QUERY
+ENTRY_BEGIN
+RAW
+b6b964ca5018faf076f60000009bce3f000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 9840 QUERY
+ENTRY_BEGIN
+RAW
+b6b964d85011fae2034c0000000000000000
+ENTRY_END
+
+STEP 9850 QUERY
+ENTRY_BEGIN
+RAW
+b6b964d95010fae2034b0000000000000000
+ENTRY_END
+
+STEP 9860 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0cbb80000020405b401010402
+ENTRY_END
+
+STEP 9870 QUERY
+ENTRY_BEGIN
+RAW
+b6ba546e5010faf0ed430000000000000000
+ENTRY_END
+
+STEP 9880 QUERY
+ENTRY_BEGIN
+RAW
+b6ba546e5018faf0e7820000009b470d000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 9890 QUERY
+ENTRY_BEGIN
+RAW
+b6ba547c5011fae2eca50000000000000000
+ENTRY_END
+
+STEP 9900 QUERY
+ENTRY_BEGIN
+RAW
+b6b667965010446235110000000000000000
+ENTRY_END
+
+STEP 9910 QUERY
+ENTRY_BEGIN
+RAW
+b6ba547d5010fae2eca40000000000000000
+ENTRY_END
+
+STEP 9920 QUERY
+ENTRY_BEGIN
+RAW
+301400000001000000000000056162632d64026e6c00000f000100
+ENTRY_END
+
+STEP 9930 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033180000020405b401010402
+ENTRY_END
+
+STEP 9940 QUERY
+ENTRY_BEGIN
+RAW
+b6bc703d5010447034620000000000000000
+ENTRY_END
+
+STEP 9950 QUERY
+ENTRY_BEGIN
+RAW
+b6bc703d50184470bc270000008b5640000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff88403c510800030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000
+ENTRY_END
+
+STEP 9960 QUERY
+ENTRY_BEGIN
+RAW
+b6bc704b5011446233d40000000000000000
+ENTRY_END
+
+STEP 9970 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000f670000020405b401010402
+ENTRY_END
+
+STEP 9980 QUERY
+ENTRY_BEGIN
+RAW
+b6bc704c5010446233d30000000000000000
+ENTRY_END
+
+STEP 9990 QUERY
+ENTRY_BEGIN
+RAW
+b6bd08a65010447078470000000000000000
+ENTRY_END
+
+STEP 10000 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a9bc0000020405b401010402
+ENTRY_END
+
+STEP 10010 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000db0500000204059801010402
+ENTRY_END
+
+STEP 10020 QUERY
+ENTRY_BEGIN
+RAW
+b6bd08a650184470054e0000008b5200000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff88403c510800030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000
+ENTRY_END
+
+STEP 10030 QUERY
+ENTRY_BEGIN
+RAW
+b6bd08b45011446277b90000000000000000
+ENTRY_END
+
+STEP 10040 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400064bd0000020405b401010402
+ENTRY_END
+
+STEP 10050 QUERY
+ENTRY_BEGIN
+RAW
+b6be7cc050104320d0fe0000000000000000
+ENTRY_END
+
+STEP 10060 QUERY
+ENTRY_BEGIN
+RAW
+b6be7cc050184320edb00000008b052a000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 10070 QUERY
+ENTRY_BEGIN
+RAW
+b6bdaa435010447070ff0000000000000000
+ENTRY_END
+
+STEP 10080 QUERY
+ENTRY_BEGIN
+RAW
+b6bd08b55010446277b80000000000000000
+ENTRY_END
+
+STEP 10090 QUERY
+ENTRY_BEGIN
+RAW
+b6bf1e6b50104470b7d60000000000000000
+ENTRY_END
+
+STEP 10100 QUERY
+ENTRY_BEGIN
+RAW
+b6bdaa43501844701b0c0000008fee51000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 10110 QUERY
+ENTRY_BEGIN
+RAW
+b6bf1e6b5018447094dd0000008b0000000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff89403c510900030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000
+ENTRY_END
+
+STEP 10120 QUERY
+ENTRY_BEGIN
+RAW
+b6be7cce50114312d0700000000000000000
+ENTRY_END
+
+STEP 10130 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f0e400000204059801010402
+ENTRY_END
+
+STEP 10140 QUERY
+ENTRY_BEGIN
+RAW
+b6bf1e7950114462b7480000000000000000
+ENTRY_END
+
+STEP 10150 QUERY
+ENTRY_BEGIN
+RAW
+b6be7ccf50104312d06f0000000000000000
+ENTRY_END
+
+STEP 10160 QUERY
+ENTRY_BEGIN
+RAW
+b6c012365010432051660000000000000000
+ENTRY_END
+
+STEP 10170 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000502d0000020405b401010402
+ENTRY_END
+
+STEP 10180 QUERY
+ENTRY_BEGIN
+RAW
+b6bdaa5150114462706d0000000000000000
+ENTRY_END
+
+STEP 10190 QUERY
+ENTRY_BEGIN
+RAW
+b6c01236501843209f6a0000008bd4d8000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 10200 QUERY
+ENTRY_BEGIN
+RAW
+b6bf1e7a50104462b7470000000000000000
+ENTRY_END
+
+STEP 10210 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400049720000020405b401010402
+ENTRY_END
+
+STEP 10220 QUERY
+ENTRY_BEGIN
+RAW
+b6c0be4f5010447003610000000000000000
+ENTRY_END
+
+STEP 10230 QUERY
+ENTRY_BEGIN
+RAW
+b6c012445011431250d80000000000000000
+ENTRY_END
+
+STEP 10240 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400006b200000204059801010402
+ENTRY_END
+
+STEP 10250 QUERY
+ENTRY_BEGIN
+RAW
+b6c0be4f501844704c7700000098a800000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000
+ENTRY_END
+
+STEP 10260 QUERY
+ENTRY_BEGIN
+RAW
+b6bdaa5250104462706c0000000000000000
+ENTRY_END
+
+STEP 10270 QUERY
+ENTRY_BEGIN
+RAW
+b6c15b51501044705fa30000000000000000
+ENTRY_END
+
+STEP 10280 QUERY
+ENTRY_BEGIN
+RAW
+b6c0be5d5011446202c60000000000000000
+ENTRY_END
+
+STEP 10290 QUERY
+ENTRY_BEGIN
+RAW
+b6c012455010431250d70000000000000000
+ENTRY_END
+
+STEP 10300 QUERY
+ENTRY_BEGIN
+RAW
+b6c242d15010432036960000000000000000
+ENTRY_END
+
+STEP 10310 QUERY
+ENTRY_BEGIN
+RAW
+b6c15b515018447058630000008fa09f000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 10320 QUERY
+ENTRY_BEGIN
+RAW
+b6c242d1501843208bcc0000008bcda6000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 10330 QUERY
+ENTRY_BEGIN
+RAW
+b6c0be5e5010446202c50000000000000000
+ENTRY_END
+
+STEP 10340 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400051f60000020405b401010402
+ENTRY_END
+
+STEP 10350 QUERY
+ENTRY_BEGIN
+RAW
+b6c242df5011431236080000000000000000
+ENTRY_END
+
+STEP 10360 QUERY
+ENTRY_BEGIN
+RAW
+b6c2c4ef50104470fe870000000000000000
+ENTRY_END
+
+STEP 10370 QUERY
+ENTRY_BEGIN
+RAW
+b6c15b5f501144625f110000000000000000
+ENTRY_END
+
+STEP 10380 QUERY
+ENTRY_BEGIN
+RAW
+b6c2c4ef501844709c1f000000985480000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000
+ENTRY_END
+
+STEP 10390 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400028970000020405b401010402
+ENTRY_END
+
+STEP 10400 QUERY
+ENTRY_BEGIN
+RAW
+b6c242e05010431236070000000000000000
+ENTRY_END
+
+STEP 10410 QUERY
+ENTRY_BEGIN
+RAW
+b6c2c4fd50114462fdec0000000000000000
+ENTRY_END
+
+STEP 10420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c2030000020405b401010402
+ENTRY_END
+
+STEP 10430 QUERY
+ENTRY_BEGIN
+RAW
+b6c15b60501044625f100000000000000000
+ENTRY_END
+
+STEP 10440 QUERY
+ENTRY_BEGIN
+RAW
+b6c34b44501044704ed30000000000000000
+ENTRY_END
+
+STEP 10450 QUERY
+ENTRY_BEGIN
+RAW
+b6c3f5a6501044703ddd0000000000000000
+ENTRY_END
+
+STEP 10460 QUERY
+ENTRY_BEGIN
+RAW
+b6c34b44501844702f4c0000008fb8e6000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000
+ENTRY_END
+
+STEP 10470 QUERY
+ENTRY_BEGIN
+RAW
+b6c3f5a650184470517400000098de80000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000
+ENTRY_END
+
+STEP 10480 QUERY
+ENTRY_BEGIN
+RAW
+b6c2c4fe50104462fdeb0000000000000000
+ENTRY_END
+
+STEP 10490 QUERY
+ENTRY_BEGIN
+RAW
+b6c3f5b4501144623d420000000000000000
+ENTRY_END
+
+STEP 10500 QUERY
+ENTRY_BEGIN
+RAW
+b6c34b52501144624e410000000000000000
+ENTRY_END
+
+STEP 10510 QUERY
+ENTRY_BEGIN
+RAW
+b6c3f5b5501044623d410000000000000000
+ENTRY_END
+
+STEP 10520 QUERY
+ENTRY_BEGIN
+RAW
+b6c34b53501044624e400000000000000000
+ENTRY_END
+
+STEP 10530 QUERY
+ENTRY_BEGIN
+RAW
+b69faca65018faf061d40000008dc500000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd1a403c4e9a00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 10540 QUERY
+ENTRY_BEGIN
+RAW
+b69faca65018faf061d40000008dc500000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd1a403c4e9a00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 10550 QUERY
+ENTRY_BEGIN
+RAW
+b69facb45011fae20a940000000000000000
+ENTRY_END
+
+STEP 10560 QUERY
+ENTRY_BEGIN
+RAW
+b69facb55010fae20a930000000000000000
+ENTRY_END
+
+STEP 10570 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b64800000204057a01010402
+ENTRY_END
+
+STEP 10580 QUERY
+ENTRY_BEGIN
+RAW
+b6c93a3c5010fbecf0c00000000000000000
+ENTRY_END
+
+STEP 10590 QUERY
+ENTRY_BEGIN
+RAW
+b6c93a3c5018fbecb7d2000000934464000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 10600 QUERY
+ENTRY_BEGIN
+RAW
+b6c93a4a5011fbdef02a0000000000000000
+ENTRY_END
+
+STEP 10610 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c71200000204057a01010402
+ENTRY_END
+
+STEP 10620 QUERY
+ENTRY_BEGIN
+RAW
+b6c93a4b5010fbdef0290000000000000000
+ENTRY_END
+
+STEP 10630 QUERY
+ENTRY_BEGIN
+RAW
+b6c9f1515010fbec4a750000000000000000
+ENTRY_END
+
+STEP 10640 QUERY
+ENTRY_BEGIN
+RAW
+b6c9f1515018fbec5e5f00000093f88c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 10650 QUERY
+ENTRY_BEGIN
+RAW
+b6c9f15f5011fbde49df0000000000000000
+ENTRY_END
+
+STEP 10660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e90c00000204057a01010402
+ENTRY_END
+
+STEP 10670 QUERY
+ENTRY_BEGIN
+RAW
+b6c9f1605010fbde49de0000000000000000
+ENTRY_END
+
+STEP 10680 QUERY
+ENTRY_BEGIN
+RAW
+b6cab1035010fbecacbc0000000000000000
+ENTRY_END
+
+STEP 10690 QUERY
+ENTRY_BEGIN
+RAW
+b6cab1035018fbec0c7f00000093acb4000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 10700 QUERY
+ENTRY_BEGIN
+RAW
+b6cab1115011fbdeac260000000000000000
+ENTRY_END
+
+STEP 10710 QUERY
+ENTRY_BEGIN
+RAW
+b6cab1125010fbdeac250000000000000000
+ENTRY_END
+
+STEP 10720 QUERY
+ENTRY_BEGIN
+RAW
+b6af01195018faf0d037000000948757000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd46403c4ec60003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000
+ENTRY_END
+
+STEP 10730 QUERY
+ENTRY_BEGIN
+RAW
+b6af01275011fae23ca30000000000000000
+ENTRY_END
+
+STEP 10740 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b1b20000020405b401010402
+ENTRY_END
+
+STEP 10750 QUERY
+ENTRY_BEGIN
+RAW
+b6af01285010fae23ca20000000000000000
+ENTRY_END
+
+STEP 10760 QUERY
+ENTRY_BEGIN
+RAW
+b6cd10ad5010faf016ec0000000000000000
+ENTRY_END
+
+STEP 10770 QUERY
+ENTRY_BEGIN
+RAW
+b6cd10ad5018faf0499600000094e1aa000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd49403c4ec90003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000
+ENTRY_END
+
+STEP 10780 QUERY
+ENTRY_BEGIN
+RAW
+b6cd10bb5011fae216550000000000000000
+ENTRY_END
+
+STEP 10790 QUERY
+ENTRY_BEGIN
+RAW
+b6cd10bc5010fae216540000000000000000
+ENTRY_END
+
+STEP 10800 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400090d30000020405b401010402
+ENTRY_END
+
+STEP 10810 QUERY
+ENTRY_BEGIN
+RAW
+b6cda384501008009b350000000000000000
+ENTRY_END
+
+STEP 10820 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0a8680000020405b401010402
+ENTRY_END
+
+STEP 10830 QUERY
+ENTRY_BEGIN
+RAW
+b6cda384501044705ec50000000000000000
+ENTRY_END
+
+STEP 10840 QUERY
+ENTRY_BEGIN
+RAW
+b6ce7def5010faf0a05e0000000000000000
+ENTRY_END
+
+STEP 10850 QUERY
+ENTRY_BEGIN
+RAW
+b6ce7def5018faf0e2720000008b24c2000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000
+ENTRY_END
+
+STEP 10860 QUERY
+ENTRY_BEGIN
+RAW
+b6cda384501844708c0d0000009b7900000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf3403c4e7300030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000
+ENTRY_END
+
+STEP 10870 QUERY
+ENTRY_BEGIN
+RAW
+b6ce7dfd5011fae29fd00000000000000000
+ENTRY_END
+
+STEP 10880 QUERY
+ENTRY_BEGIN
+RAW
+b6ce7dfe5010fae29fcf0000000000000000
+ENTRY_END
+
+STEP 10890 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0fa060000020405b401010402
+ENTRY_END
+
+STEP 10900 QUERY
+ENTRY_BEGIN
+RAW
+b6cda392501144625e270000000000000000
+ENTRY_END
+
+STEP 10910 QUERY
+ENTRY_BEGIN
+RAW
+b6cf35215010faf03aca0000000000000000
+ENTRY_END
+
+STEP 10920 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400097f50000020405b401010402
+ENTRY_END
+
+STEP 10930 QUERY
+ENTRY_BEGIN
+RAW
+b6cf35215018faf0e0430000008bc35c000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000
+ENTRY_END
+
+STEP 10940 QUERY
+ENTRY_BEGIN
+RAW
+b6cf352f5011fae23a3c0000000000000000
+ENTRY_END
+
+STEP 10950 QUERY
+ENTRY_BEGIN
+RAW
+b6cda393501044625e260000000000000000
+ENTRY_END
+
+STEP 10960 QUERY
+ENTRY_BEGIN
+RAW
+b6cfdbce501008006a0b0000000000000000
+ENTRY_END
+
+STEP 10970 QUERY
+ENTRY_BEGIN
+RAW
+b6cfdbce501044702d9b0000000000000000
+ENTRY_END
+
+STEP 10980 QUERY
+ENTRY_BEGIN
+RAW
+b6cf35305010fae23a3b0000000000000000
+ENTRY_END
+
+STEP 10990 QUERY
+ENTRY_BEGIN
+RAW
+b6cfdbce5018447011640000009bc180000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf4403c4e7400030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000
+ENTRY_END
+
+STEP 11000 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf04c930000020405b401010402
+ENTRY_END
+
+STEP 11010 QUERY
+ENTRY_BEGIN
+RAW
+b6d071415010faf051350000000000000000
+ENTRY_END
+
+STEP 11020 QUERY
+ENTRY_BEGIN
+RAW
+b6d071415018faf08e770000008b2b94000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000
+ENTRY_END
+
+STEP 11030 QUERY
+ENTRY_BEGIN
+RAW
+b6d0714f5011fae250a70000000000000000
+ENTRY_END
+
+STEP 11040 QUERY
+ENTRY_BEGIN
+RAW
+b6cfdbdc501144622cfd0000000000000000
+ENTRY_END
+
+STEP 11050 QUERY
+ENTRY_BEGIN
+RAW
+b6d071505010fae250a60000000000000000
+ENTRY_END
+
+STEP 11060 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab920000020405b401010402
+ENTRY_END
+
+STEP 11070 QUERY
+ENTRY_BEGIN
+RAW
+b6cfdbdd501044622cfc0000000000000000
+ENTRY_END
+
+STEP 11080 QUERY
+ENTRY_BEGIN
+RAW
+b6d1320d5010080027680000000000000000
+ENTRY_END
+
+STEP 11090 QUERY
+ENTRY_BEGIN
+RAW
+b6d1320d50104470eaf70000000000000000
+ENTRY_END
+
+STEP 11100 QUERY
+ENTRY_BEGIN
+RAW
+b6d1320d50184470d5800000009bbac0000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf4403c4e7400030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000
+ENTRY_END
+
+STEP 11110 QUERY
+ENTRY_BEGIN
+RAW
+b6d1321b50114462ea590000000000000000
+ENTRY_END
+
+STEP 11120 QUERY
+ENTRY_BEGIN
+RAW
+b6d1321c50104462ea580000000000000000
+ENTRY_END
+
+STEP 11130 QUERY
+ENTRY_BEGIN
+RAW
+301500000001000000000000056162632d64026e6c00000f000100
+ENTRY_END
+
+STEP 11140 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400082ad0000020405b401010402
+ENTRY_END
+
+STEP 11150 QUERY
+ENTRY_BEGIN
+RAW
+b6d481b85010447072640000000000000000
+ENTRY_END
+
+STEP 11160 QUERY
+ENTRY_BEGIN
+RAW
+b6d481b85010447072640000000000000000
+ENTRY_END
+
+STEP 11170 QUERY
+ENTRY_BEGIN
+RAW
+b6d481b8501844700b7c000000909cca000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 11180 QUERY
+ENTRY_BEGIN
+RAW
+b6d481c65011446271d10000000000000000
+ENTRY_END
+
+STEP 11190 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008dc10000020405b401010402
+ENTRY_END
+
+STEP 11200 QUERY
+ENTRY_BEGIN
+RAW
+b6d481c75010446271d00000000000000000
+ENTRY_END
+
+STEP 11210 QUERY
+ENTRY_BEGIN
+RAW
+b6d481c75010446271d00000000000000000
+ENTRY_END
+
+STEP 11220 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f37501044709ff60000000000000000
+ENTRY_END
+
+STEP 11230 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f37501044709ff60000000000000000
+ENTRY_END
+
+STEP 11240 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f37501844703a11000000909cc8000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 11250 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f45501144629f630000000000000000
+ENTRY_END
+
+STEP 11260 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bf550000020405b401010402
+ENTRY_END
+
+STEP 11270 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f46501044629f620000000000000000
+ENTRY_END
+
+STEP 11280 QUERY
+ENTRY_BEGIN
+RAW
+b6d75f46501044629f620000000000000000
+ENTRY_END
+
+STEP 11290 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c5e50104470e4620000000000000000
+ENTRY_END
+
+STEP 11300 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c5e50104470e4620000000000000000
+ENTRY_END
+
+STEP 11310 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c5e501844707e7f000000909cc6000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 11320 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c6c50114462e3cf0000000000000000
+ENTRY_END
+
+STEP 11330 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c6d50104462e3ce0000000000000000
+ENTRY_END
+
+STEP 11340 QUERY
+ENTRY_BEGIN
+RAW
+b6d84c6d50104462e3ce0000000000000000
+ENTRY_END
+
+STEP 11350 QUERY
+ENTRY_BEGIN
+RAW
+19400000000100000000000007616e74656e6e61026e6c00000f0001c0
+ENTRY_END
+
+STEP 11360 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002fa400000204057a01010402
+ENTRY_END
+
+STEP 11370 QUERY
+ENTRY_BEGIN
+RAW
+b6d9d267501041b8d1240000000000000000
+ENTRY_END
+
+STEP 11380 QUERY
+ENTRY_BEGIN
+RAW
+b6d9d267501841b8b41f000000945b40000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 11390 QUERY
+ENTRY_BEGIN
+RAW
+b6d9d275501141aad08d0000000000000000
+ENTRY_END
+
+STEP 11400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400024ae00000204057a01010402
+ENTRY_END
+
+STEP 11410 QUERY
+ENTRY_BEGIN
+RAW
+b6d9d276501041aad08c0000000000000000
+ENTRY_END
+
+STEP 11420 QUERY
+ENTRY_BEGIN
+RAW
+b6da64c0501041b833d50000000000000000
+ENTRY_END
+
+STEP 11430 QUERY
+ENTRY_BEGIN
+RAW
+b6da64c0501841b84611000000942d00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 11440 QUERY
+ENTRY_BEGIN
+RAW
+b6da64ce501141aa333e0000000000000000
+ENTRY_END
+
+STEP 11450 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000572500000204057a01010402
+ENTRY_END
+
+STEP 11460 QUERY
+ENTRY_BEGIN
+RAW
+b6da64cf501041aa333d0000000000000000
+ENTRY_END
+
+STEP 11470 QUERY
+ENTRY_BEGIN
+RAW
+b6db160b501041b8b5000000000000000000
+ENTRY_END
+
+STEP 11480 QUERY
+ENTRY_BEGIN
+RAW
+b6db160b501841b8ff3b00000094f500000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 11490 QUERY
+ENTRY_BEGIN
+RAW
+b6db1619501141aab4690000000000000000
+ENTRY_END
+
+STEP 11500 QUERY
+ENTRY_BEGIN
+RAW
+b6db161a501041aab4680000000000000000
+ENTRY_END
+
+STEP 11510 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009bd60000020405b401010402
+ENTRY_END
+
+STEP 11520 QUERY
+ENTRY_BEGIN
+RAW
+b6dcb7745010447055c90000000000000000
+ENTRY_END
+
+STEP 11530 QUERY
+ENTRY_BEGIN
+RAW
+b6dcb77450184470b7940000008af31e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11540 QUERY
+ENTRY_BEGIN
+RAW
+b6dcb78250114462553c0000000000000000
+ENTRY_END
+
+STEP 11550 QUERY
+ENTRY_BEGIN
+RAW
+b6dcb78350104462553b0000000000000000
+ENTRY_END
+
+STEP 11560 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000de930000020405b401010402
+ENTRY_END
+
+STEP 11570 QUERY
+ENTRY_BEGIN
+RAW
+b6dd42c2501044700d380000000000000000
+ENTRY_END
+
+STEP 11580 QUERY
+ENTRY_BEGIN
+RAW
+b6dd42c2501844709dac0000008ac576000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11590 QUERY
+ENTRY_BEGIN
+RAW
+b6dd42d0501144620cab0000000000000000
+ENTRY_END
+
+STEP 11600 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002fe800000204056401010402
+ENTRY_END
+
+STEP 11610 QUERY
+ENTRY_BEGIN
+RAW
+b6dd42d1501044620caa0000000000000000
+ENTRY_END
+
+STEP 11620 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d64a0000020405b401010402
+ENTRY_END
+
+STEP 11630 QUERY
+ENTRY_BEGIN
+RAW
+b6de7c0150104470cbae0000000000000000
+ENTRY_END
+
+STEP 11640 QUERY
+ENTRY_BEGIN
+RAW
+b6dde32a501040b0c1930000000000000000
+ENTRY_END
+
+STEP 11650 QUERY
+ENTRY_BEGIN
+RAW
+b6de7c015018447089cb0000008a97ce000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11660 QUERY
+ENTRY_BEGIN
+RAW
+b6dde32a501840b028ec000000953809000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 11670 QUERY
+ENTRY_BEGIN
+RAW
+b6de7c0f50114462cb210000000000000000
+ENTRY_END
+
+STEP 11680 QUERY
+ENTRY_BEGIN
+RAW
+b6dde338501140a2c0fb0000000000000000
+ENTRY_END
+
+STEP 11690 QUERY
+ENTRY_BEGIN
+RAW
+b6de7c1050104462cb200000000000000000
+ENTRY_END
+
+STEP 11700 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000beb100000204056401010402
+ENTRY_END
+
+STEP 11710 QUERY
+ENTRY_BEGIN
+RAW
+b6dde339501040a2c0fa0000000000000000
+ENTRY_END
+
+STEP 11720 QUERY
+ENTRY_BEGIN
+RAW
+b6df39ac501040b0f9d90000000000000000
+ENTRY_END
+
+STEP 11730 QUERY
+ENTRY_BEGIN
+RAW
+b6df39ac501840b0a77000000095f2cb000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 11740 QUERY
+ENTRY_BEGIN
+RAW
+b6df39ba501140a2f9410000000000000000
+ENTRY_END
+
+STEP 11750 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008b4100000204056401010402
+ENTRY_END
+
+STEP 11760 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e8b40000020405b401010402
+ENTRY_END
+
+STEP 11770 QUERY
+ENTRY_BEGIN
+RAW
+b6df39bb501040a2f9400000000000000000
+ENTRY_END
+
+STEP 11780 QUERY
+ENTRY_BEGIN
+RAW
+b6e211a950104470486d0000000000000000
+ENTRY_END
+
+STEP 11790 QUERY
+ENTRY_BEGIN
+RAW
+b6e12eb0501040b0d1630000000000000000
+ENTRY_END
+
+STEP 11800 QUERY
+ENTRY_BEGIN
+RAW
+b6e12eb0501840b0219a00000095502c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 11810 QUERY
+ENTRY_BEGIN
+RAW
+b6e211a95018447060d90000008a3c7e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11820 QUERY
+ENTRY_BEGIN
+RAW
+b6e211b75011446247e00000000000000000
+ENTRY_END
+
+STEP 11830 QUERY
+ENTRY_BEGIN
+RAW
+b6e12ebe501140a2d0cb0000000000000000
+ENTRY_END
+
+STEP 11840 QUERY
+ENTRY_BEGIN
+RAW
+b6e211b85010446247df0000000000000000
+ENTRY_END
+
+STEP 11850 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f6aa0000020405b401010402
+ENTRY_END
+
+STEP 11860 QUERY
+ENTRY_BEGIN
+RAW
+b6e2fd18501044706af30000000000000000
+ENTRY_END
+
+STEP 11870 QUERY
+ENTRY_BEGIN
+RAW
+b6e12ebf501040a2d0ca0000000000000000
+ENTRY_END
+
+STEP 11880 QUERY
+ENTRY_BEGIN
+RAW
+b6e2fd1850184470bff90000008a00e5000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11890 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf077cb00000204057a01010402
+ENTRY_END
+
+STEP 11900 QUERY
+ENTRY_BEGIN
+RAW
+b6e2fd26501144626a660000000000000000
+ENTRY_END
+
+STEP 11910 QUERY
+ENTRY_BEGIN
+RAW
+b6e3b1255010fbec3b400000000000000000
+ENTRY_END
+
+STEP 11920 QUERY
+ENTRY_BEGIN
+RAW
+b6e3b1255018fbec7f23000000910700000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 11930 QUERY
+ENTRY_BEGIN
+RAW
+b6e2fd27501044626a650000000000000000
+ENTRY_END
+
+STEP 11940 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240003b130000020405b401010402
+ENTRY_END
+
+STEP 11950 QUERY
+ENTRY_BEGIN
+RAW
+b6e476715010447036010000000000000000
+ENTRY_END
+
+STEP 11960 QUERY
+ENTRY_BEGIN
+RAW
+b6e3b1335011fbde3aac0000000000000000
+ENTRY_END
+
+STEP 11970 QUERY
+ENTRY_BEGIN
+RAW
+b6e4767150184470b8ae0000008ad33d000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000
+ENTRY_END
+
+STEP 11980 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf053c700000204057a01010402
+ENTRY_END
+
+STEP 11990 QUERY
+ENTRY_BEGIN
+RAW
+b6e3b1345010fbde3aab0000000000000000
+ENTRY_END
+
+STEP 12000 QUERY
+ENTRY_BEGIN
+RAW
+b6e4767f5011446235740000000000000000
+ENTRY_END
+
+STEP 12010 QUERY
+ENTRY_BEGIN
+RAW
+b6e4f3175010fbecd5480000000000000000
+ENTRY_END
+
+STEP 12020 QUERY
+ENTRY_BEGIN
+RAW
+b6e476805010446235730000000000000000
+ENTRY_END
+
+STEP 12030 QUERY
+ENTRY_BEGIN
+RAW
+b6e4f3175018fbec01ad000000911f80000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 12040 QUERY
+ENTRY_BEGIN
+RAW
+b6e4f3255011fbded4b40000000000000000
+ENTRY_END
+
+STEP 12050 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06dd600000204057a01010402
+ENTRY_END
+
+STEP 12060 QUERY
+ENTRY_BEGIN
+RAW
+b6e4f3265010fbded4b30000000000000000
+ENTRY_END
+
+STEP 12070 QUERY
+ENTRY_BEGIN
+RAW
+b6e56de55010fbec74890000000000000000
+ENTRY_END
+
+STEP 12080 QUERY
+ENTRY_BEGIN
+RAW
+b6e56de55018fbececec00000091d380000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000
+ENTRY_END
+
+STEP 12090 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238f39c0000020405b40000
+ENTRY_END
+
+STEP 12100 QUERY
+ENTRY_BEGIN
+RAW
+b6e63c915010223817d20000000000000000
+ENTRY_END
+
+STEP 12110 QUERY
+ENTRY_BEGIN
+RAW
+b6e63c9150182238da820000001c90e30000000100000000000007636f6d616e6574026e6c0000060001
+ENTRY_END
+
+STEP 12120 QUERY
+ENTRY_BEGIN
+RAW
+b6e63cf15010223817540000000000000000
+ENTRY_END
+
+STEP 12130 QUERY
+ENTRY_BEGIN
+RAW
+b6e63cf15011223817530000000000000000
+ENTRY_END
+
+STEP 12140 QUERY
+ENTRY_BEGIN
+RAW
+b6e63cf25010223817520000000000000000
+ENTRY_END
+
+STEP 12150 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf03c730000020405b401010402
+ENTRY_END
+
+STEP 12160 QUERY
+ENTRY_BEGIN
+RAW
+b6e7f9de5010faf0b8600000000000000000
+ENTRY_END
+
+STEP 12170 QUERY
+ENTRY_BEGIN
+RAW
+b6e7f9de5018faf0c19a0000008b27c9000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000
+ENTRY_END
+
+STEP 12180 QUERY
+ENTRY_BEGIN
+RAW
+b6e7f9ec5011fae2b7d20000000000000000
+ENTRY_END
+
+STEP 12190 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf034940000020405b401010402
+ENTRY_END
+
+STEP 12200 QUERY
+ENTRY_BEGIN
+RAW
+b6e7f9ed5010fae2b7d10000000000000000
+ENTRY_END
+
+STEP 12210 QUERY
+ENTRY_BEGIN
+RAW
+b6e8bf205010faf0eb3e0000000000000000
+ENTRY_END
+
+STEP 12220 QUERY
+ENTRY_BEGIN
+RAW
+b6e8bf205018faf0b5f60000008b674c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000
+ENTRY_END
+
+STEP 12230 QUERY
+ENTRY_BEGIN
+RAW
+b6e8bf2e5011fae2eab00000000000000000
+ENTRY_END
+
+STEP 12240 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0aa3b0000020405b401010402
+ENTRY_END
+
+STEP 12250 QUERY
+ENTRY_BEGIN
+RAW
+b6e8bf2f5010fae2eaaf0000000000000000
+ENTRY_END
+
+STEP 12260 QUERY
+ENTRY_BEGIN
+RAW
+b6e9a47b5010faf07b8a0000000000000000
+ENTRY_END
+
+STEP 12270 QUERY
+ENTRY_BEGIN
+RAW
+b6e9a47b5018faf0b67b0000008bf712000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000
+ENTRY_END
+
+STEP 12280 QUERY
+ENTRY_BEGIN
+RAW
+b6e9a4895011fae27afc0000000000000000
+ENTRY_END
+
+STEP 12290 QUERY
+ENTRY_BEGIN
+RAW
+b6e9a48a5010fae27afb0000000000000000
+ENTRY_END
+
+STEP 12300 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc0080570000020405b401010402
+ENTRY_END
+
+STEP 12310 QUERY
+ENTRY_BEGIN
+RAW
+b6ebe7a65010fc000e790000000000000000
+ENTRY_END
+
+STEP 12320 QUERY
+ENTRY_BEGIN
+RAW
+b6ebe7a65004fc000e850000000000000000
+ENTRY_END
+
+STEP 12330 QUERY
+ENTRY_BEGIN
+RAW
+b6e56df35011fbde73f50000000000000000
+ENTRY_END
+
+STEP 12340 QUERY
+ENTRY_BEGIN
+RAW
+b6e56df45010fbde73f40000000000000000
+ENTRY_END
+
+STEP 12350 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001ad30000020405b401010402
+ENTRY_END
+
+STEP 12360 QUERY
+ENTRY_BEGIN
+RAW
+b6eddfed50104470ac3b0000000000000000
+ENTRY_END
+
+STEP 12370 QUERY
+ENTRY_BEGIN
+RAW
+b6eddfed50104470ac3b0000000000000000
+ENTRY_END
+
+STEP 12380 QUERY
+ENTRY_BEGIN
+RAW
+b6eddfed5018447026ab00000090b572000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff80403c51000003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 12390 QUERY
+ENTRY_BEGIN
+RAW
+b6eddffb50114462aba80000000000000000
+ENTRY_END
+
+STEP 12400 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d8ab0000020405b401010402
+ENTRY_END
+
+STEP 12410 QUERY
+ENTRY_BEGIN
+RAW
+b6eddffc50104462aba70000000000000000
+ENTRY_END
+
+STEP 12420 QUERY
+ENTRY_BEGIN
+RAW
+b6eddffc50104462aba70000000000000000
+ENTRY_END
+
+STEP 12430 QUERY
+ENTRY_BEGIN
+RAW
+b6eed8705010447071900000000000000000
+ENTRY_END
+
+STEP 12440 QUERY
+ENTRY_BEGIN
+RAW
+b6eed8705010447071900000000000000000
+ENTRY_END
+
+STEP 12450 QUERY
+ENTRY_BEGIN
+RAW
+b6eed87050184470e4c000000090bdb2000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff80403c51000003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 12460 QUERY
+ENTRY_BEGIN
+RAW
+b6eed87e5011446270fd0000000000000000
+ENTRY_END
+
+STEP 12470 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000edab0000020405b401010402
+ENTRY_END
+
+STEP 12480 QUERY
+ENTRY_BEGIN
+RAW
+b6eed87f5010446270fc0000000000000000
+ENTRY_END
+
+STEP 12490 QUERY
+ENTRY_BEGIN
+RAW
+b6eed87f5010446270fc0000000000000000
+ENTRY_END
+
+STEP 12500 QUERY
+ENTRY_BEGIN
+RAW
+b6f167c150104470f73c0000000000000000
+ENTRY_END
+
+STEP 12510 QUERY
+ENTRY_BEGIN
+RAW
+b6f167c150104470f73c0000000000000000
+ENTRY_END
+
+STEP 12520 QUERY
+ENTRY_BEGIN
+RAW
+b6f167c150184470686f00000090bdb0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff81403c51010003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000
+ENTRY_END
+
+STEP 12530 QUERY
+ENTRY_BEGIN
+RAW
+b6f167cf50114462f6a90000000000000000
+ENTRY_END
+
+STEP 12540 QUERY
+ENTRY_BEGIN
+RAW
+b6f167d050104462f6a80000000000000000
+ENTRY_END
+
+STEP 12550 QUERY
+ENTRY_BEGIN
+RAW
+b6f167d050104462f6a80000000000000000
+ENTRY_END
+
+STEP 12560 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bf770000020405b401010402
+ENTRY_END
+
+STEP 12570 QUERY
+ENTRY_BEGIN
+RAW
+b6f24c8350104470e4450000000000000000
+ENTRY_END
+
+STEP 12580 QUERY
+ENTRY_BEGIN
+RAW
+b6f24c8350184470a15400000096b1a8000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 12590 QUERY
+ENTRY_BEGIN
+RAW
+b6f24c9150114462e3ac0000000000000000
+ENTRY_END
+
+STEP 12600 QUERY
+ENTRY_BEGIN
+RAW
+b6f24c9250104462e3ab0000000000000000
+ENTRY_END
+
+STEP 12610 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f0f20000020405b401010402
+ENTRY_END
+
+STEP 12620 QUERY
+ENTRY_BEGIN
+RAW
+b6f339b750104470288c0000000000000000
+ENTRY_END
+
+STEP 12630 QUERY
+ENTRY_BEGIN
+RAW
+b6f339b750184470906c0000009607d8000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 12640 QUERY
+ENTRY_BEGIN
+RAW
+b6f339c55011446227f30000000000000000
+ENTRY_END
+
+STEP 12650 QUERY
+ENTRY_BEGIN
+RAW
+b6f339c65010446227f20000000000000000
+ENTRY_END
+
+STEP 12660 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004f5f0000020405b401010402
+ENTRY_END
+
+STEP 12670 QUERY
+ENTRY_BEGIN
+RAW
+b6f41c4a50104470a4640000000000000000
+ENTRY_END
+
+STEP 12680 QUERY
+ENTRY_BEGIN
+RAW
+b6f41c4a50184470d9f4000000963a28000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 12690 QUERY
+ENTRY_BEGIN
+RAW
+b6f41c5850114462a3cb0000000000000000
+ENTRY_END
+
+STEP 12700 QUERY
+ENTRY_BEGIN
+RAW
+b6f41c5950104462a3ca0000000000000000
+ENTRY_END
+
+STEP 12710 QUERY
+ENTRY_BEGIN
+RAW
+00000000700222389b1f00000204057801010402
+ENTRY_END
+
+STEP 12720 QUERY
+ENTRY_BEGIN
+RAW
+b6f6588a50102648b4060000000000000000
+ENTRY_END
+
+STEP 12730 QUERY
+ENTRY_BEGIN
+RAW
+b6f6588a50182648a8900000008d3800000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 12740 QUERY
+ENTRY_BEGIN
+RAW
+b6f658985011263ab3760000000000000000
+ENTRY_END
+
+STEP 12750 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238a91f00000204057801010402
+ENTRY_END
+
+STEP 12760 QUERY
+ENTRY_BEGIN
+RAW
+b6f658995010263ab3750000000000000000
+ENTRY_END
+
+STEP 12770 QUERY
+ENTRY_BEGIN
+RAW
+b6f74bfb50102648ce940000000000000000
+ENTRY_END
+
+STEP 12780 QUERY
+ENTRY_BEGIN
+RAW
+b6f74bfb50182648241f0000008dd800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 12790 QUERY
+ENTRY_BEGIN
+RAW
+b6f74c095011263ace040000000000000000
+ENTRY_END
+
+STEP 12800 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238c24f00000204057801010402
+ENTRY_END
+
+STEP 12810 QUERY
+ENTRY_BEGIN
+RAW
+b6f74c0a5010263ace030000000000000000
+ENTRY_END
+
+STEP 12820 QUERY
+ENTRY_BEGIN
+RAW
+b6f99ca65010264897170000000000000000
+ENTRY_END
+
+STEP 12830 QUERY
+ENTRY_BEGIN
+RAW
+b6f99ca6501826484ca20000008d7800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 12840 QUERY
+ENTRY_BEGIN
+RAW
+b6f99cb45011263a96870000000000000000
+ENTRY_END
+
+STEP 12850 QUERY
+ENTRY_BEGIN
+RAW
+b6f99cb55010263a96860000000000000000
+ENTRY_END
+
+STEP 12860 QUERY
+ENTRY_BEGIN
+RAW
+000000005014000081b30000636b6f000000
+ENTRY_END
+
+STEP 12870 QUERY
+ENTRY_BEGIN
+RAW
+0000000050140000f51e0000636b6f000000
+ENTRY_END
+
+STEP 12880 QUERY
+ENTRY_BEGIN
+RAW
+0000000050140000c43b0000636b6f000000
+ENTRY_END
+
+STEP 12890 QUERY
+ENTRY_BEGIN
+RAW
+00000000600222386cca0000020405b40000
+ENTRY_END
+
+STEP 12900 QUERY
+ENTRY_BEGIN
+RAW
+b6fbb85a5010223815210000000000000000
+ENTRY_END
+
+STEP 12910 QUERY
+ENTRY_BEGIN
+RAW
+b6fbb85a50182238a12f0000001e88140000000100000000000009766f6f67642d6b6f6b026e6c0000060001
+ENTRY_END
+
+STEP 12920 QUERY
+ENTRY_BEGIN
+RAW
+b6fbb8bc50102238149f0000000000000000
+ENTRY_END
+
+STEP 12930 QUERY
+ENTRY_BEGIN
+RAW
+b6fbb8bc50112238149e0000000000000000
+ENTRY_END
+
+STEP 12940 QUERY
+ENTRY_BEGIN
+RAW
+b6fbb8bd50102238149d0000000000000000
+ENTRY_END
+
+STEP 12950 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238dfe20000020405b40000
+ENTRY_END
+
+STEP 12960 QUERY
+ENTRY_BEGIN
+RAW
+b6fc71d950102238ceb90000000000000000
+ENTRY_END
+
+STEP 12970 QUERY
+ENTRY_BEGIN
+RAW
+b6fc71d950182238f94a0000002502290000000100000000000010766974616c6974656974736b756e6465026e6c0000060001
+ENTRY_END
+
+STEP 12980 QUERY
+ENTRY_BEGIN
+RAW
+b6fc724d50102238ce1e0000000000000000
+ENTRY_END
+
+STEP 12990 QUERY
+ENTRY_BEGIN
+RAW
+b6fc724d50112238ce1d0000000000000000
+ENTRY_END
+
+STEP 13000 QUERY
+ENTRY_BEGIN
+RAW
+b6fc724e50102238ce1c0000000000000000
+ENTRY_END
+
+STEP 13010 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b9a300000204059801010402
+ENTRY_END
+
+STEP 13020 QUERY
+ENTRY_BEGIN
+RAW
+b6fe92d65010432099460000000000000000
+ENTRY_END
+
+STEP 13030 QUERY
+ENTRY_BEGIN
+RAW
+b6fe92d6501843209c2f000000851640000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 13040 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc0094110000020405b401010402
+ENTRY_END
+
+STEP 13050 QUERY
+ENTRY_BEGIN
+RAW
+b6fe92e45011431298be0000000000000000
+ENTRY_END
+
+STEP 13060 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400067be00000204059801010402
+ENTRY_END
+
+STEP 13070 QUERY
+ENTRY_BEGIN
+RAW
+000000006002223858200000020405b40000
+ENTRY_END
+
+STEP 13080 QUERY
+ENTRY_BEGIN
+RAW
+b6fe92e55010431298bd0000000000000000
+ENTRY_END
+
+STEP 13090 QUERY
+ENTRY_BEGIN
+RAW
+b70041ea50104320984b0000000000000000
+ENTRY_END
+
+STEP 13100 QUERY
+ENTRY_BEGIN
+RAW
+b701101d50102238a8ae0000000000000000
+ENTRY_END
+
+STEP 13110 QUERY
+ENTRY_BEGIN
+RAW
+b701101d50182238b793000000291b200000000100000000000014636f6d707574657272657061697263656e746572026e6c0000060001
+ENTRY_END
+
+STEP 13120 QUERY
+ENTRY_BEGIN
+RAW
+b70041ea50184320f17400000085c100000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 13130 QUERY
+ENTRY_BEGIN
+RAW
+b6ff4e015010fc00bbc40000000000000000
+ENTRY_END
+
+STEP 13140 QUERY
+ENTRY_BEGIN
+RAW
+b6ff4e015004fc00bbd00000000000000000
+ENTRY_END
+
+STEP 13150 QUERY
+ENTRY_BEGIN
+RAW
+b701108a50102238a8160000000000000000
+ENTRY_END
+
+STEP 13160 QUERY
+ENTRY_BEGIN
+RAW
+b701108a50112238a8150000000000000000
+ENTRY_END
+
+STEP 13170 QUERY
+ENTRY_BEGIN
+RAW
+b701108b50102238a8140000000000000000
+ENTRY_END
+
+STEP 13180 QUERY
+ENTRY_BEGIN
+RAW
+b70041f85011431297c30000000000000000
+ENTRY_END
+
+STEP 13190 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009fb600000204059801010402
+ENTRY_END
+
+STEP 13200 QUERY
+ENTRY_BEGIN
+RAW
+b70041f95010431297c20000000000000000
+ENTRY_END
+
+STEP 13210 QUERY
+ENTRY_BEGIN
+RAW
+b7018bc85010432086640000000000000000
+ENTRY_END
+
+STEP 13220 QUERY
+ENTRY_BEGIN
+RAW
+b7018bc8501843202e0e000000857280000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000
+ENTRY_END
+
+STEP 13230 QUERY
+ENTRY_BEGIN
+RAW
+b7018bd65011431285dc0000000000000000
+ENTRY_END
+
+STEP 13240 QUERY
+ENTRY_BEGIN
+RAW
+000000006002223866280000020405b40000
+ENTRY_END
+
+STEP 13250 QUERY
+ENTRY_BEGIN
+RAW
+b7018bd75010431285db0000000000000000
+ENTRY_END
+
+STEP 13260 QUERY
+ENTRY_BEGIN
+RAW
+b7020e2c50102238b8a60000000000000000
+ENTRY_END
+
+STEP 13270 QUERY
+ENTRY_BEGIN
+RAW
+b7020e2c50182238cf5c000000253225000000010000000000001065766f6c7574696f6e2d64657369676e026e6c0000060001
+ENTRY_END
+
+STEP 13280 QUERY
+ENTRY_BEGIN
+RAW
+b7020e9550102238b8160000000000000000
+ENTRY_END
+
+STEP 13290 QUERY
+ENTRY_BEGIN
+RAW
+b7020e9550112238b8150000000000000000
+ENTRY_END
+
+STEP 13300 QUERY
+ENTRY_BEGIN
+RAW
+b7020e9650102238b8140000000000000000
+ENTRY_END
+
+STEP 13310 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400090c60000020405b401010402
+ENTRY_END
+
+STEP 13320 QUERY
+ENTRY_BEGIN
+RAW
+b70494e8501044706d1d0000000000000000
+ENTRY_END
+
+STEP 13330 QUERY
+ENTRY_BEGIN
+RAW
+b70494e8501844709bfe0000008b7900000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 13340 QUERY
+ENTRY_BEGIN
+RAW
+b70494f6501144626c8f0000000000000000
+ENTRY_END
+
+STEP 13350 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400004750000020405b401010402
+ENTRY_END
+
+STEP 13360 QUERY
+ENTRY_BEGIN
+RAW
+b70494f7501044626c8e0000000000000000
+ENTRY_END
+
+STEP 13370 QUERY
+ENTRY_BEGIN
+RAW
+b705694f501044700c640000000000000000
+ENTRY_END
+
+STEP 13380 QUERY
+ENTRY_BEGIN
+RAW
+b705694f5018447094460000008b2100000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 13390 QUERY
+ENTRY_BEGIN
+RAW
+b705695d501144620bd60000000000000000
+ENTRY_END
+
+STEP 13400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400017e90000020405b401010402
+ENTRY_END
+
+STEP 13410 QUERY
+ENTRY_BEGIN
+RAW
+b705695e501044620bd50000000000000000
+ENTRY_END
+
+STEP 13420 QUERY
+ENTRY_BEGIN
+RAW
+b7061c44501044706ce20000000000000000
+ENTRY_END
+
+STEP 13430 QUERY
+ENTRY_BEGIN
+RAW
+b7061c4450184470b6c40000008b5f00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 13440 QUERY
+ENTRY_BEGIN
+RAW
+b7061c52501144626c540000000000000000
+ENTRY_END
+
+STEP 13450 QUERY
+ENTRY_BEGIN
+RAW
+b7061c53501044626c530000000000000000
+ENTRY_END
+
+STEP 13460 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0117200000204057a01010402
+ENTRY_END
+
+STEP 13470 QUERY
+ENTRY_BEGIN
+RAW
+b706a5135010fbece0d50000000000000000
+ENTRY_END
+
+STEP 13480 QUERY
+ENTRY_BEGIN
+RAW
+b706a5135018fbec03ff00000093d84c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 13490 QUERY
+ENTRY_BEGIN
+RAW
+b706a5215011fbdee03f0000000000000000
+ENTRY_END
+
+STEP 13500 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0127e00000204057a01010402
+ENTRY_END
+
+STEP 13510 QUERY
+ENTRY_BEGIN
+RAW
+b706a5225010fbdee03e0000000000000000
+ENTRY_END
+
+STEP 13520 QUERY
+ENTRY_BEGIN
+RAW
+b70783b25010fbec03420000000000000000
+ENTRY_END
+
+STEP 13530 QUERY
+ENTRY_BEGIN
+RAW
+b70783b25018fbec7344000000938c74000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 13540 QUERY
+ENTRY_BEGIN
+RAW
+b70783c05011fbde02ac0000000000000000
+ENTRY_END
+
+STEP 13550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0facb00000204057a01010402
+ENTRY_END
+
+STEP 13560 QUERY
+ENTRY_BEGIN
+RAW
+b70783c15010fbde02ab0000000000000000
+ENTRY_END
+
+STEP 13570 QUERY
+ENTRY_BEGIN
+RAW
+b70825495010fbec49f80000000000000000
+ENTRY_END
+
+STEP 13580 QUERY
+ENTRY_BEGIN
+RAW
+b70825495018fbec05d300000093409c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000
+ENTRY_END
+
+STEP 13590 QUERY
+ENTRY_BEGIN
+RAW
+b70825575011fbde49620000000000000000
+ENTRY_END
+
+STEP 13600 QUERY
+ENTRY_BEGIN
+RAW
+22fc000000010000000000000b6361726565726665766572026e6c00000f000100
+ENTRY_END
+
+STEP 13610 QUERY
+ENTRY_BEGIN
+RAW
+b70825585010fbde49610000000000000000
+ENTRY_END
+
+STEP 13620 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e78d0000020405b401010402
+ENTRY_END
+
+STEP 13630 QUERY
+ENTRY_BEGIN
+RAW
+b70d802c5010faf0dd070000000000000000
+ENTRY_END
+
+STEP 13640 QUERY
+ENTRY_BEGIN
+RAW
+b70d802c5018faf0dbdc000000962509000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000
+ENTRY_END
+
+STEP 13650 QUERY
+ENTRY_BEGIN
+RAW
+b70d803a5011fae2dc6e0000000000000000
+ENTRY_END
+
+STEP 13660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf053ff0000020405b401010402
+ENTRY_END
+
+STEP 13670 QUERY
+ENTRY_BEGIN
+RAW
+b70d803b5010fae2dc6d0000000000000000
+ENTRY_END
+
+STEP 13680 QUERY
+ENTRY_BEGIN
+RAW
+b70e3fda5010faf089ca0000000000000000
+ENTRY_END
+
+STEP 13690 QUERY
+ENTRY_BEGIN
+RAW
+b70e3fda5018faf0e04d00000096ce5b000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000
+ENTRY_END
+
+STEP 13700 QUERY
+ENTRY_BEGIN
+RAW
+b70e3fe85011fae289310000000000000000
+ENTRY_END
+
+STEP 13710 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf067a30000020405b401010402
+ENTRY_END
+
+STEP 13720 QUERY
+ENTRY_BEGIN
+RAW
+b70e3fe95010fae289300000000000000000
+ENTRY_END
+
+STEP 13730 QUERY
+ENTRY_BEGIN
+RAW
+b70f07c45010faf0d5830000000000000000
+ENTRY_END
+
+STEP 13740 QUERY
+ENTRY_BEGIN
+RAW
+b70f07c45018faf0907e0000009669e4000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000
+ENTRY_END
+
+STEP 13750 QUERY
+ENTRY_BEGIN
+RAW
+b70f07d25011fae2d4ea0000000000000000
+ENTRY_END
+
+STEP 13760 QUERY
+ENTRY_BEGIN
+RAW
+b70f07d35010fae2d4e90000000000000000
+ENTRY_END
+
+STEP 13770 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d69200000204055001010402
+ENTRY_END
+
+STEP 13780 QUERY
+ENTRY_BEGIN
+RAW
+b711831550104510c3ab0000000000000000
+ENTRY_END
+
+STEP 13790 QUERY
+ENTRY_BEGIN
+RAW
+b711831550184510e4a100000096a500000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 13800 QUERY
+ENTRY_BEGIN
+RAW
+b711832350114502c3120000000000000000
+ENTRY_END
+
+STEP 13810 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000542500000204055001010402
+ENTRY_END
+
+STEP 13820 QUERY
+ENTRY_BEGIN
+RAW
+b711832450104502c3110000000000000000
+ENTRY_END
+
+STEP 13830 QUERY
+ENTRY_BEGIN
+RAW
+b7125b4b5010451069070000000000000000
+ENTRY_END
+
+STEP 13840 QUERY
+ENTRY_BEGIN
+RAW
+b7125b4b5018451033fe00000096fc00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 13850 QUERY
+ENTRY_BEGIN
+RAW
+b7125b5950114502686e0000000000000000
+ENTRY_END
+
+STEP 13860 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000682c00000204055001010402
+ENTRY_END
+
+STEP 13870 QUERY
+ENTRY_BEGIN
+RAW
+b7125b5a50104502686d0000000000000000
+ENTRY_END
+
+STEP 13880 QUERY
+ENTRY_BEGIN
+RAW
+b71325bc50104510b29c0000000000000000
+ENTRY_END
+
+STEP 13890 QUERY
+ENTRY_BEGIN
+RAW
+b71325bc501845105d94000000961c00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 13900 QUERY
+ENTRY_BEGIN
+RAW
+b71325ca50114502b2030000000000000000
+ENTRY_END
+
+STEP 13910 QUERY
+ENTRY_BEGIN
+RAW
+b71325cb50104502b2020000000000000000
+ENTRY_END
+
+STEP 13920 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000baa0000020405b401010402
+ENTRY_END
+
+STEP 13930 QUERY
+ENTRY_BEGIN
+RAW
+b71514c55010447068130000000000000000
+ENTRY_END
+
+STEP 13940 QUERY
+ENTRY_BEGIN
+RAW
+b71514c550184470206000000096ac6a000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 13950 QUERY
+ENTRY_BEGIN
+RAW
+b71514d350114462677a0000000000000000
+ENTRY_END
+
+STEP 13960 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400028780000020405b401010402
+ENTRY_END
+
+STEP 13970 QUERY
+ENTRY_BEGIN
+RAW
+b71514d45010446267790000000000000000
+ENTRY_END
+
+STEP 13980 QUERY
+ENTRY_BEGIN
+RAW
+b715995c50104470004a0000000000000000
+ENTRY_END
+
+STEP 13990 QUERY
+ENTRY_BEGIN
+RAW
+b715995c50184470d805000000968dfc000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 14000 QUERY
+ENTRY_BEGIN
+RAW
+b715996a50114462ffb00000000000000000
+ENTRY_END
+
+STEP 14010 QUERY
+ENTRY_BEGIN
+RAW
+b715996b50104462ffaf0000000000000000
+ENTRY_END
+
+STEP 14020 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000382b0000020405b401010402
+ENTRY_END
+
+STEP 14030 QUERY
+ENTRY_BEGIN
+RAW
+b71666215010447043370000000000000000
+ENTRY_END
+
+STEP 14040 QUERY
+ENTRY_BEGIN
+RAW
+b716662150184470b65200000096f29c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000
+ENTRY_END
+
+STEP 14050 QUERY
+ENTRY_BEGIN
+RAW
+b716662f50114462429e0000000000000000
+ENTRY_END
+
+STEP 14060 QUERY
+ENTRY_BEGIN
+RAW
+b716663050104462429d0000000000000000
+ENTRY_END
+
+STEP 14070 QUERY
+ENTRY_BEGIN
+RAW
+360d00000001000000000000076f62646e772d6e026e6c00000f000100
+ENTRY_END
+
+STEP 14080 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fc009d690000020405b401010402
+ENTRY_END
+
+STEP 14090 QUERY
+ENTRY_BEGIN
+RAW
+b716edb85010fc00254e0000000000000000
+ENTRY_END
+
+STEP 14100 QUERY
+ENTRY_BEGIN
+RAW
+b716edb85004fc00255a0000000000000000
+ENTRY_END
+
+STEP 14110 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b2e800000204059801010402
+ENTRY_END
+
+STEP 14120 QUERY
+ENTRY_BEGIN
+RAW
+b717c4505010432060f80000000000000000
+ENTRY_END
+
+STEP 14130 QUERY
+ENTRY_BEGIN
+RAW
+b717c450501843209c70000000905f78000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14140 QUERY
+ENTRY_BEGIN
+RAW
+b717c45e5011431260650000000000000000
+ENTRY_END
+
+STEP 14150 QUERY
+ENTRY_BEGIN
+RAW
+b717c45f5010431260640000000000000000
+ENTRY_END
+
+STEP 14160 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000514e00000204059801010402
+ENTRY_END
+
+STEP 14170 QUERY
+ENTRY_BEGIN
+RAW
+b71a45bc501043207def0000000000000000
+ENTRY_END
+
+STEP 14180 QUERY
+ENTRY_BEGIN
+RAW
+b71a45bc501843207c38000000909da8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14190 QUERY
+ENTRY_BEGIN
+RAW
+b71a45ca501143127d5c0000000000000000
+ENTRY_END
+
+STEP 14200 QUERY
+ENTRY_BEGIN
+RAW
+b71a45cb501043127d5b0000000000000000
+ENTRY_END
+
+STEP 14210 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400019b400000204059801010402
+ENTRY_END
+
+STEP 14220 QUERY
+ENTRY_BEGIN
+RAW
+b71b20f9501043206b170000000000000000
+ENTRY_END
+
+STEP 14230 QUERY
+ENTRY_BEGIN
+RAW
+b71b20f9501843202b3000000090dbd8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14240 QUERY
+ENTRY_BEGIN
+RAW
+b71b2107501143126a840000000000000000
+ENTRY_END
+
+STEP 14250 QUERY
+ENTRY_BEGIN
+RAW
+b71b2108501043126a830000000000000000
+ENTRY_END
+
+STEP 14260 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c1f20000020405b401010402
+ENTRY_END
+
+STEP 14270 QUERY
+ENTRY_BEGIN
+RAW
+b71bae6b5010447084af0000000000000000
+ENTRY_END
+
+STEP 14280 QUERY
+ENTRY_BEGIN
+RAW
+b71bae6b50184470db5a0000008f3280000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdc9403c4f490003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 14290 QUERY
+ENTRY_BEGIN
+RAW
+b71bae7950114462841d0000000000000000
+ENTRY_END
+
+STEP 14300 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400076f80000020405b401010402
+ENTRY_END
+
+STEP 14310 QUERY
+ENTRY_BEGIN
+RAW
+b71bae7a50104462841c0000000000000000
+ENTRY_END
+
+STEP 14320 QUERY
+ENTRY_BEGIN
+RAW
+b71c76fc5010447071230000000000000000
+ENTRY_END
+
+STEP 14330 QUERY
+ENTRY_BEGIN
+RAW
+b71c76fc5018447011cf0000008fe780000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdca403c4f4a0003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 14340 QUERY
+ENTRY_BEGIN
+RAW
+b71c770a5011446270910000000000000000
+ENTRY_END
+
+STEP 14350 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400026c80000020405b401010402
+ENTRY_END
+
+STEP 14360 QUERY
+ENTRY_BEGIN
+RAW
+b71c770b5010446270900000000000000000
+ENTRY_END
+
+STEP 14370 QUERY
+ENTRY_BEGIN
+RAW
+3b00000000010000000000000b6361726565726665766572026e6c00000f000100
+ENTRY_END
+
+STEP 14380 QUERY
+ENTRY_BEGIN
+RAW
+b71e36195010447061d40000000000000000
+ENTRY_END
+
+STEP 14390 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab3200000204059801010402
+ENTRY_END
+
+STEP 14400 QUERY
+ENTRY_BEGIN
+RAW
+0524000000010000000000000c7065616e75747367616d6573026e6c00000f000100
+ENTRY_END
+
+STEP 14410 QUERY
+ENTRY_BEGIN
+RAW
+b71ee7585010432036330000000000000000
+ENTRY_END
+
+STEP 14420 QUERY
+ENTRY_BEGIN
+RAW
+b71ee758501843200b2b00000090c5f8000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14430 QUERY
+ENTRY_BEGIN
+RAW
+b71e361950184470a9800000008f4080000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdca403c4f4a0003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 14440 QUERY
+ENTRY_BEGIN
+RAW
+b71ee7665011431235a00000000000000000
+ENTRY_END
+
+STEP 14450 QUERY
+ENTRY_BEGIN
+RAW
+b71e36275011446261420000000000000000
+ENTRY_END
+
+STEP 14460 QUERY
+ENTRY_BEGIN
+RAW
+b71ee76750104312359f0000000000000000
+ENTRY_END
+
+STEP 14470 QUERY
+ENTRY_BEGIN
+RAW
+b71e36285010446261410000000000000000
+ENTRY_END
+
+STEP 14480 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400054a900000204059801010402
+ENTRY_END
+
+STEP 14490 QUERY
+ENTRY_BEGIN
+RAW
+b71f842f5010432042d20000000000000000
+ENTRY_END
+
+STEP 14500 QUERY
+ENTRY_BEGIN
+RAW
+b71f842f50184320da9b000000900428000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14510 QUERY
+ENTRY_BEGIN
+RAW
+b71f843d50114312423f0000000000000000
+ENTRY_END
+
+STEP 14520 QUERY
+ENTRY_BEGIN
+RAW
+b71f843e50104312423e0000000000000000
+ENTRY_END
+
+STEP 14530 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005bc700000204059801010402
+ENTRY_END
+
+STEP 14540 QUERY
+ENTRY_BEGIN
+RAW
+b71fffa150104320ce7d0000000000000000
+ENTRY_END
+
+STEP 14550 QUERY
+ENTRY_BEGIN
+RAW
+0000000060022238ed610000020405b40000
+ENTRY_END
+
+STEP 14560 QUERY
+ENTRY_BEGIN
+RAW
+b71fffa150184320b59e00000090b4d0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000
+ENTRY_END
+
+STEP 14570 QUERY
+ENTRY_BEGIN
+RAW
+b720f253501022385b9a0000000000000000
+ENTRY_END
+
+STEP 14580 QUERY
+ENTRY_BEGIN
+RAW
+b720f25350182238373e000000253f7f000000010000000000001074726f66656f2d616c6661726f6d656f026e6c0000060001
+ENTRY_END
+
+STEP 14590 QUERY
+ENTRY_BEGIN
+RAW
+b71fffaf50114312cdea0000000000000000
+ENTRY_END
+
+STEP 14600 QUERY
+ENTRY_BEGIN
+RAW
+b720f2bc501022385b0a0000000000000000
+ENTRY_END
+
+STEP 14610 QUERY
+ENTRY_BEGIN
+RAW
+b720f2bc501122385b090000000000000000
+ENTRY_END
+
+STEP 14620 QUERY
+ENTRY_BEGIN
+RAW
+b71fffb050104312cde90000000000000000
+ENTRY_END
+
+STEP 14630 QUERY
+ENTRY_BEGIN
+RAW
+b720f2bd501022385b080000000000000000
+ENTRY_END
+
+STEP 14640 QUERY
+ENTRY_BEGIN
+RAW
+16b8000000010000000000000b6379636c696e6732303030026e6c00000f000100
+ENTRY_END
+
+STEP 14650 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400044d80000020405b401010402
+ENTRY_END
+
+STEP 14660 QUERY
+ENTRY_BEGIN
+RAW
+b72633b05010447082450000000000000000
+ENTRY_END
+
+STEP 14670 QUERY
+ENTRY_BEGIN
+RAW
+b72633b050184470f04800000089b41c000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 14680 QUERY
+ENTRY_BEGIN
+RAW
+b72633be5011446281b90000000000000000
+ENTRY_END
+
+STEP 14690 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033630000020405b401010402
+ENTRY_END
+
+STEP 14700 QUERY
+ENTRY_BEGIN
+RAW
+b72633bf5010446281b80000000000000000
+ENTRY_END
+
+STEP 14710 QUERY
+ENTRY_BEGIN
+RAW
+b726ed2d50104470b7520000000000000000
+ENTRY_END
+
+STEP 14720 QUERY
+ENTRY_BEGIN
+RAW
+b726ed2d5018447083f1000000895682000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 14730 QUERY
+ENTRY_BEGIN
+RAW
+b726ed3b50114462b6c60000000000000000
+ENTRY_END
+
+STEP 14740 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400037b50000020405b401010402
+ENTRY_END
+
+STEP 14750 QUERY
+ENTRY_BEGIN
+RAW
+b726ed3c50104462b6c50000000000000000
+ENTRY_END
+
+STEP 14760 QUERY
+ENTRY_BEGIN
+RAW
+b727b1b350104470f71d0000000000000000
+ENTRY_END
+
+STEP 14770 QUERY
+ENTRY_BEGIN
+RAW
+b727b1b350184470f7580000008922e6000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000
+ENTRY_END
+
+STEP 14780 QUERY
+ENTRY_BEGIN
+RAW
+b727b1c150114462f6910000000000000000
+ENTRY_END
+
+STEP 14790 QUERY
+ENTRY_BEGIN
+RAW
+b727b1c250104462f6900000000000000000
+ENTRY_END
+
+STEP 14800 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008d750000020405b401010402
+ENTRY_END
+
+STEP 14810 QUERY
+ENTRY_BEGIN
+RAW
+b729774550104470874a0000000000000000
+ENTRY_END
+
+STEP 14820 QUERY
+ENTRY_BEGIN
+RAW
+b729774550184470362b0000008bed00000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 14830 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf067e800000204056401010402
+ENTRY_END
+
+STEP 14840 QUERY
+ENTRY_BEGIN
+RAW
+b72977535011446286bc0000000000000000
+ENTRY_END
+
+STEP 14850 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a8b50000020405b401010402
+ENTRY_END
+
+STEP 14860 QUERY
+ENTRY_BEGIN
+RAW
+b72a677e5010fd5c73370000000000000000
+ENTRY_END
+
+STEP 14870 QUERY
+ENTRY_BEGIN
+RAW
+b72977545010446286bb0000000000000000
+ENTRY_END
+
+STEP 14880 QUERY
+ENTRY_BEGIN
+RAW
+b72b311750104470e8b60000000000000000
+ENTRY_END
+
+STEP 14890 QUERY
+ENTRY_BEGIN
+RAW
+b72b311750184470f0980000008b9500000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 14900 QUERY
+ENTRY_BEGIN
+RAW
+b72b312550114462e8280000000000000000
+ENTRY_END
+
+STEP 14910 QUERY
+ENTRY_BEGIN
+RAW
+b72a677e5018fd5c94760000008f430e000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000
+ENTRY_END
+
+STEP 14920 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c1d20000020405b401010402
+ENTRY_END
+
+STEP 14930 QUERY
+ENTRY_BEGIN
+RAW
+b72b312650104462e8270000000000000000
+ENTRY_END
+
+STEP 14940 QUERY
+ENTRY_BEGIN
+RAW
+b72c139b501044701f4f0000000000000000
+ENTRY_END
+
+STEP 14950 QUERY
+ENTRY_BEGIN
+RAW
+b72c139b50184470e9300000008bd300000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000
+ENTRY_END
+
+STEP 14960 QUERY
+ENTRY_BEGIN
+RAW
+b72a678c5011fd4e72a50000000000000000
+ENTRY_END
+
+STEP 14970 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006be700000204059801010402
+ENTRY_END
+
+STEP 14980 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0a28e00000204056401010402
+ENTRY_END
+
+STEP 14990 QUERY
+ENTRY_BEGIN
+RAW
+b72c13a9501144621ec10000000000000000
+ENTRY_END
+
+STEP 15000 QUERY
+ENTRY_BEGIN
+RAW
+b72a678d5010fd4e72a40000000000000000
+ENTRY_END
+
+STEP 15010 QUERY
+ENTRY_BEGIN
+RAW
+b72cd229501043200c090000000000000000
+ENTRY_END
+
+STEP 15020 QUERY
+ENTRY_BEGIN
+RAW
+b72c13aa501044621ec00000000000000000
+ENTRY_END
+
+STEP 15030 QUERY
+ENTRY_BEGIN
+RAW
+b72cd2295018432050a20000008bbf42000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 15040 QUERY
+ENTRY_BEGIN
+RAW
+b72da6d95010fd5c6e7f0000000000000000
+ENTRY_END
+
+STEP 15050 QUERY
+ENTRY_BEGIN
+RAW
+b72cd237501143120b7b0000000000000000
+ENTRY_END
+
+STEP 15060 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000577700000204059801010402
+ENTRY_END
+
+STEP 15070 QUERY
+ENTRY_BEGIN
+RAW
+b72da6d95018fd5cf1950000008fe336000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000
+ENTRY_END
+
+STEP 15080 QUERY
+ENTRY_BEGIN
+RAW
+b72cd238501043120b7a0000000000000000
+ENTRY_END
+
+STEP 15090 QUERY
+ENTRY_BEGIN
+RAW
+b72e32b150104320970f0000000000000000
+ENTRY_END
+
+STEP 15100 QUERY
+ENTRY_BEGIN
+RAW
+b72e32b150184320e3db0000008bb810000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 15110 QUERY
+ENTRY_BEGIN
+RAW
+b72da6e75011fd4e6ded0000000000000000
+ENTRY_END
+
+STEP 15120 QUERY
+ENTRY_BEGIN
+RAW
+b72e32bf5011431296810000000000000000
+ENTRY_END
+
+STEP 15130 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007aec00000204059801010402
+ENTRY_END
+
+STEP 15140 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf03bc200000204056401010402
+ENTRY_END
+
+STEP 15150 QUERY
+ENTRY_BEGIN
+RAW
+b72e32c05010431296800000000000000000
+ENTRY_END
+
+STEP 15160 QUERY
+ENTRY_BEGIN
+RAW
+b72ec244501043202af10000000000000000
+ENTRY_END
+
+STEP 15170 QUERY
+ENTRY_BEGIN
+RAW
+b72ec24450184320a80f0000008b87be000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000
+ENTRY_END
+
+STEP 15180 QUERY
+ENTRY_BEGIN
+RAW
+b72da6e85010fd4e6dec0000000000000000
+ENTRY_END
+
+STEP 15190 QUERY
+ENTRY_BEGIN
+RAW
+b72f4ee65010fd5c5fa40000000000000000
+ENTRY_END
+
+STEP 15200 QUERY
+ENTRY_BEGIN
+RAW
+b72ec252501143122a630000000000000000
+ENTRY_END
+
+STEP 15210 QUERY
+ENTRY_BEGIN
+RAW
+b72ec253501043122a620000000000000000
+ENTRY_END
+
+STEP 15220 QUERY
+ENTRY_BEGIN
+RAW
+b72f4ee65018fd5c51cb0000008f7426000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000
+ENTRY_END
+
+STEP 15230 QUERY
+ENTRY_BEGIN
+RAW
+b72f4ef45011fd4e5f120000000000000000
+ENTRY_END
+
+STEP 15240 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000192e00000204057a01010402
+ENTRY_END
+
+STEP 15250 QUERY
+ENTRY_BEGIN
+RAW
+b72f4ef55010fd4e5f110000000000000000
+ENTRY_END
+
+STEP 15260 QUERY
+ENTRY_BEGIN
+RAW
+b7315009501041b83cb50000000000000000
+ENTRY_END
+
+STEP 15270 QUERY
+ENTRY_BEGIN
+RAW
+b7315009501841b8edef000000947700000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 15280 QUERY
+ENTRY_BEGIN
+RAW
+b7315017501141aa3c1e0000000000000000
+ENTRY_END
+
+STEP 15290 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f64500000204057a01010402
+ENTRY_END
+
+STEP 15300 QUERY
+ENTRY_BEGIN
+RAW
+b7315018501041aa3c1d0000000000000000
+ENTRY_END
+
+STEP 15310 QUERY
+ENTRY_BEGIN
+RAW
+b731dfc4501041b88a110000000000000000
+ENTRY_END
+
+STEP 15320 QUERY
+ENTRY_BEGIN
+RAW
+b731dfc4501841b8ce8c00000094e4c0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 15330 QUERY
+ENTRY_BEGIN
+RAW
+b731dfd2501141aa897a0000000000000000
+ENTRY_END
+
+STEP 15340 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000d5b00000204057a01010402
+ENTRY_END
+
+STEP 15350 QUERY
+ENTRY_BEGIN
+RAW
+b731dfd3501041aa89790000000000000000
+ENTRY_END
+
+STEP 15360 QUERY
+ENTRY_BEGIN
+RAW
+b732a88d501041b8d85c0000000000000000
+ENTRY_END
+
+STEP 15370 QUERY
+ENTRY_BEGIN
+RAW
+b732a88d501841b854d800000094acc0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000
+ENTRY_END
+
+STEP 15380 QUERY
+ENTRY_BEGIN
+RAW
+b732a89b501141aad7c50000000000000000
+ENTRY_END
+
+STEP 15390 QUERY
+ENTRY_BEGIN
+RAW
+b732a89c501041aad7c40000000000000000
+ENTRY_END
+
+STEP 15400 QUERY
+ENTRY_BEGIN
+RAW
+316f000000010000000000000a6970336538336237333105737065656406706c616e6574026e6c00000f000100
+ENTRY_END
+
+STEP 15410 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400089e200000204055001010402
+ENTRY_END
+
+STEP 15420 QUERY
+ENTRY_BEGIN
+RAW
+b7367d1a501045107cd10000000000000000
+ENTRY_END
+
+STEP 15430 QUERY
+ENTRY_BEGIN
+RAW
+b7367d1a5018451088c700000096ae00000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 15440 QUERY
+ENTRY_BEGIN
+RAW
+b7367d28501145027c380000000000000000
+ENTRY_END
+
+STEP 15450 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c2d500000204055001010402
+ENTRY_END
+
+STEP 15460 QUERY
+ENTRY_BEGIN
+RAW
+b7367d29501045027c370000000000000000
+ENTRY_END
+
+STEP 15470 QUERY
+ENTRY_BEGIN
+RAW
+b738f642501045103c9a0000000000000000
+ENTRY_END
+
+STEP 15480 QUERY
+ENTRY_BEGIN
+RAW
+b738f64250184510f291000000960500000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 15490 QUERY
+ENTRY_BEGIN
+RAW
+b738f650501145023c010000000000000000
+ENTRY_END
+
+STEP 15500 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b71600000204055001010402
+ENTRY_END
+
+STEP 15510 QUERY
+ENTRY_BEGIN
+RAW
+b738f651501045023c000000000000000000
+ENTRY_END
+
+STEP 15520 QUERY
+ENTRY_BEGIN
+RAW
+b7398bf1501045109b2b0000000000000000
+ENTRY_END
+
+STEP 15530 QUERY
+ENTRY_BEGIN
+RAW
+b7398bf1501845103123000000962500000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000
+ENTRY_END
+
+STEP 15540 QUERY
+ENTRY_BEGIN
+RAW
+b7398bff501145029a920000000000000000
+ENTRY_END
+
+STEP 15550 QUERY
+ENTRY_BEGIN
+RAW
+b7398c00501045029a910000000000000000
+ENTRY_END
+
+STEP 15560 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c30100000204056401010402
+ENTRY_END
+
+STEP 15570 QUERY
+ENTRY_BEGIN
+RAW
+b73c34e1501040b002980000000000000000
+ENTRY_END
+
+STEP 15580 QUERY
+ENTRY_BEGIN
+RAW
+b73c34e1501840b0dbc60000008c2e7d000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 15590 QUERY
+ENTRY_BEGIN
+RAW
+b73c34ef501140a202090000000000000000
+ENTRY_END
+
+STEP 15600 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e88100000204056401010402
+ENTRY_END
+
+STEP 15610 QUERY
+ENTRY_BEGIN
+RAW
+b73c34f0501040a202080000000000000000
+ENTRY_END
+
+STEP 15620 QUERY
+ENTRY_BEGIN
+RAW
+b73d0406501040b058f20000000000000000
+ENTRY_END
+
+STEP 15630 QUERY
+ENTRY_BEGIN
+RAW
+b73d0406501840b0ded30000008c82cb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 15640 QUERY
+ENTRY_BEGIN
+RAW
+b73d0414501140a258630000000000000000
+ENTRY_END
+
+STEP 15650 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab0400000204056401010402
+ENTRY_END
+
+STEP 15660 QUERY
+ENTRY_BEGIN
+RAW
+b73d0415501040a258620000000000000000
+ENTRY_END
+
+STEP 15670 QUERY
+ENTRY_BEGIN
+RAW
+b73dab04501040b074760000000000000000
+ENTRY_END
+
+STEP 15680 QUERY
+ENTRY_BEGIN
+RAW
+b73dab04501840b0a6090000008cd719000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 15690 QUERY
+ENTRY_BEGIN
+RAW
+b73dab12501140a273e70000000000000000
+ENTRY_END
+
+STEP 15700 QUERY
+ENTRY_BEGIN
+RAW
+b73dab13501040a273e60000000000000000
+ENTRY_END
+
+STEP 15710 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000badf0000020405b401010402
+ENTRY_END
+
+STEP 15720 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008d210000020405b401010402
+ENTRY_END
+
+STEP 15730 QUERY
+ENTRY_BEGIN
+RAW
+b744e8ca5010447015560000000000000000
+ENTRY_END
+
+STEP 15740 QUERY
+ENTRY_BEGIN
+RAW
+b744e8ca50184470b35000000091ec00000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2a403c4eaa0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 15750 QUERY
+ENTRY_BEGIN
+RAW
+b744e8d85011446214c20000000000000000
+ENTRY_END
+
+STEP 15760 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d1eb0000020405b401010402
+ENTRY_END
+
+STEP 15770 QUERY
+ENTRY_BEGIN
+RAW
+b74563a75010faf0e3b20000000000000000
+ENTRY_END
+
+STEP 15780 QUERY
+ENTRY_BEGIN
+RAW
+b74563a75018faf096e00000008e0000000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 15790 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400008010000020405b401010402
+ENTRY_END
+
+STEP 15800 QUERY
+ENTRY_BEGIN
+RAW
+b74563b55011fae2e3210000000000000000
+ENTRY_END
+
+STEP 15810 QUERY
+ENTRY_BEGIN
+RAW
+b74563b65010fae2e3200000000000000000
+ENTRY_END
+
+STEP 15820 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf002cf0000020405b401010402
+ENTRY_END
+
+STEP 15830 QUERY
+ENTRY_BEGIN
+RAW
+b744e8d95010446214c10000000000000000
+ENTRY_END
+
+STEP 15840 QUERY
+ENTRY_BEGIN
+RAW
+b74725ec5010faf0524f0000000000000000
+ENTRY_END
+
+STEP 15850 QUERY
+ENTRY_BEGIN
+RAW
+b74725ec5018faf08e160000008e7867000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 15860 QUERY
+ENTRY_BEGIN
+RAW
+b746472d5010447031d10000000000000000
+ENTRY_END
+
+STEP 15870 QUERY
+ENTRY_BEGIN
+RAW
+b74725fa5011fae251be0000000000000000
+ENTRY_END
+
+STEP 15880 QUERY
+ENTRY_BEGIN
+RAW
+b746472d50184470ec4c00000091ce80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 15890 QUERY
+ENTRY_BEGIN
+RAW
+b74725fb5010fae251bd0000000000000000
+ENTRY_END
+
+STEP 15900 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e9570000020405b401010402
+ENTRY_END
+
+STEP 15910 QUERY
+ENTRY_BEGIN
+RAW
+b748136e5010faf04b550000000000000000
+ENTRY_END
+
+STEP 15920 QUERY
+ENTRY_BEGIN
+RAW
+b748136e5018faf0e48c0000008e1af7000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000
+ENTRY_END
+
+STEP 15930 QUERY
+ENTRY_BEGIN
+RAW
+b748137c5011fae24ac40000000000000000
+ENTRY_END
+
+STEP 15940 QUERY
+ENTRY_BEGIN
+RAW
+b746473b50114462313d0000000000000000
+ENTRY_END
+
+STEP 15950 QUERY
+ENTRY_BEGIN
+RAW
+b748137d5010fae24ac30000000000000000
+ENTRY_END
+
+STEP 15960 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f14c0000020405b401010402
+ENTRY_END
+
+STEP 15970 QUERY
+ENTRY_BEGIN
+RAW
+b746473c50104462313c0000000000000000
+ENTRY_END
+
+STEP 15980 QUERY
+ENTRY_BEGIN
+RAW
+b748a93150104470b9160000000000000000
+ENTRY_END
+
+STEP 15990 QUERY
+ENTRY_BEGIN
+RAW
+b748a93150184470dd12000000916500000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 16000 QUERY
+ENTRY_BEGIN
+RAW
+b748a93f50114462b8820000000000000000
+ENTRY_END
+
+STEP 16010 QUERY
+ENTRY_BEGIN
+RAW
+b742be80501044706d600000000000000000
+ENTRY_END
+
+STEP 16020 QUERY
+ENTRY_BEGIN
+RAW
+b742be80501844708594000000962eb5000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe17403c4f970003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 16030 QUERY
+ENTRY_BEGIN
+RAW
+b748a94050104462b8810000000000000000
+ENTRY_END
+
+STEP 16040 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008d4000000204058c01010402
+ENTRY_END
+
+STEP 16050 QUERY
+ENTRY_BEGIN
+RAW
+b749679e5010429098540000000000000000
+ENTRY_END
+
+STEP 16060 QUERY
+ENTRY_BEGIN
+RAW
+b749679e50184290705700000091e4db000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000
+ENTRY_END
+
+STEP 16070 QUERY
+ENTRY_BEGIN
+RAW
+b74967ac5011428297c00000000000000000
+ENTRY_END
+
+STEP 16080 QUERY
+ENTRY_BEGIN
+RAW
+b74967ad5010428297bf0000000000000000
+ENTRY_END
+
+STEP 16090 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f46000000204058c01010402
+ENTRY_END
+
+STEP 16100 QUERY
+ENTRY_BEGIN
+RAW
+b74a49ae501042901d640000000000000000
+ENTRY_END
+
+STEP 16110 QUERY
+ENTRY_BEGIN
+RAW
+b74a49ae5018429054610000009187e1000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000
+ENTRY_END
+
+STEP 16120 QUERY
+ENTRY_BEGIN
+RAW
+b74a49bc501142821cd00000000000000000
+ENTRY_END
+
+STEP 16130 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fa2700000204058c01010402
+ENTRY_END
+
+STEP 16140 QUERY
+ENTRY_BEGIN
+RAW
+b74a49bd501042821ccf0000000000000000
+ENTRY_END
+
+STEP 16150 QUERY
+ENTRY_BEGIN
+RAW
+b74ac63f50104290a6990000000000000000
+ENTRY_END
+
+STEP 16160 QUERY
+ENTRY_BEGIN
+RAW
+b74ac63f50184290a35700000091c220000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000
+ENTRY_END
+
+STEP 16170 QUERY
+ENTRY_BEGIN
+RAW
+b74ac64d50114282a6050000000000000000
+ENTRY_END
+
+STEP 16180 QUERY
+ENTRY_BEGIN
+RAW
+b74ac64e50104282a6040000000000000000
+ENTRY_END
+
+STEP 16190 QUERY
+ENTRY_BEGIN
+RAW
+b742be8e501144626cc70000000000000000
+ENTRY_END
+
+STEP 16200 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400079c20000020405b401010402
+ENTRY_END
+
+STEP 16210 QUERY
+ENTRY_BEGIN
+RAW
+b742be8f501044626cc60000000000000000
+ENTRY_END
+
+STEP 16220 QUERY
+ENTRY_BEGIN
+RAW
+b74cd39f50104470171a0000000000000000
+ENTRY_END
+
+STEP 16230 QUERY
+ENTRY_BEGIN
+RAW
+b74cd39f501844705a7f000000960285000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe18403c4f980003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 16240 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009a450000020405b401010402
+ENTRY_END
+
+STEP 16250 QUERY
+ENTRY_BEGIN
+RAW
+b74eb5d65010447055640000000000000000
+ENTRY_END
+
+STEP 16260 QUERY
+ENTRY_BEGIN
+RAW
+b74eb5d650184470e49e000000958e00000000010001000000000f343236303630373535373635302d330000f900010f343236303630373535373635302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000
+ENTRY_END
+
+STEP 16270 QUERY
+ENTRY_BEGIN
+RAW
+b74eb5e45011446254cc0000000000000000
+ENTRY_END
+
+STEP 16280 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400048fc0000020405b401010402
+ENTRY_END
+
+STEP 16290 QUERY
+ENTRY_BEGIN
+RAW
+b74eb5e55010446254cb0000000000000000
+ENTRY_END
+
+STEP 16300 QUERY
+ENTRY_BEGIN
+RAW
+b7513e29501044707bc50000000000000000
+ENTRY_END
+
+STEP 16310 QUERY
+ENTRY_BEGIN
+RAW
+b7513e29501844706001000000953a00000000010001000000000f343236303630373535373635302d320000f900010f343236303630373535373635302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000
+ENTRY_END
+
+STEP 16320 QUERY
+ENTRY_BEGIN
+RAW
+b74cd3ad5011446216810000000000000000
+ENTRY_END
+
+STEP 16330 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002efe0000020405b401010402
+ENTRY_END
+
+STEP 16340 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000278d0000020405b401010402
+ENTRY_END
+
+STEP 16350 QUERY
+ENTRY_BEGIN
+RAW
+b7513e37501144627b2d0000000000000000
+ENTRY_END
+
+STEP 16360 QUERY
+ENTRY_BEGIN
+RAW
+b75201fb501044709df40000000000000000
+ENTRY_END
+
+STEP 16370 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b08d0000020405b401010402
+ENTRY_END
+
+STEP 16380 QUERY
+ENTRY_BEGIN
+RAW
+b75201fb50184470261b000000966bb0000000010001000000000f313233363935303538313236362d330000f900010f313233363935303538313236362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 16390 QUERY
+ENTRY_BEGIN
+RAW
+b7513e38501044627b2c0000000000000000
+ENTRY_END
+
+STEP 16400 QUERY
+ENTRY_BEGIN
+RAW
+b75342ad50104470ded00000000000000000
+ENTRY_END
+
+STEP 16410 QUERY
+ENTRY_BEGIN
+RAW
+b7520209501144629d5b0000000000000000
+ENTRY_END
+
+STEP 16420 QUERY
+ENTRY_BEGIN
+RAW
+b75342ad501844700d0c00000095f000000000010001000000000f343236303630373535373635302d320000f900010f343236303630373535373635302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000
+ENTRY_END
+
+STEP 16430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400087df0000020405b401010402
+ENTRY_END
+
+STEP 16440 QUERY
+ENTRY_BEGIN
+RAW
+b752020a501044629d5a0000000000000000
+ENTRY_END
+
+STEP 16450 QUERY
+ENTRY_BEGIN
+RAW
+b75342bb50114462de380000000000000000
+ENTRY_END
+
+STEP 16460 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d3c000000204056401010402
+ENTRY_END
+
+STEP 16470 QUERY
+ENTRY_BEGIN
+RAW
+b754104050104470e88e0000000000000000
+ENTRY_END
+
+STEP 16480 QUERY
+ENTRY_BEGIN
+RAW
+b754104050184470e8b900000096f4ac000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 16490 QUERY
+ENTRY_BEGIN
+RAW
+b75342bc50104462de370000000000000000
+ENTRY_END
+
+STEP 16500 QUERY
+ENTRY_BEGIN
+RAW
+b7549d5b501040b0aac40000000000000000
+ENTRY_END
+
+STEP 16510 QUERY
+ENTRY_BEGIN
+RAW
+b754104e50114462e7f50000000000000000
+ENTRY_END
+
+STEP 16520 QUERY
+ENTRY_BEGIN
+RAW
+b7549d5b501840b095820000008c16ee000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 16530 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005e4c0000020405b401010402
+ENTRY_END
+
+STEP 16540 QUERY
+ENTRY_BEGIN
+RAW
+b7549d69501140a2aa350000000000000000
+ENTRY_END
+
+STEP 16550 QUERY
+ENTRY_BEGIN
+RAW
+b754104f50104462e7f40000000000000000
+ENTRY_END
+
+STEP 16560 QUERY
+ENTRY_BEGIN
+RAW
+b755265350104470a8e70000000000000000
+ENTRY_END
+
+STEP 16570 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400038b600000204056401010402
+ENTRY_END
+
+STEP 16580 QUERY
+ENTRY_BEGIN
+RAW
+b7552653501844702017000000967da8000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 16590 QUERY
+ENTRY_BEGIN
+RAW
+b7549d6a501040a2aa340000000000000000
+ENTRY_END
+
+STEP 16600 QUERY
+ENTRY_BEGIN
+RAW
+b75604ad501040b0a8660000000000000000
+ENTRY_END
+
+STEP 16610 QUERY
+ENTRY_BEGIN
+RAW
+b75604ad501840b03fd70000008c6b3c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 16620 QUERY
+ENTRY_BEGIN
+RAW
+b755266150114462a84e0000000000000000
+ENTRY_END
+
+STEP 16630 QUERY
+ENTRY_BEGIN
+RAW
+b755266250104462a84d0000000000000000
+ENTRY_END
+
+STEP 16640 QUERY
+ENTRY_BEGIN
+RAW
+b75604bb501140a2a7d70000000000000000
+ENTRY_END
+
+STEP 16650 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240003d8b00000204056401010402
+ENTRY_END
+
+STEP 16660 QUERY
+ENTRY_BEGIN
+RAW
+b75604bc501040a2a7d60000000000000000
+ENTRY_END
+
+STEP 16670 QUERY
+ENTRY_BEGIN
+RAW
+b756ec01501040b0c5e60000000000000000
+ENTRY_END
+
+STEP 16680 QUERY
+ENTRY_BEGIN
+RAW
+b756ec01501840b069190000008c5f7a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000
+ENTRY_END
+
+STEP 16690 QUERY
+ENTRY_BEGIN
+RAW
+b756ec0f501140a2c5570000000000000000
+ENTRY_END
+
+STEP 16700 QUERY
+ENTRY_BEGIN
+RAW
+b756ec10501040a2c5560000000000000000
+ENTRY_END
+
+STEP 16710 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005c4d00000204059801010402
+ENTRY_END
+
+STEP 16720 QUERY
+ENTRY_BEGIN
+RAW
+b757c385501043200ae80000000000000000
+ENTRY_END
+
+STEP 16730 QUERY
+ENTRY_BEGIN
+RAW
+b757c3855018432080320000008b0bc0000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 16740 QUERY
+ENTRY_BEGIN
+RAW
+b757c393501143120a5a0000000000000000
+ENTRY_END
+
+STEP 16750 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000908b00000204059801010402
+ENTRY_END
+
+STEP 16760 QUERY
+ENTRY_BEGIN
+RAW
+b757c394501043120a590000000000000000
+ENTRY_END
+
+STEP 16770 QUERY
+ENTRY_BEGIN
+RAW
+b75a5de550104320a4c30000000000000000
+ENTRY_END
+
+STEP 16780 QUERY
+ENTRY_BEGIN
+RAW
+b75a5de550184320cace0000008b5c00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 16790 QUERY
+ENTRY_BEGIN
+RAW
+b74cd3ae5010446216800000000000000000
+ENTRY_END
+
+STEP 16800 QUERY
+ENTRY_BEGIN
+RAW
+b7529bd750104470fca60000000000000000
+ENTRY_END
+
+STEP 16810 QUERY
+ENTRY_BEGIN
+RAW
+b7529bd750184470c07c000000968014000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe19403c4f990003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 16820 QUERY
+ENTRY_BEGIN
+RAW
+b75a5df350114312a4350000000000000000
+ENTRY_END
+
+STEP 16830 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000539000000204059801010402
+ENTRY_END
+
+STEP 16840 QUERY
+ENTRY_BEGIN
+RAW
+b75a5df450104312a4340000000000000000
+ENTRY_END
+
+STEP 16850 QUERY
+ENTRY_BEGIN
+RAW
+b75b2958501043209c540000000000000000
+ENTRY_END
+
+STEP 16860 QUERY
+ENTRY_BEGIN
+RAW
+b75b29585018432011e00000008b0c80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 16870 QUERY
+ENTRY_BEGIN
+RAW
+b75b2966501143129bc60000000000000000
+ENTRY_END
+
+STEP 16880 QUERY
+ENTRY_BEGIN
+RAW
+b75b2967501043129bc50000000000000000
+ENTRY_END
+
+STEP 16890 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fcd600000204059801010402
+ENTRY_END
+
+STEP 16900 QUERY
+ENTRY_BEGIN
+RAW
+b75bfc9650104320725c0000000000000000
+ENTRY_END
+
+STEP 16910 QUERY
+ENTRY_BEGIN
+RAW
+b75bfc965018432095e60000008b5d80000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 16920 QUERY
+ENTRY_BEGIN
+RAW
+b75bfca45011431271ce0000000000000000
+ENTRY_END
+
+STEP 16930 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005ff400000204059801010402
+ENTRY_END
+
+STEP 16940 QUERY
+ENTRY_BEGIN
+RAW
+b75bfca55010431271cd0000000000000000
+ENTRY_END
+
+STEP 16950 QUERY
+ENTRY_BEGIN
+RAW
+b75c9580501043203c8f0000000000000000
+ENTRY_END
+
+STEP 16960 QUERY
+ENTRY_BEGIN
+RAW
+b75c958050184320b09a0000008b0e00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 16970 QUERY
+ENTRY_BEGIN
+RAW
+b75c958e501143123c010000000000000000
+ENTRY_END
+
+STEP 16980 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007c5400000204059801010402
+ENTRY_END
+
+STEP 16990 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c5670000020405b401010402
+ENTRY_END
+
+STEP 17000 QUERY
+ENTRY_BEGIN
+RAW
+b75e3db250104470f89a0000000000000000
+ENTRY_END
+
+STEP 17010 QUERY
+ENTRY_BEGIN
+RAW
+b75e3db2501844700e7f0000008c90b3000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 17020 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400070f40000020405b401010402
+ENTRY_END
+
+STEP 17030 QUERY
+ENTRY_BEGIN
+RAW
+b75c958f501043123c000000000000000000
+ENTRY_END
+
+STEP 17040 QUERY
+ENTRY_BEGIN
+RAW
+b75d4d2450104320a14a0000000000000000
+ENTRY_END
+
+STEP 17050 QUERY
+ENTRY_BEGIN
+RAW
+b75e3dc050114462f80b0000000000000000
+ENTRY_END
+
+STEP 17060 QUERY
+ENTRY_BEGIN
+RAW
+b75d4d2450184320c9150000008b5840000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17070 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e0850000020405b401010402
+ENTRY_END
+
+STEP 17080 QUERY
+ENTRY_BEGIN
+RAW
+b75e3dc150104462f80a0000000000000000
+ENTRY_END
+
+STEP 17090 QUERY
+ENTRY_BEGIN
+RAW
+b75f940b50104470bd5e0000000000000000
+ENTRY_END
+
+STEP 17100 QUERY
+ENTRY_BEGIN
+RAW
+b75ecb745010447016650000000000000000
+ENTRY_END
+
+STEP 17110 QUERY
+ENTRY_BEGIN
+RAW
+b75f940b501844701be40000008c4913000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 17120 QUERY
+ENTRY_BEGIN
+RAW
+b75d4d3250114312a0bc0000000000000000
+ENTRY_END
+
+STEP 17130 QUERY
+ENTRY_BEGIN
+RAW
+b75f941950114462bccf0000000000000000
+ENTRY_END
+
+STEP 17140 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400051fa0000020405b401010402
+ENTRY_END
+
+STEP 17150 QUERY
+ENTRY_BEGIN
+RAW
+b75f941a50104462bcce0000000000000000
+ENTRY_END
+
+STEP 17160 QUERY
+ENTRY_BEGIN
+RAW
+b7604675501044707c680000000000000000
+ENTRY_END
+
+STEP 17170 QUERY
+ENTRY_BEGIN
+RAW
+b75ecb7450184470e98f0000008fa200000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 17180 QUERY
+ENTRY_BEGIN
+RAW
+b760467550184470bc800000008c6780000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 17190 QUERY
+ENTRY_BEGIN
+RAW
+b75d4d3350104312a0bb0000000000000000
+ENTRY_END
+
+STEP 17200 QUERY
+ENTRY_BEGIN
+RAW
+b7604683501144627bd90000000000000000
+ENTRY_END
+
+STEP 17210 QUERY
+ENTRY_BEGIN
+RAW
+b7604684501044627bd80000000000000000
+ENTRY_END
+
+STEP 17220 QUERY
+ENTRY_BEGIN
+RAW
+b75ecb825011446215d30000000000000000
+ENTRY_END
+
+STEP 17230 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005d5e0000020405b401010402
+ENTRY_END
+
+STEP 17240 QUERY
+ENTRY_BEGIN
+RAW
+b75ecb835010446215d20000000000000000
+ENTRY_END
+
+STEP 17250 QUERY
+ENTRY_BEGIN
+RAW
+b7630c6050104470c1de0000000000000000
+ENTRY_END
+
+STEP 17260 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000829700000204059801010402
+ENTRY_END
+
+STEP 17270 QUERY
+ENTRY_BEGIN
+RAW
+b7529be550114462fc0d0000000000000000
+ENTRY_END
+
+STEP 17280 QUERY
+ENTRY_BEGIN
+RAW
+b763eae35010432009c80000000000000000
+ENTRY_END
+
+STEP 17290 QUERY
+ENTRY_BEGIN
+RAW
+b7630c60501844703d0a0000008ffb00000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 17300 QUERY
+ENTRY_BEGIN
+RAW
+b763eae3501843202fd20000008b5900000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17310 QUERY
+ENTRY_BEGIN
+RAW
+b7630c6e50114462c14c0000000000000000
+ENTRY_END
+
+STEP 17320 QUERY
+ENTRY_BEGIN
+RAW
+b763eaf150114312093a0000000000000000
+ENTRY_END
+
+STEP 17330 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400073a600000204059801010402
+ENTRY_END
+
+STEP 17340 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400026de0000020405b401010402
+ENTRY_END
+
+STEP 17350 QUERY
+ENTRY_BEGIN
+RAW
+b7630c6f50104462c14b0000000000000000
+ENTRY_END
+
+STEP 17360 QUERY
+ENTRY_BEGIN
+RAW
+b763eaf25010431209390000000000000000
+ENTRY_END
+
+STEP 17370 QUERY
+ENTRY_BEGIN
+RAW
+b765999a50104470fe210000000000000000
+ENTRY_END
+
+STEP 17380 QUERY
+ENTRY_BEGIN
+RAW
+b764c59f50104320201a0000000000000000
+ENTRY_END
+
+STEP 17390 QUERY
+ENTRY_BEGIN
+RAW
+b764c59f501843209aa50000008b0580000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17400 QUERY
+ENTRY_BEGIN
+RAW
+b765999a50184470204e0000008f5400000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000
+ENTRY_END
+
+STEP 17410 QUERY
+ENTRY_BEGIN
+RAW
+b764c5ad501143121f8c0000000000000000
+ENTRY_END
+
+STEP 17420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000865700000204059801010402
+ENTRY_END
+
+STEP 17430 QUERY
+ENTRY_BEGIN
+RAW
+b76599a850114462fd8f0000000000000000
+ENTRY_END
+
+STEP 17440 QUERY
+ENTRY_BEGIN
+RAW
+b764c5ae501043121f8b0000000000000000
+ENTRY_END
+
+STEP 17450 QUERY
+ENTRY_BEGIN
+RAW
+b7668f535010432069150000000000000000
+ENTRY_END
+
+STEP 17460 QUERY
+ENTRY_BEGIN
+RAW
+b7668f535018432033200000008bb600000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17470 QUERY
+ENTRY_BEGIN
+RAW
+b76599a950104462fd8e0000000000000000
+ENTRY_END
+
+STEP 17480 QUERY
+ENTRY_BEGIN
+RAW
+2030000000010000000000000d726f616461697274726176656c026e6c00000f000100
+ENTRY_END
+
+STEP 17490 QUERY
+ENTRY_BEGIN
+RAW
+b7668f615011431268870000000000000000
+ENTRY_END
+
+STEP 17500 QUERY
+ENTRY_BEGIN
+RAW
+b7668f625010431268860000000000000000
+ENTRY_END
+
+STEP 17510 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000677200000204059801010402
+ENTRY_END
+
+STEP 17520 QUERY
+ENTRY_BEGIN
+RAW
+b76739db501043209fa70000000000000000
+ENTRY_END
+
+STEP 17530 QUERY
+ENTRY_BEGIN
+RAW
+b76739db501843206bf10000008bb2c0000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17540 QUERY
+ENTRY_BEGIN
+RAW
+b76739e9501143129f190000000000000000
+ENTRY_END
+
+STEP 17550 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000556e00000204059801010402
+ENTRY_END
+
+STEP 17560 QUERY
+ENTRY_BEGIN
+RAW
+b76739ea501043129f180000000000000000
+ENTRY_END
+
+STEP 17570 QUERY
+ENTRY_BEGIN
+RAW
+b76820ed50104320a6900000000000000000
+ENTRY_END
+
+STEP 17580 QUERY
+ENTRY_BEGIN
+RAW
+b76820ed50184320239c0000008b0300000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17590 QUERY
+ENTRY_BEGIN
+RAW
+b76820fb50114312a6020000000000000000
+ENTRY_END
+
+STEP 17600 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400072f800000204059801010402
+ENTRY_END
+
+STEP 17610 QUERY
+ENTRY_BEGIN
+RAW
+b76820fc50104312a6010000000000000000
+ENTRY_END
+
+STEP 17620 QUERY
+ENTRY_BEGIN
+RAW
+b768f16a50104320f39c0000000000000000
+ENTRY_END
+
+STEP 17630 QUERY
+ENTRY_BEGIN
+RAW
+b768f16a50184320c0270000008bb380000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000
+ENTRY_END
+
+STEP 17640 QUERY
+ENTRY_BEGIN
+RAW
+b768f17850114312f30e0000000000000000
+ENTRY_END
+
+STEP 17650 QUERY
+ENTRY_BEGIN
+RAW
+b768f17950104312f30d0000000000000000
+ENTRY_END
+
+STEP 17660 QUERY
+ENTRY_BEGIN
+RAW
+b7529be650104462fc0c0000000000000000
+ENTRY_END
+
+STEP 17670 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fae400000204056401010402
+ENTRY_END
+
+STEP 17680 QUERY
+ENTRY_BEGIN
+RAW
+b76b4fdb501040b01f520000000000000000
+ENTRY_END
+
+STEP 17690 QUERY
+ENTRY_BEGIN
+RAW
+b76b4fdb501840b0d54e00000095c564000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 17700 QUERY
+ENTRY_BEGIN
+RAW
+b76b4fe9501140a21eba0000000000000000
+ENTRY_END
+
+STEP 17710 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400048dc00000204056401010402
+ENTRY_END
+
+STEP 17720 QUERY
+ENTRY_BEGIN
+RAW
+b76b4fea501040a21eb90000000000000000
+ENTRY_END
+
+STEP 17730 QUERY
+ENTRY_BEGIN
+RAW
+b76bccee501040b0f0350000000000000000
+ENTRY_END
+
+STEP 17740 QUERY
+ENTRY_BEGIN
+RAW
+b76bccee501840b021e3000000954ab5000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 17750 QUERY
+ENTRY_BEGIN
+RAW
+b76bccfc501140a2ef9d0000000000000000
+ENTRY_END
+
+STEP 17760 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002ee600000204056401010402
+ENTRY_END
+
+STEP 17770 QUERY
+ENTRY_BEGIN
+RAW
+b76bccfd501040a2ef9c0000000000000000
+ENTRY_END
+
+STEP 17780 QUERY
+ENTRY_BEGIN
+RAW
+b76cc0f1501040b0e23b0000000000000000
+ENTRY_END
+
+STEP 17790 QUERY
+ENTRY_BEGIN
+RAW
+b76cc0f1501840b0b68700000095a816000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000
+ENTRY_END
+
+STEP 17800 QUERY
+ENTRY_BEGIN
+RAW
+b76cc0ff501140a2e1a30000000000000000
+ENTRY_END
+
+STEP 17810 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e53c0000020405b401010402
+ENTRY_END
+
+STEP 17820 QUERY
+ENTRY_BEGIN
+RAW
+b76cc100501040a2e1a20000000000000000
+ENTRY_END
+
+STEP 17830 QUERY
+ENTRY_BEGIN
+RAW
+b76d3ff750104470161c0000000000000000
+ENTRY_END
+
+STEP 17840 QUERY
+ENTRY_BEGIN
+RAW
+b76d3ff7501844706a97000000912d80000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 17850 QUERY
+ENTRY_BEGIN
+RAW
+b76d40055011446215880000000000000000
+ENTRY_END
+
+STEP 17860 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000eddd0000020405b401010402
+ENTRY_END
+
+STEP 17870 QUERY
+ENTRY_BEGIN
+RAW
+b76d40065010446215870000000000000000
+ENTRY_END
+
+STEP 17880 QUERY
+ENTRY_BEGIN
+RAW
+b76dbaf750104470a3bc0000000000000000
+ENTRY_END
+
+STEP 17890 QUERY
+ENTRY_BEGIN
+RAW
+b76dbaf750184470fab8000000912c00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 17900 QUERY
+ENTRY_BEGIN
+RAW
+b76dbb0550114462a3280000000000000000
+ENTRY_END
+
+STEP 17910 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a6000000020405b401010402
+ENTRY_END
+
+STEP 17920 QUERY
+ENTRY_BEGIN
+RAW
+b76dbb0650104462a3270000000000000000
+ENTRY_END
+
+STEP 17930 QUERY
+ENTRY_BEGIN
+RAW
+b76e739b50104470a33a0000000000000000
+ENTRY_END
+
+STEP 17940 QUERY
+ENTRY_BEGIN
+RAW
+b76e739b50184470fbb6000000912a80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000
+ENTRY_END
+
+STEP 17950 QUERY
+ENTRY_BEGIN
+RAW
+b76e73a950114462a2a60000000000000000
+ENTRY_END
+
+STEP 17960 QUERY
+ENTRY_BEGIN
+RAW
+b76e73aa50104462a2a50000000000000000
+ENTRY_END
+
+STEP 17970 QUERY
+ENTRY_BEGIN
+RAW
+01c9000000010000000000000a636974726f656e616972026e6c00000f0001c0
+ENTRY_END
+
+STEP 17980 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ee6c0000020405b401010402
+ENTRY_END
+
+STEP 17990 QUERY
+ENTRY_BEGIN
+RAW
+b77479f150104470e54a0000000000000000
+ENTRY_END
+
+STEP 18000 QUERY
+ENTRY_BEGIN
+RAW
+b77479f150184470b9b70000008d453c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01d7403c535700030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000
+ENTRY_END
+
+STEP 18010 QUERY
+ENTRY_BEGIN
+RAW
+b77479ff50114462e4ba0000000000000000
+ENTRY_END
+
+STEP 18020 QUERY
+ENTRY_BEGIN
+RAW
+b7747a0050104462e4b90000000000000000
+ENTRY_END
+
+STEP 18030 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000727d00000204059801010402
+ENTRY_END
+
+STEP 18040 QUERY
+ENTRY_BEGIN
+RAW
+b778d534501043200f480000000000000000
+ENTRY_END
+
+STEP 18050 QUERY
+ENTRY_BEGIN
+RAW
+b778d53450184320a10d00000096811c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000
+ENTRY_END
+
+STEP 18060 QUERY
+ENTRY_BEGIN
+RAW
+b778d542501143120eaf0000000000000000
+ENTRY_END
+
+STEP 18070 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c9ec00000204059801010402
+ENTRY_END
+
+STEP 18080 QUERY
+ENTRY_BEGIN
+RAW
+b778d543501043120eae0000000000000000
+ENTRY_END
+
+STEP 18090 QUERY
+ENTRY_BEGIN
+RAW
+b7799c6a501043209f800000000000000000
+ENTRY_END
+
+STEP 18100 QUERY
+ENTRY_BEGIN
+RAW
+b7799c6a50184320239b000000968fc8000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000
+ENTRY_END
+
+STEP 18110 QUERY
+ENTRY_BEGIN
+RAW
+b7799c78501143129ee70000000000000000
+ENTRY_END
+
+STEP 18120 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008c0d00000204059801010402
+ENTRY_END
+
+STEP 18130 QUERY
+ENTRY_BEGIN
+RAW
+b7799c79501043129ee60000000000000000
+ENTRY_END
+
+STEP 18140 QUERY
+ENTRY_BEGIN
+RAW
+b77a3c4a50104320c1c00000000000000000
+ENTRY_END
+
+STEP 18150 QUERY
+ENTRY_BEGIN
+RAW
+b77a3c4a50184320372f000000969e74000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000
+ENTRY_END
+
+STEP 18160 QUERY
+ENTRY_BEGIN
+RAW
+b77a3c5850114312c1270000000000000000
+ENTRY_END
+
+STEP 18170 QUERY
+ENTRY_BEGIN
+RAW
+b77a3c5950104312c1260000000000000000
+ENTRY_END
+
+STEP 18180 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000baf20000020405b401010402
+ENTRY_END
+
+STEP 18190 QUERY
+ENTRY_BEGIN
+RAW
+b77c30cc50104470faed0000000000000000
+ENTRY_END
+
+STEP 18200 QUERY
+ENTRY_BEGIN
+RAW
+b77c30cc50184470e39a0000008e4390000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000
+ENTRY_END
+
+STEP 18210 QUERY
+ENTRY_BEGIN
+RAW
+b77c30da50114462fa5c0000000000000000
+ENTRY_END
+
+STEP 18220 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d8d00000020405b401010402
+ENTRY_END
+
+STEP 18230 QUERY
+ENTRY_BEGIN
+RAW
+b77c30db50104462fa5b0000000000000000
+ENTRY_END
+
+STEP 18240 QUERY
+ENTRY_BEGIN
+RAW
+b77d061b50104470437c0000000000000000
+ENTRY_END
+
+STEP 18250 QUERY
+ENTRY_BEGIN
+RAW
+b77d061b501844701c460000008e5474000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000
+ENTRY_END
+
+STEP 18260 QUERY
+ENTRY_BEGIN
+RAW
+b77d06295011446242eb0000000000000000
+ENTRY_END
+
+STEP 18270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400050950000020405b401010402
+ENTRY_END
+
+STEP 18280 QUERY
+ENTRY_BEGIN
+RAW
+b77d062a5010446242ea0000000000000000
+ENTRY_END
+
+STEP 18290 QUERY
+ENTRY_BEGIN
+RAW
+b77dd9ff50104470e75b0000000000000000
+ENTRY_END
+
+STEP 18300 QUERY
+ENTRY_BEGIN
+RAW
+b77dd9ff501844701b610000008ef938000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000
+ENTRY_END
+
+STEP 18310 QUERY
+ENTRY_BEGIN
+RAW
+b77dda0d50114462e6ca0000000000000000
+ENTRY_END
+
+STEP 18320 QUERY
+ENTRY_BEGIN
+RAW
+b77dda0e50104462e6c90000000000000000
+ENTRY_END
+
+STEP 18330 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b66a00000204053401010402
+ENTRY_END
+
+STEP 18340 QUERY
+ENTRY_BEGIN
+RAW
+b77f5e2550104470c8890000000000000000
+ENTRY_END
+
+STEP 18350 QUERY
+ENTRY_BEGIN
+RAW
+b77f5e2550184470c1d00000009411de000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 18360 QUERY
+ENTRY_BEGIN
+RAW
+b77f5e3350114462c7f20000000000000000
+ENTRY_END
+
+STEP 18370 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000625d00000204053401010402
+ENTRY_END
+
+STEP 18380 QUERY
+ENTRY_BEGIN
+RAW
+b77f5e3450104462c7f10000000000000000
+ENTRY_END
+
+STEP 18390 QUERY
+ENTRY_BEGIN
+RAW
+b7821b2150104470b77d0000000000000000
+ENTRY_END
+
+STEP 18400 QUERY
+ENTRY_BEGIN
+RAW
+b7821b2150184470cf8800000094f41a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 18410 QUERY
+ENTRY_BEGIN
+RAW
+b7821b2f50114462b6e60000000000000000
+ENTRY_END
+
+STEP 18420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000723e00000204053401010402
+ENTRY_END
+
+STEP 18430 QUERY
+ENTRY_BEGIN
+RAW
+b7821b3050104462b6e50000000000000000
+ENTRY_END
+
+STEP 18440 QUERY
+ENTRY_BEGIN
+RAW
+b782ac965010447035e90000000000000000
+ENTRY_END
+
+STEP 18450 QUERY
+ENTRY_BEGIN
+RAW
+b782ac9650184470f0ae000000945160000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 18460 QUERY
+ENTRY_BEGIN
+RAW
+b782aca45011446235520000000000000000
+ENTRY_END
+
+STEP 18470 QUERY
+ENTRY_BEGIN
+RAW
+b782aca55010446235510000000000000000
+ENTRY_END
+
+STEP 18480 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400090520000020405b401010402
+ENTRY_END
+
+STEP 18490 QUERY
+ENTRY_BEGIN
+RAW
+b786466a50104470baa50000000000000000
+ENTRY_END
+
+STEP 18500 QUERY
+ENTRY_BEGIN
+RAW
+b786466a501844706f640000008d65eb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01d7403c535700030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000
+ENTRY_END
+
+STEP 18510 QUERY
+ENTRY_BEGIN
+RAW
+b786467850114462ba150000000000000000
+ENTRY_END
+
+STEP 18520 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000908a0000020405b401010402
+ENTRY_END
+
+STEP 18530 QUERY
+ENTRY_BEGIN
+RAW
+b786467950104462ba140000000000000000
+ENTRY_END
+
+STEP 18540 QUERY
+ENTRY_BEGIN
+RAW
+b787260850104470db3e0000000000000000
+ENTRY_END
+
+STEP 18550 QUERY
+ENTRY_BEGIN
+RAW
+b787260850184470b2ad0000008d3b3b000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01db403c535b00030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000
+ENTRY_END
+
+STEP 18560 QUERY
+ENTRY_BEGIN
+RAW
+b787261650114462daae0000000000000000
+ENTRY_END
+
+STEP 18570 QUERY
+ENTRY_BEGIN
+RAW
+b787261750104462daad0000000000000000
+ENTRY_END
+
+STEP 18580 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c82d0000020405b401010402
+ENTRY_END
+
+STEP 18590 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a61c0000020405b401010402
+ENTRY_END
+
+STEP 18600 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f9bf00000204057801010402
+ENTRY_END
+
+STEP 18610 QUERY
+ENTRY_BEGIN
+RAW
+b78b571050104470bfc40000000000000000
+ENTRY_END
+
+STEP 18620 QUERY
+ENTRY_BEGIN
+RAW
+b78b5710501844704cc600000097e600000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 18630 QUERY
+ENTRY_BEGIN
+RAW
+b78c39d15010fb90343a0000000000000000
+ENTRY_END
+
+STEP 18640 QUERY
+ENTRY_BEGIN
+RAW
+b78c39d15018fb909ce6000000909f24000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 18650 QUERY
+ENTRY_BEGIN
+RAW
+b78b571e50114462bf2a0000000000000000
+ENTRY_END
+
+STEP 18660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400008150000020405b401010402
+ENTRY_END
+
+STEP 18670 QUERY
+ENTRY_BEGIN
+RAW
+b78c39df5011fb8233a70000000000000000
+ENTRY_END
+
+STEP 18680 QUERY
+ENTRY_BEGIN
+RAW
+b78b571f50104462bf290000000000000000
+ENTRY_END
+
+STEP 18690 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c9e400000204057801010402
+ENTRY_END
+
+STEP 18700 QUERY
+ENTRY_BEGIN
+RAW
+b78cbc5650104470bc750000000000000000
+ENTRY_END
+
+STEP 18710 QUERY
+ENTRY_BEGIN
+RAW
+b78cbc5650184470607800000097d000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 18720 QUERY
+ENTRY_BEGIN
+RAW
+b78c39e05010fb8233a60000000000000000
+ENTRY_END
+
+STEP 18730 QUERY
+ENTRY_BEGIN
+RAW
+b78da4565010fb9099d80000000000000000
+ENTRY_END
+
+STEP 18740 QUERY
+ENTRY_BEGIN
+RAW
+b78cbc6450114462bbdb0000000000000000
+ENTRY_END
+
+STEP 18750 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000228f0000020405b401010402
+ENTRY_END
+
+STEP 18760 QUERY
+ENTRY_BEGIN
+RAW
+b78da4565018fb901ec30000009084e6000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 18770 QUERY
+ENTRY_BEGIN
+RAW
+b78cbc6550104462bbda0000000000000000
+ENTRY_END
+
+STEP 18780 QUERY
+ENTRY_BEGIN
+RAW
+b78e75ee501044701d560000000000000000
+ENTRY_END
+
+STEP 18790 QUERY
+ENTRY_BEGIN
+RAW
+b78da4645011fb8299450000000000000000
+ENTRY_END
+
+STEP 18800 QUERY
+ENTRY_BEGIN
+RAW
+b78e75ee50184470d75800000097ba00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 18810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0089000000204057801010402
+ENTRY_END
+
+STEP 18820 QUERY
+ENTRY_BEGIN
+RAW
+b78da4655010fb8299440000000000000000
+ENTRY_END
+
+STEP 18830 QUERY
+ENTRY_BEGIN
+RAW
+b78e75fc501144621cbc0000000000000000
+ENTRY_END
+
+STEP 18840 QUERY
+ENTRY_BEGIN
+RAW
+b78f54175010fb9028c10000000000000000
+ENTRY_END
+
+STEP 18850 QUERY
+ENTRY_BEGIN
+RAW
+b78f54175018fb9063c900000090cec8000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000
+ENTRY_END
+
+STEP 18860 QUERY
+ENTRY_BEGIN
+RAW
+b78e75fd501044621cbb0000000000000000
+ENTRY_END
+
+STEP 18870 QUERY
+ENTRY_BEGIN
+RAW
+b78f54255011fb82282e0000000000000000
+ENTRY_END
+
+STEP 18880 QUERY
+ENTRY_BEGIN
+RAW
+b78f54265010fb82282d0000000000000000
+ENTRY_END
+
+STEP 18890 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000300a0000020405b401010402
+ENTRY_END
+
+STEP 18900 QUERY
+ENTRY_BEGIN
+RAW
+b79029f35010447076ca0000000000000000
+ENTRY_END
+
+STEP 18910 QUERY
+ENTRY_BEGIN
+RAW
+b79029f3501844703bcc00000097ae00000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 18920 QUERY
+ENTRY_BEGIN
+RAW
+b7902a015011446276300000000000000000
+ENTRY_END
+
+STEP 18930 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000652c0000020405b401010402
+ENTRY_END
+
+STEP 18940 QUERY
+ENTRY_BEGIN
+RAW
+b7902a0250104462762f0000000000000000
+ENTRY_END
+
+STEP 18950 QUERY
+ENTRY_BEGIN
+RAW
+b790f1e050104470e3fe0000000000000000
+ENTRY_END
+
+STEP 18960 QUERY
+ENTRY_BEGIN
+RAW
+b790f1e050184470c001000000979800000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 18970 QUERY
+ENTRY_BEGIN
+RAW
+b790f1ee50114462e3640000000000000000
+ENTRY_END
+
+STEP 18980 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400068eb0000020405b401010402
+ENTRY_END
+
+STEP 18990 QUERY
+ENTRY_BEGIN
+RAW
+b790f1ef50104462e3630000000000000000
+ENTRY_END
+
+STEP 19000 QUERY
+ENTRY_BEGIN
+RAW
+b79170fc5010447068a10000000000000000
+ENTRY_END
+
+STEP 19010 QUERY
+ENTRY_BEGIN
+RAW
+b79170fc50184470faa300000097e200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19020 QUERY
+ENTRY_BEGIN
+RAW
+b791710a5011446268070000000000000000
+ENTRY_END
+
+STEP 19030 QUERY
+ENTRY_BEGIN
+RAW
+b791710b5010446268060000000000000000
+ENTRY_END
+
+STEP 19040 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400020bf0000020405b401010402
+ENTRY_END
+
+STEP 19050 QUERY
+ENTRY_BEGIN
+RAW
+b793c2aa50104470cec40000000000000000
+ENTRY_END
+
+STEP 19060 QUERY
+ENTRY_BEGIN
+RAW
+b793c2aa50184470cbc6000000977600000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19070 QUERY
+ENTRY_BEGIN
+RAW
+b793c2b850114462ce2a0000000000000000
+ENTRY_END
+
+STEP 19080 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000dbf20000020405b401010402
+ENTRY_END
+
+STEP 19090 QUERY
+ENTRY_BEGIN
+RAW
+b793c2b950104462ce290000000000000000
+ENTRY_END
+
+STEP 19100 QUERY
+ENTRY_BEGIN
+RAW
+b794500950104470fc980000000000000000
+ENTRY_END
+
+STEP 19110 QUERY
+ENTRY_BEGIN
+RAW
+b794500950184470109c000000976000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19120 QUERY
+ENTRY_BEGIN
+RAW
+b78ab6a950104470823d0000000000000000
+ENTRY_END
+
+STEP 19130 QUERY
+ENTRY_BEGIN
+RAW
+b78ab6a95018447098b1000000961c75000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe21403c4fa10003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 19140 QUERY
+ENTRY_BEGIN
+RAW
+b794501750114462fbfe0000000000000000
+ENTRY_END
+
+STEP 19150 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005a800000020405b401010402
+ENTRY_END
+
+STEP 19160 QUERY
+ENTRY_BEGIN
+RAW
+b794501850104462fbfd0000000000000000
+ENTRY_END
+
+STEP 19170 QUERY
+ENTRY_BEGIN
+RAW
+b7952a9c50104470a0920000000000000000
+ENTRY_END
+
+STEP 19180 QUERY
+ENTRY_BEGIN
+RAW
+b7952a9c501844706a9500000097aa00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19190 QUERY
+ENTRY_BEGIN
+RAW
+b7952aaa501144629ff80000000000000000
+ENTRY_END
+
+STEP 19200 QUERY
+ENTRY_BEGIN
+RAW
+b7952aab501044629ff70000000000000000
+ENTRY_END
+
+STEP 19210 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005b800000020405b401010402
+ENTRY_END
+
+STEP 19220 QUERY
+ENTRY_BEGIN
+RAW
+b795b7cb5010447014630000000000000000
+ENTRY_END
+
+STEP 19230 QUERY
+ENTRY_BEGIN
+RAW
+b795b7cb501844701f65000000976800000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19240 QUERY
+ENTRY_BEGIN
+RAW
+b795b7d95011446213c90000000000000000
+ENTRY_END
+
+STEP 19250 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400082b20000020405b401010402
+ENTRY_END
+
+STEP 19260 QUERY
+ENTRY_BEGIN
+RAW
+b795b7da5010446213c80000000000000000
+ENTRY_END
+
+STEP 19270 QUERY
+ENTRY_BEGIN
+RAW
+b7963fba50104470b3a50000000000000000
+ENTRY_END
+
+STEP 19280 QUERY
+ENTRY_BEGIN
+RAW
+b7963fba5018447075a800000097b200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19290 QUERY
+ENTRY_BEGIN
+RAW
+b7963fc850114462b30b0000000000000000
+ENTRY_END
+
+STEP 19300 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b50f0000020405b401010402
+ENTRY_END
+
+STEP 19310 QUERY
+ENTRY_BEGIN
+RAW
+b7963fc950104462b30a0000000000000000
+ENTRY_END
+
+STEP 19320 QUERY
+ENTRY_BEGIN
+RAW
+b797006150104470255b0000000000000000
+ENTRY_END
+
+STEP 19330 QUERY
+ENTRY_BEGIN
+RAW
+b797006150184470275e000000977200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000
+ENTRY_END
+
+STEP 19340 QUERY
+ENTRY_BEGIN
+RAW
+b797006f5011446224c10000000000000000
+ENTRY_END
+
+STEP 19350 QUERY
+ENTRY_BEGIN
+RAW
+b79700705010446224c00000000000000000
+ENTRY_END
+
+STEP 19360 QUERY
+ENTRY_BEGIN
+RAW
+b78ab6b75011446281a40000000000000000
+ENTRY_END
+
+STEP 19370 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a5620000020405b401010402
+ENTRY_END
+
+STEP 19380 QUERY
+ENTRY_BEGIN
+RAW
+b78ab6b85010446281a30000000000000000
+ENTRY_END
+
+STEP 19390 QUERY
+ENTRY_BEGIN
+RAW
+b799061e501044700fef0000000000000000
+ENTRY_END
+
+STEP 19400 QUERY
+ENTRY_BEGIN
+RAW
+b799061e50184470a7d4000000969a04000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe22403c4fa20003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 19410 QUERY
+ENTRY_BEGIN
+RAW
+b799062c501144620f560000000000000000
+ENTRY_END
+
+STEP 19420 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400003530000020405b401010402
+ENTRY_END
+
+STEP 19430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400097ba00000204050201010402
+ENTRY_END
+
+STEP 19440 QUERY
+ENTRY_BEGIN
+RAW
+b79cddf25010411a2d130000000000000000
+ENTRY_END
+
+STEP 19450 QUERY
+ENTRY_BEGIN
+RAW
+b79cddf25018411a5cde0000008c9fd3000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 19460 QUERY
+ENTRY_BEGIN
+RAW
+b79cde005011410c2c840000000000000000
+ENTRY_END
+
+STEP 19470 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a37900000204050201010402
+ENTRY_END
+
+STEP 19480 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0aab600000204055001010402
+ENTRY_END
+
+STEP 19490 QUERY
+ENTRY_BEGIN
+RAW
+b79cde015010410c2c830000000000000000
+ENTRY_END
+
+STEP 19500 QUERY
+ENTRY_BEGIN
+RAW
+b79d77645010411a9f5f0000000000000000
+ENTRY_END
+
+STEP 19510 QUERY
+ENTRY_BEGIN
+RAW
+b79e06435010ff0015150000000000000000
+ENTRY_END
+
+STEP 19520 QUERY
+ENTRY_BEGIN
+RAW
+b79d77645018411a70710000008cff8d000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 19530 QUERY
+ENTRY_BEGIN
+RAW
+b79e06435018ff005db30000009294e1000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 19540 QUERY
+ENTRY_BEGIN
+RAW
+b79e06515011fef214800000000000000000
+ENTRY_END
+
+STEP 19550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf050e100000204055001010402
+ENTRY_END
+
+STEP 19560 QUERY
+ENTRY_BEGIN
+RAW
+b79d77725011410c9ed00000000000000000
+ENTRY_END
+
+STEP 19570 QUERY
+ENTRY_BEGIN
+RAW
+b79e06525010fef2147f0000000000000000
+ENTRY_END
+
+STEP 19580 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009ac800000204050201010402
+ENTRY_END
+
+STEP 19590 QUERY
+ENTRY_BEGIN
+RAW
+b79ebf905010ff0001f20000000000000000
+ENTRY_END
+
+STEP 19600 QUERY
+ENTRY_BEGIN
+RAW
+b79ebf905018ff008473000000925bff000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 19610 QUERY
+ENTRY_BEGIN
+RAW
+b79ebf9e5011fef2015d0000000000000000
+ENTRY_END
+
+STEP 19620 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b1da00000204055001010402
+ENTRY_END
+
+STEP 19630 QUERY
+ENTRY_BEGIN
+RAW
+b79d77735010410c9ecf0000000000000000
+ENTRY_END
+
+STEP 19640 QUERY
+ENTRY_BEGIN
+RAW
+b79fb44e5010411a59c20000000000000000
+ENTRY_END
+
+STEP 19650 QUERY
+ENTRY_BEGIN
+RAW
+b79ebf9f5010fef2015c0000000000000000
+ENTRY_END
+
+STEP 19660 QUERY
+ENTRY_BEGIN
+RAW
+b7a08dfc5010ff00947d0000000000000000
+ENTRY_END
+
+STEP 19670 QUERY
+ENTRY_BEGIN
+RAW
+b79fb44e5018411a6a970000008cbfca000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 19680 QUERY
+ENTRY_BEGIN
+RAW
+b7a08dfc5018ff004fe100000092231d000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 19690 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bed00000020405b401010402
+ENTRY_END
+
+STEP 19700 QUERY
+ENTRY_BEGIN
+RAW
+b7a08e0a5011fef293e80000000000000000
+ENTRY_END
+
+STEP 19710 QUERY
+ENTRY_BEGIN
+RAW
+b79fb45c5011410c59330000000000000000
+ENTRY_END
+
+STEP 19720 QUERY
+ENTRY_BEGIN
+RAW
+b7a14a0750104470e56b0000000000000000
+ENTRY_END
+
+STEP 19730 QUERY
+ENTRY_BEGIN
+RAW
+b7a08e0b5010fef293e70000000000000000
+ENTRY_END
+
+STEP 19740 QUERY
+ENTRY_BEGIN
+RAW
+b7a14a0750184470b1d600000090026f000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000
+ENTRY_END
+
+STEP 19750 QUERY
+ENTRY_BEGIN
+RAW
+b7a14a1550114462e4d80000000000000000
+ENTRY_END
+
+STEP 19760 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002ebf0000020405b401010402
+ENTRY_END
+
+STEP 19770 QUERY
+ENTRY_BEGIN
+RAW
+b79fb45d5010410c59320000000000000000
+ENTRY_END
+
+STEP 19780 QUERY
+ENTRY_BEGIN
+RAW
+b7a14a1650104462e4d70000000000000000
+ENTRY_END
+
+STEP 19790 QUERY
+ENTRY_BEGIN
+RAW
+b7a1da0550104470c55b0000000000000000
+ENTRY_END
+
+STEP 19800 QUERY
+ENTRY_BEGIN
+RAW
+b7a1da0550184470ef6c00000090a5c9000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000
+ENTRY_END
+
+STEP 19810 QUERY
+ENTRY_BEGIN
+RAW
+b7a1da1350114462c4c80000000000000000
+ENTRY_END
+
+STEP 19820 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009c3d0000020405b401010402
+ENTRY_END
+
+STEP 19830 QUERY
+ENTRY_BEGIN
+RAW
+b7a1da1450104462c4c70000000000000000
+ENTRY_END
+
+STEP 19840 QUERY
+ENTRY_BEGIN
+RAW
+b7a2547350104470b86b0000000000000000
+ENTRY_END
+
+STEP 19850 QUERY
+ENTRY_BEGIN
+RAW
+b7a25473501844705e05000000902a41000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000
+ENTRY_END
+
+STEP 19860 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006c7000000204050201010402
+ENTRY_END
+
+STEP 19870 QUERY
+ENTRY_BEGIN
+RAW
+b7a2548150114462b7d80000000000000000
+ENTRY_END
+
+STEP 19880 QUERY
+ENTRY_BEGIN
+RAW
+b7a2548250104462b7d70000000000000000
+ENTRY_END
+
+STEP 19890 QUERY
+ENTRY_BEGIN
+RAW
+b7a310eb5010411acec90000000000000000
+ENTRY_END
+
+STEP 19900 QUERY
+ENTRY_BEGIN
+RAW
+b7a310eb5018411a16fa0000008c876e000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 19910 QUERY
+ENTRY_BEGIN
+RAW
+b7a310f95011410cce3a0000000000000000
+ENTRY_END
+
+STEP 19920 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033b900000204050201010402
+ENTRY_END
+
+STEP 19930 QUERY
+ENTRY_BEGIN
+RAW
+b7a310fa5010410cce390000000000000000
+ENTRY_END
+
+STEP 19940 QUERY
+ENTRY_BEGIN
+RAW
+b7a40ad35010411a9c290000000000000000
+ENTRY_END
+
+STEP 19950 QUERY
+ENTRY_BEGIN
+RAW
+b7a40ad35018411a2d4e0000008c3f7b000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 19960 QUERY
+ENTRY_BEGIN
+RAW
+b7a40ae15011410c9b9a0000000000000000
+ENTRY_END
+
+STEP 19970 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000654c00000204050201010402
+ENTRY_END
+
+STEP 19980 QUERY
+ENTRY_BEGIN
+RAW
+b7a40ae25010410c9b990000000000000000
+ENTRY_END
+
+STEP 19990 QUERY
+ENTRY_BEGIN
+RAW
+b7a4fbf25010411adc9c0000000000000000
+ENTRY_END
+
+STEP 20000 QUERY
+ENTRY_BEGIN
+RAW
+b7a4fbf25018411aab3c0000008c0000000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b0110403c529000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000
+ENTRY_END
+
+STEP 20010 QUERY
+ENTRY_BEGIN
+RAW
+b7a4fc005011410cdc0d0000000000000000
+ENTRY_END
+
+STEP 20020 QUERY
+ENTRY_BEGIN
+RAW
+b7a4fc015010410cdc0c0000000000000000
+ENTRY_END
+
+STEP 20030 QUERY
+ENTRY_BEGIN
+RAW
+b799062d501044620f550000000000000000
+ENTRY_END
+
+STEP 20040 QUERY
+ENTRY_BEGIN
+RAW
+b79c1b875010447058730000000000000000
+ENTRY_END
+
+STEP 20050 QUERY
+ENTRY_BEGIN
+RAW
+b79c1b87501844701a89000000966dd4000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe23403c4fa30003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000
+ENTRY_END
+
+STEP 20060 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400042ef0000020405b401010402
+ENTRY_END
+
+STEP 20070 QUERY
+ENTRY_BEGIN
+RAW
+b7a68eff50104470248d0000000000000000
+ENTRY_END
+
+STEP 20080 QUERY
+ENTRY_BEGIN
+RAW
+b7a68eff501844701c1f0000008614fc000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000
+ENTRY_END
+
+STEP 20090 QUERY
+ENTRY_BEGIN
+RAW
+b7a68f0d5011446224040000000000000000
+ENTRY_END
+
+STEP 20100 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b00b0000020405b401010402
+ENTRY_END
+
+STEP 20110 QUERY
+ENTRY_BEGIN
+RAW
+b7a772d750104470add00000000000000000
+ENTRY_END
+
+STEP 20120 QUERY
+ENTRY_BEGIN
+RAW
+b7a772d7501844709517000000862648000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000
+ENTRY_END
+
+STEP 20130 QUERY
+ENTRY_BEGIN
+RAW
+b7a68f0e5010446224030000000000000000
+ENTRY_END
+
+STEP 20140 QUERY
+ENTRY_BEGIN
+RAW
+b79c1b955011446257da0000000000000000
+ENTRY_END
+
+STEP 20150 QUERY
+ENTRY_BEGIN
+RAW
+b7a772e550114462ad470000000000000000
+ENTRY_END
+
+STEP 20160 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008c7e0000020405b401010402
+ENTRY_END
+
+STEP 20170 QUERY
+ENTRY_BEGIN
+RAW
+b7a772e650104462ad460000000000000000
+ENTRY_END
+
+STEP 20180 QUERY
+ENTRY_BEGIN
+RAW
+b7a956ee50104470a62a0000000000000000
+ENTRY_END
+
+STEP 20190 QUERY
+ENTRY_BEGIN
+RAW
+b7a956ee50184470f94200000086ba76000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000
+ENTRY_END
+
+STEP 20200 QUERY
+ENTRY_BEGIN
+RAW
+b7a956fc50114462a5a10000000000000000
+ENTRY_END
+
+STEP 20210 QUERY
+ENTRY_BEGIN
+RAW
+b7a956fd50104462a5a00000000000000000
+ENTRY_END
+
+STEP 20220 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e5980000020405b401010402
+ENTRY_END
+
+STEP 20230 QUERY
+ENTRY_BEGIN
+RAW
+b7aa19b2501044703c800000000000000000
+ENTRY_END
+
+STEP 20240 QUERY
+ENTRY_BEGIN
+RAW
+b7aa19b250184470b1f40000008ddd28000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 20250 QUERY
+ENTRY_BEGIN
+RAW
+b7aa19c0501144623bf00000000000000000
+ENTRY_END
+
+STEP 20260 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400058f40000020405b401010402
+ENTRY_END
+
+STEP 20270 QUERY
+ENTRY_BEGIN
+RAW
+b7aa19c1501044623bef0000000000000000
+ENTRY_END
+
+STEP 20280 QUERY
+ENTRY_BEGIN
+RAW
+b7ab053050104470c45c0000000000000000
+ENTRY_END
+
+STEP 20290 QUERY
+ENTRY_BEGIN
+RAW
+b7ab053050184470d0130000008d47e7000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 20300 QUERY
+ENTRY_BEGIN
+RAW
+b7ab053e50114462c3cc0000000000000000
+ENTRY_END
+
+STEP 20310 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400017040000020405b401010402
+ENTRY_END
+
+STEP 20320 QUERY
+ENTRY_BEGIN
+RAW
+b7ab053f50104462c3cb0000000000000000
+ENTRY_END
+
+STEP 20330 QUERY
+ENTRY_BEGIN
+RAW
+b7ab93d850104470f3c30000000000000000
+ENTRY_END
+
+STEP 20340 QUERY
+ENTRY_BEGIN
+RAW
+b79c1b965010446257d90000000000000000
+ENTRY_END
+
+STEP 20350 QUERY
+ENTRY_BEGIN
+RAW
+b7ab93d8501844708a3c0000008dbd25000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000
+ENTRY_END
+
+STEP 20360 QUERY
+ENTRY_BEGIN
+RAW
+b7ab93e650114462f3330000000000000000
+ENTRY_END
+
+STEP 20370 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001bf80000020405b401010402
+ENTRY_END
+
+STEP 20380 QUERY
+ENTRY_BEGIN
+RAW
+b7ab93e750104462f3320000000000000000
+ENTRY_END
+
+STEP 20390 QUERY
+ENTRY_BEGIN
+RAW
+b7ac6f7a501044701d150000000000000000
+ENTRY_END
+
+STEP 20400 QUERY
+ENTRY_BEGIN
+RAW
+b7ac6f7a501844708c1a00000091ecce000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3e403c4ebe0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 20410 QUERY
+ENTRY_BEGIN
+RAW
+b7ac6f88501144621c810000000000000000
+ENTRY_END
+
+STEP 20420 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000de780000020405b401010402
+ENTRY_END
+
+STEP 20430 QUERY
+ENTRY_BEGIN
+RAW
+b7ac6f89501044621c800000000000000000
+ENTRY_END
+
+STEP 20440 QUERY
+ENTRY_BEGIN
+RAW
+b7aef16c501044705da10000000000000000
+ENTRY_END
+
+STEP 20450 QUERY
+ENTRY_BEGIN
+RAW
+b7aef16c501844706076000000915800000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3f403c4ebf0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 20460 QUERY
+ENTRY_BEGIN
+RAW
+b7aef17a501144625d0d0000000000000000
+ENTRY_END
+
+STEP 20470 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ce160000020405b401010402
+ENTRY_END
+
+STEP 20480 QUERY
+ENTRY_BEGIN
+RAW
+b7aef17b501044625d0c0000000000000000
+ENTRY_END
+
+STEP 20490 QUERY
+ENTRY_BEGIN
+RAW
+b7af8e0150104470b0a90000000000000000
+ENTRY_END
+
+STEP 20500 QUERY
+ENTRY_BEGIN
+RAW
+b7af8e0150184470ff7e000000910c00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3f403c4ebf0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 20510 QUERY
+ENTRY_BEGIN
+RAW
+b7af8e0f50114462b0150000000000000000
+ENTRY_END
+
+STEP 20520 QUERY
+ENTRY_BEGIN
+RAW
+b7af8e1050104462b0140000000000000000
+ENTRY_END
+
+STEP 20530 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08ad60000020405b401010402
+ENTRY_END
+
+STEP 20540 QUERY
+ENTRY_BEGIN
+RAW
+b7b2120c5010faf0edcb0000000000000000
+ENTRY_END
+
+STEP 20550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400026770000020405ac01010402
+ENTRY_END
+
+STEP 20560 QUERY
+ENTRY_BEGIN
+RAW
+b7b516e85010441080750000000000000000
+ENTRY_END
+
+STEP 20570 QUERY
+ENTRY_BEGIN
+RAW
+b7b516e8501844102fb1000000943310000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 20580 QUERY
+ENTRY_BEGIN
+RAW
+b7b516f6501144027fde0000000000000000
+ENTRY_END
+
+STEP 20590 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000603d0000020405ac01010402
+ENTRY_END
+
+STEP 20600 QUERY
+ENTRY_BEGIN
+RAW
+b7b516f7501044027fdd0000000000000000
+ENTRY_END
+
+STEP 20610 QUERY
+ENTRY_BEGIN
+RAW
+b7b59189501044103f9a0000000000000000
+ENTRY_END
+
+STEP 20620 QUERY
+ENTRY_BEGIN
+RAW
+b7b59189501844103ef200000094e3f4000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 20630 QUERY
+ENTRY_BEGIN
+RAW
+b7b59197501144023f030000000000000000
+ENTRY_END
+
+STEP 20640 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400004800000020405ac01010402
+ENTRY_END
+
+STEP 20650 QUERY
+ENTRY_BEGIN
+RAW
+b7b59198501044023f020000000000000000
+ENTRY_END
+
+STEP 20660 QUERY
+ENTRY_BEGIN
+RAW
+b7b677b150104410fdb30000000000000000
+ENTRY_END
+
+STEP 20670 QUERY
+ENTRY_BEGIN
+RAW
+b7b677b150184410f59300000094eb6c000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 20680 QUERY
+ENTRY_BEGIN
+RAW
+b7b677bf50114402fd1c0000000000000000
+ENTRY_END
+
+STEP 20690 QUERY
+ENTRY_BEGIN
+RAW
+b7b677c050104402fd1b0000000000000000
+ENTRY_END
+
+STEP 20700 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f20a0000020405b401010402
+ENTRY_END
+
+STEP 20710 QUERY
+ENTRY_BEGIN
+RAW
+b7b8ebb55010447076e00000000000000000
+ENTRY_END
+
+STEP 20720 QUERY
+ENTRY_BEGIN
+RAW
+b7b8ebb550184470510a00000096c39e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000
+ENTRY_END
+
+STEP 20730 QUERY
+ENTRY_BEGIN
+RAW
+b7b8ebc35011446276470000000000000000
+ENTRY_END
+
+STEP 20740 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400081a30000020405b401010402
+ENTRY_END
+
+STEP 20750 QUERY
+ENTRY_BEGIN
+RAW
+00000000700222386dc500000204057801010402
+ENTRY_END
+
+STEP 20760 QUERY
+ENTRY_BEGIN
+RAW
+b7bc37fc50102648a6740000000000000000
+ENTRY_END
+
+STEP 20770 QUERY
+ENTRY_BEGIN
+RAW
+b7bc37fc50182648d4fd0000008dc800000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 20780 QUERY
+ENTRY_BEGIN
+RAW
+b7bc380a5011263aa5e40000000000000000
+ENTRY_END
+
+STEP 20790 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238873c00000204057801010402
+ENTRY_END
+
+STEP 20800 QUERY
+ENTRY_BEGIN
+RAW
+b7b8ebc45010446276460000000000000000
+ENTRY_END
+
+STEP 20810 QUERY
+ENTRY_BEGIN
+RAW
+b7bb91ca5010447060610000000000000000
+ENTRY_END
+
+STEP 20820 QUERY
+ENTRY_BEGIN
+RAW
+b7bb91ca501844700c3000000096f2fa000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000
+ENTRY_END
+
+STEP 20830 QUERY
+ENTRY_BEGIN
+RAW
+b7bc380b5010263aa5e30000000000000000
+ENTRY_END
+
+STEP 20840 QUERY
+ENTRY_BEGIN
+RAW
+b7bcf5915010264802560000000000000000
+ENTRY_END
+
+STEP 20850 QUERY
+ENTRY_BEGIN
+RAW
+b7bcf5915018264891e00000008d6800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 20860 QUERY
+ENTRY_BEGIN
+RAW
+b7bcf59f5011263a01c60000000000000000
+ENTRY_END
+
+STEP 20870 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238650600000204057801010402
+ENTRY_END
+
+STEP 20880 QUERY
+ENTRY_BEGIN
+RAW
+b7bcf5a05010263a01c50000000000000000
+ENTRY_END
+
+STEP 20890 QUERY
+ENTRY_BEGIN
+RAW
+b7bd858150102648502f0000000000000000
+ENTRY_END
+
+STEP 20900 QUERY
+ENTRY_BEGIN
+RAW
+b7bd8581501826483fba0000008d0800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 20910 QUERY
+ENTRY_BEGIN
+RAW
+b7bd858f5011263a4f9f0000000000000000
+ENTRY_END
+
+STEP 20920 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001a7a00000204056401010402
+ENTRY_END
+
+STEP 20930 QUERY
+ENTRY_BEGIN
+RAW
+b7bd85905010263a4f9e0000000000000000
+ENTRY_END
+
+STEP 20940 QUERY
+ENTRY_BEGIN
+RAW
+b7bb91d8501144625fc80000000000000000
+ENTRY_END
+
+STEP 20950 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007ebd0000020405b401010402
+ENTRY_END
+
+STEP 20960 QUERY
+ENTRY_BEGIN
+RAW
+b7be6078501040b02df70000000000000000
+ENTRY_END
+
+STEP 20970 QUERY
+ENTRY_BEGIN
+RAW
+b7be6078501840b0aa3800000092fb2e000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000
+ENTRY_END
+
+STEP 20980 QUERY
+ENTRY_BEGIN
+RAW
+b7be6086501140a22d620000000000000000
+ENTRY_END
+
+STEP 20990 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ced900000204056401010402
+ENTRY_END
+
+STEP 21000 QUERY
+ENTRY_BEGIN
+RAW
+b7be6087501040a22d610000000000000000
+ENTRY_END
+
+STEP 21010 QUERY
+ENTRY_BEGIN
+RAW
+b7bf9d98501040b0a5350000000000000000
+ENTRY_END
+
+STEP 21020 QUERY
+ENTRY_BEGIN
+RAW
+b7bf9d98501840b0870a00000092969c000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000
+ENTRY_END
+
+STEP 21030 QUERY
+ENTRY_BEGIN
+RAW
+b7bf9da6501140a2a4a00000000000000000
+ENTRY_END
+
+STEP 21040 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000319000000204056401010402
+ENTRY_END
+
+STEP 21050 QUERY
+ENTRY_BEGIN
+RAW
+b7bf9da7501040a2a49f0000000000000000
+ENTRY_END
+
+STEP 21060 QUERY
+ENTRY_BEGIN
+RAW
+b7bb91d9501044625fc70000000000000000
+ENTRY_END
+
+STEP 21070 QUERY
+ENTRY_BEGIN
+RAW
+b7bf057450104470e9cd0000000000000000
+ENTRY_END
+
+STEP 21080 QUERY
+ENTRY_BEGIN
+RAW
+b7bf057450184470c0c800000096c7ce000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000
+ENTRY_END
+
+STEP 21090 QUERY
+ENTRY_BEGIN
+RAW
+b7c1a905501040b0fc7c0000000000000000
+ENTRY_END
+
+STEP 21100 QUERY
+ENTRY_BEGIN
+RAW
+b7c1a905501840b0a16400000092d389000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000
+ENTRY_END
+
+STEP 21110 QUERY
+ENTRY_BEGIN
+RAW
+b7c1a913501140a2fbe70000000000000000
+ENTRY_END
+
+STEP 21120 QUERY
+ENTRY_BEGIN
+RAW
+b7c1a914501040a2fbe60000000000000000
+ENTRY_END
+
+STEP 21130 QUERY
+ENTRY_BEGIN
+RAW
+b7bf058250114462e9340000000000000000
+ENTRY_END
+
+STEP 21140 QUERY
+ENTRY_BEGIN
+RAW
+b7bf058350104462e9330000000000000000
+ENTRY_END
+
+;STEP 21150 QUERY
+;ENTRY_BEGIN
+;RAW
+;2c2a01000001000000000000056b6f726e6f026e6c00000f000100
+;ENTRY_END
+
+STEP 21160 QUERY
+ENTRY_BEGIN
+RAW
+b7b2120c5018faf03b6f0000008d7b00000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd3d403c4ebd00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 21170 QUERY
+ENTRY_BEGIN
+RAW
+b7b2120c5018faf03b6f0000008d7b00000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd3d403c4ebd00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 21180 QUERY
+ENTRY_BEGIN
+RAW
+b7b2121a5011fae2ed3b0000000000000000
+ENTRY_END
+
+STEP 21190 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf072e80000020405b401010402
+ENTRY_END
+
+STEP 21200 QUERY
+ENTRY_BEGIN
+RAW
+b7b2121b5010fae2ed3a0000000000000000
+ENTRY_END
+
+STEP 21210 QUERY
+ENTRY_BEGIN
+RAW
+b7c35b315010faf08ca70000000000000000
+ENTRY_END
+
+STEP 21220 QUERY
+ENTRY_BEGIN
+RAW
+b7c35b315018faf0d04b0000008d8000000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd40403c4ec000030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 21230 QUERY
+ENTRY_BEGIN
+RAW
+b7c35b3f5011fae28c170000000000000000
+ENTRY_END
+
+STEP 21240 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf033120000020405b401010402
+ENTRY_END
+
+STEP 21250 QUERY
+ENTRY_BEGIN
+RAW
+b7c35b405010fae28c160000000000000000
+ENTRY_END
+
+STEP 21260 QUERY
+ENTRY_BEGIN
+RAW
+b7c5cd275010faf0dad80000000000000000
+ENTRY_END
+
+STEP 21270 QUERY
+ENTRY_BEGIN
+RAW
+b7c5cd275018faf0a87c0000008df600000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd40403c4ec000030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000
+ENTRY_END
+
+STEP 21280 QUERY
+ENTRY_BEGIN
+RAW
+b7c5cd355011fae2da480000000000000000
+ENTRY_END
+
+STEP 21290 QUERY
+ENTRY_BEGIN
+RAW
+b7c5cd365010fae2da470000000000000000
+ENTRY_END
+
+STEP 21300 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000de6f0000020405ac01010402
+ENTRY_END
+
+STEP 21310 QUERY
+ENTRY_BEGIN
+RAW
+b7c6575050104410f7f40000000000000000
+ENTRY_END
+
+STEP 21320 QUERY
+ENTRY_BEGIN
+RAW
+b7c6575050184410ed5700000094e8e8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 21330 QUERY
+ENTRY_BEGIN
+RAW
+b7c6575e50114402f75d0000000000000000
+ENTRY_END
+
+STEP 21340 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f46f0000020405ac01010402
+ENTRY_END
+
+STEP 21350 QUERY
+ENTRY_BEGIN
+RAW
+b7c6575f50104402f75c0000000000000000
+ENTRY_END
+
+STEP 21360 QUERY
+ENTRY_BEGIN
+RAW
+b7c7018a5010441063ba0000000000000000
+ENTRY_END
+
+STEP 21370 QUERY
+ENTRY_BEGIN
+RAW
+b7c7018a5018441052a600000094f060000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 21380 QUERY
+ENTRY_BEGIN
+RAW
+b7c701985011440263230000000000000000
+ENTRY_END
+
+STEP 21390 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400010880000020405ac01010402
+ENTRY_END
+
+STEP 21400 QUERY
+ENTRY_BEGIN
+RAW
+b7c701995010440263220000000000000000
+ENTRY_END
+
+STEP 21410 QUERY
+ENTRY_BEGIN
+RAW
+b7c7ca4a50104410b7110000000000000000
+ENTRY_END
+
+STEP 21420 QUERY
+ENTRY_BEGIN
+RAW
+b7c7ca4a50184410f51900000094a144000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000
+ENTRY_END
+
+STEP 21430 QUERY
+ENTRY_BEGIN
+RAW
+b7c7ca5850114402b67a0000000000000000
+ENTRY_END
+
+STEP 21440 QUERY
+ENTRY_BEGIN
+RAW
+b7c7ca5950104402b6790000000000000000
+ENTRY_END
+
+STEP 21450 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ced600000204053401010402
+ENTRY_END
+
+STEP 21460 QUERY
+ENTRY_BEGIN
+RAW
+b7c8652e50104470d9a30000000000000000
+ENTRY_END
+
+STEP 21470 QUERY
+ENTRY_BEGIN
+RAW
+b7c8652e50184470a322000000942da6000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 21480 QUERY
+ENTRY_BEGIN
+RAW
+b7c8653c50114462d90c0000000000000000
+ENTRY_END
+
+STEP 21490 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d21800000204053401010402
+ENTRY_END
+
+STEP 21500 QUERY
+ENTRY_BEGIN
+RAW
+b7c8653d50104462d90b0000000000000000
+ENTRY_END
+
+STEP 21510 QUERY
+ENTRY_BEGIN
+RAW
+b7cad8d15010447069400000000000000000
+ENTRY_END
+
+STEP 21520 QUERY
+ENTRY_BEGIN
+RAW
+b7cad8d150184470d679000000948aec000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 21530 QUERY
+ENTRY_BEGIN
+RAW
+b7cad8df5011446268a90000000000000000
+ENTRY_END
+
+STEP 21540 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c1d700000204053401010402
+ENTRY_END
+
+STEP 21550 QUERY
+ENTRY_BEGIN
+RAW
+b7cad8e05010446268a80000000000000000
+ENTRY_END
+
+STEP 21560 QUERY
+ENTRY_BEGIN
+RAW
+b7cbb4fa501044707cd50000000000000000
+ENTRY_END
+
+STEP 21570 QUERY
+ENTRY_BEGIN
+RAW
+b7cbb4fa50184470aa8c00000094ca6e000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000
+ENTRY_END
+
+STEP 21580 QUERY
+ENTRY_BEGIN
+RAW
+b7cbb508501144627c3e0000000000000000
+ENTRY_END
+
+STEP 21590 QUERY
+ENTRY_BEGIN
+RAW
+b7cbb509501044627c3d0000000000000000
+ENTRY_END
+
+STEP 21600 QUERY
+ENTRY_BEGIN
+RAW
+163800000001000000000000076f62646e772d6e026e6c00000f000100
+ENTRY_END
+
+STEP 21610 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ff160000020405b401010402
+ENTRY_END
+
+STEP 21620 QUERY
+ENTRY_BEGIN
+RAW
+b7cebe2650104470b1650000000000000000
+ENTRY_END
+
+STEP 21630 QUERY
+ENTRY_BEGIN
+RAW
+b7cebe2650184470d07c0000008c6780000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 21640 QUERY
+ENTRY_BEGIN
+RAW
+b7cebe3450114462b0d60000000000000000
+ENTRY_END
+
+STEP 21650 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000734a0000020405b401010402
+ENTRY_END
+
+STEP 21660 QUERY
+ENTRY_BEGIN
+RAW
+b7cebe3550104462b0d50000000000000000
+ENTRY_END
+
+STEP 21670 QUERY
+ENTRY_BEGIN
+RAW
+b7cf52485010447091760000000000000000
+ENTRY_END
+
+STEP 21680 QUERY
+ENTRY_BEGIN
+RAW
+b7cf524850184470b6f10000008c621d000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 21690 QUERY
+ENTRY_BEGIN
+RAW
+3614000000010000000000000663617374656c026e6c00000f0001c00c000f0001
+ENTRY_END
+
+STEP 21700 QUERY
+ENTRY_BEGIN
+RAW
+2618000000010000000000000663617374656c026e6c00000f0001c00c000f0001
+ENTRY_END
+
+STEP 21710 QUERY
+ENTRY_BEGIN
+RAW
+3e24000000010000000000000663617374656c026e6c00000f0001c00c000f0001
+ENTRY_END
+
+STEP 21720 QUERY
+ENTRY_BEGIN
+RAW
+b7cf52565011446290e70000000000000000
+ENTRY_END
+
+STEP 21730 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400058000000020405b401010402
+ENTRY_END
+
+STEP 21740 QUERY
+ENTRY_BEGIN
+RAW
+262a000000010000000000000663617374656c026e6c00000f0001c00c000f0001
+ENTRY_END
+
+STEP 21750 QUERY
+ENTRY_BEGIN
+RAW
+3e36000000010000000000000663617374656c026e6c00000f0001c00c000f0001
+ENTRY_END
+
+STEP 21760 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400047b900000204056401010402
+ENTRY_END
+
+STEP 21770 QUERY
+ENTRY_BEGIN
+RAW
+b7cf52575010446290e60000000000000000
+ENTRY_END
+
+STEP 21780 QUERY
+ENTRY_BEGIN
+RAW
+b7d1f65650104470d21b0000000000000000
+ENTRY_END
+
+STEP 21790 QUERY
+ENTRY_BEGIN
+RAW
+3654000000010000000000000663617374656c026e6c0000010001c00c00010001
+ENTRY_END
+
+STEP 21800 QUERY
+ENTRY_BEGIN
+RAW
+b7d1f656501844703f370000008c1a7d000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000
+ENTRY_END
+
+STEP 21810 QUERY
+ENTRY_BEGIN
+RAW
+b7d27a61501040b041390000000000000000
+ENTRY_END
+
+STEP 21820 QUERY
+ENTRY_BEGIN
+RAW
+b7d1f66450114462d18c0000000000000000
+ENTRY_END
+
+STEP 21830 QUERY
+ENTRY_BEGIN
+RAW
+b7d27a61501840b0204f00000087126e000000010001000000000e3939363433323431323639302d330000f900010e3939363433323431323639302d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000
+ENTRY_END
+
+STEP 21840 QUERY
+ENTRY_BEGIN
+RAW
+b7d27a6f501140a240af0000000000000000
+ENTRY_END
+
+STEP 21850 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ddcf00000204056401010402
+ENTRY_END
+
+STEP 21860 QUERY
+ENTRY_BEGIN
+RAW
+b7d1f66550104462d18b0000000000000000
+ENTRY_END
+
+STEP 21870 QUERY
+ENTRY_BEGIN
+RAW
+b7d37167501040b0e0480000000000000000
+ENTRY_END
+
+STEP 21880 QUERY
+ENTRY_BEGIN
+RAW
+b7d27a70501040a240ae0000000000000000
+ENTRY_END
+
+STEP 21890 QUERY
+ENTRY_BEGIN
+RAW
+b7d37167501840b09f7f00000087344d000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000
+ENTRY_END
+
+STEP 21900 QUERY
+ENTRY_BEGIN
+RAW
+b7d37175501140a2dfbe0000000000000000
+ENTRY_END
+
+STEP 21910 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d32800000204056401010402
+ENTRY_END
+
+STEP 21920 QUERY
+ENTRY_BEGIN
+RAW
+b7d37176501040a2dfbd0000000000000000
+ENTRY_END
+
+STEP 21930 QUERY
+ENTRY_BEGIN
+RAW
+b7d40c73501040b03a950000000000000000
+ENTRY_END
+
+STEP 21940 QUERY
+ENTRY_BEGIN
+RAW
+b7d40c73501840b0d7ec00000087562c000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000
+ENTRY_END
+
+STEP 21950 QUERY
+ENTRY_BEGIN
+RAW
+b7d40c81501140a23a0b0000000000000000
+ENTRY_END
+
+STEP 21960 QUERY
+ENTRY_BEGIN
+RAW
+b7d40c82501040a23a0a0000000000000000
+ENTRY_END
+
+STEP 21970 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e2920000020405b401010402
+ENTRY_END
+
+STEP 21980 QUERY
+ENTRY_BEGIN
+RAW
+b7d4ac7950104470a6880000000000000000
+ENTRY_END
+
+STEP 21990 QUERY
+ENTRY_BEGIN
+RAW
+b7d4ac79501844709f9c0000008a49f8000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000
+ENTRY_END
+
+STEP 22000 QUERY
+ENTRY_BEGIN
+RAW
+b7d4ac8750114462a5fb0000000000000000
+ENTRY_END
+
+STEP 22010 QUERY
+ENTRY_BEGIN
+RAW
+b7d4ac8850104462a5fa0000000000000000
+ENTRY_END
+
+STEP 22020 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e45c0000020405b401010402
+ENTRY_END
+
+STEP 22030 QUERY
+ENTRY_BEGIN
+RAW
+b7d5987150104470bc590000000000000000
+ENTRY_END
+
+STEP 22040 QUERY
+ENTRY_BEGIN
+RAW
+b7d598715018447072e10000008a8e84000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000
+ENTRY_END
+
+STEP 22050 QUERY
+ENTRY_BEGIN
+RAW
+b7d5987f50114462bbcc0000000000000000
+ENTRY_END
+
+STEP 22060 QUERY
+ENTRY_BEGIN
+RAW
+b7d5988050104462bbcb0000000000000000
+ENTRY_END
+
+STEP 22070 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000630d0000020405b401010402
+ENTRY_END
+
+STEP 22080 QUERY
+ENTRY_BEGIN
+RAW
+b7d7d13f50104470023a0000000000000000
+ENTRY_END
+
+STEP 22090 QUERY
+ENTRY_BEGIN
+RAW
+b7d7d13f50184470f3c90000008a537c000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000
+ENTRY_END
+
+STEP 22100 QUERY
+ENTRY_BEGIN
+RAW
+b7d7d14d5011446201ad0000000000000000
+ENTRY_END
+
+STEP 22110 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400068980000020405b401010402
+ENTRY_END
+
+STEP 22120 QUERY
+ENTRY_BEGIN
+RAW
+b7d9fb5b50104470dda60000000000000000
+ENTRY_END
+
+STEP 22130 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf005e600000204057a01010402
+ENTRY_END
+
+STEP 22140 QUERY
+ENTRY_BEGIN
+RAW
+b7d9fb5b501844704b8a0000008f928b000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afead403c502d0003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22150 QUERY
+ENTRY_BEGIN
+RAW
+b7dae9b25010fbec8fd60000000000000000
+ENTRY_END
+
+STEP 22160 QUERY
+ENTRY_BEGIN
+RAW
+b7d9fb6950114462dd140000000000000000
+ENTRY_END
+
+STEP 22170 QUERY
+ENTRY_BEGIN
+RAW
+b7dae9b25018fbec4c120000008f6809000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 22180 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006cef0000020405b401010402
+ENTRY_END
+
+STEP 22190 QUERY
+ENTRY_BEGIN
+RAW
+b7d9fb6a50104462dd130000000000000000
+ENTRY_END
+
+STEP 22200 QUERY
+ENTRY_BEGIN
+RAW
+b7dae9c05011fbde8f440000000000000000
+ENTRY_END
+
+STEP 22210 QUERY
+ENTRY_BEGIN
+RAW
+b7db85ea50104470576d0000000000000000
+ENTRY_END
+
+STEP 22220 QUERY
+ENTRY_BEGIN
+RAW
+b7db85ea501844707ce10000008fd3fb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22230 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b33800000204057a01010402
+ENTRY_END
+
+STEP 22240 QUERY
+ENTRY_BEGIN
+RAW
+b7dae9c15010fbde8f430000000000000000
+ENTRY_END
+
+STEP 22250 QUERY
+ENTRY_BEGIN
+RAW
+b7dc2ffb5010fbecf6de0000000000000000
+ENTRY_END
+
+STEP 22260 QUERY
+ENTRY_BEGIN
+RAW
+b7db85f85011446256db0000000000000000
+ENTRY_END
+
+STEP 22270 QUERY
+ENTRY_BEGIN
+RAW
+b7dc2ffb5018fbeccd910000008f4e93000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 22280 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400060bf0000020405b401010402
+ENTRY_END
+
+STEP 22290 QUERY
+ENTRY_BEGIN
+RAW
+b7dc30095011fbdef64c0000000000000000
+ENTRY_END
+
+STEP 22300 QUERY
+ENTRY_BEGIN
+RAW
+b7db85f95010446256da0000000000000000
+ENTRY_END
+
+STEP 22310 QUERY
+ENTRY_BEGIN
+RAW
+b7dcf17a50104470dfab0000000000000000
+ENTRY_END
+
+STEP 22320 QUERY
+ENTRY_BEGIN
+RAW
+b7dcf17a501844707aa10000008f5e7a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22330 QUERY
+ENTRY_BEGIN
+RAW
+b7dcf18850114462df190000000000000000
+ENTRY_END
+
+STEP 22340 QUERY
+ENTRY_BEGIN
+RAW
+b7dcf18950104462df180000000000000000
+ENTRY_END
+
+STEP 22350 QUERY
+ENTRY_BEGIN
+RAW
+b7dc300a5010fbdef64b0000000000000000
+ENTRY_END
+
+STEP 22360 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f7bc00000204057a01010402
+ENTRY_END
+
+STEP 22370 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d1bd00000204058201010402
+ENTRY_END
+
+STEP 22380 QUERY
+ENTRY_BEGIN
+RAW
+b7ddead25010fbec808a0000000000000000
+ENTRY_END
+
+STEP 22390 QUERY
+ENTRY_BEGIN
+RAW
+b7ddead25018fbec70b30000008f351d000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000
+ENTRY_END
+
+STEP 22400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400063600000020405b401010402
+ENTRY_END
+
+STEP 22410 QUERY
+ENTRY_BEGIN
+RAW
+b7de811e50104218c32a0000000000000000
+ENTRY_END
+
+STEP 22420 QUERY
+ENTRY_BEGIN
+RAW
+b7de811e50184218042a0000008bafdf000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22430 QUERY
+ENTRY_BEGIN
+RAW
+b7ddeae05011fbde7ff80000000000000000
+ENTRY_END
+
+STEP 22440 QUERY
+ENTRY_BEGIN
+RAW
+b7de812c5011420ac29c0000000000000000
+ENTRY_END
+
+STEP 22450 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001a6800000204058201010402
+ENTRY_END
+
+STEP 22460 QUERY
+ENTRY_BEGIN
+RAW
+b7df5ab25010447079120000000000000000
+ENTRY_END
+
+STEP 22470 QUERY
+ENTRY_BEGIN
+RAW
+b7df5ab2501844709b1b0000008fd665000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22480 QUERY
+ENTRY_BEGIN
+RAW
+b7de812d5010420ac29b0000000000000000
+ENTRY_END
+
+STEP 22490 QUERY
+ENTRY_BEGIN
+RAW
+b7e193f550104218f8fa0000000000000000
+ENTRY_END
+
+STEP 22500 QUERY
+ENTRY_BEGIN
+RAW
+b7e193f55018421846bf0000008ba41b000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22510 QUERY
+ENTRY_BEGIN
+RAW
+b7ddeae15010fbde7ff70000000000000000
+ENTRY_END
+
+STEP 22520 QUERY
+ENTRY_BEGIN
+RAW
+b7e194035011420af86c0000000000000000
+ENTRY_END
+
+STEP 22530 QUERY
+ENTRY_BEGIN
+RAW
+b7df5ac05011446278800000000000000000
+ENTRY_END
+
+STEP 22540 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000f3900000204058201010402
+ENTRY_END
+
+STEP 22550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400079d00000020405b401010402
+ENTRY_END
+
+STEP 22560 QUERY
+ENTRY_BEGIN
+RAW
+b7e194045010420af86b0000000000000000
+ENTRY_END
+
+STEP 22570 QUERY
+ENTRY_BEGIN
+RAW
+b7e2188c5010421869340000000000000000
+ENTRY_END
+
+STEP 22580 QUERY
+ENTRY_BEGIN
+RAW
+b7df5ac150104462787f0000000000000000
+ENTRY_END
+
+STEP 22590 QUERY
+ENTRY_BEGIN
+RAW
+b7e2188c501842183cdb0000008b1e39000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22600 QUERY
+ENTRY_BEGIN
+RAW
+b7e304b250104470e57e0000000000000000
+ENTRY_END
+
+STEP 22610 QUERY
+ENTRY_BEGIN
+RAW
+b7e304b25018447021fa0000008fbcf4000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22620 QUERY
+ENTRY_BEGIN
+RAW
+b7e2189a5011420a68a60000000000000000
+ENTRY_END
+
+STEP 22630 QUERY
+ENTRY_BEGIN
+RAW
+b7e304c050114462e4ec0000000000000000
+ENTRY_END
+
+STEP 22640 QUERY
+ENTRY_BEGIN
+RAW
+b7e2189b5010420a68a50000000000000000
+ENTRY_END
+
+STEP 22650 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400091100000020405b401010402
+ENTRY_END
+
+STEP 22660 QUERY
+ENTRY_BEGIN
+RAW
+b7e304c150104462e4eb0000000000000000
+ENTRY_END
+
+STEP 22670 QUERY
+ENTRY_BEGIN
+RAW
+b7e3c233501044703f3d0000000000000000
+ENTRY_END
+
+STEP 22680 QUERY
+ENTRY_BEGIN
+RAW
+b7e3c23350184470d6fa0000008f61b2000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000
+ENTRY_END
+
+STEP 22690 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bdff00000204058201010402
+ENTRY_END
+
+STEP 22700 QUERY
+ENTRY_BEGIN
+RAW
+b7e3c241501144623eab0000000000000000
+ENTRY_END
+
+STEP 22710 QUERY
+ENTRY_BEGIN
+RAW
+b7e443e550104218ec9f0000000000000000
+ENTRY_END
+
+STEP 22720 QUERY
+ENTRY_BEGIN
+RAW
+b7e443e550184218d6cd0000008b06b1000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22730 QUERY
+ENTRY_BEGIN
+RAW
+b7e443f35011420aec110000000000000000
+ENTRY_END
+
+STEP 22740 QUERY
+ENTRY_BEGIN
+RAW
+b7e3c242501044623eaa0000000000000000
+ENTRY_END
+
+STEP 22750 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d9ff00000204058201010402
+ENTRY_END
+
+STEP 22760 QUERY
+ENTRY_BEGIN
+RAW
+b7e443f45010420aec100000000000000000
+ENTRY_END
+
+STEP 22770 QUERY
+ENTRY_BEGIN
+RAW
+b7e5104a501042183c3a0000000000000000
+ENTRY_END
+
+STEP 22780 QUERY
+ENTRY_BEGIN
+RAW
+b7e5104a501842182f400000008bfed9000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22790 QUERY
+ENTRY_BEGIN
+RAW
+b7e510585011420a3bac0000000000000000
+ENTRY_END
+
+STEP 22800 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000818300000204058201010402
+ENTRY_END
+
+STEP 22810 QUERY
+ENTRY_BEGIN
+RAW
+b7e510595010420a3bab0000000000000000
+ENTRY_END
+
+STEP 22820 QUERY
+ENTRY_BEGIN
+RAW
+b7e5f01a5010421803ed0000000000000000
+ENTRY_END
+
+STEP 22830 QUERY
+ENTRY_BEGIN
+RAW
+b7e5f01a5018421838b30000008bbb19000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22840 QUERY
+ENTRY_BEGIN
+RAW
+b7e5f0285011420a035f0000000000000000
+ENTRY_END
+
+STEP 22850 QUERY
+ENTRY_BEGIN
+RAW
+b7e5f0295010420a035e0000000000000000
+ENTRY_END
+
+STEP 22860 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400094360000020405b401010402
+ENTRY_END
+
+STEP 22870 QUERY
+ENTRY_BEGIN
+RAW
+b7e6be1850104470467b0000000000000000
+ENTRY_END
+
+STEP 22880 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007ffe00000204058201010402
+ENTRY_END
+
+STEP 22890 QUERY
+ENTRY_BEGIN
+RAW
+b7e7a1a25010421850de0000000000000000
+ENTRY_END
+
+STEP 22900 QUERY
+ENTRY_BEGIN
+RAW
+b7e7a1a2501842181a360000008b2587000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22910 QUERY
+ENTRY_BEGIN
+RAW
+b7e6be185018447063d90000008c6106000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 22920 QUERY
+ENTRY_BEGIN
+RAW
+b7e7a1b05011420a50500000000000000000
+ENTRY_END
+
+STEP 22930 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d0c800000204058201010402
+ENTRY_END
+
+STEP 22940 QUERY
+ENTRY_BEGIN
+RAW
+b7e6be265011446245ec0000000000000000
+ENTRY_END
+
+STEP 22950 QUERY
+ENTRY_BEGIN
+RAW
+b7e7a1b15010420a504f0000000000000000
+ENTRY_END
+
+STEP 22960 QUERY
+ENTRY_BEGIN
+RAW
+b7e8222b50104218211f0000000000000000
+ENTRY_END
+
+STEP 22970 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a6450000020405b401010402
+ENTRY_END
+
+STEP 22980 QUERY
+ENTRY_BEGIN
+RAW
+b7e8222b50184218f34f0000008b1daf000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 22990 QUERY
+ENTRY_BEGIN
+RAW
+b7e822395011420a20910000000000000000
+ENTRY_END
+
+STEP 23000 QUERY
+ENTRY_BEGIN
+RAW
+b7e6be275010446245eb0000000000000000
+ENTRY_END
+
+STEP 23010 QUERY
+ENTRY_BEGIN
+RAW
+b7e8b9fe501044705ca20000000000000000
+ENTRY_END
+
+STEP 23020 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008ecb00000204058201010402
+ENTRY_END
+
+STEP 23030 QUERY
+ENTRY_BEGIN
+RAW
+b7e8223a5010420a20900000000000000000
+ENTRY_END
+
+STEP 23040 QUERY
+ENTRY_BEGIN
+RAW
+b7e96bb55010421895960000000000000000
+ENTRY_END
+
+STEP 23050 QUERY
+ENTRY_BEGIN
+RAW
+b7e8b9fe50184470c0470000008c1bc0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 23060 QUERY
+ENTRY_BEGIN
+RAW
+b7e96bb5501842187c9e0000008b08d8000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000
+ENTRY_END
+
+STEP 23070 QUERY
+ENTRY_BEGIN
+RAW
+b7e96bc35011420a95080000000000000000
+ENTRY_END
+
+STEP 23080 QUERY
+ENTRY_BEGIN
+RAW
+b7e96bc45010420a95070000000000000000
+ENTRY_END
+
+STEP 23090 QUERY
+ENTRY_BEGIN
+RAW
+b7e8ba0c501144625c130000000000000000
+ENTRY_END
+
+STEP 23100 QUERY
+ENTRY_BEGIN
+RAW
+63097b1c50040000f11a0000000000000000
+ENTRY_END
+
+STEP 23110 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ec7e0000020405b401010402
+ENTRY_END
+
+STEP 23120 QUERY
+ENTRY_BEGIN
+RAW
+b7e8ba0d501044625c120000000000000000
+ENTRY_END
+
+STEP 23130 QUERY
+ENTRY_BEGIN
+RAW
+b7ec28565010447034800000000000000000
+ENTRY_END
+
+STEP 23140 QUERY
+ENTRY_BEGIN
+RAW
+b7ec285650184470d6a40000008cdd40000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 23150 QUERY
+ENTRY_BEGIN
+RAW
+b7ec28645011446233f10000000000000000
+ENTRY_END
+
+STEP 23160 QUERY
+ENTRY_BEGIN
+RAW
+b7ec28655010446233f00000000000000000
+ENTRY_END
+
+STEP 23170 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0032000000204056401010402
+ENTRY_END
+
+STEP 23180 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf043bb0000020405b401010402
+ENTRY_END
+
+STEP 23190 QUERY
+ENTRY_BEGIN
+RAW
+b7eca26f5010fd5cd2bb0000000000000000
+ENTRY_END
+
+STEP 23200 QUERY
+ENTRY_BEGIN
+RAW
+b7eca26f5018fd5c445900000092c3e6000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5d403c4fdd0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23210 QUERY
+ENTRY_BEGIN
+RAW
+b7eca27d5011fd4ed2260000000000000000
+ENTRY_END
+
+STEP 23220 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf00b5800000204056401010402
+ENTRY_END
+
+STEP 23230 QUERY
+ENTRY_BEGIN
+RAW
+b7eca27e5010fd4ed2250000000000000000
+ENTRY_END
+
+STEP 23240 QUERY
+ENTRY_BEGIN
+RAW
+b7ee6dad5010fd5c0fb40000000000000000
+ENTRY_END
+
+STEP 23250 QUERY
+ENTRY_BEGIN
+RAW
+b7ee6dad5018fd5c0976000000923cc3000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5d403c4fdd0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23260 QUERY
+ENTRY_BEGIN
+RAW
+b7ee6dbb5011fd4e0f1f0000000000000000
+ENTRY_END
+
+STEP 23270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0682600000204056401010402
+ENTRY_END
+
+STEP 23280 QUERY
+ENTRY_BEGIN
+RAW
+b7ee6dbc5010fd4e0f1e0000000000000000
+ENTRY_END
+
+STEP 23290 QUERY
+ENTRY_BEGIN
+RAW
+b7ef54e85010fd5c85460000000000000000
+ENTRY_END
+
+STEP 23300 QUERY
+ENTRY_BEGIN
+RAW
+b7ef54e85018fd5c2cde000000928ced000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23310 QUERY
+ENTRY_BEGIN
+RAW
+b7ef54f65011fd4e84b10000000000000000
+ENTRY_END
+
+STEP 23320 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000bd400000020405b401010402
+ENTRY_END
+
+STEP 23330 QUERY
+ENTRY_BEGIN
+RAW
+b7ef54f75010fd4e84b00000000000000000
+ENTRY_END
+
+STEP 23340 QUERY
+ENTRY_BEGIN
+RAW
+b7f00ee7501044701ead0000000000000000
+ENTRY_END
+
+STEP 23350 QUERY
+ENTRY_BEGIN
+RAW
+b7f00ee7501844705c81000000910c00000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 23360 QUERY
+ENTRY_BEGIN
+RAW
+2e4000000001000000000000076f62646e772d6e026e6c00000f000100
+ENTRY_END
+
+STEP 23370 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf020de00000204056401010402
+ENTRY_END
+
+STEP 23380 QUERY
+ENTRY_BEGIN
+RAW
+b7f00ef5501144621e190000000000000000
+ENTRY_END
+
+STEP 23390 QUERY
+ENTRY_BEGIN
+RAW
+b7f0ad405010fd5ce5a40000000000000000
+ENTRY_END
+
+STEP 23400 QUERY
+ENTRY_BEGIN
+RAW
+b7f0ad405018fd5ca524000000927404000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23410 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400096fb0000020405b401010402
+ENTRY_END
+
+STEP 23420 QUERY
+ENTRY_BEGIN
+RAW
+b7f00ef6501044621e180000000000000000
+ENTRY_END
+
+STEP 23430 QUERY
+ENTRY_BEGIN
+RAW
+b7f0ad4e5011fd4ee50f0000000000000000
+ENTRY_END
+
+STEP 23440 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f72200000204056401010402
+ENTRY_END
+
+STEP 23450 QUERY
+ENTRY_BEGIN
+RAW
+b7f1a62250104470612b0000000000000000
+ENTRY_END
+
+STEP 23460 QUERY
+ENTRY_BEGIN
+RAW
+b7f0ad4f5010fd4ee50e0000000000000000
+ENTRY_END
+
+STEP 23470 QUERY
+ENTRY_BEGIN
+RAW
+b7f1a622501844703700000000917500000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 23480 QUERY
+ENTRY_BEGIN
+RAW
+b7f350355010fd5c18f20000000000000000
+ENTRY_END
+
+STEP 23490 QUERY
+ENTRY_BEGIN
+RAW
+b7f350355018fd5cbfda000000928d9c000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23500 QUERY
+ENTRY_BEGIN
+RAW
+b7f1a6305011446260970000000000000000
+ENTRY_END
+
+STEP 23510 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c07900000204057801010402
+ENTRY_END
+
+STEP 23520 QUERY
+ENTRY_BEGIN
+RAW
+b7f350435011fd4e185d0000000000000000
+ENTRY_END
+
+STEP 23530 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f5eb00000204056401010402
+ENTRY_END
+
+STEP 23540 QUERY
+ENTRY_BEGIN
+RAW
+b7f3f803501041a03b5a0000000000000000
+ENTRY_END
+
+STEP 23550 QUERY
+ENTRY_BEGIN
+RAW
+b7f3f803501841a0e3ed0000008c7123000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000
+ENTRY_END
+
+STEP 23560 QUERY
+ENTRY_BEGIN
+RAW
+b7f350445010fd4e185c0000000000000000
+ENTRY_END
+
+STEP 23570 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400071960000020405b401010402
+ENTRY_END
+
+STEP 23580 QUERY
+ENTRY_BEGIN
+RAW
+b7f3f811501141923acb0000000000000000
+ENTRY_END
+
+STEP 23590 QUERY
+ENTRY_BEGIN
+RAW
+b7f4c0fc5010fd5ca6f20000000000000000
+ENTRY_END
+
+STEP 23600 QUERY
+ENTRY_BEGIN
+RAW
+b7f4c0fc5018fd5ca5cf0000009235a8000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000
+ENTRY_END
+
+STEP 23610 QUERY
+ENTRY_BEGIN
+RAW
+b7f1a6315010446260960000000000000000
+ENTRY_END
+
+STEP 23620 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400048b30000020405b401010402
+ENTRY_END
+
+STEP 23630 QUERY
+ENTRY_BEGIN
+RAW
+b7f580c05010447061240000000000000000
+ENTRY_END
+
+STEP 23640 QUERY
+ENTRY_BEGIN
+RAW
+b7f3f812501041923aca0000000000000000
+ENTRY_END
+
+STEP 23650 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000833b00000204057801010402
+ENTRY_END
+
+STEP 23660 QUERY
+ENTRY_BEGIN
+RAW
+b7f580c050184470c704000000916300000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 23670 QUERY
+ENTRY_BEGIN
+RAW
+b7f73e35501041a0b7e60000000000000000
+ENTRY_END
+
+STEP 23680 QUERY
+ENTRY_BEGIN
+RAW
+b7f73e35501841a0aecc0000008c23d2000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000
+ENTRY_END
+
+STEP 23690 QUERY
+ENTRY_BEGIN
+RAW
+b7f4c10a5011fd4ea65d0000000000000000
+ENTRY_END
+
+STEP 23700 QUERY
+ENTRY_BEGIN
+RAW
+b7f580ce5011446260900000000000000000
+ENTRY_END
+
+STEP 23710 QUERY
+ENTRY_BEGIN
+RAW
+b7f67a07501044703ef90000000000000000
+ENTRY_END
+
+STEP 23720 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c9110000020405b401010402
+ENTRY_END
+
+STEP 23730 QUERY
+ENTRY_BEGIN
+RAW
+b7f73e4350114192b7570000000000000000
+ENTRY_END
+
+STEP 23740 QUERY
+ENTRY_BEGIN
+RAW
+b7f67a0750184470abcd00000091de00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 23750 QUERY
+ENTRY_BEGIN
+RAW
+b7f580cf50104462608f0000000000000000
+ENTRY_END
+
+STEP 23760 QUERY
+ENTRY_BEGIN
+RAW
+b7f7f95250104470400b0000000000000000
+ENTRY_END
+
+STEP 23770 QUERY
+ENTRY_BEGIN
+RAW
+b7f73e4450104192b7560000000000000000
+ENTRY_END
+
+STEP 23780 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fcc200000204057801010402
+ENTRY_END
+
+STEP 23790 QUERY
+ENTRY_BEGIN
+RAW
+b7f7f9525018447060ec00000091a900000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 23800 QUERY
+ENTRY_BEGIN
+RAW
+b7f4c10b5010fd4ea65c0000000000000000
+ENTRY_END
+
+STEP 23810 QUERY
+ENTRY_BEGIN
+RAW
+b7f886a3501041a0e8fe0000000000000000
+ENTRY_END
+
+STEP 23820 QUERY
+ENTRY_BEGIN
+RAW
+b7f67a15501144623e650000000000000000
+ENTRY_END
+
+STEP 23830 QUERY
+ENTRY_BEGIN
+RAW
+b7f886a3501841a085450000008c7e71000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000
+ENTRY_END
+
+STEP 23840 QUERY
+ENTRY_BEGIN
+RAW
+b7f7f960501144623f770000000000000000
+ENTRY_END
+
+STEP 23850 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e70c0000020405b401010402
+ENTRY_END
+
+STEP 23860 QUERY
+ENTRY_BEGIN
+RAW
+b7f886b150114192e86f0000000000000000
+ENTRY_END
+
+STEP 23870 QUERY
+ENTRY_BEGIN
+RAW
+b7f7f961501044623f760000000000000000
+ENTRY_END
+
+STEP 23880 QUERY
+ENTRY_BEGIN
+RAW
+b7f886b250104192e86e0000000000000000
+ENTRY_END
+
+STEP 23890 QUERY
+ENTRY_BEGIN
+RAW
+b7f92d3c501044702a1b0000000000000000
+ENTRY_END
+
+STEP 23900 QUERY
+ENTRY_BEGIN
+RAW
+b7f92d3c5018447004fc00000091ef00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 23910 QUERY
+ENTRY_BEGIN
+RAW
+b7f67a16501044623e640000000000000000
+ENTRY_END
+
+STEP 23920 QUERY
+ENTRY_BEGIN
+RAW
+b7f92d4a5011446229870000000000000000
+ENTRY_END
+
+STEP 23930 QUERY
+ENTRY_BEGIN
+RAW
+b7f92d4b5010446229860000000000000000
+ENTRY_END
+
+STEP 23940 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240001be000000204056401010402
+ENTRY_END
+
+STEP 23950 QUERY
+ENTRY_BEGIN
+RAW
+b7fa1fad501040b06fec0000000000000000
+ENTRY_END
+
+STEP 23960 QUERY
+ENTRY_BEGIN
+RAW
+b7fa1fad501840b0d4e20000008c8580000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000
+ENTRY_END
+
+STEP 23970 QUERY
+ENTRY_BEGIN
+RAW
+b7fa1fbb501140a26f5d0000000000000000
+ENTRY_END
+
+STEP 23980 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400033e800000204056401010402
+ENTRY_END
+
+STEP 23990 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008d7c0000020405b401010402
+ENTRY_END
+
+STEP 24000 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007e4f0000020405b401010402
+ENTRY_END
+
+STEP 24010 QUERY
+ENTRY_BEGIN
+RAW
+b7fbf06c501044700d580000000000000000
+ENTRY_END
+
+STEP 24020 QUERY
+ENTRY_BEGIN
+RAW
+b7fbf06c501844706038000000917600000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 24030 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000deaa0000020405b401010402
+ENTRY_END
+
+STEP 24040 QUERY
+ENTRY_BEGIN
+RAW
+b7fa1fbc501040a26f5c0000000000000000
+ENTRY_END
+
+STEP 24050 QUERY
+ENTRY_BEGIN
+RAW
+b7faff1c501040b0a8840000000000000000
+ENTRY_END
+
+STEP 24060 QUERY
+ENTRY_BEGIN
+RAW
+b7faff1c501840b0bffb0000008cd400000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000
+ENTRY_END
+
+STEP 24070 QUERY
+ENTRY_BEGIN
+RAW
+b7fbf07a501144620cc40000000000000000
+ENTRY_END
+
+STEP 24080 QUERY
+ENTRY_BEGIN
+RAW
+b7fcabad5010447042e90000000000000000
+ENTRY_END
+
+STEP 24090 QUERY
+ENTRY_BEGIN
+RAW
+b7fd5e2d50104470f0c30000000000000000
+ENTRY_END
+
+STEP 24100 QUERY
+ENTRY_BEGIN
+RAW
+b7fcabad50184470e1cf000000940d40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd77403c4ef70003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24110 QUERY
+ENTRY_BEGIN
+RAW
+b7fd5e2d50184470679700000091d300000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 24120 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400001a90000020405b401010402
+ENTRY_END
+
+STEP 24130 QUERY
+ENTRY_BEGIN
+RAW
+b7faff2a501140a2a7f50000000000000000
+ENTRY_END
+
+STEP 24140 QUERY
+ENTRY_BEGIN
+RAW
+b7fbf07b501044620cc30000000000000000
+ENTRY_END
+
+STEP 24150 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d5fd00000204056401010402
+ENTRY_END
+
+STEP 24160 QUERY
+ENTRY_BEGIN
+RAW
+b7fddb875010447096670000000000000000
+ENTRY_END
+
+STEP 24170 QUERY
+ENTRY_BEGIN
+RAW
+b7fddb8750184470a44800000091bc00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 24180 QUERY
+ENTRY_BEGIN
+RAW
+b7fcabbb5011446242520000000000000000
+ENTRY_END
+
+STEP 24190 QUERY
+ENTRY_BEGIN
+RAW
+b7faff2b501040a2a7f40000000000000000
+ENTRY_END
+
+STEP 24200 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005a9d0000020405b401010402
+ENTRY_END
+
+STEP 24210 QUERY
+ENTRY_BEGIN
+RAW
+b7fe9a2d501040b0af850000000000000000
+ENTRY_END
+
+STEP 24220 QUERY
+ENTRY_BEGIN
+RAW
+b7fddb955011446295d30000000000000000
+ENTRY_END
+
+STEP 24230 QUERY
+ENTRY_BEGIN
+RAW
+b7fe9a2d501840b0787d0000008c2280000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000
+ENTRY_END
+
+STEP 24240 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c2190000020405b401010402
+ENTRY_END
+
+STEP 24250 QUERY
+ENTRY_BEGIN
+RAW
+b7fcabbc5010446242510000000000000000
+ENTRY_END
+
+STEP 24260 QUERY
+ENTRY_BEGIN
+RAW
+b7ff23a450104470a73d0000000000000000
+ENTRY_END
+
+STEP 24270 QUERY
+ENTRY_BEGIN
+RAW
+b7fddb965010446295d20000000000000000
+ENTRY_END
+
+STEP 24280 QUERY
+ENTRY_BEGIN
+RAW
+b7fe9a3b501140a2aef60000000000000000
+ENTRY_END
+
+STEP 24290 QUERY
+ENTRY_BEGIN
+RAW
+b7ff23a45018447075a400000094dcc0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd78403c4ef80003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24300 QUERY
+ENTRY_BEGIN
+RAW
+b7fd5e3b50114462f02f0000000000000000
+ENTRY_END
+
+STEP 24310 QUERY
+ENTRY_BEGIN
+RAW
+b7fff478501044703de50000000000000000
+ENTRY_END
+
+STEP 24320 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab080000020405b401010402
+ENTRY_END
+
+STEP 24330 QUERY
+ENTRY_BEGIN
+RAW
+b7fff4785018447043c600000091c400000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000
+ENTRY_END
+
+STEP 24340 QUERY
+ENTRY_BEGIN
+RAW
+b7fe9a3c501040a2aef50000000000000000
+ENTRY_END
+
+STEP 24350 QUERY
+ENTRY_BEGIN
+RAW
+b7ff23b250114462a6a60000000000000000
+ENTRY_END
+
+STEP 24360 QUERY
+ENTRY_BEGIN
+RAW
+b7fff486501144623d510000000000000000
+ENTRY_END
+
+STEP 24370 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400093ce0000020405b401010402
+ENTRY_END
+
+STEP 24380 QUERY
+ENTRY_BEGIN
+RAW
+b7fd5e3c50104462f02e0000000000000000
+ENTRY_END
+
+STEP 24390 QUERY
+ENTRY_BEGIN
+RAW
+b8008be0501044708f6b0000000000000000
+ENTRY_END
+
+STEP 24400 QUERY
+ENTRY_BEGIN
+RAW
+b7fff487501044623d500000000000000000
+ENTRY_END
+
+STEP 24410 QUERY
+ENTRY_BEGIN
+RAW
+b8008be050184470c140000000911900000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 24420 QUERY
+ENTRY_BEGIN
+RAW
+b7ff23b350104462a6a50000000000000000
+ENTRY_END
+
+STEP 24430 QUERY
+ENTRY_BEGIN
+RAW
+b8013f7f50104470c4910000000000000000
+ENTRY_END
+
+STEP 24440 QUERY
+ENTRY_BEGIN
+RAW
+b8008bee501144628ed70000000000000000
+ENTRY_END
+
+STEP 24450 QUERY
+ENTRY_BEGIN
+RAW
+b8013f7f501844705a39000000941580000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd78403c4ef80003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24460 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400087580000020405b401010402
+ENTRY_END
+
+STEP 24470 QUERY
+ENTRY_BEGIN
+RAW
+b8013f8d50114462c3fa0000000000000000
+ENTRY_END
+
+STEP 24480 QUERY
+ENTRY_BEGIN
+RAW
+b8013f8e50104462c3f90000000000000000
+ENTRY_END
+
+STEP 24490 QUERY
+ENTRY_BEGIN
+RAW
+b8008bef501044628ed60000000000000000
+ENTRY_END
+
+STEP 24500 QUERY
+ENTRY_BEGIN
+RAW
+b80237e650104470bfb30000000000000000
+ENTRY_END
+
+STEP 24510 QUERY
+ENTRY_BEGIN
+RAW
+b80237e650184470d108000000913980000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000
+ENTRY_END
+
+STEP 24520 QUERY
+ENTRY_BEGIN
+RAW
+b80237f450114462bf1f0000000000000000
+ENTRY_END
+
+STEP 24530 QUERY
+ENTRY_BEGIN
+RAW
+b80237f550104462bf1e0000000000000000
+ENTRY_END
+
+STEP 24540 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006a560000020405b401010402
+ENTRY_END
+
+STEP 24550 QUERY
+ENTRY_BEGIN
+RAW
+b80679815010447061120000000000000000
+ENTRY_END
+
+STEP 24560 QUERY
+ENTRY_BEGIN
+RAW
+b806798150184470b338000000945600000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24570 QUERY
+ENTRY_BEGIN
+RAW
+b806798f50114462607b0000000000000000
+ENTRY_END
+
+STEP 24580 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009e400000020405b401010402
+ENTRY_END
+
+STEP 24590 QUERY
+ENTRY_BEGIN
+RAW
+b806799050104462607a0000000000000000
+ENTRY_END
+
+STEP 24600 QUERY
+ENTRY_BEGIN
+RAW
+b8070e5a5010447000230000000000000000
+ENTRY_END
+
+STEP 24610 QUERY
+ENTRY_BEGIN
+RAW
+b8070e5a501844701a8a000000948ec0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24620 QUERY
+ENTRY_BEGIN
+RAW
+b8070e6850114462ff8b0000000000000000
+ENTRY_END
+
+STEP 24630 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240009a4a0000020405b401010402
+ENTRY_END
+
+STEP 24640 QUERY
+ENTRY_BEGIN
+RAW
+b8070e6950104462ff8a0000000000000000
+ENTRY_END
+
+STEP 24650 QUERY
+ENTRY_BEGIN
+RAW
+b807ad57501044705d2f0000000000000000
+ENTRY_END
+
+STEP 24660 QUERY
+ENTRY_BEGIN
+RAW
+b807ad5750184470d616000000943040000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24670 QUERY
+ENTRY_BEGIN
+RAW
+b807ad65501144625c980000000000000000
+ENTRY_END
+
+STEP 24680 QUERY
+ENTRY_BEGIN
+RAW
+b807ad66501044625c970000000000000000
+ENTRY_END
+
+STEP 24690 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000b5a30000020405b401010402
+ENTRY_END
+
+STEP 24700 QUERY
+ENTRY_BEGIN
+RAW
+b8083fa650104470e6380000000000000000
+ENTRY_END
+
+STEP 24710 QUERY
+ENTRY_BEGIN
+RAW
+b8083fa650184470331f000000945b40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24720 QUERY
+ENTRY_BEGIN
+RAW
+b8083fb450114462e5a10000000000000000
+ENTRY_END
+
+STEP 24730 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab0a0000020405b401010402
+ENTRY_END
+
+STEP 24740 QUERY
+ENTRY_BEGIN
+RAW
+b8083fb550104462e5a00000000000000000
+ENTRY_END
+
+STEP 24750 QUERY
+ENTRY_BEGIN
+RAW
+b80933a250104470e7a20000000000000000
+ENTRY_END
+
+STEP 24760 QUERY
+ENTRY_BEGIN
+RAW
+b80933a250184470fcc9000000949400000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24770 QUERY
+ENTRY_BEGIN
+RAW
+b80933b050114462e70b0000000000000000
+ENTRY_END
+
+STEP 24780 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fdbe0000020405b401010402
+ENTRY_END
+
+STEP 24790 QUERY
+ENTRY_BEGIN
+RAW
+b80b2b8e5010447042690000000000000000
+ENTRY_END
+
+STEP 24800 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a29f0000020405b401010402
+ENTRY_END
+
+STEP 24810 QUERY
+ENTRY_BEGIN
+RAW
+b80b2b8e5018447092d00000009458c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000
+ENTRY_END
+
+STEP 24820 QUERY
+ENTRY_BEGIN
+RAW
+b80933b150104462e70a0000000000000000
+ENTRY_END
+
+STEP 24830 QUERY
+ENTRY_BEGIN
+RAW
+b80b2b9c5011446241d20000000000000000
+ENTRY_END
+
+STEP 24840 QUERY
+ENTRY_BEGIN
+RAW
+b80c085d501044700a7a0000000000000000
+ENTRY_END
+
+STEP 24850 QUERY
+ENTRY_BEGIN
+RAW
+b80b2b9d5010446241d10000000000000000
+ENTRY_END
+
+STEP 24860 QUERY
+ENTRY_BEGIN
+RAW
+b80c085d5018447053cd0000008b07ac000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd53403c4ed300030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000
+ENTRY_END
+
+STEP 24870 QUERY
+ENTRY_BEGIN
+RAW
+b80c086b5011446209ec0000000000000000
+ENTRY_END
+
+STEP 24880 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ab970000020405b401010402
+ENTRY_END
+
+STEP 24890 QUERY
+ENTRY_BEGIN
+RAW
+b80c086c5010446209eb0000000000000000
+ENTRY_END
+
+STEP 24900 QUERY
+ENTRY_BEGIN
+RAW
+b80c8b7b5010447090530000000000000000
+ENTRY_END
+
+STEP 24910 QUERY
+ENTRY_BEGIN
+RAW
+b80c8b7b501844702c170000008bb43c000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd54403c4ed400030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000
+ENTRY_END
+
+STEP 24920 QUERY
+ENTRY_BEGIN
+RAW
+b80c8b89501144628fc50000000000000000
+ENTRY_END
+
+STEP 24930 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400063ad0000020405b401010402
+ENTRY_END
+
+STEP 24940 QUERY
+ENTRY_BEGIN
+RAW
+b80c8b8a501044628fc40000000000000000
+ENTRY_END
+
+STEP 24950 QUERY
+ENTRY_BEGIN
+RAW
+b80d337550104470a06e0000000000000000
+ENTRY_END
+
+STEP 24960 QUERY
+ENTRY_BEGIN
+RAW
+b80d337550184470f99b0000008bf6d2000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd54403c4ed400030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000
+ENTRY_END
+
+STEP 24970 QUERY
+ENTRY_BEGIN
+RAW
+b80d3383501144629fe00000000000000000
+ENTRY_END
+
+STEP 24980 QUERY
+ENTRY_BEGIN
+RAW
+b80d3384501044629fdf0000000000000000
+ENTRY_END
+
+STEP 24990 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400007cf0000020405b401010402
+ENTRY_END
+
+STEP 25000 QUERY
+ENTRY_BEGIN
+RAW
+b80f1979501044705e8a0000000000000000
+ENTRY_END
+
+STEP 25010 QUERY
+ENTRY_BEGIN
+RAW
+b80f19795018447087170000008ba547000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000
+ENTRY_END
+
+STEP 25020 QUERY
+ENTRY_BEGIN
+RAW
+b80f1987501144625dfc0000000000000000
+ENTRY_END
+
+STEP 25030 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400013fa0000020405b401010402
+ENTRY_END
+
+STEP 25040 QUERY
+ENTRY_BEGIN
+RAW
+b80f1988501044625dfb0000000000000000
+ENTRY_END
+
+STEP 25050 QUERY
+ENTRY_BEGIN
+RAW
+b8100fa250104470748b0000000000000000
+ENTRY_END
+
+STEP 25060 QUERY
+ENTRY_BEGIN
+RAW
+b8100fa250184470efe20000008b547d000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000
+ENTRY_END
+
+STEP 25070 QUERY
+ENTRY_BEGIN
+RAW
+b8100fb05011446273fd0000000000000000
+ENTRY_END
+
+STEP 25080 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400030df0000020405b401010402
+ENTRY_END
+
+STEP 25090 QUERY
+ENTRY_BEGIN
+RAW
+b8100fb15010446273fc0000000000000000
+ENTRY_END
+
+STEP 25100 QUERY
+ENTRY_BEGIN
+RAW
+b81096d8501044700a3a0000000000000000
+ENTRY_END
+
+STEP 25110 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf043bb0000020405b401010402
+ENTRY_END
+
+STEP 25120 QUERY
+ENTRY_BEGIN
+RAW
+b81096d8501844706e000000008b6c0e000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000
+ENTRY_END
+
+STEP 25130 QUERY
+ENTRY_BEGIN
+RAW
+b81096e65011446209ac0000000000000000
+ENTRY_END
+
+STEP 25140 QUERY
+ENTRY_BEGIN
+RAW
+b81096e75010446209ab0000000000000000
+ENTRY_END
+
+STEP 25150 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400074a10000020405b401010402
+ENTRY_END
+
+STEP 25160 QUERY
+ENTRY_BEGIN
+RAW
+b812ca7a501044701a580000000000000000
+ENTRY_END
+
+STEP 25170 QUERY
+ENTRY_BEGIN
+RAW
+b812ca7a50184470b4fb00000090ef06000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fb403b037b0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000
+ENTRY_END
+
+STEP 25180 QUERY
+ENTRY_BEGIN
+RAW
+b812ca885011446219c50000000000000000
+ENTRY_END
+
+STEP 25190 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d8060000020405b401010402
+ENTRY_END
+
+STEP 25200 QUERY
+ENTRY_BEGIN
+RAW
+b812ca895010446219c40000000000000000
+ENTRY_END
+
+STEP 25210 QUERY
+ENTRY_BEGIN
+RAW
+b81344c45010447003730000000000000000
+ENTRY_END
+
+STEP 25220 QUERY
+ENTRY_BEGIN
+RAW
+b81344c450184470d4fb00000090b722000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fc403b037c0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000
+ENTRY_END
+
+STEP 25230 QUERY
+ENTRY_BEGIN
+RAW
+b81344d25011446202e00000000000000000
+ENTRY_END
+
+STEP 25240 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000aad60000020405b401010402
+ENTRY_END
+
+STEP 25250 QUERY
+ENTRY_BEGIN
+RAW
+b81344d35010446202df0000000000000000
+ENTRY_END
+
+STEP 25260 QUERY
+ENTRY_BEGIN
+RAW
+b813e03f501044703ac70000000000000000
+ENTRY_END
+
+STEP 25270 QUERY
+ENTRY_BEGIN
+RAW
+b813e03f50184470df7500000090e3fc000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fc403b037c0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000
+ENTRY_END
+
+STEP 25280 QUERY
+ENTRY_BEGIN
+RAW
+b813e04d501144623a340000000000000000
+ENTRY_END
+
+STEP 25290 QUERY
+ENTRY_BEGIN
+RAW
+b813e04e501044623a330000000000000000
+ENTRY_END
+
+STEP 25300 QUERY
+ENTRY_BEGIN
+RAW
+1a4e00000001000000000000087461786932303030026e6c00000f000100
+ENTRY_END
+
+STEP 25310 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000322000000204057a01010402
+ENTRY_END
+
+STEP 25320 QUERY
+ENTRY_BEGIN
+RAW
+b81609ca501041b89b010000000000000000
+ENTRY_END
+
+STEP 25330 QUERY
+ENTRY_BEGIN
+RAW
+b81609ca501841b82920000000944f25000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 25340 QUERY
+ENTRY_BEGIN
+RAW
+b81609d8501141aa9a6a0000000000000000
+ENTRY_END
+
+STEP 25350 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000436000000204057a01010402
+ENTRY_END
+
+STEP 25360 QUERY
+ENTRY_BEGIN
+RAW
+b81609d9501041aa9a690000000000000000
+ENTRY_END
+
+STEP 25370 QUERY
+ENTRY_BEGIN
+RAW
+b81695d2501041b820390000000000000000
+ENTRY_END
+
+STEP 25380 QUERY
+ENTRY_BEGIN
+RAW
+b81695d2501841b87aad0000009483d0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 25390 QUERY
+ENTRY_BEGIN
+RAW
+b81695e0501141aa1fa20000000000000000
+ENTRY_END
+
+STEP 25400 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000b3700000204057a01010402
+ENTRY_END
+
+STEP 25410 QUERY
+ENTRY_BEGIN
+RAW
+b81695e1501041aa1fa10000000000000000
+ENTRY_END
+
+STEP 25420 QUERY
+ENTRY_BEGIN
+RAW
+b8171898501041b865490000000000000000
+ENTRY_END
+
+STEP 25430 QUERY
+ENTRY_BEGIN
+RAW
+b8171898501841b8206e000000942320000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 25440 QUERY
+ENTRY_BEGIN
+RAW
+b81718a6501141aa64b20000000000000000
+ENTRY_END
+
+STEP 25450 QUERY
+ENTRY_BEGIN
+RAW
+b81718a7501041aa64b10000000000000000
+ENTRY_END
+
+STEP 25460 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf052f200000204057a01010402
+ENTRY_END
+
+STEP 25470 QUERY
+ENTRY_BEGIN
+RAW
+b817bc735010fbec09e50000000000000000
+ENTRY_END
+
+STEP 25480 QUERY
+ENTRY_BEGIN
+RAW
+b817bc735018fbecebda00000091c518000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000
+ENTRY_END
+
+STEP 25490 QUERY
+ENTRY_BEGIN
+RAW
+b817bc815011fbde09510000000000000000
+ENTRY_END
+
+STEP 25500 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d21400000204057a01010402
+ENTRY_END
+
+STEP 25510 QUERY
+ENTRY_BEGIN
+RAW
+b817bc825010fbde09500000000000000000
+ENTRY_END
+
+STEP 25520 QUERY
+ENTRY_BEGIN
+RAW
+b818a4a45010fbeca0d50000000000000000
+ENTRY_END
+
+STEP 25530 QUERY
+ENTRY_BEGIN
+RAW
+b818a4a45018fbec05b5000000914330000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000
+ENTRY_END
+
+STEP 25540 QUERY
+ENTRY_BEGIN
+RAW
+b818a4b25011fbdea0410000000000000000
+ENTRY_END
+
+STEP 25550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf01cad00000204057a01010402
+ENTRY_END
+
+STEP 25560 QUERY
+ENTRY_BEGIN
+RAW
+b818a4b35010fbdea0400000000000000000
+ENTRY_END
+
+STEP 25570 QUERY
+ENTRY_BEGIN
+RAW
+b8198d495010fbec02c80000000000000000
+ENTRY_END
+
+STEP 25580 QUERY
+ENTRY_BEGIN
+RAW
+b8198d495018fbeccd2600000091ddb0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000
+ENTRY_END
+
+STEP 25590 QUERY
+ENTRY_BEGIN
+RAW
+b8198d575011fbde02340000000000000000
+ENTRY_END
+
+STEP 25600 QUERY
+ENTRY_BEGIN
+RAW
+b8198d585010fbde02330000000000000000
+ENTRY_END
+
+STEP 25610 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0686900000204055001010402
+ENTRY_END
+
+STEP 25620 QUERY
+ENTRY_BEGIN
+RAW
+b81b91965010ff0046f70000000000000000
+ENTRY_END
+
+STEP 25630 QUERY
+ENTRY_BEGIN
+RAW
+b81b91965018ff00d263000000923613000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 25640 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240008b6f0000020405b401010402
+ENTRY_END
+
+STEP 25650 QUERY
+ENTRY_BEGIN
+RAW
+b81b91a45011fef246620000000000000000
+ENTRY_END
+
+STEP 25660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c61600000204055001010402
+ENTRY_END
+
+STEP 25670 QUERY
+ENTRY_BEGIN
+RAW
+b81b91a55010fef246610000000000000000
+ENTRY_END
+
+STEP 25680 QUERY
+ENTRY_BEGIN
+RAW
+b81cbbfa5010ff007a3f0000000000000000
+ENTRY_END
+
+STEP 25690 QUERY
+ENTRY_BEGIN
+RAW
+b81c194650104470e2500000000000000000
+ENTRY_END
+
+STEP 25700 QUERY
+ENTRY_BEGIN
+RAW
+b81cbbfa5018ff003f8e00000092fd31000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 25710 QUERY
+ENTRY_BEGIN
+RAW
+b81cbc085011fef279aa0000000000000000
+ENTRY_END
+
+STEP 25720 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0092500000204055001010402
+ENTRY_END
+
+STEP 25730 QUERY
+ENTRY_BEGIN
+RAW
+b81c1946501844707e040000008cd8b0000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 25740 QUERY
+ENTRY_BEGIN
+RAW
+b81da63a5010ff00d30c0000000000000000
+ENTRY_END
+
+STEP 25750 QUERY
+ENTRY_BEGIN
+RAW
+b81da63a5018ff00d13d00000092c44f000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 25760 QUERY
+ENTRY_BEGIN
+RAW
+b81da6485011fef2d2770000000000000000
+ENTRY_END
+
+STEP 25770 QUERY
+ENTRY_BEGIN
+RAW
+b81c195450114462e1c10000000000000000
+ENTRY_END
+
+STEP 25780 QUERY
+ENTRY_BEGIN
+RAW
+b81da6495010fef2d2760000000000000000
+ENTRY_END
+
+STEP 25790 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000572f0000020405b401010402
+ENTRY_END
+
+STEP 25800 QUERY
+ENTRY_BEGIN
+RAW
+b81c195550104462e1c00000000000000000
+ENTRY_END
+
+STEP 25810 QUERY
+ENTRY_BEGIN
+RAW
+b81e3ea55010447088af0000000000000000
+ENTRY_END
+
+STEP 25820 QUERY
+ENTRY_BEGIN
+RAW
+b81e3ea550184470b8510000008c45c3000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 25830 QUERY
+ENTRY_BEGIN
+RAW
+b81e3eb35011446288200000000000000000
+ENTRY_END
+
+STEP 25840 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400007d90000020405b401010402
+ENTRY_END
+
+STEP 25850 QUERY
+ENTRY_BEGIN
+RAW
+b81e3eb450104462881f0000000000000000
+ENTRY_END
+
+STEP 25860 QUERY
+ENTRY_BEGIN
+RAW
+b81eec12501044708beb0000000000000000
+ENTRY_END
+
+STEP 25870 QUERY
+ENTRY_BEGIN
+RAW
+b81eec125018447092a40000008c6eac000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000
+ENTRY_END
+
+STEP 25880 QUERY
+ENTRY_BEGIN
+RAW
+b81eec20501144628b5c0000000000000000
+ENTRY_END
+
+STEP 25890 QUERY
+ENTRY_BEGIN
+RAW
+b81eec21501044628b5b0000000000000000
+ENTRY_END
+
+STEP 25900 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400010370000020405b401010402
+ENTRY_END
+
+STEP 25910 QUERY
+ENTRY_BEGIN
+RAW
+b820ebd95010447094800000000000000000
+ENTRY_END
+
+STEP 25920 QUERY
+ENTRY_BEGIN
+RAW
+b820ebd950184470da910000008ef600000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 25930 QUERY
+ENTRY_BEGIN
+RAW
+b820ebe75011446293ef0000000000000000
+ENTRY_END
+
+STEP 25940 QUERY
+ENTRY_BEGIN
+RAW
+b820ebe85010446293ee0000000000000000
+ENTRY_END
+
+STEP 25950 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000cbcf0000020405b401010402
+ENTRY_END
+
+STEP 25960 QUERY
+ENTRY_BEGIN
+RAW
+b821db135010447060de0000000000000000
+ENTRY_END
+
+STEP 25970 QUERY
+ENTRY_BEGIN
+RAW
+b821db13501844703ff10000008e5e00000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 25980 QUERY
+ENTRY_BEGIN
+RAW
+b821db2150114462604d0000000000000000
+ENTRY_END
+
+STEP 25990 QUERY
+ENTRY_BEGIN
+RAW
+b821db2250104462604c0000000000000000
+ENTRY_END
+
+STEP 26000 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400024f30000020405b401010402
+ENTRY_END
+
+STEP 26010 QUERY
+ENTRY_BEGIN
+RAW
+b8229fc850104470f54b0000000000000000
+ENTRY_END
+
+STEP 26020 QUERY
+ENTRY_BEGIN
+RAW
+b8229fc850184470795e0000008eb900000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 26030 QUERY
+ENTRY_BEGIN
+RAW
+b8229fd650114462f4ba0000000000000000
+ENTRY_END
+
+STEP 26040 QUERY
+ENTRY_BEGIN
+RAW
+b8229fd750104462f4b90000000000000000
+ENTRY_END
+
+STEP 26050 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007f1e00000204057801010402
+ENTRY_END
+
+STEP 26060 QUERY
+ENTRY_BEGIN
+RAW
+b82500fd501041a0f0d30000000000000000
+ENTRY_END
+
+STEP 26070 QUERY
+ENTRY_BEGIN
+RAW
+b82500fd501841a0fa410000008d6f40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000
+ENTRY_END
+
+STEP 26080 QUERY
+ENTRY_BEGIN
+RAW
+b825010b50114192f0430000000000000000
+ENTRY_END
+
+STEP 26090 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400048c400000204057801010402
+ENTRY_END
+
+STEP 26100 QUERY
+ENTRY_BEGIN
+RAW
+b825010c50104192f0420000000000000000
+ENTRY_END
+
+STEP 26110 QUERY
+ENTRY_BEGIN
+RAW
+b825ba8a501041a000ec0000000000000000
+ENTRY_END
+
+STEP 26120 QUERY
+ENTRY_BEGIN
+RAW
+b825ba8a501841a08ada0000008defc0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000
+ENTRY_END
+
+STEP 26130 QUERY
+ENTRY_BEGIN
+RAW
+b825ba9850114192005c0000000000000000
+ENTRY_END
+
+STEP 26140 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240004f1300000204057801010402
+ENTRY_END
+
+STEP 26150 QUERY
+ENTRY_BEGIN
+RAW
+b825ba9950104192005b0000000000000000
+ENTRY_END
+
+STEP 26160 QUERY
+ENTRY_BEGIN
+RAW
+b8269830501041a029940000000000000000
+ENTRY_END
+
+STEP 26170 QUERY
+ENTRY_BEGIN
+RAW
+b8269830501841a08f030000008d1440000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000
+ENTRY_END
+
+STEP 26180 QUERY
+ENTRY_BEGIN
+RAW
+b826983e5011419229040000000000000000
+ENTRY_END
+
+STEP 26190 QUERY
+ENTRY_BEGIN
+RAW
+b826983f5010419229030000000000000000
+ENTRY_END
+
+STEP 26200 QUERY
+ENTRY_BEGIN
+RAW
+b81cbc0950100000789c0000000000000000
+ENTRY_END
+
+STEP 26210 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000945300000204057a01010402
+ENTRY_END
+
+STEP 26220 QUERY
+ENTRY_BEGIN
+RAW
+b8289ecf501041b8681d0000000000000000
+ENTRY_END
+
+STEP 26230 QUERY
+ENTRY_BEGIN
+RAW
+b8289ecf501841b8c24a0000008eaff4000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 26240 QUERY
+ENTRY_BEGIN
+RAW
+b8289edd501141aa678c0000000000000000
+ENTRY_END
+
+STEP 26250 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000c58e00000204057a01010402
+ENTRY_END
+
+STEP 26260 QUERY
+ENTRY_BEGIN
+RAW
+b8289ede501041aa678b0000000000000000
+ENTRY_END
+
+STEP 26270 QUERY
+ENTRY_BEGIN
+RAW
+b829975b501041b8a0cb0000000000000000
+ENTRY_END
+
+STEP 26280 QUERY
+ENTRY_BEGIN
+RAW
+b829975b501841b87ebc0000008e2d32000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 26290 QUERY
+ENTRY_BEGIN
+RAW
+b8299769501141aaa03a0000000000000000
+ENTRY_END
+
+STEP 26300 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400035ff00000204057a01010402
+ENTRY_END
+
+STEP 26310 QUERY
+ENTRY_BEGIN
+RAW
+b829976a501041aaa0390000000000000000
+ENTRY_END
+
+STEP 26320 QUERY
+ENTRY_BEGIN
+RAW
+b82a2f49501041b8794d0000000000000000
+ENTRY_END
+
+STEP 26330 QUERY
+ENTRY_BEGIN
+RAW
+b82a2f49501841b8d9ff0000008eaa70000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 26340 QUERY
+ENTRY_BEGIN
+RAW
+b82a2f57501141aa78bc0000000000000000
+ENTRY_END
+
+STEP 26350 QUERY
+ENTRY_BEGIN
+RAW
+b82a2f58501041aa78bb0000000000000000
+ENTRY_END
+
+STEP 26360 QUERY
+ENTRY_BEGIN
+RAW
+00000000b002832c24a30000010303010101080a11235f89000000000101040202040564
+ENTRY_END
+
+STEP 26370 QUERY
+ENTRY_BEGIN
+RAW
+b82b27518010859879ee00000101080a11235f8a0128080f
+ENTRY_END
+
+;STEP 26380 QUERY
+;ENTRY_BEGIN
+;RAW
+;2c3901000001000000000000056b6f726e6f026e6c00000f000100
+;ENTRY_END
+
+STEP 26390 QUERY
+ENTRY_BEGIN
+RAW
+b82b275180188598d42e00000101080a11235f9a0128080f008e55dc000000010001000000000f313330353637303035383030322d330000f900010f313330353637303035383030322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc71403c4df100030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000
+ENTRY_END
+
+STEP 26400 QUERY
+ENTRY_BEGIN
+RAW
+b82b275f80108598793f00000101080a11235f9b0128080f
+ENTRY_END
+
+STEP 26410 QUERY
+ENTRY_BEGIN
+RAW
+b82b275f8011859878e700000101080a11235ff20128080f
+ENTRY_END
+
+STEP 26420 QUERY
+ENTRY_BEGIN
+RAW
+b82b27608010859878e300000101080a11235ff301280811
+ENTRY_END
+
+STEP 26430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fca499ac00000204057e01010402
+ENTRY_END
+
+STEP 26440 QUERY
+ENTRY_BEGIN
+RAW
+b82fe4a45010fca429560000000000000000
+ENTRY_END
+
+STEP 26450 QUERY
+ENTRY_BEGIN
+RAW
+b82fe4a45018fca4909e000000927690000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000
+ENTRY_END
+
+STEP 26460 QUERY
+ENTRY_BEGIN
+RAW
+b82fe4b25011fc9628c10000000000000000
+ENTRY_END
+
+STEP 26470 QUERY
+ENTRY_BEGIN
+RAW
+b82fe4b35010fc9628c00000000000000000
+ENTRY_END
+
+STEP 26480 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fca4a2d800000204057e01010402
+ENTRY_END
+
+STEP 26490 QUERY
+ENTRY_BEGIN
+RAW
+b830dc6f5010fca43ab60000000000000000
+ENTRY_END
+
+STEP 26500 QUERY
+ENTRY_BEGIN
+RAW
+b830dc6f5018fca4199f00000092fff0000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000
+ENTRY_END
+
+STEP 26510 QUERY
+ENTRY_BEGIN
+RAW
+b830dc7d5011fc963a210000000000000000
+ENTRY_END
+
+STEP 26520 QUERY
+ENTRY_BEGIN
+RAW
+b830dc7e5010fc963a200000000000000000
+ENTRY_END
+
+STEP 26530 QUERY
+ENTRY_BEGIN
+RAW
+000000007002fca4bdb400000204057e01010402
+ENTRY_END
+
+STEP 26540 QUERY
+ENTRY_BEGIN
+RAW
+b831aa875010fca487790000000000000000
+ENTRY_END
+
+STEP 26550 QUERY
+ENTRY_BEGIN
+RAW
+b831aa875018fca4dd02000000928950000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000
+ENTRY_END
+
+STEP 26560 QUERY
+ENTRY_BEGIN
+RAW
+b831aa955011fc9686e40000000000000000
+ENTRY_END
+
+STEP 26570 QUERY
+ENTRY_BEGIN
+RAW
+00000000b002832c74fc0000010303010101080a11236035000000000101040202040564
+ENTRY_END
+
+STEP 26580 QUERY
+ENTRY_BEGIN
+RAW
+b8324e3480108598a35a00000101080a1123603601280812
+ENTRY_END
+
+STEP 26590 QUERY
+ENTRY_BEGIN
+RAW
+b831aa965010fc9686e30000000000000000
+ENTRY_END
+
+STEP 26600 QUERY
+ENTRY_BEGIN
+RAW
+b8324e34801885988e7200000101080a1123604b01280812008ec200000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc73403c4df300030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000
+ENTRY_END
+
+STEP 26610 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0747000000204056401010402
+ENTRY_END
+
+STEP 26620 QUERY
+ENTRY_BEGIN
+RAW
+b8324e4280108598a2a600000101080a1123604b01280813
+ENTRY_END
+
+STEP 26630 QUERY
+ENTRY_BEGIN
+RAW
+b8344c685010fd5c99cb0000000000000000
+ENTRY_END
+
+STEP 26640 QUERY
+ENTRY_BEGIN
+RAW
+b8344c685018fd5c25800000008e4c97000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 26650 QUERY
+ENTRY_BEGIN
+RAW
+b8344c765011fd4e993a0000000000000000
+ENTRY_END
+
+STEP 26660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf063ec00000204056401010402
+ENTRY_END
+
+STEP 26670 QUERY
+ENTRY_BEGIN
+RAW
+b8344c775010fd4e99390000000000000000
+ENTRY_END
+
+STEP 26680 QUERY
+ENTRY_BEGIN
+RAW
+b83533955010fd5ca2190000000000000000
+ENTRY_END
+
+STEP 26690 QUERY
+ENTRY_BEGIN
+RAW
+b83533955018fd5c53880000008e27de000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 26700 QUERY
+ENTRY_BEGIN
+RAW
+b83533a35011fd4ea1880000000000000000
+ENTRY_END
+
+STEP 26710 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0873e00000204056401010402
+ENTRY_END
+
+STEP 26720 QUERY
+ENTRY_BEGIN
+RAW
+b83533a45010fd4ea1870000000000000000
+ENTRY_END
+
+STEP 26730 QUERY
+ENTRY_BEGIN
+RAW
+b835f3265010fd5c05da0000000000000000
+ENTRY_END
+
+STEP 26740 QUERY
+ENTRY_BEGIN
+RAW
+b835f3265018fd5c0b910000008ed395000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000
+ENTRY_END
+
+STEP 26750 QUERY
+ENTRY_BEGIN
+RAW
+b835f3345011fd4e05490000000000000000
+ENTRY_END
+
+STEP 26760 QUERY
+ENTRY_BEGIN
+RAW
+b835f3355010fd4e05480000000000000000
+ENTRY_END
+
+STEP 26770 QUERY
+ENTRY_BEGIN
+RAW
+b8324e4280118598a25e00000101080a1123609201280813
+ENTRY_END
+
+STEP 26780 QUERY
+ENTRY_BEGIN
+RAW
+b8324e4380108598a25b00000101080a1123609301280814
+ENTRY_END
+
+STEP 26790 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06f4c0000020405b401010402
+ENTRY_END
+
+STEP 26800 QUERY
+ENTRY_BEGIN
+RAW
+b83838215010faf0aba60000000000000000
+ENTRY_END
+
+STEP 26810 QUERY
+ENTRY_BEGIN
+RAW
+b83838215018faf04ae500000088c200000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 26820 QUERY
+ENTRY_BEGIN
+RAW
+b838382f5011fae2ab1b0000000000000000
+ENTRY_END
+
+STEP 26830 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf09b570000020405b401010402
+ENTRY_END
+
+STEP 26840 QUERY
+ENTRY_BEGIN
+RAW
+b83838305010fae2ab1a0000000000000000
+ENTRY_END
+
+STEP 26850 QUERY
+ENTRY_BEGIN
+RAW
+b83916d95010faf0f8f80000000000000000
+ENTRY_END
+
+STEP 26860 QUERY
+ENTRY_BEGIN
+RAW
+b83916d95018faf0b1dc00000088a95c000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 26870 QUERY
+ENTRY_BEGIN
+RAW
+b83916e75011fae2f86d0000000000000000
+ENTRY_END
+
+STEP 26880 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b4fb0000020405b401010402
+ENTRY_END
+
+STEP 26890 QUERY
+ENTRY_BEGIN
+RAW
+b83916e85010fae2f86c0000000000000000
+ENTRY_END
+
+STEP 26900 QUERY
+ENTRY_BEGIN
+RAW
+b83af3e45010faf035900000000000000000
+ENTRY_END
+
+STEP 26910 QUERY
+ENTRY_BEGIN
+RAW
+b83af3e45018faf02fd0000000886800000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 26920 QUERY
+ENTRY_BEGIN
+RAW
+b83af3f25011fae235050000000000000000
+ENTRY_END
+
+STEP 26930 QUERY
+ENTRY_BEGIN
+RAW
+b83af3f35010fae235040000000000000000
+ENTRY_END
+
+STEP 26940 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000796d00000204057a01010402
+ENTRY_END
+
+STEP 26950 QUERY
+ENTRY_BEGIN
+RAW
+b83be921501041b802d20000000000000000
+ENTRY_END
+
+STEP 26960 QUERY
+ENTRY_BEGIN
+RAW
+b83be921501841b8a70b0000008e5fe8000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 26970 QUERY
+ENTRY_BEGIN
+RAW
+b83be92f501141aa02410000000000000000
+ENTRY_END
+
+STEP 26980 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000882000000204057a01010402
+ENTRY_END
+
+STEP 26990 QUERY
+ENTRY_BEGIN
+RAW
+b83be930501041aa02400000000000000000
+ENTRY_END
+
+STEP 27000 QUERY
+ENTRY_BEGIN
+RAW
+b83cde58501041b81c4d0000000000000000
+ENTRY_END
+
+STEP 27010 QUERY
+ENTRY_BEGIN
+RAW
+b83cde58501841b844490000008edd26000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 27020 QUERY
+ENTRY_BEGIN
+RAW
+b83cde66501141aa1bbc0000000000000000
+ENTRY_END
+
+STEP 27030 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f57d00000204057a01010402
+ENTRY_END
+
+STEP 27040 QUERY
+ENTRY_BEGIN
+RAW
+b83cde67501041aa1bbb0000000000000000
+ENTRY_END
+
+STEP 27050 QUERY
+ENTRY_BEGIN
+RAW
+b83db28d501041b8b5740000000000000000
+ENTRY_END
+
+STEP 27060 QUERY
+ENTRY_BEGIN
+RAW
+b83db28d501841b830130000008e8a84000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000
+ENTRY_END
+
+STEP 27070 QUERY
+ENTRY_BEGIN
+RAW
+b83db29b501141aab4e30000000000000000
+ENTRY_END
+
+STEP 27080 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000dd470000020405b401010402
+ENTRY_END
+
+STEP 27090 QUERY
+ENTRY_BEGIN
+RAW
+b83db29c501041aab4e20000000000000000
+ENTRY_END
+
+STEP 27100 QUERY
+ENTRY_BEGIN
+RAW
+b83e9b2e50104470b21e0000000000000000
+ENTRY_END
+
+STEP 27110 QUERY
+ENTRY_BEGIN
+RAW
+b83e9b2e50184470d9ec0000008e0c44000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 27120 QUERY
+ENTRY_BEGIN
+RAW
+b83e9b3c50114462b18d0000000000000000
+ENTRY_END
+
+STEP 27130 QUERY
+ENTRY_BEGIN
+RAW
+b83e9b3d50104462b18c0000000000000000
+ENTRY_END
+
+STEP 27140 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e2d50000020405b401010402
+ENTRY_END
+
+STEP 27150 QUERY
+ENTRY_BEGIN
+RAW
+b83f3c0b5010447016cf0000000000000000
+ENTRY_END
+
+STEP 27160 QUERY
+ENTRY_BEGIN
+RAW
+b83f3c0b50184470e4e30000008e66fe000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 27170 QUERY
+ENTRY_BEGIN
+RAW
+b83f3c1950114462163e0000000000000000
+ENTRY_END
+
+STEP 27180 QUERY
+ENTRY_BEGIN
+RAW
+b83f3c1a50104462163d0000000000000000
+ENTRY_END
+
+STEP 27190 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a9590000020405b401010402
+ENTRY_END
+
+STEP 27200 QUERY
+ENTRY_BEGIN
+RAW
+b841d41050104470454b0000000000000000
+ENTRY_END
+
+STEP 27210 QUERY
+ENTRY_BEGIN
+RAW
+b841d41050184470b8a50000008ec1b8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000
+ENTRY_END
+
+STEP 27220 QUERY
+ENTRY_BEGIN
+RAW
+b841d41e5011446244ba0000000000000000
+ENTRY_END
+
+STEP 27230 QUERY
+ENTRY_BEGIN
+RAW
+b841d41f5010446244b90000000000000000
+ENTRY_END
+
+STEP 27240 QUERY
+ENTRY_BEGIN
+RAW
+00000000b002832c6d8b0000010303010101080a11236100000000000101040202040564
+ENTRY_END
+
+STEP 27250 QUERY
+ENTRY_BEGIN
+RAW
+b843dd9f801085980c6800000101080a1123610101280817
+ENTRY_END
+
+STEP 27260 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf043bb0000020405b401010402
+ENTRY_END
+
+STEP 27270 QUERY
+ENTRY_BEGIN
+RAW
+b843dd9f801885981a0800000101080a1123610e01280817008e9b80000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc75403c4df500030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000
+ENTRY_END
+
+STEP 27280 QUERY
+ENTRY_BEGIN
+RAW
+b843ddad801085980bbd00000101080a1123610e01280817
+ENTRY_END
+
+STEP 27290 QUERY
+ENTRY_BEGIN
+RAW
+b843ddad801185980b7b00000101080a1123614f01280817
+ENTRY_END
+
+STEP 27300 QUERY
+ENTRY_BEGIN
+RAW
+b843ddae801085980b7900000101080a1123614f01280818
+ENTRY_END
+
+STEP 27310 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240006bdd0000020405b401010402
+ENTRY_END
+
+STEP 27320 QUERY
+ENTRY_BEGIN
+RAW
+b84c97eb5010447043e90000000000000000
+ENTRY_END
+
+STEP 27330 QUERY
+ENTRY_BEGIN
+RAW
+b84c97eb50184470cee50000008b150c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 27340 QUERY
+ENTRY_BEGIN
+RAW
+b84c97f950114462435b0000000000000000
+ENTRY_END
+
+STEP 27350 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400088fe0000020405b401010402
+ENTRY_END
+
+STEP 27360 QUERY
+ENTRY_BEGIN
+RAW
+b84c97fa50104462435a0000000000000000
+ENTRY_END
+
+STEP 27370 QUERY
+ENTRY_BEGIN
+RAW
+b84d1a6450104470de900000000000000000
+ENTRY_END
+
+STEP 27380 QUERY
+ENTRY_BEGIN
+RAW
+b84d1a645018447024660000008b5b34000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 27390 QUERY
+ENTRY_BEGIN
+RAW
+b84d1a7250114462de020000000000000000
+ENTRY_END
+
+STEP 27400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400086c40000020405b401010402
+ENTRY_END
+
+STEP 27410 QUERY
+ENTRY_BEGIN
+RAW
+b84d1a7350104462de010000000000000000
+ENTRY_END
+
+STEP 27420 QUERY
+ENTRY_BEGIN
+RAW
+b84df49e50104470021c0000000000000000
+ENTRY_END
+
+STEP 27430 QUERY
+ENTRY_BEGIN
+RAW
+b84df49e5018447001c90000008ba15c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 27440 QUERY
+ENTRY_BEGIN
+RAW
+b84df4ac50114462018e0000000000000000
+ENTRY_END
+
+STEP 27450 QUERY
+ENTRY_BEGIN
+RAW
+b84df4ad50104462018d0000000000000000
+ENTRY_END
+
+STEP 27460 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0205200000204057a01010402
+ENTRY_END
+
+STEP 27470 QUERY
+ENTRY_BEGIN
+RAW
+b8501b4d5010fbec78320000000000000000
+ENTRY_END
+
+STEP 27480 QUERY
+ENTRY_BEGIN
+RAW
+b8501b4d5018fbec917400000089a7cd000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000
+ENTRY_END
+
+STEP 27490 QUERY
+ENTRY_BEGIN
+RAW
+b8501b5b5011fbde77a60000000000000000
+ENTRY_END
+
+STEP 27500 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0503500000204057a01010402
+ENTRY_END
+
+STEP 27510 QUERY
+ENTRY_BEGIN
+RAW
+b8501b5c5010fbde77a50000000000000000
+ENTRY_END
+
+STEP 27520 QUERY
+ENTRY_BEGIN
+RAW
+b850aee15010fbec14810000000000000000
+ENTRY_END
+
+STEP 27530 QUERY
+ENTRY_BEGIN
+RAW
+b850aee15018fbecf3a500000089e3ea000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000
+ENTRY_END
+
+STEP 27540 QUERY
+ENTRY_BEGIN
+RAW
+b850aeef5011fbde13f50000000000000000
+ENTRY_END
+
+STEP 27550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf05e3000000204057a01010402
+ENTRY_END
+
+STEP 27560 QUERY
+ENTRY_BEGIN
+RAW
+b850aef05010fbde13f40000000000000000
+ENTRY_END
+
+STEP 27570 QUERY
+ENTRY_BEGIN
+RAW
+b8519e465010fbec33160000000000000000
+ENTRY_END
+
+STEP 27580 QUERY
+ENTRY_BEGIN
+RAW
+b8519e465018fbec89db000000896c4a000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000
+ENTRY_END
+
+STEP 27590 QUERY
+ENTRY_BEGIN
+RAW
+b8519e545011fbde328a0000000000000000
+ENTRY_END
+
+STEP 27600 QUERY
+ENTRY_BEGIN
+RAW
+b8519e555010fbde32890000000000000000
+ENTRY_END
+
+STEP 27610 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000fee80000020405b401010402
+ENTRY_END
+
+STEP 27620 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e84d00000204059801010402
+ENTRY_END
+
+STEP 27630 QUERY
+ENTRY_BEGIN
+RAW
+b8557ee25010fbb8dce50000000000000000
+ENTRY_END
+
+STEP 27640 QUERY
+ENTRY_BEGIN
+RAW
+b854aa3250104470c4a50000000000000000
+ENTRY_END
+
+STEP 27650 QUERY
+ENTRY_BEGIN
+RAW
+b854aa32501844703b560000008e31a0000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000
+ENTRY_END
+
+STEP 27660 QUERY
+ENTRY_BEGIN
+RAW
+b8557ee25018fbb819b500000094158a000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 27670 QUERY
+ENTRY_BEGIN
+RAW
+b8557ef05011fbaadc4e0000000000000000
+ENTRY_END
+
+STEP 27680 QUERY
+ENTRY_BEGIN
+RAW
+b854aa4050114462c4140000000000000000
+ENTRY_END
+
+STEP 27690 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f6150000020405b401010402
+ENTRY_END
+
+STEP 27700 QUERY
+ENTRY_BEGIN
+RAW
+b8557ef15010fbaadc4d0000000000000000
+ENTRY_END
+
+STEP 27710 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0a5b400000204059801010402
+ENTRY_END
+
+STEP 27720 QUERY
+ENTRY_BEGIN
+RAW
+b856f8ee5010fbb8203f0000000000000000
+ENTRY_END
+
+STEP 27730 QUERY
+ENTRY_BEGIN
+RAW
+b854aa4150104462c4130000000000000000
+ENTRY_END
+
+STEP 27740 QUERY
+ENTRY_BEGIN
+RAW
+b85652805010447013830000000000000000
+ENTRY_END
+
+STEP 27750 QUERY
+ENTRY_BEGIN
+RAW
+b856f8ee5018fbb8972200000094dc76000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 27760 QUERY
+ENTRY_BEGIN
+RAW
+b8565280501844705c5c0000008e6078000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000
+ENTRY_END
+
+STEP 27770 QUERY
+ENTRY_BEGIN
+RAW
+b856f8fc5011fbaa1fa80000000000000000
+ENTRY_END
+
+STEP 27780 QUERY
+ENTRY_BEGIN
+RAW
+b856528e5011446212f20000000000000000
+ENTRY_END
+
+STEP 27790 QUERY
+ENTRY_BEGIN
+RAW
+b856f8fd5010fbaa1fa70000000000000000
+ENTRY_END
+
+STEP 27800 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000d2440000020405b401010402
+ENTRY_END
+
+STEP 27810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e5ea00000204059801010402
+ENTRY_END
+
+STEP 27820 QUERY
+ENTRY_BEGIN
+RAW
+b856528f5010446212f10000000000000000
+ENTRY_END
+
+STEP 27830 QUERY
+ENTRY_BEGIN
+RAW
+b8583c905010fbb81cd20000000000000000
+ENTRY_END
+
+STEP 27840 QUERY
+ENTRY_BEGIN
+RAW
+b857977e50104470aab20000000000000000
+ENTRY_END
+
+STEP 27850 QUERY
+ENTRY_BEGIN
+RAW
+b857977e50184470f99f0000008e5a64000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000
+ENTRY_END
+
+STEP 27860 QUERY
+ENTRY_BEGIN
+RAW
+b8583c905018fbb876ff00000094f92c000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000
+ENTRY_END
+
+STEP 27870 QUERY
+ENTRY_BEGIN
+RAW
+b8583c9e5011fbaa1c3b0000000000000000
+ENTRY_END
+
+STEP 27880 QUERY
+ENTRY_BEGIN
+RAW
+b857978c50114462aa210000000000000000
+ENTRY_END
+
+STEP 27890 QUERY
+ENTRY_BEGIN
+RAW
+b8583c9f5010fbaa1c3a0000000000000000
+ENTRY_END
+
+STEP 27900 QUERY
+ENTRY_BEGIN
+RAW
+b857978d50104462aa200000000000000000
+ENTRY_END
+
+STEP 27910 QUERY
+ENTRY_BEGIN
+RAW
+000000007002223853ff00000204057801010402
+ENTRY_END
+
+STEP 27920 QUERY
+ENTRY_BEGIN
+RAW
+b85a8a295010264839e30000000000000000
+ENTRY_END
+
+STEP 27930 QUERY
+ENTRY_BEGIN
+RAW
+b85a8a2950182648986c0000008d7000000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 27940 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf02bcb0000020405b401010402
+ENTRY_END
+
+STEP 27950 QUERY
+ENTRY_BEGIN
+RAW
+b85a8a375011263a39530000000000000000
+ENTRY_END
+
+STEP 27960 QUERY
+ENTRY_BEGIN
+RAW
+b85b16615010faf089c20000000000000000
+ENTRY_END
+
+STEP 27970 QUERY
+ENTRY_BEGIN
+RAW
+00000000700222384d0d00000204057801010402
+ENTRY_END
+
+STEP 27980 QUERY
+ENTRY_BEGIN
+RAW
+b85b16615018faf0b5f40000009ba618000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 27990 QUERY
+ENTRY_BEGIN
+RAW
+b85b166f5011fae289240000000000000000
+ENTRY_END
+
+STEP 28000 QUERY
+ENTRY_BEGIN
+RAW
+b85b16705010fae289230000000000000000
+ENTRY_END
+
+STEP 28010 QUERY
+ENTRY_BEGIN
+RAW
+b85a8a385010263a39520000000000000000
+ENTRY_END
+
+STEP 28020 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf087d30000020405b401010402
+ENTRY_END
+
+STEP 28030 QUERY
+ENTRY_BEGIN
+RAW
+b85bdfe450102648dd340000000000000000
+ENTRY_END
+
+STEP 28040 QUERY
+ENTRY_BEGIN
+RAW
+b85cb74e5010faf044dc0000000000000000
+ENTRY_END
+
+STEP 28050 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400075820000020405b401010402
+ENTRY_END
+
+STEP 28060 QUERY
+ENTRY_BEGIN
+RAW
+b85cb74e5018faf0b5e70000009b6240000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 28070 QUERY
+ENTRY_BEGIN
+RAW
+b85bdfe4501826489cbf0000008d1000000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 28080 QUERY
+ENTRY_BEGIN
+RAW
+b85cb75c5011fae2443e0000000000000000
+ENTRY_END
+
+STEP 28090 QUERY
+ENTRY_BEGIN
+RAW
+b85d4c1f5010447099490000000000000000
+ENTRY_END
+
+STEP 28100 QUERY
+ENTRY_BEGIN
+RAW
+b85d4c1f5018447060e70000008aa150000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd59403c4ed900030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000
+ENTRY_END
+
+STEP 28110 QUERY
+ENTRY_BEGIN
+RAW
+b85cb75d5010fae2443d0000000000000000
+ENTRY_END
+
+STEP 28120 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf03cb70000020405b401010402
+ENTRY_END
+
+STEP 28130 QUERY
+ENTRY_BEGIN
+RAW
+b85dec5d5010faf0c4af0000000000000000
+ENTRY_END
+
+STEP 28140 QUERY
+ENTRY_BEGIN
+RAW
+b85d4c2d5011446298bc0000000000000000
+ENTRY_END
+
+STEP 28150 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000dacd0000020405b401010402
+ENTRY_END
+
+STEP 28160 QUERY
+ENTRY_BEGIN
+RAW
+b85dec5d5018faf08a890000009b0d72000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000
+ENTRY_END
+
+STEP 28170 QUERY
+ENTRY_BEGIN
+RAW
+b85bdff25011263adca40000000000000000
+ENTRY_END
+
+STEP 28180 QUERY
+ENTRY_BEGIN
+RAW
+0000000070022238441700000204057801010402
+ENTRY_END
+
+STEP 28190 QUERY
+ENTRY_BEGIN
+RAW
+b85dec6b5011fae2c4110000000000000000
+ENTRY_END
+
+STEP 28200 QUERY
+ENTRY_BEGIN
+RAW
+b85d4c2e5010446298bb0000000000000000
+ENTRY_END
+
+STEP 28210 QUERY
+ENTRY_BEGIN
+RAW
+b85ec015501044708a9d0000000000000000
+ENTRY_END
+
+STEP 28220 QUERY
+ENTRY_BEGIN
+RAW
+b85dec6c5010fae2c4100000000000000000
+ENTRY_END
+
+STEP 28230 QUERY
+ENTRY_BEGIN
+RAW
+b85ec0155018447027ef0000008acd9c000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd59403c4ed900030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000
+ENTRY_END
+
+STEP 28240 QUERY
+ENTRY_BEGIN
+RAW
+b85bdff35010263adca30000000000000000
+ENTRY_END
+
+STEP 28250 QUERY
+ENTRY_BEGIN
+RAW
+b85ec023501144628a100000000000000000
+ENTRY_END
+
+STEP 28260 QUERY
+ENTRY_BEGIN
+RAW
+b85f89fe501026482a210000000000000000
+ENTRY_END
+
+STEP 28270 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240007f700000020405b401010402
+ENTRY_END
+
+STEP 28280 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400035fd0000020405b401010402
+ENTRY_END
+
+STEP 28290 QUERY
+ENTRY_BEGIN
+RAW
+b860b22450104470f3bb0000000000000000
+ENTRY_END
+
+STEP 28300 QUERY
+ENTRY_BEGIN
+RAW
+b85ec024501044628a0f0000000000000000
+ENTRY_END
+
+STEP 28310 QUERY
+ENTRY_BEGIN
+RAW
+b85f89fe50182648b9ab0000008d4000000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000
+ENTRY_END
+
+STEP 28320 QUERY
+ENTRY_BEGIN
+RAW
+b860b224501844700a5d0000008b8567000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 28330 QUERY
+ENTRY_BEGIN
+RAW
+b8600c6350104470e2f00000000000000000
+ENTRY_END
+
+STEP 28340 QUERY
+ENTRY_BEGIN
+RAW
+b8600c6350184470bba00000008a903e000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd5a403c4eda00030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000
+ENTRY_END
+
+STEP 28350 QUERY
+ENTRY_BEGIN
+RAW
+b860b23250114462f32d0000000000000000
+ENTRY_END
+
+STEP 28360 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000aa9b0000020405b401010402
+ENTRY_END
+
+STEP 28370 QUERY
+ENTRY_BEGIN
+RAW
+b860b23350104462f32c0000000000000000
+ENTRY_END
+
+STEP 28380 QUERY
+ENTRY_BEGIN
+RAW
+b8600c7150114462e2630000000000000000
+ENTRY_END
+
+STEP 28390 QUERY
+ENTRY_BEGIN
+RAW
+b861437f50104470d6fe0000000000000000
+ENTRY_END
+
+STEP 28400 QUERY
+ENTRY_BEGIN
+RAW
+b861437f50184470a8780000008bcb8f000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 28410 QUERY
+ENTRY_BEGIN
+RAW
+b85f8a0c5011263a29910000000000000000
+ENTRY_END
+
+STEP 28420 QUERY
+ENTRY_BEGIN
+RAW
+b861438d50114462d6700000000000000000
+ENTRY_END
+
+STEP 28430 QUERY
+ENTRY_BEGIN
+RAW
+b8600c7250104462e2620000000000000000
+ENTRY_END
+
+STEP 28440 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000229f0000020405b401010402
+ENTRY_END
+
+STEP 28450 QUERY
+ENTRY_BEGIN
+RAW
+b861438e50104462d66f0000000000000000
+ENTRY_END
+
+STEP 28460 QUERY
+ENTRY_BEGIN
+RAW
+b863aebd50104470e3c10000000000000000
+ENTRY_END
+
+STEP 28470 QUERY
+ENTRY_BEGIN
+RAW
+b85f8a0d5010263a29900000000000000000
+ENTRY_END
+
+STEP 28480 QUERY
+ENTRY_BEGIN
+RAW
+b863aebd501844706f140000008b11b7000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000
+ENTRY_END
+
+STEP 28490 QUERY
+ENTRY_BEGIN
+RAW
+b863aecb50114462e3330000000000000000
+ENTRY_END
+
+STEP 28500 QUERY
+ENTRY_BEGIN
+RAW
+b863aecc50104462e3320000000000000000
+ENTRY_END
+
+STEP 28510 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e1130000020405b401010402
+ENTRY_END
+
+STEP 28520 QUERY
+ENTRY_BEGIN
+RAW
+b8676c6a5010faf0e8f50000000000000000
+ENTRY_END
+
+STEP 28530 QUERY
+ENTRY_BEGIN
+RAW
+b8676c6a5018faf0d99f0000008f5be8000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000
+ENTRY_END
+
+STEP 28540 QUERY
+ENTRY_BEGIN
+RAW
+b8676c785011fae2e8630000000000000000
+ENTRY_END
+
+STEP 28550 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b9b20000020405b401010402
+ENTRY_END
+
+STEP 28560 QUERY
+ENTRY_BEGIN
+RAW
+b8676c795010fae2e8620000000000000000
+ENTRY_END
+
+STEP 28570 QUERY
+ENTRY_BEGIN
+RAW
+b8684f895010faf0de740000000000000000
+ENTRY_END
+
+STEP 28580 QUERY
+ENTRY_BEGIN
+RAW
+b8684f895018faf0a85b0000008f83ac000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000
+ENTRY_END
+
+STEP 28590 QUERY
+ENTRY_BEGIN
+RAW
+b8684f975011fae2dde20000000000000000
+ENTRY_END
+
+STEP 28600 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf096770000020405b401010402
+ENTRY_END
+
+STEP 28610 QUERY
+ENTRY_BEGIN
+RAW
+b8684f985010fae2dde10000000000000000
+ENTRY_END
+
+STEP 28620 QUERY
+ENTRY_BEGIN
+RAW
+b868d4a65010faf0361c0000000000000000
+ENTRY_END
+
+STEP 28630 QUERY
+ENTRY_BEGIN
+RAW
+b868d4a65018faf0bc1c0000008fc792000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000
+ENTRY_END
+
+STEP 28640 QUERY
+ENTRY_BEGIN
+RAW
+b868d4b45011fae2358a0000000000000000
+ENTRY_END
+
+STEP 28650 QUERY
+ENTRY_BEGIN
+RAW
+b868d4b55010fae235890000000000000000
+ENTRY_END
+
+STEP 28660 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0285d0000020405b401010402
+ENTRY_END
+
+STEP 28670 QUERY
+ENTRY_BEGIN
+RAW
+b86a79785010faf0232e0000000000000000
+ENTRY_END
+
+STEP 28680 QUERY
+ENTRY_BEGIN
+RAW
+b86a79785018faf049cd0000008da9c3000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000
+ENTRY_END
+
+STEP 28690 QUERY
+ENTRY_BEGIN
+RAW
+b86a79865011fae2229e0000000000000000
+ENTRY_END
+
+STEP 28700 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf025ca0000020405b401010402
+ENTRY_END
+
+STEP 28710 QUERY
+ENTRY_BEGIN
+RAW
+b86a79875010fae2229d0000000000000000
+ENTRY_END
+
+STEP 28720 QUERY
+ENTRY_BEGIN
+RAW
+b86b60fc5010faf039160000000000000000
+ENTRY_END
+
+STEP 28730 QUERY
+ENTRY_BEGIN
+RAW
+b86b60fc5018faf03bd00000008dcfa8000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000
+ENTRY_END
+
+STEP 28740 QUERY
+ENTRY_BEGIN
+RAW
+b86b610a5011fae238860000000000000000
+ENTRY_END
+
+STEP 28750 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f53f0000020405b401010402
+ENTRY_END
+
+STEP 28760 QUERY
+ENTRY_BEGIN
+RAW
+b86b610b5010fae238850000000000000000
+ENTRY_END
+
+STEP 28770 QUERY
+ENTRY_BEGIN
+RAW
+b86bf32d5010faf0765a0000000000000000
+ENTRY_END
+
+STEP 28780 QUERY
+ENTRY_BEGIN
+RAW
+b86bf32d5018faf05d640000008deb58000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000
+ENTRY_END
+
+STEP 28790 QUERY
+ENTRY_BEGIN
+RAW
+b86bf33b5011fae275ca0000000000000000
+ENTRY_END
+
+STEP 28800 QUERY
+ENTRY_BEGIN
+RAW
+b86bf33c5010fae275c90000000000000000
+ENTRY_END
+
+STEP 28810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf085460000020405b401010402
+ENTRY_END
+
+STEP 28820 QUERY
+ENTRY_BEGIN
+RAW
+b86cc7b65010fbec30db0000000000000000
+ENTRY_END
+
+STEP 28830 QUERY
+ENTRY_BEGIN
+RAW
+b86cc7b65018fbecbc930000008d0bd8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 28840 QUERY
+ENTRY_BEGIN
+RAW
+b86cc7c45011fbde304b0000000000000000
+ENTRY_END
+
+STEP 28850 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf003060000020405b401010402
+ENTRY_END
+
+STEP 28860 QUERY
+ENTRY_BEGIN
+RAW
+b86cc7c55010fbde304a0000000000000000
+ENTRY_END
+
+STEP 28870 QUERY
+ENTRY_BEGIN
+RAW
+b86eaaeb5010fbeccb630000000000000000
+ENTRY_END
+
+STEP 28880 QUERY
+ENTRY_BEGIN
+RAW
+b86eaaeb5018fbec587d0000008d0b78000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 28890 QUERY
+ENTRY_BEGIN
+RAW
+b86eaaf95011fbdecad30000000000000000
+ENTRY_END
+
+STEP 28900 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d33e0000020405b401010402
+ENTRY_END
+
+STEP 28910 QUERY
+ENTRY_BEGIN
+RAW
+b86eaafa5010fbdecad20000000000000000
+ENTRY_END
+
+STEP 28920 QUERY
+ENTRY_BEGIN
+RAW
+b86f5d985010fbece8ee0000000000000000
+ENTRY_END
+
+STEP 28930 QUERY
+ENTRY_BEGIN
+RAW
+b86f5d985018fbec36500000008d4b30000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000
+ENTRY_END
+
+STEP 28940 QUERY
+ENTRY_BEGIN
+RAW
+b86f5da65011fbdee85e0000000000000000
+ENTRY_END
+
+STEP 28950 QUERY
+ENTRY_BEGIN
+RAW
+b86f5da75010fbdee85d0000000000000000
+ENTRY_END
+
+STEP 28960 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000ddd30000020405b401010402
+ENTRY_END
+
+STEP 28970 QUERY
+ENTRY_BEGIN
+RAW
+b86ffc6a50104470513d0000000000000000
+ENTRY_END
+
+STEP 28980 QUERY
+ENTRY_BEGIN
+RAW
+b86ffc6a50184470fc390000009600da000000010001000000000f313233363935303538313236362d330000f900010f313233363935303538313236362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 28990 QUERY
+ENTRY_BEGIN
+RAW
+b86ffc785011446250a40000000000000000
+ENTRY_END
+
+STEP 29000 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000f56e0000020405b401010402
+ENTRY_END
+
+STEP 29010 QUERY
+ENTRY_BEGIN
+RAW
+b86ffc795010446250a30000000000000000
+ENTRY_END
+
+STEP 29020 QUERY
+ENTRY_BEGIN
+RAW
+b870e1475010447083fa0000000000000000
+ENTRY_END
+
+STEP 29030 QUERY
+ENTRY_BEGIN
+RAW
+b870e147501844709691000000969a40000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 29040 QUERY
+ENTRY_BEGIN
+RAW
+b870e1555011446283610000000000000000
+ENTRY_END
+
+STEP 29050 QUERY
+ENTRY_BEGIN
+RAW
+000000007002400031f30000020405b401010402
+ENTRY_END
+
+STEP 29060 QUERY
+ENTRY_BEGIN
+RAW
+b870e1565010446283600000000000000000
+ENTRY_END
+
+STEP 29070 QUERY
+ENTRY_BEGIN
+RAW
+b871b54f50104470ec750000000000000000
+ENTRY_END
+
+STEP 29080 QUERY
+ENTRY_BEGIN
+RAW
+b871b54f50184470e88c00000096b0c0000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000
+ENTRY_END
+
+STEP 29090 QUERY
+ENTRY_BEGIN
+RAW
+b871b55d50114462ebdc0000000000000000
+ENTRY_END
+
+STEP 29100 QUERY
+ENTRY_BEGIN
+RAW
+b871b55e50104462ebdb0000000000000000
+ENTRY_END
+
+STEP 29110 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0225800000204055001010402
+ENTRY_END
+
+STEP 29120 QUERY
+ENTRY_BEGIN
+RAW
+b873d47b5010ff00bda80000000000000000
+ENTRY_END
+
+STEP 29130 QUERY
+ENTRY_BEGIN
+RAW
+b873d47b5018ff002785000000923da3000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 29140 QUERY
+ENTRY_BEGIN
+RAW
+b873d4895011fef2bd130000000000000000
+ENTRY_END
+
+STEP 29150 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0f7480000020405b401010402
+ENTRY_END
+
+STEP 29160 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0332200000204055001010402
+ENTRY_END
+
+STEP 29170 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf07aff0000020405b401010402
+ENTRY_END
+
+STEP 29180 QUERY
+ENTRY_BEGIN
+RAW
+b873d48a5010fef2bd120000000000000000
+ENTRY_END
+
+STEP 29190 QUERY
+ENTRY_BEGIN
+RAW
+b8756c445010ff0036a80000000000000000
+ENTRY_END
+
+STEP 29200 QUERY
+ENTRY_BEGIN
+RAW
+b8760bd75010faf0e3650000000000000000
+ENTRY_END
+
+STEP 29210 QUERY
+ENTRY_BEGIN
+RAW
+b874af045010faf0bc830000000000000000
+ENTRY_END
+
+STEP 29220 QUERY
+ENTRY_BEGIN
+RAW
+b8756c445018ff00da670000009204c1000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 29230 QUERY
+ENTRY_BEGIN
+RAW
+b874af045018faf097a50000009250ac000000010001000000000f313330353637303035383030322d330000f900010f313330353637303035383030322d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000
+ENTRY_END
+
+STEP 29240 QUERY
+ENTRY_BEGIN
+RAW
+b8760bd75018faf0c670000000955c40000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29250 QUERY
+ENTRY_BEGIN
+RAW
+b8760be55011fae2e2cd0000000000000000
+ENTRY_END
+
+STEP 29260 QUERY
+ENTRY_BEGIN
+RAW
+b8756c525011fef236130000000000000000
+ENTRY_END
+
+STEP 29270 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0cc390000020405b401010402
+ENTRY_END
+
+STEP 29280 QUERY
+ENTRY_BEGIN
+RAW
+b874af125011fae2bbee0000000000000000
+ENTRY_END
+
+STEP 29290 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0865700000204055001010402
+ENTRY_END
+
+STEP 29300 QUERY
+ENTRY_BEGIN
+RAW
+b8760be65010fae2e2cc0000000000000000
+ENTRY_END
+
+STEP 29310 QUERY
+ENTRY_BEGIN
+RAW
+b87704245010faf03c520000000000000000
+ENTRY_END
+
+STEP 29320 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0d3060000020405b401010402
+ENTRY_END
+
+STEP 29330 QUERY
+ENTRY_BEGIN
+RAW
+b8756c535010fef236120000000000000000
+ENTRY_END
+
+STEP 29340 QUERY
+ENTRY_BEGIN
+RAW
+b8778b1f5010ff006b000000000000000000
+ENTRY_END
+
+STEP 29350 QUERY
+ENTRY_BEGIN
+RAW
+b87704245018faf0c21d00000095ba80000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29360 QUERY
+ENTRY_BEGIN
+RAW
+b874af135010fae2bbed0000000000000000
+ENTRY_END
+
+STEP 29370 QUERY
+ENTRY_BEGIN
+RAW
+b8778b1f5018ff007616000000929d6a000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 29380 QUERY
+ENTRY_BEGIN
+RAW
+b87704325011fae23bba0000000000000000
+ENTRY_END
+
+STEP 29390 QUERY
+ENTRY_BEGIN
+RAW
+b8784b705010faf0fbd10000000000000000
+ENTRY_END
+
+STEP 29400 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf035460000020405b401010402
+ENTRY_END
+
+STEP 29410 QUERY
+ENTRY_BEGIN
+RAW
+b8784b705018faf060fe00000092c7a2000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000
+ENTRY_END
+
+STEP 29420 QUERY
+ENTRY_BEGIN
+RAW
+b8778b2d5011fef26a6b0000000000000000
+ENTRY_END
+
+STEP 29430 QUERY
+ENTRY_BEGIN
+RAW
+b87704335010fae23bb90000000000000000
+ENTRY_END
+
+STEP 29440 QUERY
+ENTRY_BEGIN
+RAW
+b878f3165010faf0b66a0000000000000000
+ENTRY_END
+
+STEP 29450 QUERY
+ENTRY_BEGIN
+RAW
+b8778b2e5010fef26a6a0000000000000000
+ENTRY_END
+
+STEP 29460 QUERY
+ENTRY_BEGIN
+RAW
+b878f3165018faf0a036000000955680000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29470 QUERY
+ENTRY_BEGIN
+RAW
+b8784b7e5011fae2fb3c0000000000000000
+ENTRY_END
+
+STEP 29480 QUERY
+ENTRY_BEGIN
+RAW
+b878f3245011fae2b5d20000000000000000
+ENTRY_END
+
+STEP 29490 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0ea1e0000020405b401010402
+ENTRY_END
+
+STEP 29500 QUERY
+ENTRY_BEGIN
+RAW
+b8784b7f5010fae2fb3b0000000000000000
+ENTRY_END
+
+STEP 29510 QUERY
+ENTRY_BEGIN
+RAW
+b878f3255010fae2b5d10000000000000000
+ENTRY_END
+
+STEP 29520 QUERY
+ENTRY_BEGIN
+RAW
+b87984425010faf0da160000000000000000
+ENTRY_END
+
+STEP 29530 QUERY
+ENTRY_BEGIN
+RAW
+b87984425018faf0c84d000000923e98000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000
+ENTRY_END
+
+STEP 29540 QUERY
+ENTRY_BEGIN
+RAW
+b87984505011fae2d9810000000000000000
+ENTRY_END
+
+STEP 29550 QUERY
+ENTRY_BEGIN
+RAW
+b87984515010fae2d9800000000000000000
+ENTRY_END
+
+STEP 29560 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf05a680000020405b401010402
+ENTRY_END
+
+STEP 29570 QUERY
+ENTRY_BEGIN
+RAW
+b87a075c5010faf0c7450000000000000000
+ENTRY_END
+
+STEP 29580 QUERY
+ENTRY_BEGIN
+RAW
+b87a075c5018faf0598400000088bd00000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8d403c500d0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 29590 QUERY
+ENTRY_BEGIN
+RAW
+b87a076a5011fae2c6ba0000000000000000
+ENTRY_END
+
+STEP 29600 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf01b310000020405b401010402
+ENTRY_END
+
+STEP 29610 QUERY
+ENTRY_BEGIN
+RAW
+b87a076b5010fae2c6b90000000000000000
+ENTRY_END
+
+STEP 29620 QUERY
+ENTRY_BEGIN
+RAW
+b87c49885010faf045e00000000000000000
+ENTRY_END
+
+STEP 29630 QUERY
+ENTRY_BEGIN
+RAW
+b87c49885018faf02e20000000886800000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8d403c500d0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 29640 QUERY
+ENTRY_BEGIN
+RAW
+b87c49965011fae245550000000000000000
+ENTRY_END
+
+STEP 29650 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf02f960000020405b401010402
+ENTRY_END
+
+STEP 29660 QUERY
+ENTRY_BEGIN
+RAW
+b87c49975010fae245540000000000000000
+ENTRY_END
+
+STEP 29670 QUERY
+ENTRY_BEGIN
+RAW
+b87d3c4e5010faf0677e0000000000000000
+ENTRY_END
+
+STEP 29680 QUERY
+ENTRY_BEGIN
+RAW
+b87d3c4e5018faf05abe000000885b00000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8e403c500e0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000
+ENTRY_END
+
+STEP 29690 QUERY
+ENTRY_BEGIN
+RAW
+b87d3c5c5011fae266f30000000000000000
+ENTRY_END
+
+STEP 29700 QUERY
+ENTRY_BEGIN
+RAW
+b87d3c5d5010fae266f20000000000000000
+ENTRY_END
+
+STEP 29710 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000eb4a0000020405b401010402
+ENTRY_END
+
+STEP 29720 QUERY
+ENTRY_BEGIN
+RAW
+b87f0582501005b494490000000000000000
+ENTRY_END
+
+STEP 29730 QUERY
+ENTRY_BEGIN
+RAW
+b87f058250184470519b0000008cc780000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2f9403c447900030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000
+ENTRY_END
+
+STEP 29740 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240000e870000020405b401010402
+ENTRY_END
+
+STEP 29750 QUERY
+ENTRY_BEGIN
+RAW
+b87f97b7501005b425500000000000000000
+ENTRY_END
+
+STEP 29760 QUERY
+ENTRY_BEGIN
+RAW
+b87f97b75018447052630000008c58c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2f9403c447900030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000
+ENTRY_END
+
+STEP 29770 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0bdf60000020405b401010402
+ENTRY_END
+
+STEP 29780 QUERY
+ENTRY_BEGIN
+RAW
+b8807c0e5010faf0b61b0000000000000000
+ENTRY_END
+
+STEP 29790 QUERY
+ENTRY_BEGIN
+RAW
+b8807c0e5018faf0e626000000950d40000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29800 QUERY
+ENTRY_BEGIN
+RAW
+b8807c1c5011fae2b5830000000000000000
+ENTRY_END
+
+STEP 29810 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0c3a40000020405b401010402
+ENTRY_END
+
+STEP 29820 QUERY
+ENTRY_BEGIN
+RAW
+b8807c1d5010fae2b5820000000000000000
+ENTRY_END
+
+STEP 29830 QUERY
+ENTRY_BEGIN
+RAW
+b88124355010faf013a20000000000000000
+ENTRY_END
+
+STEP 29840 QUERY
+ENTRY_BEGIN
+RAW
+b88124355018faf0e66d000000956b80000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29850 QUERY
+ENTRY_BEGIN
+RAW
+b88124435011fae2130a0000000000000000
+ENTRY_END
+
+STEP 29860 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf018ba0000020405b401010402
+ENTRY_END
+
+STEP 29870 QUERY
+ENTRY_BEGIN
+RAW
+b88124445010fae213090000000000000000
+ENTRY_END
+
+STEP 29880 QUERY
+ENTRY_BEGIN
+RAW
+b881d8d95010faf0b4120000000000000000
+ENTRY_END
+
+STEP 29890 QUERY
+ENTRY_BEGIN
+RAW
+b881d8d95018faf04ede00000095a380000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000
+ENTRY_END
+
+STEP 29900 QUERY
+ENTRY_BEGIN
+RAW
+b881d8e75011fae2b37a0000000000000000
+ENTRY_END
+
+STEP 29910 QUERY
+ENTRY_BEGIN
+RAW
+b881d8e85010fae2b3790000000000000000
+ENTRY_END
+
+STEP 29920 QUERY
+ENTRY_BEGIN
+RAW
+b87f97c550114462e6040000000000000000
+ENTRY_END
+
+STEP 29930 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000e5880000020405b401010402
+ENTRY_END
+
+STEP 29940 QUERY
+ENTRY_BEGIN
+RAW
+b87f97c650104462e6030000000000000000
+ENTRY_END
+
+STEP 29950 QUERY
+ENTRY_BEGIN
+RAW
+b8866f32501005b424d00000000000000000
+ENTRY_END
+
+STEP 29960 QUERY
+ENTRY_BEGIN
+RAW
+b8866f3250184470a3e30000008c04c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2fa403c447a00030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000
+ENTRY_END
+
+STEP 29970 QUERY
+ENTRY_BEGIN
+RAW
+b8866f4050114462e5840000000000000000
+ENTRY_END
+
+STEP 29980 QUERY
+ENTRY_BEGIN
+RAW
+b8866f4150104462e5830000000000000000
+ENTRY_END
+
+STEP 29990 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff00758500000204055001010402
+ENTRY_END
+
+STEP 30000 QUERY
+ENTRY_BEGIN
+RAW
+b8873df25010ff00ab5b0000000000000000
+ENTRY_END
+
+STEP 30010 QUERY
+ENTRY_BEGIN
+RAW
+b8873df25018ff001b780000008f5b0e000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe3d403c4fbd0003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+STEP 30020 QUERY
+ENTRY_BEGIN
+RAW
+b8873e005011fef2aac90000000000000000
+ENTRY_END
+
+STEP 30030 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff001e8b00000204055001010402
+ENTRY_END
+
+STEP 30040 QUERY
+ENTRY_BEGIN
+RAW
+b8873e015010fef2aac80000000000000000
+ENTRY_END
+
+STEP 30050 QUERY
+ENTRY_BEGIN
+RAW
+b887f30b5010ff009f470000000000000000
+ENTRY_END
+
+STEP 30060 QUERY
+ENTRY_BEGIN
+RAW
+b87f05905010446254fe0000000000000000
+ENTRY_END
+
+STEP 30070 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240003e080000020405b401010402
+ENTRY_END
+
+STEP 30080 QUERY
+ENTRY_BEGIN
+RAW
+b8888b9e5010447022250000000000000000
+ENTRY_END
+
+STEP 30090 QUERY
+ENTRY_BEGIN
+RAW
+b8888b9e50184470c7750000008e386c000000010001000000000e3936323037323637343332322d330000f900010e3936323037323637343332322d330000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000
+ENTRY_END
+
+STEP 30100 QUERY
+ENTRY_BEGIN
+RAW
+b8888bac5011446221940000000000000000
+ENTRY_END
+
+STEP 30110 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a7870000020405b401010402
+ENTRY_END
+
+STEP 30120 QUERY
+ENTRY_BEGIN
+RAW
+b8888bad5010446221930000000000000000
+ENTRY_END
+
+STEP 30130 QUERY
+ENTRY_BEGIN
+RAW
+b88953b450104470c38d0000000000000000
+ENTRY_END
+
+STEP 30140 QUERY
+ENTRY_BEGIN
+RAW
+b88953b450184470223e0000008e810c000000010001000000000e3936323037323637343332322d320000f900010e3936323037323637343332322d320000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000
+ENTRY_END
+
+STEP 30150 QUERY
+ENTRY_BEGIN
+RAW
+b88953c250114462c2fc0000000000000000
+ENTRY_END
+
+STEP 30160 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000525e0000020405b401010402
+ENTRY_END
+
+STEP 30170 QUERY
+ENTRY_BEGIN
+RAW
+b88953c350104462c2fb0000000000000000
+ENTRY_END
+
+STEP 30180 QUERY
+ENTRY_BEGIN
+RAW
+b88b7a195010447047fd0000000000000000
+ENTRY_END
+
+STEP 30190 QUERY
+ENTRY_BEGIN
+RAW
+b88b7a195018447009840000008e1e36000000010001000000000e3936323037323637343332322d320000f900010e3936323037323637343332322d320000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000
+ENTRY_END
+
+STEP 30200 QUERY
+ENTRY_BEGIN
+RAW
+b88b7a2750114462476c0000000000000000
+ENTRY_END
+
+STEP 30210 QUERY
+ENTRY_BEGIN
+RAW
+b88b7a2850104462476b0000000000000000
+ENTRY_END
+
+STEP 30220 QUERY
+ENTRY_BEGIN
+RAW
+b87f05905011446254fe0000000000000000
+ENTRY_END
+
+STEP 30230 QUERY
+ENTRY_BEGIN
+RAW
+b87f05915010446254fd0000000000000000
+ENTRY_END
+
+STEP 30240 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf089aa00000204055001010402
+ENTRY_END
+
+STEP 30250 QUERY
+ENTRY_BEGIN
+RAW
+b89059d55010ff009f840000000000000000
+ENTRY_END
+
+STEP 30260 QUERY
+ENTRY_BEGIN
+RAW
+b89059d55018ff00bd6e000000927286000000010001000000000f313436303238383838303635382d330000f900010f313436303238383838303635382d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 30270 QUERY
+ENTRY_BEGIN
+RAW
+b89059e35011fef29eef0000000000000000
+ENTRY_END
+
+STEP 30280 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf08e5d00000204055001010402
+ENTRY_END
+
+STEP 30290 QUERY
+ENTRY_BEGIN
+RAW
+b89059e45010fef29eee0000000000000000
+ENTRY_END
+
+STEP 30300 QUERY
+ENTRY_BEGIN
+RAW
+b89138d85010ff00c5330000000000000000
+ENTRY_END
+
+STEP 30310 QUERY
+ENTRY_BEGIN
+RAW
+b89138d85018ff00a8dc00000092adc8000000010001000000000f313436303238383838303635382d320000f900010f313436303238383838303635382d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 30320 QUERY
+ENTRY_BEGIN
+RAW
+b89138e65011fef2c49e0000000000000000
+ENTRY_END
+
+STEP 30330 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0622900000204055001010402
+ENTRY_END
+
+STEP 30340 QUERY
+ENTRY_BEGIN
+RAW
+b89138e75010fef2c49d0000000000000000
+ENTRY_END
+
+STEP 30350 QUERY
+ENTRY_BEGIN
+RAW
+b893d5bc5010ff00fc180000000000000000
+ENTRY_END
+
+STEP 30360 QUERY
+ENTRY_BEGIN
+RAW
+b893d5bc5018ff004d31000000924059000000010001000000000f313436303238383838303635382d320000f900010f313436303238383838303635382d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000
+ENTRY_END
+
+STEP 30370 QUERY
+ENTRY_BEGIN
+RAW
+b893d5ca5011fef2fb830000000000000000
+ENTRY_END
+
+STEP 30380 QUERY
+ENTRY_BEGIN
+RAW
+b893d5cb5010fef2fb820000000000000000
+ENTRY_END
+
+;STEP 30390 QUERY
+;ENTRY_BEGIN
+;RAW
+;2c4801000001000000000000056b6f726e6f026e6c00000f000100
+;ENTRY_END
+
+STEP 30400 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240005b1100000204055001010402
+ENTRY_END
+
+STEP 30410 QUERY
+ENTRY_BEGIN
+RAW
+b887f30b5018ff0072d80000008ff89a000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe3d403c4fbd0003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+STEP 30420 QUERY
+ENTRY_BEGIN
+RAW
+b887f3195011fef29eb50000000000000000
+ENTRY_END
+
+STEP 30430 QUERY
+ENTRY_BEGIN
+RAW
+000000007002ff00e15100000204055001010402
+ENTRY_END
+
+STEP 30440 QUERY
+ENTRY_BEGIN
+RAW
+b887f31a5010fef29eb40000000000000000
+ENTRY_END
+
+STEP 30450 QUERY
+ENTRY_BEGIN
+RAW
+b8971ae65010ff003a240000000000000000
+ENTRY_END
+
+STEP 30460 QUERY
+ENTRY_BEGIN
+RAW
+b8971ae65018ff00a9f90000008f5656000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe40403c4fc00003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000
+ENTRY_END
+
+STEP 30470 QUERY
+ENTRY_BEGIN
+RAW
+b8971af45011fef239920000000000000000
+ENTRY_END
+
+STEP 30480 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06fb40000020405b401010402
+ENTRY_END
+
+STEP 30490 QUERY
+ENTRY_BEGIN
+RAW
+b8971af55010fef239910000000000000000
+ENTRY_END
+
+STEP 30500 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf07bee0000020405b401010402
+ENTRY_END
+
+STEP 30510 QUERY
+ENTRY_BEGIN
+RAW
+b898e9c85010faf006410000000000000000
+ENTRY_END
+
+STEP 30520 QUERY
+ENTRY_BEGIN
+RAW
+00000000700240002fbf00000204057a01010402
+ENTRY_END
+
+STEP 30530 QUERY
+ENTRY_BEGIN
+RAW
+b89baf9f501041b8f2450000000000000000
+ENTRY_END
+
+STEP 30540 QUERY
+ENTRY_BEGIN
+RAW
+b89baf9f501841b8f68800000094b100000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 30550 QUERY
+ENTRY_BEGIN
+RAW
+b89bafad501141aaf1ae0000000000000000
+ENTRY_END
+
+STEP 30560 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000a23a00000204057a01010402
+ENTRY_END
+
+STEP 30570 QUERY
+ENTRY_BEGIN
+RAW
+b89bafae501041aaf1ad0000000000000000
+ENTRY_END
+
+STEP 30580 QUERY
+ENTRY_BEGIN
+RAW
+b89c5852501041b8bc0d0000000000000000
+ENTRY_END
+
+STEP 30590 QUERY
+ENTRY_BEGIN
+RAW
+b89c5852501841b8f051000000948200000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 30600 QUERY
+ENTRY_BEGIN
+RAW
+b89c5860501141aabb760000000000000000
+ENTRY_END
+
+STEP 30610 QUERY
+ENTRY_BEGIN
+RAW
+0000000070024000da6600000204057a01010402
+ENTRY_END
+
+STEP 30620 QUERY
+ENTRY_BEGIN
+RAW
+b89c5861501041aabb750000000000000000
+ENTRY_END
+
+STEP 30630 QUERY
+ENTRY_BEGIN
+RAW
+b89cfce5501041b84fa60000000000000000
+ENTRY_END
+
+STEP 30640 QUERY
+ENTRY_BEGIN
+RAW
+b89cfce5501841b8b2ea000000945300000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000
+ENTRY_END
+
+STEP 30650 QUERY
+ENTRY_BEGIN
+RAW
+b89cfcf3501141aa4f0f0000000000000000
+ENTRY_END
+
+STEP 30660 QUERY
+ENTRY_BEGIN
+RAW
+b89cfcf4501041aa4f0e0000000000000000
+ENTRY_END
+
+STEP 30670 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf06c420000020405b401010402
+ENTRY_END
+
+STEP 30680 QUERY
+ENTRY_BEGIN
+RAW
+b89f748d5010faf06bc90000000000000000
+ENTRY_END
+
+STEP 30690 QUERY
+ENTRY_BEGIN
+RAW
+b89f748d5018faf029bd0000008ed048000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000
+ENTRY_END
+
+STEP 30700 QUERY
+ENTRY_BEGIN
+RAW
+b89f749b5011fae26b380000000000000000
+ENTRY_END
+
+STEP 30710 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf091260000020405b401010402
+ENTRY_END
+
+STEP 30720 QUERY
+ENTRY_BEGIN
+RAW
+b89f749c5010fae26b370000000000000000
+ENTRY_END
+
+STEP 30730 QUERY
+ENTRY_BEGIN
+RAW
+b8a055e75010faf0af520000000000000000
+ENTRY_END
+
+STEP 30740 QUERY
+ENTRY_BEGIN
+RAW
+b8a055e75018faf0a56c0000008e9923000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000
+ENTRY_END
+
+STEP 30750 QUERY
+ENTRY_BEGIN
+RAW
+b8a055f55011fae2aec10000000000000000
+ENTRY_END
+
+STEP 30760 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0a72f0000020405b401010402
+ENTRY_END
+
+STEP 30770 QUERY
+ENTRY_BEGIN
+RAW
+b8a055f65010fae2aec00000000000000000
+ENTRY_END
+
+STEP 30780 QUERY
+ENTRY_BEGIN
+RAW
+b8a134165010faf0e72b0000000000000000
+ENTRY_END
+
+STEP 30790 QUERY
+ENTRY_BEGIN
+RAW
+b8a134165018faf0631b0000008e134e000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000
+ENTRY_END
+
+STEP 30800 QUERY
+ENTRY_BEGIN
+RAW
+b8a134245011fae2e69a0000000000000000
+ENTRY_END
+
+STEP 30810 QUERY
+ENTRY_BEGIN
+RAW
+b8a134255010fae2e6990000000000000000
+ENTRY_END
+
+STEP 30820 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0b79b0000020405b401010402
+ENTRY_END
+
+STEP 30830 QUERY
+ENTRY_BEGIN
+RAW
+b8a596575010faf095520000000000000000
+ENTRY_END
+
+STEP 30840 QUERY
+ENTRY_BEGIN
+RAW
+b8a596575018faf088240000008e42e5000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 30850 QUERY
+ENTRY_BEGIN
+RAW
+b8a596655011fae294c10000000000000000
+ENTRY_END
+
+STEP 30860 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf07bfa00000204056401010402
+ENTRY_END
+
+STEP 30870 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0ae140000020405b401010402
+ENTRY_END
+
+STEP 30880 QUERY
+ENTRY_BEGIN
+RAW
+b8a596665010fae294c00000000000000000
+ENTRY_END
+
+STEP 30890 QUERY
+ENTRY_BEGIN
+RAW
+b8a674795010fd5c78d20000000000000000
+ENTRY_END
+
+STEP 30900 QUERY
+ENTRY_BEGIN
+RAW
+b8a70de15010faf014400000000000000000
+ENTRY_END
+
+STEP 30910 QUERY
+ENTRY_BEGIN
+RAW
+b8a70de15018faf0b7340000008e93c3000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 30920 QUERY
+ENTRY_BEGIN
+RAW
+b8a674795018fd5c78830000008f059c000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af386403c45060003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431314f4f535445494e4445520000
+ENTRY_END
+
+STEP 30930 QUERY
+ENTRY_BEGIN
+RAW
+b8a70def5011fae213af0000000000000000
+ENTRY_END
+
+STEP 30940 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0e3ce0000020405b401010402
+ENTRY_END
+
+STEP 30950 QUERY
+ENTRY_BEGIN
+RAW
+b8a674875011fd4e78400000000000000000
+ENTRY_END
+
+STEP 30960 QUERY
+ENTRY_BEGIN
+RAW
+000000007002faf0fefc00000204056401010402
+ENTRY_END
+
+STEP 30970 QUERY
+ENTRY_BEGIN
+RAW
+b8a70df05010fae213ae0000000000000000
+ENTRY_END
+
+STEP 30980 QUERY
+ENTRY_BEGIN
+RAW
+b8a674885010fd4e783f0000000000000000
+ENTRY_END
+
+STEP 30990 QUERY
+ENTRY_BEGIN
+RAW
+b8a7ad145010faf0aac60000000000000000
+ENTRY_END
+
+STEP 31000 QUERY
+ENTRY_BEGIN
+RAW
+b8a87d065010fd5cf3450000000000000000
+ENTRY_END
+
+STEP 31010 QUERY
+ENTRY_BEGIN
+RAW
+b8a7ad145018faf0518f0000008e8fef000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000
+ENTRY_END
+
+STEP 31020 QUERY
+ENTRY_BEGIN
+RAW
+b8a87d065018fd5cc9920000008f3100000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af386403c45060003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431314f4f535445494e4445520000
+ENTRY_END
+
+STEP 31030 QUERY
+ENTRY_BEGIN
+RAW
+b8a7ad225011fae2aa350000000000000000
+ENTRY_END
+
+STEP 40010 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN A
+ENTRY_END
+
+; copy of iter_formerr.rpl
+; root prime
+STEP 40030 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; query sent to root server
+STEP 40050 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ENTRY_END
+
+; this is the formerr answer
+STEP 40060 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA FORMERR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; this is the correct answer
+STEP 40070 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ENTRY_END
+
+; is the final answer correct?
+STEP 40100 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cname_badauth.rpl b/tests/deckard/sets/resolver/iter_cname_badauth.rpl
new file mode 100644
index 0000000..b250aee
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cname_badauth.rpl
@@ -0,0 +1,267 @@
+; config options
+; target-fetch-policy: "3 2 1 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with NS sending CNAME answer and authority of CNAME target.
+
+; 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 qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+au. IN NS
+SECTION AUTHORITY
+au. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com.au. IN NS
+SECTION AUTHORITY
+com.au. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET. IN A
+SECTION ANSWER
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ncfphywebgtm01-c.ingdirect.com.au. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+ingdirect.com.au. IN A
+SECTION AUTHORITY
+ingdirect.com.au. IN NS l4.nstld.com.
+SECTION ADDITIONAL
+l4.nstld.com. IN A 209.112.114.33
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+l4.nstld.com. IN A
+SECTION ANSWER
+l4.nstld.com. IN A 209.112.114.33
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+l4.nstld.com. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+RANGE_END
+
+; l4.nstld.com.
+RANGE_BEGIN 0 100
+ ADDRESS 209.112.114.33
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ingdirect.com.au. IN NS
+SECTION ANSWER
+ingdirect.com.au. IN NS l4.nstld.com.
+SECTION ADDITIONAL
+l4.nstld.com. IN A 209.112.114.33
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+www.ingdirect.com.au. IN A
+SECTION ANSWER
+www.ingdirect.com.au. IN CNAME www.clb.ingdirect.com.au.
+SECTION AUTHORITY
+clb.ingdirect.com.au. IN NS ncfphywebgtm01-c.ingdirect.com.au.
+SECTION ADDITIONAL
+ncfphywebgtm01-c.ingdirect.com.au. IN A 203.92.27.132
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+clb.ingdirect.com.au. IN A
+SECTION AUTHORITY
+clb.ingdirect.com.au. IN NS ncfphywebgtm01-c.ingdirect.com.au.
+SECTION ADDITIONAL
+ncfphywebgtm01-c.ingdirect.com.au. IN A 203.92.27.132
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ncfphywebgtm01-c.ingdirect.com.au. IN A
+SECTION ANSWER
+ncfphywebgtm01-c.ingdirect.com.au. IN A 203.92.27.132
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ncfphywebgtm01-c.ingdirect.com.au. IN AAAA
+SECTION AUTHORITY
+ingdirect.com.au. IN SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+RANGE_END
+
+; ncfphywebgtm01-c.ingdirect.com.au.
+RANGE_BEGIN 0 100
+ ADDRESS 203.92.27.132
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+clb.ingdirect.com.au. IN NS
+SECTION AUTHORITY
+clb.ingdirect.com.au. IN NS ncfphywebgtm01-c.ingdirect.com.au.
+SECTION ADDITIONAL
+ncfphywebgtm01-c.ingdirect.com.au. IN A 203.92.27.132
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.clb.ingdirect.com.au. IN A
+SECTION ANSWER
+www.clb.ingdirect.com.au. IN A 203.31.183.134
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+www.ingdirect.com.au. IN A
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.ingdirect.com.au. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.ingdirect.com.au. IN A
+SECTION ANSWER
+www.ingdirect.com.au. IN CNAME www.clb.ingdirect.com.au.
+www.clb.ingdirect.com.au. IN A 203.31.183.134
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cname_cache.rpl b/tests/deckard/sets/resolver/iter_cname_cache.rpl
new file mode 100644
index 0000000..2d0dca9
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cname_cache.rpl
@@ -0,0 +1,297 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test iterative resolve with cached cname for nameserver
+; example.com NS ns.example.com en ns2.example.com
+; ns.example.com CNAME ns.bla.nl
+; ns.bla.nl A ....
+; dan timeout van A record uit cache - refetch.
+; ns2.example.com timeed niet uit ; maar geeft altijd servfail.
+
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+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
+nl. IN A
+SECTION AUTHORITY
+nl. IN NS ns2.nic.nl.
+SECTION ADDITIONAL
+ns2.nic.nl. IN A 192.1.1.2
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net. ".com"
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+;;; but really a CNAME in child server
+ns.example.com. 1 IN A 1.2.3.4
+ns2.example.com. IN A 1.2.3.5
+ns2.example.com. IN AAAA 2002::5
+ENTRY_END
+
+; lame answers back to root for .nl (.com server not authoritative for .nl)
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nl. IN A
+SECTION AUTHORITY
+. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+RANGE_END
+
+; ns2.nic.nl ".nl"
+RANGE_BEGIN 0 100
+ ADDRESS 192.1.1.2
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+bla.nl. IN A
+SECTION AUTHORITY
+bla.nl. IN NS ns.bla.nl.
+SECTION ADDITIONAL
+ns.bla.nl. IN A 1.2.3.6
+ENTRY_END
+
+RANGE_END
+
+; ns.bla.nl "bla..nl"
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ns.bla.nl. IN A
+SECTION ANSWER
+ns.bla.nl. IN A 1.2.3.6
+SECTION AUTHORITY
+bla.nl. IN NS ns.bla.nl.
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ns.bla.nl. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+bla.nl. IN SOA bla.nl. bla.nl. 1 2 3 4 5
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ns.bla.nl. IN MX
+SECTION ANSWER
+ns.bla.nl. IN MX 10 bla.nl.
+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
+
+; ns.example.com "example.com"
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN MX
+SECTION ANSWER
+ns.example.com IN CNAME ns.bla.nl.
+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
+
+; ns2.example.com "example.com"
+; bad failing server
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+ns.example.com. IN MX
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; ns2.example.com "example.com"
+; bad failing server
+RANGE_BEGIN 0 100
+ ADDRESS 2002::5
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+ns.example.com. IN MX
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; get cname in cache. use MX query
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns.example.com. IN MX
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns.example.com. IN MX
+SECTION ANSWER
+ns.example.com. IN CNAME ns.bla.nl
+ns.bla.nl. IN MX 10 bla.nl.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; get seconds to pass to timeout the A record
+STEP 15 TIME_PASSES ELAPSE 5
+
+; get into trouble getting cname for nameserver.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 30 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 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; there may still be pending ns.bla.nl AAAA queries ; get rid of them like this
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns.bla.nl. IN AAAA
+ENTRY_END
+
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns.bla.nl. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+bla.nl. IN SOA bla.nl. bla.nl. 1 2 3 4 5
+;SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cname_double.rpl b/tests/deckard/sets/resolver/iter_cname_double.rpl
new file mode 100644
index 0000000..031dccb
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cname_double.rpl
@@ -0,0 +1,294 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test double cname in reply.
+; this is in response to an error report from Robert Edmonds,
+; about resolution of images-na.ssl-images-amazon.com.
+
+; 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
+net. IN A
+SECTION AUTHORITY
+net. 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
+com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; test domains
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN A
+SECTION AUTHORITY
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ADDITIONAL
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+; two CNAMEs for one name?
+www.example.com. IN CNAME www.next.com.
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.next.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA
+SECTION QUESTION
+www.next.com. IN A
+SECTION ANSWER
+www.next.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN NS
+SECTION ANSWER
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+www.next.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cname_nx.rpl b/tests/deckard/sets/resolver/iter_cname_nx.rpl
new file mode 100644
index 0000000..6dac1e2
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cname_nx.rpl
@@ -0,0 +1,288 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test cname followed by nxdomain reply rcode.
+
+; 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
+net. IN A
+SECTION AUTHORITY
+net. 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
+com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; test domains
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN A
+SECTION AUTHORITY
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ADDITIONAL
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.next.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+www.next.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN NS
+SECTION ANSWER
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cname_qnamecopy.rpl b/tests/deckard/sets/resolver/iter_cname_qnamecopy.rpl
new file mode 100644
index 0000000..e446c6c
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cname_qnamecopy.rpl
@@ -0,0 +1,331 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test cname to nodata and if qname is set to orig after prepend
+
+; 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
+net. IN A
+SECTION AUTHORITY
+net. 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
+com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN A
+SECTION AUTHORITY
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ADDITIONAL
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.next.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.next.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+next.com. IN NS
+SECTION ANSWER
+next.com. IN NS ns.next.com.
+SECTION ADDITIONAL
+ns.next.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 3 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD CD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000
+SECTION ADDITIONAL
+ENTRY_END
+
+; query it from cache again
+STEP 5 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 7 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN CNAME www.next.com.
+SECTION AUTHORITY
+next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000
+SECTION ADDITIONAL
+ENTRY_END
+
+; query answer to cname from cache again, test if stored under wrong qname.
+STEP 9 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.next.com. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.next.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cycle.rpl b/tests/deckard/sets/resolver/iter_cycle.rpl
new file mode 100644
index 0000000..3c2a097
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cycle.rpl
@@ -0,0 +1,258 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with dependency cycle
+; query for ns.example.com, needs ns.example.net, needs ns.example.com.
+
+; Invalid server
+RANGE_BEGIN 0 100 1.2.3.1
+
+ENTRY_BEGIN
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+ENTRY_END
+
+RANGE_END
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100 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 A
+SECTION AUTHORITY
+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
+net. IN A
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+; note this will be scrubbed off
+ns.example.net. IN A 1.2.3.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+; note this will be scrubbed off
+ns.example.net. IN A 1.2.3.1
+ENTRY_END
+
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. IN A 192.12.94.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.com.
+SECTION ADDITIONAL
+; note this will be scrubbed off
+ns.example.com. IN A 1.2.3.2
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; cycle detected and it fails.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_cycle_noh.rpl b/tests/deckard/sets/resolver/iter_cycle_noh.rpl
new file mode 100644
index 0000000..eaf30bb
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_cycle_noh.rpl
@@ -0,0 +1,414 @@
+; config options
+ harden-glue: "no"
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution where disabled scrubber avoids cycle
+; query for ns.example.com, needs ns.example.net, needs ns.example.com.
+; scrubber disabled, so extra glue is trusted.
+
+; 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 A
+SECTION AUTHORITY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.1
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. IN NS a.gtld-servers.net.
+gtld-servers.net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. IN A 192.12.94.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.2
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. IN NS a.gtld-servers.net.
+gtld-servers.net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. IN A 192.12.94.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.1
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.2
+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.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.2
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.1
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; cycle detected and it fails.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.2
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+; scrubbed off
+; SECTION ADDITIONAL
+; ns.example.net. IN A 1.2.3.1
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_dnsseclame_ds_ok.rpl b/tests/deckard/sets/resolver/iter_dnsseclame_ds_ok.rpl
new file mode 100644
index 0000000..36433e1
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_dnsseclame_ds_ok.rpl
@@ -0,0 +1,369 @@
+; config options
+;server:
+ trust-anchor: "example.com. 3600 IN DS 8378 7 1 0FCD3F3031F437036CA53411FD4B43BAB303B450 "
+val-override-date: "20181130121807"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test dnssec-lame detection at ds point, which is ok.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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 AA 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION AUTHORITY
+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 AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. 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 AA 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 AA NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 54180 5 1 67360E6697A9066D6904EE6E9879FB5990C6A724
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAcXhoXQxDzxHC1U3t6ayuYVk2ufLVk59LEzGA2fYWBQiPbx0ay46 r0cuafuY1ueEB2KavEO7Esb9Tvo9ynWKg0DOIOpV4iNDVMUoNbZQj8X1 0WKgBHdaXc2aGC+EM9ozSnLKuV02+eNT/PxPsijqzkC7cJ32k4n1+sZ1 5Cywbo3Z ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101806 20181130101806 54180 sub.example.com. unaHKPTSK0hncZIN8FVjcCtELPlo968TVskOpvMjhe3IgiTXMoVzBzW8 XNalW4wnelZVv1PYW0+6MGukDBBzJBRn9qKKrFyayMppIelbpC52SFqI H58AhMUJb2GlPJW9Xg19eF7FmSLrrYO0GMkfH5pAvd1aNOCckj4LJ1PS Sfg= ;{id = 30899}
+SECTION AUTHORITY
+; no NS set. not needed for this test.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101806 20181130101806 54180 sub.example.com. dtxWwVO+T0vfjdrU9/COBJR6oshgdO8gkGusq573eBe8QzaXrV1cRLya Zj3qXUBrn61iOi2xEu0yEtfJx8++XGtzHrmTIFUGWOQW3BoyfLAVZC3b WrNKVljMMVAIWzwOBQguIVczW7vLAG6QAMICrI/es5xx8IMTYmoZOgXN RMo= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101806 20181130101806 54180 sub.example.com. oGdNeh2GTFMtDsCIuJ6dTfwWjb7IpslFiUnH71I2a0X5E3acfvQ/3Xhs Paivy1SbIb2kaf3DMXYAbLBIhcyWGP45kXaP+5CRXkyt69gDcSVxKdZP rugy6m4LwaitTRlV44jDu6GxVZjXlAjd2d4rrz8qixRQIfEfk8IMX0L4 30U= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+ENTRY_END
+
+; fine DNSKEY response.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcPpAFo67izrkhRxtGyVSpusyG5WmkRQ5UaJ+wdgqCFiDZtZoaY2 TLWnxkqm1shmK2ef+M9aUpbz2L8LpdDPJcUf+9tcR37/vVh5+RzhjAkD /V/wVQw4DincwuSXtk6yOfXXUyRBx9JDV9Y+R7Dg0MUeSDYwwd2ne2tz 5v8D+Hi/ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101806 20181130101806 8378 example.com. d54yctvAg31OPD9tML4Boh4u8/T9SZZtQfSaEyXq8Ean4MYtdVYzPp72 ZW6OuUXHxjPULWLoHA/y/vSNOmC5O5M9LZ1vU1kbPRwR/p7lzFtQuVYv Nmhpr8ohNuqms+wZue9akZXTv5gN8HL3eg/nqEuqVPHwrNhLX+okuNLK E50= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101806 20181130101806 8378 example.com. d8xIochwH3oB29TjGvSXOsJOzdBm+5O/Yttdbcxy2S0psh/IBAyMZBqH QVkubqiM0Fj7kDdcEJFFqiDDZzKSlREQyaU9TY78bSjga5ZYXnoiy1Kc KKkvvwIXfzWkqyG1vm4wZtEOBDO9ho1sKoZrGVg/rEVhAnZTj/a25B9Q Ka8= ;{id = 2854}
+ENTRY_END
+
+; correct delegation with DS
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.example.net.
+sub.example.com. 3600 IN DS 54180 5 1 67360E6697A9066D6904EE6E9879FB5990C6A724
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101806 20181130101806 8378 example.com. hnexEP0ej6KmZ3BYYOAqs8WgbSFS0psOYvcjJdeQPymmFYJgXdkkHznV cxTL8TrsS+2uD8gUEC/g4k8eEPc4my1wswalm1+d+KYan15inHzkRrko oC7kD705RvSEl6F5L7NbpmEYgqVjZb3PJAhppS54UYxsRdqhEZop3MmV KuA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.example.net.
+sub.example.com. 3600 IN DS 54180 5 1 67360E6697A9066D6904EE6E9879FB5990C6A724
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101806 20181130101806 8378 example.com. hnexEP0ej6KmZ3BYYOAqs8WgbSFS0psOYvcjJdeQPymmFYJgXdkkHznV cxTL8TrsS+2uD8gUEC/g4k8eEPc4my1wswalm1+d+KYan15inHzkRrko oC7kD705RvSEl6F5L7NbpmEYgqVjZb3PJAhppS54UYxsRdqhEZop3MmV KuA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; server is not DNSSEC lame.
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NS ns.example.net.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101806 20181130101806 54180 sub.example.com. mCLLh1oDYHUCNY9nRUCe/j0yxPZDidmpNcoeIJlH9JxwV2TqHKgjBLzo awGJukxoAQgyY9v76ITVSRGreDKYe5GQ7beDKq/nIsZSB3S4kIDqXHGz 4Rr2GQvyNWuWRfsnqW09SL3yKET8QYkaIxdXarJrw/dA2gR/g0BGnv39 iEI= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101806 20181130101806 54180 sub.example.com. dtxWwVO+T0vfjdrU9/COBJR6oshgdO8gkGusq573eBe8QzaXrV1cRLya Zj3qXUBrn61iOi2xEu0yEtfJx8++XGtzHrmTIFUGWOQW3BoyfLAVZC3b WrNKVljMMVAIWzwOBQguIVczW7vLAG6QAMICrI/es5xx8IMTYmoZOgXN RMo= ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 54180 5 1 67360E6697A9066D6904EE6E9879FB5990C6A724
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAcXhoXQxDzxHC1U3t6ayuYVk2ufLVk59LEzGA2fYWBQiPbx0ay46 r0cuafuY1ueEB2KavEO7Esb9Tvo9ynWKg0DOIOpV4iNDVMUoNbZQj8X1 0WKgBHdaXc2aGC+EM9ozSnLKuV02+eNT/PxPsijqzkC7cJ32k4n1+sZ1 5Cywbo3Z ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101806 20181130101806 54180 sub.example.com. unaHKPTSK0hncZIN8FVjcCtELPlo968TVskOpvMjhe3IgiTXMoVzBzW8 XNalW4wnelZVv1PYW0+6MGukDBBzJBRn9qKKrFyayMppIelbpC52SFqI H58AhMUJb2GlPJW9Xg19eF7FmSLrrYO0GMkfH5pAvd1aNOCckj4LJ1PS Sfg= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101806 20181130101806 54180 sub.example.com. oGdNeh2GTFMtDsCIuJ6dTfwWjb7IpslFiUnH71I2a0X5E3acfvQ/3Xhs Paivy1SbIb2kaf3DMXYAbLBIhcyWGP45kXaP+5CRXkyt69gDcSVxKdZP rugy6m4LwaitTRlV44jDu6GxVZjXlAjd2d4rrz8qixRQIfEfk8IMX0L4 30U= ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101806 20181130101806 54180 sub.example.com. oGdNeh2GTFMtDsCIuJ6dTfwWjb7IpslFiUnH71I2a0X5E3acfvQ/3Xhs Paivy1SbIb2kaf3DMXYAbLBIhcyWGP45kXaP+5CRXkyt69gDcSVxKdZP rugy6m4LwaitTRlV44jDu6GxVZjXlAjd2d4rrz8qixRQIfEfk8IMX0L4 30U= ;{id = 30899}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_dnsseclame_ta_ok.rpl b/tests/deckard/sets/resolver/iter_dnsseclame_ta_ok.rpl
new file mode 100644
index 0000000..8ec72b8
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_dnsseclame_ta_ok.rpl
@@ -0,0 +1,305 @@
+; config options
+;server:
+ trust-anchor: "example.com. 3600 IN DS 63215 7 1 9B2A4B4CE971A6D1A2DFD23C03467F053F1D2D9C "
+val-override-date: "20181130121809"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test dnssec-lame detection with anchor point that is ok.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION AUTHORITY
+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 AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. 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 AA 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 AA NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+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
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101809 20181130101809 63215 example.com. ldaJ3pZ4qtnwcT+SudZ4G05ye0+FbtGoXuAxjRUVef/nee+8pgMLtK1a 0j1Ejg3IAit/nUKD58Ccfuo45Qwf/BnJvKeKltksGhOSEw+yoqD+QOHN ByiphD1qsmaECbLHgXm/1Wmrp5kLm15HvErBJv1nGp6aALaHkao3tkl4 ZAY= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101809 20181130101809 63215 example.com. dwaG446dWfL78qWJxkp9MO1SeV4xEt6MF3jYcpM6HGWgmn0peGy+zvzq TpeyMRCQFi52+MIGDPOnRtVVYpFnsUmH9dkoYGG+5ut9RUoyef4p7EsE BJncC/S5iMYaeEoU9yIwV/CZq/cdz465RroMKKJuI2NQW9gZn+MbFojY T3E= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbeLIHEf7lEpCP1+GPvzCTJUDjUCMggHlkNWFbsT2xQsG3QVKInt h6KWLbfdgKp9RU1L5vyerphhEIsRwAGF/PZsIWc/kQsdXMWyiKcRwLHS l3JNydyTkl5oIhWu6SDaK51KWSaopxwhLZAtKWoQRKSRSdnlQg9B98sj ZWpAhm6V ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101809 20181130101809 63215 example.com. PxtUfqGNISnTuabiNbxdZcPABScYoElxSp6CC5TIN8MNkMCsq4mMKqHw ECFdHX+s4K9frWEOVZT0uSvJFsVdhomtOR6zfc1jcc4p+SuDlIRfrAEL jREika0hP04tPwzDnQzZbswJK9lpwAglTvH4OSjZhHUEMuelZxTF8GyA WMc= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101809 20181130101809 63215 example.com. gRONsGpAzHBTe8PKGcxPo9mmvZZNOjZC/4Xn/36WIe8VTf1T67KDPHuz zeYpkxT6x1Fc5JzBWPOTvL+leugJ2p4N0tFTnYWmu0gVcYqRCa4KX5Yz ek9wkGdDS9yTZhQFWXe0ckWulaZb5f9Hxq/UpE2LdnLSLwUcmRATefML TvE= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+ENTRY_END
+
+; the response is not lame at all.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbeLIHEf7lEpCP1+GPvzCTJUDjUCMggHlkNWFbsT2xQsG3QVKInt h6KWLbfdgKp9RU1L5vyerphhEIsRwAGF/PZsIWc/kQsdXMWyiKcRwLHS l3JNydyTkl5oIhWu6SDaK51KWSaopxwhLZAtKWoQRKSRSdnlQg9B98sj ZWpAhm6V ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101809 20181130101809 63215 example.com. PxtUfqGNISnTuabiNbxdZcPABScYoElxSp6CC5TIN8MNkMCsq4mMKqHw ECFdHX+s4K9frWEOVZT0uSvJFsVdhomtOR6zfc1jcc4p+SuDlIRfrAEL jREika0hP04tPwzDnQzZbswJK9lpwAglTvH4OSjZhHUEMuelZxTF8GyA WMc= ;{id = 2854}
+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.com.
+example.com. IN NS ns.example.net.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101809 20181130101809 63215 example.com. ldaJ3pZ4qtnwcT+SudZ4G05ye0+FbtGoXuAxjRUVef/nee+8pgMLtK1a 0j1Ejg3IAit/nUKD58Ccfuo45Qwf/BnJvKeKltksGhOSEw+yoqD+QOHN ByiphD1qsmaECbLHgXm/1Wmrp5kLm15HvErBJv1nGp6aALaHkao3tkl4 ZAY= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101809 20181130101809 63215 example.com. dwaG446dWfL78qWJxkp9MO1SeV4xEt6MF3jYcpM6HGWgmn0peGy+zvzq TpeyMRCQFi52+MIGDPOnRtVVYpFnsUmH9dkoYGG+5ut9RUoyef4p7EsE BJncC/S5iMYaeEoU9yIwV/CZq/cdz465RroMKKJuI2NQW9gZn+MbFojY T3E= ;{id = 2854}
+ENTRY_END
+
+; response is not lame.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101809 20181130101809 63215 example.com. gRONsGpAzHBTe8PKGcxPo9mmvZZNOjZC/4Xn/36WIe8VTf1T67KDPHuz zeYpkxT6x1Fc5JzBWPOTvL+leugJ2p4N0tFTnYWmu0gVcYqRCa4KX5Yz ek9wkGdDS9yTZhQFWXe0ckWulaZb5f9Hxq/UpE2LdnLSLwUcmRATefML TvE= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101809 20181130101809 63215 example.com. gRONsGpAzHBTe8PKGcxPo9mmvZZNOjZC/4Xn/36WIe8VTf1T67KDPHuz zeYpkxT6x1Fc5JzBWPOTvL+leugJ2p4N0tFTnYWmu0gVcYqRCa4KX5Yz ek9wkGdDS9yTZhQFWXe0ckWulaZb5f9Hxq/UpE2LdnLSLwUcmRATefML TvE= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_domain_sale.rpl b/tests/deckard/sets/resolver/iter_domain_sale.rpl
new file mode 100644
index 0000000..27220e9
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_domain_sale.rpl
@@ -0,0 +1,269 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolver with a domain sale
+; and the old operator is nasty, keeps running his server with the old data.
+; and lots of lookups keep going towards the domain.
+; eventually, the NS record has to timeout.
+
+; 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 A
+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. (before sale of domain)
+RANGE_BEGIN 0 20
+ 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net. (after sale of domain)
+RANGE_BEGIN 30 200
+ 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 8.8.8.8
+ENTRY_END
+RANGE_END
+
+; ns.example.com. first owner
+RANGE_BEGIN 0 200
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; nxdomains for any name,type
+; last in RANGE so that it matches everything left over.
+; it includes the NS record.
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com. new owner
+RANGE_BEGIN 0 200
+ ADDRESS 8.8.8.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 88.88.88.88
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 8.8.8.8
+ENTRY_END
+RANGE_END
+
+; Fetch the old record from the old owner.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 5 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 3600 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; the domain is sold (right at this time).
+; but the information stays in the cache.
+
+; after 1800 secs still the cached answer
+STEP 20 TIME_PASSES ELAPSE 1800
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 1800 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 1800 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 1800 IN A 1.2.3.4
+ENTRY_END
+
+; and ask another query
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nx1.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+nx1.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 1800 IN A 1.2.3.4
+ENTRY_END
+
+; after another 1900 seconds the domain must have timed out.
+STEP 70 TIME_PASSES ELAPSE 1900
+
+; the NS record should have timed out.
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 88.88.88.88
+;SECTION AUTHORITY
+;example.com. 3600 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 8.8.8.8
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_domain_sale_nschange.rpl b/tests/deckard/sets/resolver/iter_domain_sale_nschange.rpl
new file mode 100644
index 0000000..d260bcd
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_domain_sale_nschange.rpl
@@ -0,0 +1,348 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolver with a domain sale and NS changes
+; and the old operator is nasty, keeps running his server with the old data.
+; and lots of lookups keep going towards the domain.
+; and the old server is changing the NS record of the old domain.
+
+; 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 A
+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. (before sale of domain)
+RANGE_BEGIN 0 20
+ 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+RANGE_END
+
+; a.gtld-servers.net. (after sale of domain)
+RANGE_BEGIN 30 200
+ 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 8.8.8.8
+ENTRY_END
+RANGE_END
+
+; ns.example.com. first owner
+RANGE_BEGIN 0 30
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; nxdomains for any name,type
+; last in RANGE so that it matches everything left over.
+; it includes the NS record.
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com. first owner, NS changed
+RANGE_BEGIN 40 200
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS nsb.example.com.
+SECTION ADDITIONAL
+nsb.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3600 IN NS nsb.example.com.
+SECTION ADDITIONAL
+nsb.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; nxdomains for any name,type
+; last in RANGE so that it matches everything left over.
+; it includes the NS record.
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS nsb.example.com.
+SECTION ADDITIONAL
+nsb.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com. new owner
+RANGE_BEGIN 0 200
+ ADDRESS 8.8.8.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 8.8.8.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 88.88.88.88
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 8.8.8.8
+ENTRY_END
+RANGE_END
+
+; Fetch the old record from the old owner.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 5 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 3600 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; the domain is sold (right at this time).
+; but the information stays in the cache.
+
+; after 1800 secs still the cached answer
+STEP 20 TIME_PASSES ELAPSE 1800
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 1800 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 1800 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 1800 IN A 1.2.3.4
+ENTRY_END
+
+; and ask another query
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nx1.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+nx1.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS nsb.example.com.
+;SECTION ADDITIONAL
+;nsb.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+STEP 62 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nx1.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 63 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+nx1.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA a. b. 1 2 3 4 5
+example.com. 3600 IN NS nsb.example.com.
+;SECTION ADDITIONAL
+;nsb.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+; after another 1900 seconds the domain must have timed out.
+STEP 70 TIME_PASSES ELAPSE 1900
+
+; the NS record should have timed out.
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+; recursion happens here.
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN A 88.88.88.88
+;SECTION AUTHORITY
+;example.com. 3600 IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 8.8.8.8
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_donotq127.rpl b/tests/deckard/sets/resolver/iter_donotq127.rpl
new file mode 100644
index 0000000..c1eb487
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_donotq127.rpl
@@ -0,0 +1,196 @@
+; config options
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator donotquery of 127/8.
+; The scenario presents an iteration chain that has 127.0.0.2 and
+; 127.255.255.255 as nameserver IPs, like a spam-blocklist.
+; these are 127/8 localhost and should be blocked, causing servfail.
+; if not blocked, they cause a lookup, but this file does not specify
+; 127.* responses, so testbound will fail the test.
+
+; 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 qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+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 qtype qname
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+com. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+ns2.example.com. IN AAAA
+SECTION AUTHORITY
+com. SOA bla bla 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ns.example.com. IN A 127.255.255.255
+ns2.example.com. IN A 127.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ns.example.com. IN A 127.255.255.255
+ns2.example.com. IN A 127.0.0.2
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+RANGE_END
+
+; ns.example.com trap
+RANGE_BEGIN 0 100
+ ADDRESS 127.255.255.255
+RANGE_END
+
+; ns.example.com trap
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.2
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ds_locate_ns.rpl b/tests/deckard/sets/resolver/iter_ds_locate_ns.rpl
new file mode 100644
index 0000000..fa2c535
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ds_locate_ns.rpl
@@ -0,0 +1,144 @@
+; config options
+;server:
+; target-fetch-policy: "0 0 0 0 0"
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test locate of NS records for parent nameservers of DS
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; content of root-servers.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+SECTION AUTHORITY
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. 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 AA NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION AUTHORITY
+net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-servers.net. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ds_locate_ns_nosoa.rpl b/tests/deckard/sets/resolver/iter_ds_locate_ns_nosoa.rpl
new file mode 100644
index 0000000..caca222
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ds_locate_ns_nosoa.rpl
@@ -0,0 +1,144 @@
+; config options
+;server:
+; target-fetch-policy: "0 0 0 0 0"
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test locate of NS records for DS without a SOA record
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; content of root-servers.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+SECTION AUTHORITY
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+;root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. 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 AA NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION AUTHORITY
+net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-servers.net. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_escape_bailiwick.rpl b/tests/deckard/sets/resolver/iter_escape_bailiwick.rpl
new file mode 100644
index 0000000..cef641a
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_escape_bailiwick.rpl
@@ -0,0 +1,218 @@
+stub-addr: 193.0.14.129
+CONFIG_END
+SCENARIO_BEGIN Test a case where parent NS advertises non-existent zone cut, and the final NS tries to answer from its parent's zone cut.
+; That is treated as an attempt to escape bailiwick and is treated specially.
+; The NS from final answer MUST NOT be cached, but it should still be used for resolution.
+
+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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+www.example.com. IN NS ns.example.com. ; Introduce non-existing zone cut
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_formerr.rpl b/tests/deckard/sets/resolver/iter_formerr.rpl
new file mode 100644
index 0000000..54f5296
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_formerr.rpl
@@ -0,0 +1,83 @@
+; config options
+; harden-referral-path: no
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Disable EDNS0 and fancy stuff when the server replies with FORMERR.
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN A
+ENTRY_END
+
+; root prime
+STEP 30 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; query sent to root server
+STEP 50 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ENTRY_END
+
+; this is the formerr answer
+STEP 60 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA FORMERR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; this is the correct answer
+STEP 70 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ENTRY_END
+
+; is the final answer correct?
+STEP 100 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_hint_lame.rpl b/tests/deckard/sets/resolver/iter_hint_lame.rpl
new file mode 100644
index 0000000..8dda093
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_hint_lame.rpl
@@ -0,0 +1,160 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ ; minimization does not affect priming query
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test iterative resolve with lame hints (RA flag on but no AA flag)
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+; flags are intentionally weird: it should have AA instead of RA
+REPLY QR RA 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 qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET. IN A
+SECTION ANSWER
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET. IN AAAA
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RA NOERROR
+SECTION QUESTION
+com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_lame_aaaa.rpl b/tests/deckard/sets/resolver/iter_lame_aaaa.rpl
new file mode 100644
index 0000000..7eeef60
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_lame_aaaa.rpl
@@ -0,0 +1,178 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test iterator lameness detection of AAAA-only lameness
+
+; 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 AAAA
+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 subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+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
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+
+; response to AAAA query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+. 3600000 IN NS a.root-servers.net.
+. 3600000 IN NS b.root-servers.net.
+. 3600000 IN NS c.root-servers.net.
+. 3600000 IN NS d.root-servers.net.
+. 3600000 IN NS e.root-servers.net.
+. 3600000 IN NS f.root-servers.net.
+. 3600000 IN NS g.root-servers.net.
+. 3600000 IN NS h.root-servers.net.
+. 3600000 IN NS i.root-servers.net.
+. 3600000 IN NS j.root-servers.net.
+. 3600000 IN NS k.root-servers.net.
+. 3600000 IN NS l.root-servers.net.
+. 3600000 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+b.root-servers.net. 3600000 IN A 128.9.0.107
+c.root-servers.net. 3600000 IN A 192.33.4.12
+ENTRY_END
+
+; response to A query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. 120 IN A 204.14.213.188
+ENTRY_END
+RANGE_END
+
+; Now try the A type, which works, and is not LAME.
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+; this doesn't fail
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. 120 IN A 204.14.213.188
+ENTRY_END
+
+; this fails; it is LAME
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN AAAA
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_lame_noaa.rpl b/tests/deckard/sets/resolver/iter_lame_noaa.rpl
new file mode 100644
index 0000000..ceb05c0
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_lame_noaa.rpl
@@ -0,0 +1,124 @@
+; config options
+; harden-referral-path: no
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ ; test with pre-scripted replies does not make sense with qmin
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test lame detection if AA bit is omitted
+; the query is answered with a reply that has
+; no AA bit
+; no SOA record
+; noanswer/noerror
+; NS record in there which is not a down delegation (==).
+; the query is not sent to a forward zone
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; root prime is sent
+STEP 30 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; query sent to root server
+STEP 50 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; query sent to .com server
+STEP 70 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns1.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns1.example.com. IN A 168.192.2.2
+ns2.example.com. IN A 168.192.3.3
+ENTRY_END
+
+; no matter which one the iterator tries first, we present it as 'lame'
+; query to ns1.example.com or ns2.example.com.
+STEP 90 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+; This is the BROKEN ANSWER here.
+; it is lame. A delegation to example.com. itself.
+example.com. IN NS ns1.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns1.example.com. IN A 168.192.2.2
+ns2.example.com. IN A 168.192.3.3
+ENTRY_END
+
+; iterator should try again and ask the other nameserver.
+STEP 110 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns1.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns1.example.com. IN A 168.192.2.2
+ns2.example.com. IN A 168.192.3.3
+ENTRY_END
+
+
+; is the final answer correct?
+STEP 200 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns1.example.com.
+;example.com. IN NS ns2.example.com.
+;SECTION ADDITIONAL
+;ns1.example.com. IN A 168.192.2.2
+;ns2.example.com. IN A 168.192.3.3
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_lame_nosoa.rpl b/tests/deckard/sets/resolver/iter_lame_nosoa.rpl
new file mode 100644
index 0000000..54e4088
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_lame_nosoa.rpl
@@ -0,0 +1,291 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with lame reply looks like nodata with noSOA
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+; advertises +RA so it is REC_LAME.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA 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 RA 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 RA 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 RA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.net.
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ns.example.net IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+; is like a BIND server that is LAME, authoritative for other domains,
+; but not this one, and somehow got this NS record in its cache.
+; trying to give 'lame referral' but to the same name, not up.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+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
+ENTRY_END
+RANGE_END
+
+; store bad timing for one server to influence server selection
+; 1.2.3.44 (ns.example.net) gets 900 msec.
+; so the 376 ns.example.com is preferred.
+;STEP 1 INFRA_RTT 1.2.3.44 example.net. 900
+
+STEP 10 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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+; scrubbed off
+;ns.example.net IN A 1.2.3.44
+ENTRY_END
+
+; query to recursion-lame server
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+; It's somewhat OK if resolver accepts the only upstream lame server,
+; it's also OK if it ignores lame upstream, because it's not
+; provably authoritative for this zone. (kresd is the latter)
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_lame_root.rpl b/tests/deckard/sets/resolver/iter_lame_root.rpl
new file mode 100644
index 0000000..c94bbec
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_lame_root.rpl
@@ -0,0 +1,33 @@
+stub-addr: 193.0.14.129
+CONFIG_END
+SCENARIO_BEGIN Test iterative resolve with lame root.
+
+; broken root server: K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR RA SERVFAIL
+SECTION QUESTION
+. IN NS
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_lamescrub.rpl b/tests/deckard/sets/resolver/iter_lamescrub.rpl
new file mode 100644
index 0000000..4543091
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_lamescrub.rpl
@@ -0,0 +1,150 @@
+; config options
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test lameness detection after scrubber.
+
+; 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 A
+SECTION AUTHORITY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+ENTRY_END
+ENTRY_BEGIN
+
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+; This server is Lame!
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+com. 155182 IN NS a.gtld-servers.net.
+com. 155182 IN NS b.gtld-servers.net.
+com. 155182 IN NS c.gtld-servers.net.
+com. 155182 IN NS d.gtld-servers.net.
+com. 155182 IN NS e.gtld-servers.net.
+com. 155182 IN NS f.gtld-servers.net.
+com. 155182 IN NS g.gtld-servers.net.
+com. 155182 IN NS h.gtld-servers.net.
+com. 155182 IN NS i.gtld-servers.net.
+com. 155182 IN NS j.gtld-servers.net.
+com. 155182 IN NS k.gtld-servers.net.
+com. 155182 IN NS l.gtld-servers.net.
+com. 155182 IN NS m.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. 155182 IN A 192.5.6.30
+b.gtld-servers.net. 155182 IN A 192.33.14.30
+c.gtld-servers.net. 155182 IN A 192.26.92.30
+d.gtld-servers.net. 155182 IN A 192.31.80.30
+e.gtld-servers.net. 155182 IN A 192.12.94.30
+f.gtld-servers.net. 155182 IN A 192.35.51.30
+g.gtld-servers.net. 155182 IN A 192.42.93.30
+h.gtld-servers.net. 155182 IN A 192.54.112.30
+i.gtld-servers.net. 155182 IN A 192.43.172.30
+j.gtld-servers.net. 155182 IN A 192.48.79.30
+k.gtld-servers.net. 155182 IN A 192.52.178.30
+l.gtld-servers.net. 155182 IN A 192.41.162.30
+m.gtld-servers.net. 155182 IN A 192.55.83.30
+a.gtld-servers.net. 155182 IN AAAA 2001:503:a83e::2:30
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursin happens here
+
+; check that the answer is a failure (lame server)
+; and not a nodata-noerror message (false answer classification).
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_minim_a.rpl b/tests/deckard/sets/resolver/iter_minim_a.rpl
new file mode 100644
index 0000000..1eff485
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_minim_a.rpl
@@ -0,0 +1,93 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: on
+; name: "."
+ stub-addr: 127.0.0.10 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic query minimization www.example.com.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.10
+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 127.0.0.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+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
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_minim_a_nxdomain.rpl b/tests/deckard/sets/resolver/iter_minim_a_nxdomain.rpl
new file mode 100644
index 0000000..c1293aa
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_minim_a_nxdomain.rpl
@@ -0,0 +1,104 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: on
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic query minimization sub.www.example.com. when NS doesn't show empty non-terminal.
+
+; 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 qtype qname
+ADJUST copy_id
+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
+example.com. IN NS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.example.com. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.www.example.com. IN A
+SECTION ANSWER
+sub.www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+sub.www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+sub.www.example.com. IN A
+SECTION ANSWER
+sub.www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_minim_nonempty.rpl b/tests/deckard/sets/resolver/iter_minim_nonempty.rpl
new file mode 100644
index 0000000..38812fd
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_minim_nonempty.rpl
@@ -0,0 +1,132 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: on
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test query minimization with terminal in resolution path.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS lame-addr.gtld-servers.net.
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+lame-addr.gtld-servers.net. IN A 1.1.1.1
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; lame.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+. IN NS
+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 AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN CNAME nowhere.cdn.example.com.
+SECTION AUTHORITY
+; Suggest authority of 'nowhere' (which must not be followed)
+cdn.example.com. IN NS ns01.cdn.example.com.
+SECTION ADDITIONAL
+ns01.cdn.example.com. IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN NS
+SECTION ANSWER
+www.example.com. IN NS blackhole.
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+FLAGS RD
+SECTION QUESTION
+www.example.com. IN NS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN NS
+SECTION ANSWER
+www.example.com. IN NS blackhole.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_minim_ns.rpl b/tests/deckard/sets/resolver/iter_minim_ns.rpl
new file mode 100644
index 0000000..b642165
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_minim_ns.rpl
@@ -0,0 +1,126 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: on
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test query minimization with empty-nonterminal in path.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS K.ROOT-SERVERS.NET.
+SECTION ADDITIONAL
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS lame-addr.gtld-servers.net.
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+lame-addr.gtld-servers.net. IN A 1.1.1.1
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+; lame.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+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
+example.com. IN NS
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN NS
+SECTION ANSWER
+www.example.com. IN NS blackhole.
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN NS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN NS
+SECTION ANSWER
+www.example.com. IN NS blackhole.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_minmaxttl.rpl b/tests/deckard/sets/resolver/iter_minmaxttl.rpl
new file mode 100644
index 0000000..7ba7caa
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_minmaxttl.rpl
@@ -0,0 +1,191 @@
+; config options
+ features: min_ttl = 300
+ features: max_ttl = 600
+ ; the test is purely about cache so we do not need qmin complexity
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test configurable minimum and maximum TTL
+
+; minimum TTL
+; time 0
+RANGE_BEGIN 1 2
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. 0 IN A 5.6.7.8 ; TTL smaller than min_ttl
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 4 8
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. 0 IN A 9.10.11.12
+ENTRY_END
+RANGE_END
+
+
+
+
+; maximum TTL
+; time 0
+RANGE_BEGIN 9 10
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. 3600 IN A 13.14.15.16 ; TTL bigger than max_ttl
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 12 16
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. 3600 IN A 17.18.19.20
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 5.6.7.8
+ENTRY_END
+
+
+STEP 3 TIME_PASSES ELAPSE 200
+; time 200
+
+STEP 4 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+; time 200 < min_ttl 300: returns cached answer
+STEP 5 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 5.6.7.8
+ENTRY_END
+
+STEP 6 TIME_PASSES ELAPSE 200
+; time 400
+
+STEP 7 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+; time 400 > min_ttl 300: returns new answer
+STEP 8 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 9.10.11.12
+ENTRY_END
+
+
+STEP 9 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. IN A 13.14.15.16
+ENTRY_END
+
+
+STEP 11 TIME_PASSES ELAPSE 500
+; time 500
+
+STEP 12 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+; time 500 < max_ttl 600: returns cached answer
+STEP 13 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. IN A 13.14.15.16
+ENTRY_END
+
+STEP 14 TIME_PASSES ELAPSE 500
+; time 1000
+
+STEP 15 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+; time 1000 > max_ttl 600: returns new answer
+STEP 16 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. IN A 17.18.19.20
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_mod.rpl b/tests/deckard/sets/resolver/iter_mod.rpl
new file mode 100644
index 0000000..8e8b058
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_mod.rpl
@@ -0,0 +1,217 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; module-config: "iterator"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic iterative resolve without validator module
+
+; 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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_multiple_A.rpl b/tests/deckard/sets/resolver/iter_multiple_A.rpl
new file mode 100644
index 0000000..3eb9636
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_multiple_A.rpl
@@ -0,0 +1,170 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Multiple A records test.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example.com. IN A
+SECTION ANSWER
+a.example.com. 3600 IN CNAME b.example.com.
+a.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. uiI9SNK74X//ACbllDC5LD49gjTmyL08CrtK1++I3rNPFFRChyJYAkUM wXBOXVW+fqBWOrXr835KCvUK/JJiSy/vvqE2+xI370OL8d9MvjR9vjIw Y2VusLWr3KmI4ixR7bAdG+FnMedapykOi8CJnbpkltU60QprQetcKGSv /Gk=
+b.example.com. 3600 IN A 1.2.3.5
+b.example.com. 3600 IN A 1.2.3.6
+b.example.com. 3600 IN A 1.2.3.7
+b.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. s5QtOdtBldJK1tdYNeWfQjoqVALI8eqcCRGOD1VocXRfDs3pgzowqtu5 rU/5vUxcN535/Z8nRPXEF7Ub5pgzEWupETiUvpEQP/Y+mNTaXrsgHTlc YCsCqbaPDNJ6wxfaicTiSYL9i2DDpMyNot+HUfhrYdyfaVcNsfy2/z2R TZ0=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+a.example.com. IN A
+SECTION ANSWER
+a.example.com. 3600 IN CNAME b.example.com.
+a.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. uiI9SNK74X//ACbllDC5LD49gjTmyL08CrtK1++I3rNPFFRChyJYAkUM wXBOXVW+fqBWOrXr835KCvUK/JJiSy/vvqE2+xI370OL8d9MvjR9vjIw Y2VusLWr3KmI4ixR7bAdG+FnMedapykOi8CJnbpkltU60QprQetcKGSv /Gk=
+b.example.com. 3600 IN A 1.2.3.5
+b.example.com. 3600 IN A 1.2.3.6
+b.example.com. 3600 IN A 1.2.3.7
+b.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. s5QtOdtBldJK1tdYNeWfQjoqVALI8eqcCRGOD1VocXRfDs3pgzowqtu5 rU/5vUxcN535/Z8nRPXEF7Ub5pgzEWupETiUvpEQP/Y+mNTaXrsgHTlc YCsCqbaPDNJ6wxfaicTiSYL9i2DDpMyNot+HUfhrYdyfaVcNsfy2/z2R TZ0=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; Cache hit
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+a.example.com. IN A
+SECTION ANSWER
+a.example.com. 3600 IN CNAME b.example.com.
+a.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. uiI9SNK74X//ACbllDC5LD49gjTmyL08CrtK1++I3rNPFFRChyJYAkUM wXBOXVW+fqBWOrXr835KCvUK/JJiSy/vvqE2+xI370OL8d9MvjR9vjIw Y2VusLWr3KmI4ixR7bAdG+FnMedapykOi8CJnbpkltU60QprQetcKGSv /Gk=
+b.example.com. 3600 IN A 1.2.3.5
+b.example.com. 3600 IN A 1.2.3.6
+b.example.com. 3600 IN A 1.2.3.7
+b.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. s5QtOdtBldJK1tdYNeWfQjoqVALI8eqcCRGOD1VocXRfDs3pgzowqtu5 rU/5vUxcN535/Z8nRPXEF7Ub5pgzEWupETiUvpEQP/Y+mNTaXrsgHTlc YCsCqbaPDNJ6wxfaicTiSYL9i2DDpMyNot+HUfhrYdyfaVcNsfy2/z2R TZ0=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ns_badaa.rpl b/tests/deckard/sets/resolver/iter_ns_badaa.rpl
new file mode 100644
index 0000000..aad267b
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ns_badaa.rpl
@@ -0,0 +1,174 @@
+; config options
+; target-fetch-policy: "3 2 1 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with NS falsely declaring referral answer as authoritative.
+
+; 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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+; False declaration here
+REPLY QR AA NOERROR
+SECTION QUESTION
+MORECOWBELL. IN A
+SECTION AUTHORITY
+MORECOWBELL. 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 copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+CATALYST.MORECOWBELL. IN A
+SECTION ANSWER
+CATALYST.MORECOWBELL. IN A 10.20.30.40
+SECTION AUTHORITY
+CATALYST.MORECOWBELL. IN NS a.gtld-servers.net.
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+catalyst.morecowbell. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+catalyst.morecowbell. IN A
+SECTION ANSWER
+catalyst.morecowbell. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ns_badglue.rpl b/tests/deckard/sets/resolver/iter_ns_badglue.rpl
new file mode 100644
index 0000000..a5998ed
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ns_badglue.rpl
@@ -0,0 +1,238 @@
+; config options
+; target-fetch-policy: "3 2 1 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with delagation with bad glue.
+
+; 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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+x.gtld-servers.net. IN A
+SECTION ANSWER
+x.gtld-servers.net. IN A 192.5.6.31
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+x.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+; This is the offending NS (it must be ignored)
+com. IN NS x.gtld-servers.net.
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+x.gtld-servers.net. IN A 192.5.6.31
+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 copy_query
+REPLY AA QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. 3600 IN NS a.gtld-servers.net.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY AA QR NOERROR
+SECTION QUESTION
+foo.com. IN NS
+SECTION ANSWER
+foo.com. 3600 IN NS a.gtld-servers.net.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.foo.com. IN A
+SECTION ANSWER
+www.foo.com. 10 IN A 10.20.30.40
+SECTION AUTHORITY
+www.foo.com. 3600 IN NS a.gtld-servers.net.
+ENTRY_END
+
+RANGE_END
+
+; x.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.31
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS x.gtld-servers.net.
+SECTION ADDITIONAL
+; Keep suggesting address records for this server
+x.gtld-servers.net. IN A 192.5.6.31
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.foo.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.foo.com. IN A
+SECTION ANSWER
+www.foo.com. 10 IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ns_badip.rpl b/tests/deckard/sets/resolver/iter_ns_badip.rpl
new file mode 100644
index 0000000..1d395df
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ns_badip.rpl
@@ -0,0 +1,261 @@
+; config options
+; target-fetch-policy: "3 2 1 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with delagation with bad IP address
+
+; 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 A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+; Intentional bad address
+a.gtld-servers.net. IN AAAA 1:2:3::4
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net. - intentionally broken over IPv6
+RANGE_BEGIN 0 100
+ ADDRESS 1:2:3::4
+
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+. IN A
+ENTRY_END
+RANGE_END
+
+; a.gtld-servers.net. - works over IPv4
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns.example.com. 10 IN A 1.2.3.4
+ns2.example.com. 3600 IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+foo.com. IN A
+SECTION AUTHORITY
+foo.com. IN NS ns.example.com.
+foo.com. IN NS ns2.example.com.
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 10 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns.example.com. 10 IN A 1.2.3.4
+ns2.example.com. 3600 IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. 10 IN A 1.2.3.4
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns2.example.com. 3600 IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns2.example.com. IN A
+SECTION ANSWER
+ns2.example.com. 3600 IN A 1.2.3.5
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN NS ns2.example.com.
+SECTION ADDITIONAL
+ns.example.com. 10 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA bla. bla. 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns2.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA bla. bla. 1 2 3 4 5
+ENTRY_END
+
+; foo.com contents.
+ENTRY_BEGIN
+ADJUST copy_id
+MATCH opcode qtype qname
+REPLY QR NOERROR
+SECTION QUESTION
+www.foo.com. IN A
+SECTION ANSWER
+www.foo.com. 10 IN A 10.20.30.40
+SECTION AUTHORITY
+foo.com. 3600 IN NS ns.example.com.
+foo.com. 3600 IN NS ns2.example.com.
+ENTRY_END
+
+RANGE_END
+
+; ns2.example.com. (lame)
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.foo.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.foo.com. IN A
+SECTION ANSWER
+www.foo.com. 10 IN A 10.20.30.40
+;SECTION AUTHORITY
+;foo.com. 3600 IN NS ns.example.com.
+;foo.com. 3600 IN NS ns2.example.com.
+ENTRY_END
+
+; Now move the time so good server times out and bad remains.
+STEP 20 TIME_PASSES ELAPSE 20
+
+; Try query again.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.foo.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.foo.com. IN A
+SECTION ANSWER
+www.foo.com. 10 IN A 10.20.30.40
+;SECTION AUTHORITY
+;foo.com. 3600 IN NS ns.example.com.
+;foo.com. 3600 IN NS ns2.example.com.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ns_noglue.rpl b/tests/deckard/sets/resolver/iter_ns_noglue.rpl
new file mode 100644
index 0000000..0895652
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ns_noglue.rpl
@@ -0,0 +1,220 @@
+; config options
+; target-fetch-policy: "3 2 1 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with delagation with missing mandatory glue.
+
+; 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 A
+SECTION AUTHORITY
+; This is the offending NS (it must be ignored)
+com. IN NS a.gtld-servers.com.
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+ENTRY_END
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+; False declaration here
+REPLY QR AA NOERROR
+SECTION QUESTION
+MORECOWBELL. IN A
+SECTION AUTHORITY
+MORECOWBELL. 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 qname qtype
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+; This is the offending NS (it must be ignored)
+com. IN NS a.gtld-servers.com.
+com. IN NS a.gtld-servers.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY AA QR NOERROR
+SECTION QUESTION
+gtld-servers.com. IN NS
+SECTION AUTHORITY
+com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+foo.com. IN NS
+SECTION AUTHORITY
+foo.com. 3600 IN NS a.gtld-servers.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY AA QR NOERROR
+SECTION QUESTION
+foo.com. IN A
+SECTION ANSWER
+foo.com. 10 IN A 10.20.30.40
+SECTION AUTHORITY
+foo.com. 3600 IN NS a.gtld-servers.net.
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+foo.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+foo.com. IN A
+SECTION ANSWER
+foo.com. 10 IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_ns_spoof.rpl b/tests/deckard/sets/resolver/iter_ns_spoof.rpl
new file mode 100644
index 0000000..1b81ed2
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_ns_spoof.rpl
@@ -0,0 +1,274 @@
+; config options
+; harden-referral-path: yes
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test NS record spoof protection.
+
+; 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
+
+; for simplicity the root server is authoritative for root-servers.net
+; and also for gtld-servers.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+K.ROOT-SERVERS.NET. IN A
+SECTION ANSWER
+K.ROOT-SERVERS.NET. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+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 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.4
+ENTRY_END
+
+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
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+;; answer to the spoofed query ; spoofed reply answer.
+; here we put it in the nameserver for ease.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+bad123.example.com. IN A
+SECTION ANSWER
+bad123.example.com. IN A 6.6.6.6
+SECTION AUTHORITY
+; evil NS set.
+example.com. IN NS bad123.example.com.
+ENTRY_END
+
+RANGE_END
+
+; evil server
+RANGE_BEGIN 0 100
+ ADDRESS 6.6.6.6
+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 6.6.6.6
+SECTION AUTHORITY
+example.com. IN NS bad123.example.com.
+SECTION ADDITIONAL
+bad123.example.com. IN A 6.6.6.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 6.6.6.6
+SECTION AUTHORITY
+example.com. IN NS bad123.example.com.
+SECTION ADDITIONAL
+bad123.example.com. IN A 6.6.6.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+bad123.example.com. IN A
+SECTION ANSWER
+bad123.example.com. IN A 6.6.6.6
+SECTION AUTHORITY
+; evil NS set.
+example.com. IN NS bad123.example.com.
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; spoofed query
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+bad123.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; resolver gets address to spoofed server here
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+bad123.example.com. IN A
+SECTION ANSWER
+bad123.example.com. IN A 6.6.6.6
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; a new query
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pc_a.rpl b/tests/deckard/sets/resolver/iter_pc_a.rpl
new file mode 100644
index 0000000..606fc3b
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pc_a.rpl
@@ -0,0 +1,230 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ for type A.
+; the parent has the correct A record.
+
+; 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
+
+; the working version.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ftp.example.com. IN A
+SECTION ANSWER
+ftp.example.com. IN A 10.20.30.10
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+; now that the bad child NS record is in cache, ask something else.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+; test cache of parent data
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ftp.example.com. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ftp.example.com. IN A
+SECTION ANSWER
+ftp.example.com. IN A 10.20.30.10
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pc_aaaa.rpl b/tests/deckard/sets/resolver/iter_pc_aaaa.rpl
new file mode 100644
index 0000000..adee9a6
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pc_aaaa.rpl
@@ -0,0 +1,230 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ for type AAAA.
+; the parent has the correct A record.
+
+; 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 AAAA 2002:b44d::44
+ENTRY_END
+RANGE_END
+
+; the working version.
+RANGE_BEGIN 0 100
+ ADDRESS 2002:b44d::44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ns.example.com. IN AAAA 2002:b44d::55
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ftp.example.com. IN A
+SECTION ANSWER
+ftp.example.com. IN A 10.20.30.10
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+RANGE_END
+
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 2002:b44d::55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+; now that the bad child NS record is in cache, ask something else.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+; test cache of parent data
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ftp.example.com. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ftp.example.com. IN A
+SECTION ANSWER
+ftp.example.com. IN A 10.20.30.10
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN AAAA 2002:b44d::55
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcdiff.rpl b/tests/deckard/sets/resolver/iter_pcdiff.rpl
new file mode 100644
index 0000000..864f2aa
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcdiff.rpl
@@ -0,0 +1,208 @@
+; config options
+;server:
+; target-fetch-policy: "0 0 0 0 0"
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with recursion and parent child differ.
+; and the child gives bad information.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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.net.
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+; The parent-IP version
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.55
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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 AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; ns.example.net
+; The child IP version. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+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 opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcdirect.rpl b/tests/deckard/sets/resolver/iter_pcdirect.rpl
new file mode 100644
index 0000000..c805ed0
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcdirect.rpl
@@ -0,0 +1,311 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolver with parent-child diff for direct impact
+; the trouble is resolving this right away.
+; otherwise it gets picked out of the cache.
+; i.e. on a failed lookup, pickup lame stuff from the cache.
+; the nameserver lookup may have failed but produced some (lame) addresses.
+
+; 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 A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+; parent-side working address.
+ns.example.net. IN A 1.2.3.4
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+ENTRY_END
+RANGE_END
+
+; a0.org.afilias-nst.org.
+RANGE_BEGIN 0 100
+ ADDRESS 199.19.56.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+org. IN NS
+SECTION ANSWER
+org. IN NS a0.org.afilias-nst.org.
+SECTION ADDITIONAL
+a0.org.afilias-nst.org. IN A 199.19.56.1
+ENTRY_END
+
+
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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
+example.net. IN NS
+SECTION ANSWER
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+; correct answer: ns.example.net. IN A 1.2.3.4
+SECTION AUTHORITY
+ns.example.net. IN NS 1.2.3.4.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RA NXDOMAIN
+SECTION QUESTION
+4.example.net. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.net. IN SOA ns.example.net. root.example.net. 2009111400 14400 3600 1209600 86400
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+ENTRY_END
+
+; perhaps some messages are still pending - allow those to resolve.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.50
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcname.rpl b/tests/deckard/sets/resolver/iter_pcname.rpl
new file mode 100644
index 0000000..a45d823
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcname.rpl
@@ -0,0 +1,276 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ in names.
+; the parent has an extra name that is the only working one.
+; To understand the commented-out authority records see
+; https://mailarchive.ietf.org/arch/msg/dnsop/CYjPDlwtpxzdQV_qycB-WfnW6CI
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+; the working version.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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 AA 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 AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+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 AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; ns.example.net
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+; now that the bad child NS record is in cache, ask something else.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcnamech.rpl b/tests/deckard/sets/resolver/iter_pcnamech.rpl
new file mode 100644
index 0000000..723d3dc
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcnamech.rpl
@@ -0,0 +1,421 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ with extra child name.
+; child has extra name and it has to be used once the other one stops working.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+RANGE_END
+
+; the working version, until time 50.
+RANGE_BEGIN 0 50
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.55
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 50
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 50 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 50 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.55
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+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 flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.example.net.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+; server stops working.
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.example.net.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+; still pending query needs removal.
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns.example.net. IN AAAA
+ENTRY_END
+
+STEP 71 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION ANSWER
+;SECTION AUTHORITY
+;example.net. IN NS ns.example.net.
+;SECTION ADDITIONAL
+;ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcnamechrec.rpl b/tests/deckard/sets/resolver/iter_pcnamechrec.rpl
new file mode 100644
index 0000000..85a8376
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcnamechrec.rpl
@@ -0,0 +1,400 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ with pc child name.
+; child has extra name and it has to be used once the other one stops working.
+; the extra child name has parent-child trouble and needs its parent version.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+RANGE_END
+
+; the working version, until time 50.
+RANGE_BEGIN 0 50
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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 AA 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 AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+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 AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 50
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 50 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 50 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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 AA 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 AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+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 AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.44
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.44
+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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.example.net.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+; server stops working.
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS ns.example.net.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.44
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcnamerec.rpl b/tests/deckard/sets/resolver/iter_pcnamerec.rpl
new file mode 100644
index 0000000..f53be60
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcnamerec.rpl
@@ -0,0 +1,274 @@
+; config options
+;server:
+; target-fetch-policy: "0 0 0 0 0"
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with parent child differ names recursive.
+; the parent has an extra name that is the only working one.
+; and that name needs its parent-side glue to work.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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.
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.44
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+; the working version.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA 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.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN A
+SECTION ANSWER
+ns.example.net. IN A 1.2.3.55
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.net. IN AAAA
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.55
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.55
+ENTRY_END
+RANGE_END
+
+; ns.example.net
+; Broken. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+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 opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; now that the bad child NS record is in cache, ask something else.
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mail.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+mail.example.com. IN A
+SECTION ANSWER
+mail.example.com. IN A 10.20.30.20
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_pcttl.rpl b/tests/deckard/sets/resolver/iter_pcttl.rpl
new file mode 100644
index 0000000..93b588b
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_pcttl.rpl
@@ -0,0 +1,353 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; do-ip6: no
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test cache ttls where parent child differ in ttl
+; and the lameness for parent suddenly becomes the only information point.
+
+; 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
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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.foo.com.
+SECTION ADDITIONAL
+;ns.foo.com. 200 IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+foo.com. IN NS
+SECTION AUTHORITY
+foo.com. 200 IN NS ns.foo.com.
+SECTION ADDITIONAL
+ns.foo.com. 200 IN A 1.2.3.44
+ENTRY_END
+
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. IN A 192.12.94.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+
+
+RANGE_END
+
+; ns.foo.com.
+; The parent-IP version
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.44
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+foo.com. IN NS
+SECTION ANSWER
+foo.com. 200 IN NS ns.foo.com.
+SECTION ADDITIONAL
+ns.foo.com. 100 IN A 1.2.3.44
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.foo.com. IN A
+SECTION ANSWER
+ns.foo.com. 100 IN A 1.2.3.44
+SECTION AUTHORITY
+foo.com. 200 IN NS ns.foo.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+ns.foo.com. IN AAAA
+SECTION AUTHORITY
+foo.com. 100 IN SOA . . 1 2 3 4 5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 200 IN NS ns.foo.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY AA QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 100 IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. 200 IN NS ns.foo.com.
+SECTION ADDITIONAL
+ns.foo.com 100 IN A 1.2.3.44
+ENTRY_END
+RANGE_END
+
+; NOT USED. The parent side equals child side but not in the cache.
+; and they have different TTLs only.
+; ns.foo.com
+; The child IP version. Does not respond to anything (servfail instead
+; of timeouts since this is easier to encode in .rpl file format).
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.55
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id copy_query
+REPLY QR SERVFAIL
+SECTION QUESTION
+foo.com. IN NS
+SECTION ANSWER
+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. 100 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 100 IN NS ns.foo.com.
+; scrubbed off
+;SECTION ADDITIONAL
+;ns.foo.com IN A 1.2.3.44
+ENTRY_END
+
+; Now we wait 101 seconds, and the child data is gone,
+; but the parent-side was cached for 200 and it still there.
+
+STEP 30 TIME_PASSES ELAPSE 101
+
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 100 IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. 100 IN NS ns.foo.com.
+; scrubbed off
+;SECTION ADDITIONAL
+;ns.foo.com IN A 1.2.3.44
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_reclame_one.rpl b/tests/deckard/sets/resolver/iter_reclame_one.rpl
new file mode 100644
index 0000000..c569955
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_reclame_one.rpl
@@ -0,0 +1,316 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterative resolve with a recursion lame server.
+; The scenario has a domain with two servers, one is lame the other doesn't
+; so depending on the randomly chosen server that goes first, it may
+; select the nonlame or the lame server first.
+
+; 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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+; parent-side working address.
+ns.example.net. IN A 1.2.3.4
+ENTRY_END
+
+
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+lame.example.com. IN A
+SECTION ANSWER
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+lame.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; lame.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS lame.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_reclame_two.rpl b/tests/deckard/sets/resolver/iter_reclame_two.rpl
new file mode 100644
index 0000000..7d4aa4e
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_reclame_two.rpl
@@ -0,0 +1,355 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test iterative resolve with two recursion lame servers.
+; both servers are recursion lame. The iterator tries both servers,
+; but they are both lame. Then it concludes that it only has reclame.
+
+; 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
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+; parent-side working address.
+ns.example.net. IN A 1.2.3.4
+ENTRY_END
+
+
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+lame.example.com. IN A
+SECTION ANSWER
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+lame.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; lame.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. IN NS lame.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+lame.example.com. IN A
+SECTION ANSWER
+lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RA NOERROR
+SECTION QUESTION
+lame.example.com. IN AAAA
+SECTION AUTHORITY
+example.com. IN SOA . . 0 0 0 0 0
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. IN NS lame.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;lame.example.com. IN A 1.2.3.5
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_recurse.rpl b/tests/deckard/sets/resolver/iter_recurse.rpl
new file mode 100644
index 0000000..2a30ee7
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_recurse.rpl
@@ -0,0 +1,312 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test resolution with recursion for NS target.
+
+; 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 A
+SECTION AUTHORITY
+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
+net. IN A
+SECTION AUTHORITY
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+ENTRY_END
+RANGE_END
+
+; e.gtld-servers.net.
+RANGE_BEGIN 0 100
+ ADDRESS 192.12.94.30
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS e.gtld-servers.net.
+SECTION ADDITIONAL
+e.gtld-servers.net. IN A 192.12.94.30
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. IN A 192.12.94.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. 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
+SECTION AUTHORITY
+example.com. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net IN A 1.2.3.44
+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 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.net.
+; scrubbed off
+;SECTION ADDITIONAL
+;ns.example.net IN A 1.2.3.44
+ENTRY_END
+
+; due to ordering of answer packets, this is still outstanding, remove it
+STEP 21 CHECK_OUT_QUERY
+ENTRY_BEGIN
+ADJUST copy_id
+MATCH qname qtype
+REPLY QR
+SECTION QUESTION
+ns.example.net IN AAAA
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_refuse.rpl b/tests/deckard/sets/resolver/iter_refuse.rpl
new file mode 100644
index 0000000..ead7537
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_refuse.rpl
@@ -0,0 +1,191 @@
+; config options
+;server:
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Iteration over ns server list.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns1.example.com.
+example.com. IN NS ns2.example.com.
+example.com. IN NS ns3.example.com.
+example.com. IN NS ns4.example.com.
+example.com. IN NS ns5.example.com.
+example.com. IN NS ns6.example.com.
+SECTION ADDITIONAL
+ns1.example.com. IN A 1.2.3.4
+ns2.example.com. IN A 1.2.3.5
+ns3.example.com. IN A 1.2.3.6
+ns4.example.com. IN A 1.2.3.7
+ns5.example.com. IN A 1.2.3.8
+ns6.example.com. IN A 1.2.3.9
+ENTRY_END
+RANGE_END
+
+; ns1.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+; ns2.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns3.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns4.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.7
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns5.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.8
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns6.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.9
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_req_qname.rpl b/tests/deckard/sets/resolver/iter_req_qname.rpl
new file mode 100644
index 0000000..e6840fb
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_req_qname.rpl
@@ -0,0 +1,120 @@
+; config options
+;server:
+; target-fetch-policy: "0 0 0 0 0"
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test a query name in the reply is required by resolver
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; always the same reply since we cannot match anything from the qsection.
+ENTRY_BEGIN
+MATCH opcode
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+; no query section!
+; www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+
+; the query name is echoed properly to *our* client
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_resolve.rpl b/tests/deckard/sets/resolver/iter_resolve.rpl
new file mode 100644
index 0000000..4cbf5e5
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_resolve.rpl
@@ -0,0 +1,219 @@
+; config options
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic iterative resolve of www.example.com.
+
+; 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 A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; net.
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; root-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+root-servers.net. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. IN A 193.0.14.129
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+root-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; gtld-servers.net.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION AUTHORITY
+gtld-servers.net. IN SOA . . 0 0 0 0 0
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+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
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_tcbit.rpl b/tests/deckard/sets/resolver/iter_tcbit.rpl
new file mode 100644
index 0000000..249c735
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_tcbit.rpl
@@ -0,0 +1,87 @@
+; config options
+; harden-referral-path: no
+; target-fetch-policy: "0 0 0 0 0"
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test TCP failover when reply contains TC=1.
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN A
+ENTRY_END
+
+; root prime
+STEP 30 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA 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
+
+; query sent to root server
+STEP 50 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+cz. IN NS ns2.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ns2.cz. IN A 168.192.3.3
+ENTRY_END
+
+; this is the truncated answer
+STEP 60 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA TC NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; this is the correct answer
+STEP 70 REPLY
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+SECTION AUTHORITY
+cz. IN NS ns1.cz.
+cz. IN NS ns2.cz.
+SECTION ADDITIONAL
+ns1.cz. IN A 168.192.2.2
+ns2.cz. IN A 168.192.3.3
+ENTRY_END
+
+; is the final answer correct?
+STEP 100 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA
+SECTION QUESTION
+cz. IN A
+SECTION ANSWER
+cz. IN A 10.20.30.40
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_timeouted_ns.rpl b/tests/deckard/sets/resolver/iter_timeouted_ns.rpl
new file mode 100644
index 0000000..70a3ed1
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_timeouted_ns.rpl
@@ -0,0 +1,316 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN fail.net has two NSs in different zones. One of them suddently stop responding, address of other one is unknown.
+
+RANGE_BEGIN 1 100 193.0.14.129; root
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. NS
+SECTION ANSWER
+. NS k.root-servers.net
+SECTION ADDITIONAL
+k.root-servers.net A 193.0.14.129
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net NS
+SECTION AUTHORITY
+net NS m.gtld-servers.net.
+SECTION ADDITIONAL
+m.gtld-servers.net. A 192.55.83.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com NS
+SECTION AUTHORITY
+com NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 100 192.55.83.30; net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+net NS
+SECTION ANSWER
+net NS m.gtld-servers.net.
+SECTION ADDITIONAL
+m.gtld-servers.net. A 192.55.83.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+m.gtld-servers.net. A
+SECTION ANSWER
+m.gtld-servers.net. A 192.55.83.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+fail.net NS
+SECTION AUTHORITY
+fail.net NS ns.fail.net
+fail.net NS ns.fail.com
+SECTION ADDITIONAL
+ns.fail.net 20 A 1.1.1.1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 100 192.5.6.30; com
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+com NS
+SECTION ANSWER
+com NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.gtld-servers.net. A
+SECTION ANSWER
+a.gtld-servers.net. A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+fail.com NS
+SECTION AUTHORITY
+fail.com NS ns.fail.com
+SECTION ADDITIONAL
+ns.fail.com 10 A 1.1.2.1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 10 1.1.1.1; fail.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.net NS
+SECTION ANSWER
+fail.net NS ns.fail.net
+fail.net NS ns.fail.com
+SECTION ADDITIONAL
+ns.fail.net 20 A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.net A
+SECTION ANSWER
+ns.fail.net 20 A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.net AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.net A
+SECTION ANSWER
+fail.net 10 A 1.1.1.2
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 100 1.1.2.1; fail.com & fail.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.net NS
+SECTION ANSWER
+fail.net NS ns.fail.net
+fail.net NS ns.fail.com
+SECTION ADDITIONAL
+ns.fail.com 10 A 1.1.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.net A
+SECTION ANSWER
+ns.fail.net 20 A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.net AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+fail.com NS
+SECTION AUTHORITY
+fail.com NS ns.fail.com
+SECTION ADDITIONAL
+ns.fail.com 10 A 1.1.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.com A
+SECTION ANSWER
+ns.fail.com 10 A 1.1.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.fail.com AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.net A
+SECTION ANSWER
+fail.net 10 A 1.1.1.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.com A
+SECTION ANSWER
+fail.com 10 A 1.1.2.2
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 11 20 1.1.1.1; fail.net
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query do_not_answer
+REPLY QR AA NOERROR
+SECTION QUESTION
+fail.net A
+SECTION ANSWER
+fail.net 10 A 1.1.1.2
+ENTRY_END
+RANGE_END
+
+; Cache zonecuts for fail.net and fail.com
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+fail.net A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+fail.net A
+SECTION ANSWER
+fail.net 10 A 1.1.1.2
+ENTRY_END
+
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+fail.com A
+ENTRY_END
+
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+fail.com A
+SECTION ANSWER
+fail.com 10 A 1.1.2.2
+ENTRY_END
+
+; Allow to expire ns.fail.com, fail.net, fail.com
+; Note that ns.fail.net isn't expired yet
+STEP 5 TIME_PASSES ELAPSE 15
+
+; Allow ns.fail.net to be timeouted
+; kresd must get right answer using ns.fail.com
+STEP 11 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+fail.net A
+ENTRY_END
+
+STEP 12 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+fail.net A
+SECTION ANSWER
+fail.net 10 A 1.1.1.2
+ENTRY_END
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_unexpectedrrtype.rpl b/tests/deckard/sets/resolver/iter_unexpectedrrtype.rpl
new file mode 100644
index 0000000..a94bef9
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_unexpectedrrtype.rpl
@@ -0,0 +1,59 @@
+stub-addr: 1.1.1.1
+CONFIG_END
+
+SCENARIO_BEGIN Test ignoring answers with unexpected RRType
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+example.com. IN AAAA
+SECTION ANSWER
+example.com. 0 IN A 2.2.2.2 ; returns A record
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 1.1.1.1
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN AAAA
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END \ No newline at end of file
diff --git a/tests/deckard/sets/resolver/iter_validate.rpl b/tests/deckard/sets/resolver/iter_validate.rpl
new file mode 100644
index 0000000..5970a13
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_validate.rpl
@@ -0,0 +1,209 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-timestamp: "1437625000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 198.41.0.4 # a.root-servers.net.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic validation of NS cz. (two levels)
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 198.41.0.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20150802050000 20150723040000 1518 . JSoL4/wQXh7vzoY/m98WYbpr2/S66u4RQi/UhkSrR3JmPZaWRRERDFm6 RRrFY6GWt4CP61X9rvshuVT+0OhluXqYpEatoHEDgur+PKf3+dTAmcgQ 4RzsahwhQ42Y9fDgJ2nNVMcN97HEIH+qMv0FWjU9b7wJ2iYlDL1ZoAVu TKE=
+SECTION ADDITIONAL
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAa67bQck1JjopOOFc+iMISFcp/osWrEst2wbKbuQSUWu77QC9UHL ipiHgWN7JlqVAEjKITZz49hhkLmOpmLK55pTq+RD2kwoyNWk9cvpc+tS nIxT7i93O+3oVeLYjMWrkDAz7K45rObbHDuSBwYZKrcSIUCZnCpNMUtn PFl/04cb
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20150804235959 20150721000000 19036 . n9FwNj80Zik2Rr2zTB4F17ydFpiZfUIv8v/XAz4EbSgRxQgFT+TCz3FW i4O7tW5REXUVNHtULiS7fxKLsHZNDPev8DA20DXAw3eEIDi9pDi01O/e 4GnljpkPnP8d5zA62Dob4cxgmhjjFTvhIjtDsH5Dd4jmyHsgBboy4grZ uJNdsez76gD4Ad6WlosZn5Hj5JwqaxZlRph/6I3va4rkp4c32w5DwaQ7 WSne8ffMHX9r7Dn6EbT3FfvnXFDNPE1P6r+qzTzC0t+M/F4R3H+VOdqg cRJcBG6zGCh9ZErhAeoiJh1WAfpjpzx+TUMzqxZCjSC/XL+l2YMKVHtF 8WNg/w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+RANGE_END
+
+;a.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAbwKeyKB5fuLe16/N5MR6OoG/PO8uxEob7HoIjK0w0wNjwINYb2w edLtzhVlA4HJ0AUUBuZiNj41hlJ474SOBlsAA7BQdtbL1V0Ksk8IC5Z8 3ldU9Mp+ynkj9p9Cl2UOBmoVFYfkbwz0BsOptcXruYA52Ayc9rHrmDPI /0Y8gZAL
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150802000000 20150719000000 54576 cz. K04ONpLX3wseqHhUu2QLBY7wzSUszVlut5mC6jpCAqbfhgIvGMnyoWP5 lKwSvCLmjie0j1HSv8Q4OmoYGz8L+P/FGAzK4LhMturHrDtHkpuGvQJ6 //UsHQhf4iwCg5tEeHI4ZvaMmqRZI3FhBnSh0OyFjGO73FRbBU9nDrOM sPB1iCUfRfZhQU0sB/rj82ykBUma280sO1aRp3gmQHc/SVNbFfCL1Z8D htBP6sy4Jh0z3Z40d4CFZ8ZCBsIloHO44/GvXGePtr2dW4gJsoU1619B Jz+6cuTRh5RJBiweUNb/nwjBP8fNRkzH1CbjomC2FpDMnBXw7jE1GUiY vLW9Gg==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150805131929 20150723140842 39788 cz. KhyRPt4TYVYH7VAsfn39tY66+5P8bgZhG83d33oogLuqQEPgsxt/tu0c snrUA11Ub+4wOK3MslD5/gTyBuDtT9dk4FbRr3WeUZ4DNn5laYO3AcYx SAU3Vn3dZ8orWFxEwTKNhH5QthPdHj8p8097KRHiPo/DGEnFpYdocEws WJ4=
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+cz. 18000 IN RRSIG NS 10 1 18000 20150802132511 20150721120844 39788 cz. pf5UzinUesHzGQTav/1NxGW0AifCmzLW3S8X9tWDRwx7XSKGac7QVXgp nMNyb/NiSho9oj+ZTaQpBZQaTri+brHT4W/nE0TofqZlyYiaABb9xgxJ LgjLkt+OVcJsM3a+q+QEGSt+skNlZVDQeR+sztbuORiZXAqhxumxD8iy zZ8=
+SECTION ADDITIONAL
+a.ns.nic.cz. 18000 IN A 194.0.12.1
+b.ns.nic.cz. 18000 IN A 194.0.12.1
+c.ns.nic.cz. 18000 IN A 194.0.12.1
+d.ns.nic.cz. 18000 IN A 194.0.12.1
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION ANSWER
+; It's okay to lie here as the resolver can't check if we have provided every RRSIG, because there is no RRSIG of RRSIGs
+cz. 18000 IN RRSIG SOA 10 1 18000 20151221212655 20151208120941 37310 cz. ZsKG0TImVm+nAuWvn+Kg61WIet0E++Bt1mxIIywCxtZs/JQlhbjzFPvA ICdYLoqZ06JTwit1nD9xx6jdrfguSVB55G3LGuQiXz4JwEdCWhoVcC3Y Aq6jG1Eor3dhAF8dSIYkE21J3A6oC3O1rDYymKiXpkekFMaaBE0JEvUJ ut8=
+ENTRY_END
+
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN RRSIG
+ENTRY_END
+
+; check that it answers a query for RRSIG (unauthenticated)
+; digests are swapped, i.e. signatures are invalid, server shouldn't use them later
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION ANSWER
+cz. 18000 IN RRSIG SOA 10 1 18000 20151221212655 20151208120941 37310 cz. ZsKG0TImVm+nAuWvn+Kg61WIet0E++Bt1mxIIywCxtZs/JQlhbjzFPvA ICdYLoqZ06JTwit1nD9xx6jdrfguSVB55G3LGuQiXz4JwEdCWhoVcC3Y Aq6jG1Eor3dhAF8dSIYkE21J3A6oC3O1rDYymKiXpkekFMaaBE0JEvUJ ut8=
+ENTRY_END
+
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN NS
+ENTRY_END
+
+; check that it answers a plain query
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+ENTRY_END
+
+STEP 5 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+cz. IN NS
+ENTRY_END
+
+; recursion happens here.
+STEP 6 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+cz. 18000 IN RRSIG NS 10 1 18000 20150802132511 20150721120844 39788 cz. pf5UzinUesHzGQTav/1NxGW0AifCmzLW3S8X9tWDRwx7XSKGac7QVXgp nMNyb/NiSho9oj+ZTaQpBZQaTri+brHT4W/nE0TofqZlyYiaABb9xgxJ LgjLkt+OVcJsM3a+q+QEGSt+skNlZVDQeR+sztbuORiZXAqhxumxD8iy zZ8=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_validate_child_zone_noaddr.rpl b/tests/deckard/sets/resolver/iter_validate_child_zone_noaddr.rpl
new file mode 100644
index 0000000..4d885ad
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_validate_child_zone_noaddr.rpl
@@ -0,0 +1,207 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-timestamp: "1441892800"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 198.41.0.4 # a.root-servers.net.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic validation of AAAA nic.cz.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 198.41.0.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20150920050000 20150910040000 1518 . ZCytFZO9aWv+135mNVaH+qdlXz1t2VyhaOx4GVbydiRuEMVKvjauxXMb OfnCK451G95AjxaL00eCi68Z19B3+pa6Ud8X81M69fHeB4/Eh+KIjl+d YvmUw3DxVQJknj/sHBVihjgsiMsiw03lE+dX+g2ms9TQbOo5VohLPgpC 82A=
+SECTION ADDITIONAL
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 172800 IN DNSKEY 256 3 8 AwEAAa67bQck1JjopOOFc+iMISFcp/osWrEst2wbKbuQSUWu77QC9UHL ipiHgWN7JlqVAEjKITZz49hhkLmOpmLK55pTq+RD2kwoyNWk9cvpc+tS nIxT7i93O+3oVeLYjMWrkDAz7K45rObbHDuSBwYZKrcSIUCZnCpNMUtn PFl/04cb
+. 172800 IN RRSIG DNSKEY 8 0 172800 20150924000000 20150909000000 19036 . XGBRtnftNzxfk4LFyMzQXv9ZSV//SuiHlUYfnK8i0Hg3bHuOR2oEJ+JN P5HBlg+BGLTYHYBTuQYwn0FZd81gF7nVPDcQmHPwPzgwPWH00RDt46dK J1LwJ5KsAbNT5FOVuYRO2Rm15eajwaYGtJHSOyxHEegzuklvMgVVSiBr rPbNTF2/1Qi4c1y1gPXuxkifENbxlbHMvWxcVnG0v2xko/MazQnzSStv i1TtKUKDNT/jLyAv24wALWsPhOcNoVl1uRr9IJX7Ov9wbvSVCoEuBeKC hgy0KO1lRffnqR1YRRqjabKXB161T/fepLkwkxqa0Uidk+rRL3jxulJa nL2TMQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+nic.cz. IN MX
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150920050000 20150910040000 1518 . LRx9WQ8KhcUHOCe+eY7jvw1QIm1aRrin02Qn9YtImOGf4V1MVhf1ZYoF mP7GOBDXAbAJhrb5fPKumLsuRLgmA+5VyFhBMmzgqwRjdec1Tu7mWHoQ EukoZp4y2Mmw4NuAs1pBJQOZzLxhYUk+vbjK9mZm5u+mTtt/EFUu8QfG bp8=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+nic.cz. IN DS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150920050000 20150910040000 1518 . LRx9WQ8KhcUHOCe+eY7jvw1QIm1aRrin02Qn9YtImOGf4V1MVhf1ZYoF mP7GOBDXAbAJhrb5fPKumLsuRLgmA+5VyFhBMmzgqwRjdec1Tu7mWHoQ EukoZp4y2Mmw4NuAs1pBJQOZzLxhYUk+vbjK9mZm5u+mTtt/EFUu8QfG bp8=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150920050000 20150910040000 1518 . LRx9WQ8KhcUHOCe+eY7jvw1QIm1aRrin02Qn9YtImOGf4V1MVhf1ZYoF mP7GOBDXAbAJhrb5fPKumLsuRLgmA+5VyFhBMmzgqwRjdec1Tu7mWHoQ EukoZp4y2Mmw4NuAs1pBJQOZzLxhYUk+vbjK9mZm5u+mTtt/EFUu8QfG bp8=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+RANGE_END
+
+;a.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAdORJsCVmI4NZRmgtDDRoULmnP6JsA/wR68Z5gO8XD/awSiqsKEB 6BXNC2jvBiPFA94oXroeLXxCjLN+GS/fE1zCKklKfdY5wOHNIlfekWOO 4rbgJtmDzL3IuTbGmNSSIZ0TJkk5NVzpo+Zon9peX2nPdacytQ36hHup GlJMKTxH
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150917000000 20150903000000 54576 cz. Ei0P45gSw4Vp4u4/H74vm58ehU5JlB4SGLnXXw1U6qVq8EwYrRHv3gV6 9RrUt2GgCqfUlvlJr1Q4WYAJkkiW5zhXJAzCzamtHGuxo3lZuqV1oyw2 zzL4khvmzT0wMxm13TaeSqjbrAEth/00oHIJPqDzrhYlJX74V1q49mD/ 2VoMIVctnTOyE4A+swlyMLOBD8mmjXr47+a5VuwE3bkzBKn1rdHiePl5 MJQjT9Es+qcyMEFZb31/ZOa6MWci1+P28bKFG6mKLVyyiK8sDCkqw/l3 1CTlxRyFdxQc6cBc5KrZwsfApNi5bXXuaJvuOW/YSRbI72HGUNtbbN2v ttsiBw==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150922144030 20150910120939 45182 cz. CajFqhmkoOnO9S1HG/o5TTz2nk8fuaKYSZw6aW7vBcVsUAu3PB2fBCpj zRA2JNtX9ebwXPP4WQR+DPgh+hkOneSUK0hNkp5CguUUr+kiJy8a2IXm 3mmvt7yldkq3Xr3Ygqk9yGW5Sd7NiXT4jOXSMmBueNJFnPf9WThEPpqV zc4=
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nic.cz. IN MX
+SECTION ANSWER
+nic.cz. 1800 IN MX 20 mx.nic.cz.
+nic.cz. 1800 IN MX 30 bh.nic.cz.
+nic.cz. 1800 IN MX 10 mail.nic.cz.
+nic.cz. 1800 IN RRSIG MX 5 2 1800 20150917230532 20150904125503 46296 nic.cz. qzyjltVcO33Jisn5RVxSAy8D8QHv71hpKgX9D4TBKe/Yrr7aI7rB6tLQ JCLJlYdq7m0w2N+QZCczV67OK3ZTDPErl/N0IKbxK84EVp5/NqgzKivl h95Z1T1jRf9iGdauDMjz8QTFpnOs62/CuOuEJwAIXeIuH2eT25AoBRDe sXM=
+SECTION AUTHORITY
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 5 2 1800 20150917134944 20150904125503 46296 nic.cz. gPCmMHvHl+76p6ERWuKS9tH/xwD5Or0ZON866yRy1hM0YCzOO0lIsSU9 fxHTKlx3gx0pgz4EGH3Doi54lT9XRZDyp/XiZ6j4+q+583cFJ05ISQHM Sp4QTMqAYCN1XchH2li+YWCgZqUqK1C+D+OO4Zbfu3YVTEaox82+OkCg 0Uo=
+SECTION ADDITIONAL
+a.ns.nic.cz. 18000 IN A 194.0.12.1
+b.ns.nic.cz. 18000 IN A 194.0.12.1
+d.ns.nic.cz. 18000 IN A 194.0.12.1
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nic.cz. IN DS
+SECTION ANSWER
+nic.cz. 18000 IN DS 59916 5 1 144130216E45C4EC2BB8595E817916E8B060D87B
+nic.cz. 18000 IN RRSIG DS 10 2 18000 20150918193553 20150905063845 45182 cz. leMkrTPUUrO6CmBU9pTMTT2f+0V4DV8P/uY8ZyDa0YHSUZVoFzW4cXZy xzZfgE0y/Q6eJYOeqPOPOoFKs4g8JhdcmFwOrf6Pnmfk5eOhgJVtg5nX xW+j1G3n24a2H4u6ITEzheTcYj00/l8tfPPzS+JW+2yyPALxmQqx4pKP N6I=
+ENTRY_END
+
+;a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION ANSWER
+nic.cz. 1800 IN DNSKEY 257 3 5 BQEAAAABt3LenoCVTV0okqKYPDnnVJqvwCD9MKJNXg8fcOCdLQYncyoe hpwM5RK2UkZDcDxWkMo7yMa35ej+Mhpaji9si4xXD+Syl4Q06LFiFkdN /5GlVlrIdE3GW7zC7Z4sS14Vz8FbYfcRmhsh19Ob718jGZneGfw2UPbv kyxUR8wD7mguZn02fQ6tjj/Ktp4uSW9tpz3bjGMo2rX+iZk4xgbPaesA OlR/AaHdatGZsWC9CPon8mnLZeu6czm8CBDgBmnf3PE8c5+uyWj1Pw4p p0VQmnX5UrnuGpErg7qXhJm7wY2CRVRMcLX3zmjVWXW1uT9JFh2G+/pZ zxnASfKKltZpuw==
+nic.cz. 1800 IN DNSKEY 256 3 5 AwEAAcrwqogrgLUrCRzhbXoMEBPy/55Zeg+yyOYodLGT9ts9UhGYRSgI BJQq6aX/6QOf042niK809bglBRid56ioSV7BlMQeuJx9+87AEiqEupS1 Zg5CzLHx/JLGloCWeCT5bwL4hAmT8gCu8xjHvLFqQjr4QX71Et4MfrJG rOgGpcRJ
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150918013842 20150904125503 46296 nic.cz. J92bm8JmPiF3JVyqlmXpBMgVkiIxLfZq+M1fpRMTiemSrC/S5Fj8RHXU 4qVy/wbToegcd6ivqxKNa4IjIrjQ7L5FSfBjcVkBxarWgXp70k7UEc23 K1ZvLHGwa6efmb/RILjdi2YptQzA52f43mwF5qHfWFkEWVXVgNbqm+Zu arY=
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150918082556 20150904125503 59916 nic.cz. Zc5XVLTa41lxbOhRkL+PsY3HIpBe43yTrvr9qKRMMuZeyhWsN8YDzUho Otsq3ujf6HyRhJVZrh9Y0Eh2yrvvi+lVSc1ez1kMaqmB+MZxx+d7/f3E 150jW4nGm6T09pyLcKR0sOPV2dRcdgLeeI29wA1S99jr+FWc4AWmQ8/c jjWOW+78EFlDhSu76gUEHi+R/VYhhzW97R4kqaKzqITLhG4luql2s/5E MuHX3MAbFFq6bq5RqS4rxuqxj59VvUSGSWhsxS0HGDrJIsYsrqvRFcg/ yWiEIhTPr/RvmDkNf57p+wWEbI9GkUDE4K53RSKz2jg+z8kcw/FiO731 yMvdcQ==
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+nic.cz. IN DNSKEY
+ENTRY_END
+
+; check if fetching DNSKEY works (tests processing with same server authoritative for both parent and child)
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION ANSWER
+nic.cz. 1800 IN DNSKEY 256 3 5 AwEAAcrwqogrgLUrCRzhbXoMEBPy/55Zeg+yyOYodLGT9ts9UhGYRSgI BJQq6aX/6QOf042niK809bglBRid56ioSV7BlMQeuJx9+87AEiqEupS1 Zg5CzLHx/JLGloCWeCT5bwL4hAmT8gCu8xjHvLFqQjr4QX71Et4MfrJG rOgGpcRJ
+nic.cz. 1800 IN DNSKEY 257 3 5 BQEAAAABt3LenoCVTV0okqKYPDnnVJqvwCD9MKJNXg8fcOCdLQYncyoe hpwM5RK2UkZDcDxWkMo7yMa35ej+Mhpaji9si4xXD+Syl4Q06LFiFkdN /5GlVlrIdE3GW7zC7Z4sS14Vz8FbYfcRmhsh19Ob718jGZneGfw2UPbv kyxUR8wD7mguZn02fQ6tjj/Ktp4uSW9tpz3bjGMo2rX+iZk4xgbPaesA OlR/AaHdatGZsWC9CPon8mnLZeu6czm8CBDgBmnf3PE8c5+uyWj1Pw4p p0VQmnX5UrnuGpErg7qXhJm7wY2CRVRMcLX3zmjVWXW1uT9JFh2G+/pZ zxnASfKKltZpuw==
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150918013842 20150904125503 46296 nic.cz. J92bm8JmPiF3JVyqlmXpBMgVkiIxLfZq+M1fpRMTiemSrC/S5Fj8RHXU 4qVy/wbToegcd6ivqxKNa4IjIrjQ7L5FSfBjcVkBxarWgXp70k7UEc23 K1ZvLHGwa6efmb/RILjdi2YptQzA52f43mwF5qHfWFkEWVXVgNbqm+Zu arY=
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150918082556 20150904125503 59916 nic.cz. Zc5XVLTa41lxbOhRkL+PsY3HIpBe43yTrvr9qKRMMuZeyhWsN8YDzUho Otsq3ujf6HyRhJVZrh9Y0Eh2yrvvi+lVSc1ez1kMaqmB+MZxx+d7/f3E 150jW4nGm6T09pyLcKR0sOPV2dRcdgLeeI29wA1S99jr+FWc4AWmQ8/c jjWOW+78EFlDhSu76gUEHi+R/VYhhzW97R4kqaKzqITLhG4luql2s/5E MuHX3MAbFFq6bq5RqS4rxuqxj59VvUSGSWhsxS0HGDrJIsYsrqvRFcg/ yWiEIhTPr/RvmDkNf57p+wWEbI9GkUDE4K53RSKz2jg+z8kcw/FiO731 yMvdcQ==
+ENTRY_END
+
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+nic.cz. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+nic.cz. IN MX
+SECTION ANSWER
+nic.cz. 1800 IN MX 20 mx.nic.cz.
+nic.cz. 1800 IN MX 30 bh.nic.cz.
+nic.cz. 1800 IN MX 10 mail.nic.cz.
+nic.cz. 1800 IN RRSIG MX 5 2 1800 20150917230532 20150904125503 46296 nic.cz. qzyjltVcO33Jisn5RVxSAy8D8QHv71hpKgX9D4TBKe/Yrr7aI7rB6tLQ JCLJlYdq7m0w2N+QZCczV67OK3ZTDPErl/N0IKbxK84EVp5/NqgzKivl h95Z1T1jRf9iGdauDMjz8QTFpnOs62/CuOuEJwAIXeIuH2eT25AoBRDe sXM=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_validate_extradata.rpl b/tests/deckard/sets/resolver/iter_validate_extradata.rpl
new file mode 100644
index 0000000..e32af3a
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_validate_extradata.rpl
@@ -0,0 +1,212 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-timestamp: "1437625000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 198.41.0.4 # a.root-servers.net.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic validation, answer contains an extra A record which must be ignored.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 198.41.0.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20150802050000 20150723040000 1518 . JSoL4/wQXh7vzoY/m98WYbpr2/S66u4RQi/UhkSrR3JmPZaWRRERDFm6 RRrFY6GWt4CP61X9rvshuVT+0OhluXqYpEatoHEDgur+PKf3+dTAmcgQ 4RzsahwhQ42Y9fDgJ2nNVMcN97HEIH+qMv0FWjU9b7wJ2iYlDL1ZoAVu TKE=
+SECTION ADDITIONAL
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAa67bQck1JjopOOFc+iMISFcp/osWrEst2wbKbuQSUWu77QC9UHL ipiHgWN7JlqVAEjKITZz49hhkLmOpmLK55pTq+RD2kwoyNWk9cvpc+tS nIxT7i93O+3oVeLYjMWrkDAz7K45rObbHDuSBwYZKrcSIUCZnCpNMUtn PFl/04cb
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20150804235959 20150721000000 19036 . n9FwNj80Zik2Rr2zTB4F17ydFpiZfUIv8v/XAz4EbSgRxQgFT+TCz3FW i4O7tW5REXUVNHtULiS7fxKLsHZNDPev8DA20DXAw3eEIDi9pDi01O/e 4GnljpkPnP8d5zA62Dob4cxgmhjjFTvhIjtDsH5Dd4jmyHsgBboy4grZ uJNdsez76gD4Ad6WlosZn5Hj5JwqaxZlRph/6I3va4rkp4c32w5DwaQ7 WSne8ffMHX9r7Dn6EbT3FfvnXFDNPE1P6r+qzTzC0t+M/F4R3H+VOdqg cRJcBG6zGCh9ZErhAeoiJh1WAfpjpzx+TUMzqxZCjSC/XL+l2YMKVHtF 8WNg/w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150802050000 20150723040000 1518 . fEz3NpYRzgeBjKrLMpht3KFOQ0t6U2wikIaOt1HcmFvurxtPkZVvqdb0 QBQfvh8DoEXDbvpcikzMIO9XYLzzs10X/m91ybGiWzcTVcU+prVGZJP9 zZrvYAIWrpxoC4deKD+vOoNZXGnLfffi6lmGn7QRZaH0LVKjn33cIaPQ 9EM=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+
+RANGE_END
+
+;a.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAbwKeyKB5fuLe16/N5MR6OoG/PO8uxEob7HoIjK0w0wNjwINYb2w edLtzhVlA4HJ0AUUBuZiNj41hlJ474SOBlsAA7BQdtbL1V0Ksk8IC5Z8 3ldU9Mp+ynkj9p9Cl2UOBmoVFYfkbwz0BsOptcXruYA52Ayc9rHrmDPI /0Y8gZAL
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150802000000 20150719000000 54576 cz. K04ONpLX3wseqHhUu2QLBY7wzSUszVlut5mC6jpCAqbfhgIvGMnyoWP5 lKwSvCLmjie0j1HSv8Q4OmoYGz8L+P/FGAzK4LhMturHrDtHkpuGvQJ6 //UsHQhf4iwCg5tEeHI4ZvaMmqRZI3FhBnSh0OyFjGO73FRbBU9nDrOM sPB1iCUfRfZhQU0sB/rj82ykBUma280sO1aRp3gmQHc/SVNbFfCL1Z8D htBP6sy4Jh0z3Z40d4CFZ8ZCBsIloHO44/GvXGePtr2dW4gJsoU1619B Jz+6cuTRh5RJBiweUNb/nwjBP8fNRkzH1CbjomC2FpDMnBXw7jE1GUiY vLW9Gg==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150805131929 20150723140842 39788 cz. KhyRPt4TYVYH7VAsfn39tY66+5P8bgZhG83d33oogLuqQEPgsxt/tu0c snrUA11Ub+4wOK3MslD5/gTyBuDtT9dk4FbRr3WeUZ4DNn5laYO3AcYx SAU3Vn3dZ8orWFxEwTKNhH5QthPdHj8p8097KRHiPo/DGEnFpYdocEws WJ4=
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+cz. 18000 IN RRSIG NS 10 1 18000 20150802132511 20150721120844 39788 cz. pf5UzinUesHzGQTav/1NxGW0AifCmzLW3S8X9tWDRwx7XSKGac7QVXgp nMNyb/NiSho9oj+ZTaQpBZQaTri+brHT4W/nE0TofqZlyYiaABb9xgxJ LgjLkt+OVcJsM3a+q+QEGSt+skNlZVDQeR+sztbuORiZXAqhxumxD8iy zZ8=
+SECTION AUTHORITY
+extra-a. 3600 IN A 1.2.3.4
+extra-ns. 3600 IN NS target-extra-ns.
+SECTION ADDITIONAL
+a.ns.nic.cz. 18000 IN A 194.0.12.1
+b.ns.nic.cz. 18000 IN A 194.0.12.1
+c.ns.nic.cz. 18000 IN A 194.0.12.1
+d.ns.nic.cz. 18000 IN A 194.0.12.1
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION ANSWER
+; It's okay to lie here as the resolver can't check if we have provided every RRSIG, because there is no RRSIG of RRSIGs
+cz. 18000 IN RRSIG SOA 10 1 18000 20151221212655 20151208120941 37310 cz. ZsKG0TImVm+nAuWvn+Kg61WIet0E++Bt1mxIIywCxtZs/JQlhbjzFPvA ICdYLoqZ06JTwit1nD9xx6jdrfguSVB55G3LGuQiXz4JwEdCWhoVcC3Y Aq6jG1Eor3dhAF8dSIYkE21J3A6oC3O1rDYymKiXpkekFMaaBE0JEvUJ ut8=
+ENTRY_END
+
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN RRSIG
+ENTRY_END
+
+; check that it answers a query for RRSIG (unauthenticated)
+; digests are swapped, i.e. signatures are invalid, server shouldn't use them later
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+cz. IN RRSIG
+SECTION ANSWER
+cz. 18000 IN RRSIG SOA 10 1 18000 20151221212655 20151208120941 37310 cz. ZsKG0TImVm+nAuWvn+Kg61WIet0E++Bt1mxIIywCxtZs/JQlhbjzFPvA ICdYLoqZ06JTwit1nD9xx6jdrfguSVB55G3LGuQiXz4JwEdCWhoVcC3Y Aq6jG1Eor3dhAF8dSIYkE21J3A6oC3O1rDYymKiXpkekFMaaBE0JEvUJ ut8=
+ENTRY_END
+
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cz. IN NS
+ENTRY_END
+
+; check that it answers a plain query
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+ENTRY_END
+
+STEP 5 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+cz. IN NS
+ENTRY_END
+
+; recursion happens here.
+STEP 6 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+cz. 18000 IN RRSIG NS 10 1 18000 20150802132511 20150721120844 39788 cz. pf5UzinUesHzGQTav/1NxGW0AifCmzLW3S8X9tWDRwx7XSKGac7QVXgp nMNyb/NiSho9oj+ZTaQpBZQaTri+brHT4W/nE0TofqZlyYiaABb9xgxJ LgjLkt+OVcJsM3a+q+QEGSt+skNlZVDQeR+sztbuORiZXAqhxumxD8iy zZ8=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/iter_validate_nsec_nxdomain.rpl b/tests/deckard/sets/resolver/iter_validate_nsec_nxdomain.rpl
new file mode 100644
index 0000000..9f04456
--- /dev/null
+++ b/tests/deckard/sets/resolver/iter_validate_nsec_nxdomain.rpl
@@ -0,0 +1,152 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-timestamp: "1438783903"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 198.41.0.4 # a.root-servers.net.
+CONFIG_END
+
+SCENARIO_BEGIN Test basic validation of MX xxx.nic.cz.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 198.41.0.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20150809050000 20150730040000 1518 . ntWgyA7SjlVedxDStbRA6fXl0Hq5pyBgVtBb6l+LbqgLs8/2mwPhzaEw A/BMM+wr7KQLvNSyxTl/SZny94uMVu7o2fnI6+bCP5C+lo7PWni/GvMU yj3JSq2hPv3iO/D1ch8yaKddtYL/NCwPBn9CgpW0jWIWp8FvwwCR4RAs GzA=
+SECTION ADDITIONAL
+a.root-servers.net. 518400 IN A 198.41.0.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAa67bQck1JjopOOFc+iMISFcp/osWrEst2wbKbuQSUWu77QC9UHL ipiHgWN7JlqVAEjKITZz49hhkLmOpmLK55pTq+RD2kwoyNWk9cvpc+tS nIxT7i93O+3oVeLYjMWrkDAz7K45rObbHDuSBwYZKrcSIUCZnCpNMUtn PFl/04cb
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20150814235959 20150731000000 19036 . GW5z3/PgUahqXvFy4UKqc+gxl6b1T4MwHP6E08PUd1KSyFAy/7cltOP6 dfavtYwP9HWIadti7w0GkK560vWEe0aneJCqn9VvSWLI7wrrTLTDd03v WRFk0qxEaVZ22MxqA2AxHMEnEgbLJ9oTJL8eUZDRetKeCgk3w8zypq4f 3xnh0QO7p5F8mBUlAcrCy8B20ZqItvq9irdeeWOSvvJWs35XnPY497xz WVLrF4hOLQnhmgxJpIDwNRGlkqmbNAmVIICOkrG9S9mvZdhhQqogzHhn k6T7Ws1ZQ2FTYBLc5/QA3urEAn8H6TCm5D+wURcfy5x++hXBOIxipkyh 4yfsgw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+missing.nic.cz. IN MX
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20150815050000 20150805040000 1518 . jeryA8jj+yf2X9exz5Ka/Nfifr+k5++Se1klItsut3Jvy1d0X6TI5pjr ABzXbhOUGz6M4cUKhLjM3XDTRspu/VT4DhJUE2pRITKBzeAabDN6dkO/ KHbB/Klrc5DjSeq3RNA3zj39U/TxT+gO8F/fzn6FQKIGkcxwSzSD4Xov K5Q=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+RANGE_END
+
+;a.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAbwKeyKB5fuLe16/N5MR6OoG/PO8uxEob7HoIjK0w0wNjwINYb2w edLtzhVlA4HJ0AUUBuZiNj41hlJ474SOBlsAA7BQdtbL1V0Ksk8IC5Z8 3ldU9Mp+ynkj9p9Cl2UOBmoVFYfkbwz0BsOptcXruYA52Ayc9rHrmDPI /0Y8gZAL
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150814000000 20150731000000 54576 cz. T/q1zripqILs8CdStXtf/GRpDhgbduHC6AEoGfnK+lfxk9okn6amwhho j464OUtH1wGlS9pikWQ02O6BX5CRaaaZjgMeIJugj3w4MZMPbSk1tV5y JaRXaec/uZI5h91iJtQzNAP5rbMj5liIYQV02nrN8+5SVBwxnrJ9JvQ/ tOetsoP2eh1wlgb+Tu+GgrYVrO/4EwOUk+5RUuMVKofGvY+vyYaEuRip rr6pSjH+dhjKegMv2IQ9rBEI1MKWcFA3+6ZqaMazNShgeEJgBI3GKPog AFiZFijDl5Pd5+4/HftGYpXnUlon266ilvCCS1RzE3pynnHPFFRVBmd6 Q38sIQ==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20150818181624 20150805140846 39788 cz. dmYD4pzcswSWyVEqEaCKXN1a58uP2b7/fscNn24wAhQ891sTZi3kNhS8 BvoYIncoAppi+Kkw9vRfXNB26YhBgalCDBxHdwg1vxMD/uHiTrQ1KFFM ZjeM+CYTmULK6PY06NN8IyauL87gcx8k2/r9GVr71yUC1nNjNum4ZRZD EiQ=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing.nic.cz. IN MX
+SECTION AUTHORITY
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1438786503 10800 3600 1209600 7200
+nic.cz. 1800 IN RRSIG SOA 5 2 1800 20150819080542 20150805135503 24582 nic.cz. TDX7klpEuTI2vUQdmNzacxND0p828AD1HNxzTop0MJqKTehn8XgPoSK0 ZRWITLIMTtmC9UFLh/nb9I06HqUVdirxCKWvSzO840wjoVF7SjLWZysB 3VhPn84NA/9m8N8dmpTIt2IpN2N/T0lZVIIg/SSeru/dPNKH1uNtKekv 1eg=
+nic.cz. 7200 IN NSEC 6to4.nic.cz. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nic.cz. 7200 IN RRSIG NSEC 5 2 7200 20150818164706 20150805135503 24582 nic.cz. dqZiT0kHOtrap/aNq/M4u6KCGAS+f1yrAa6aDVBnqIopJ4DJJjnh67WF LedeHae5JLDNwuZV8SlkicIwW5K2ET4//2bJ6FCJcw89s40s3h/QnVxB +wV6hNhqfVnOjtHO4TWK96uNhf/B+A4N/voSpA21zYBMTV8mFvynj7oy ozk=
+*.mirrors.nic.cz. 7200 IN NSEC akuma.mnt.nic.cz. CNAME RRSIG NSEC
+*.mirrors.nic.cz. 7200 IN RRSIG NSEC 5 3 7200 20150819054509 20150805135503 24582 nic.cz. BDT/Rw1F7/QJd76/KWL0jdkdHkzWNxxZ2Hdgba6o1okc0mgqz2ag1P3s BkYtzWMwql4U7Au/KcLtq6P8X2/T9xytqmYfpn2O1dCaBzHubeTiz/aP wcPaYEC+jPR7JwmHpZlxs+KirS4yo7aVF1OPP7ZjtuqDeNLvmF4W7mHl r/A=
+ENTRY_END
+
+; a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nic.cz. IN DS
+SECTION ANSWER
+nic.cz. 18000 IN DS 59916 5 1 144130216E45C4EC2BB8595E817916E8B060D87B
+nic.cz. 18000 IN RRSIG DS 10 2 18000 20150817213510 20150804233901 39788 cz. sxyJEb5Aqpk65VNqxI6bIbyB2UweVjAMf4YvyMJh6MAOGeii8tRbHoJN CntFpaW8sDrw1dgv/xQMFB04Yl3B518n1vMHspweuT3GX5MVV8dEED+9 MdDC0LvhrcPhcoY7ZEz4koywHN39J51tzeSiAPIyQPpMv/b1E3YLwPou lOQ=
+ENTRY_END
+
+;a.ns.nic.cz.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION ANSWER
+nic.cz. 1800 IN DNSKEY 256 3 5 AwEAAatglK6e9CpmATmEDtjQfOMqSEGB2KT3xciP+ZuBH3qYQDggHxao Hk9cfL5uXHxEr8AqmiTNA2CJ9oVm2wlZFCTUtQS2Vxz+i30XQpIPoh1y 0fU/XHKmrVmdVGzc9OdgDyZT+8CbUInAyUin+tWM9M7ekUXAllUw5bd8 VC4SJO3z
+nic.cz. 1800 IN DNSKEY 257 3 5 BQEAAAABt3LenoCVTV0okqKYPDnnVJqvwCD9MKJNXg8fcOCdLQYncyoe hpwM5RK2UkZDcDxWkMo7yMa35ej+Mhpaji9si4xXD+Syl4Q06LFiFkdN /5GlVlrIdE3GW7zC7Z4sS14Vz8FbYfcRmhsh19Ob718jGZneGfw2UPbv kyxUR8wD7mguZn02fQ6tjj/Ktp4uSW9tpz3bjGMo2rX+iZk4xgbPaesA OlR/AaHdatGZsWC9CPon8mnLZeu6czm8CBDgBmnf3PE8c5+uyWj1Pw4p p0VQmnX5UrnuGpErg7qXhJm7wY2CRVRMcLX3zmjVWXW1uT9JFh2G+/pZ zxnASfKKltZpuw==
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150818153605 20150805135503 59916 nic.cz. iDP/U4c8zJF085/V/CAlRU4Hs1RugPkzJdaYVCXwnpZ5vjArAY5wzUtx 88626FvBgVD/hnCUrSoN8eNz8ISSsyk3Ql3bTp5Cmxi+hgIqWd1Q3H3u RY3TlsMM0rpsVBalz3f77pia8s7e3kFsjee2z7iadj/ILSfzYQTghSaO 0B6pDaWoUhhwbGWR1Fz0YdhaiYO21Tvxa5/DD3R3fsTWZQ773GENhNhE 1LM6L82770F+VGfbIhG/wBqiRM1FXiikPixvbmgRco2dff/3w/ns2WXI yFjlr7WwaHlrlyIhgI30CYDs3Xe3jI+sxwNG64XqnwVgBIaN7GVbUulb 9RFxkg==
+nic.cz. 1800 IN RRSIG DNSKEY 5 2 1800 20150818221347 20150805135503 24582 nic.cz. nrW0y70a7urskICTXafO/39Dd+sWU9gY/xQeeMLHuOTyJc5xPeKfPY61 6xUrfZveYy/dj3quDP+RB5hZCxK2gBDjRDBoDfJayaWmGoPJ4ima42KF wpyR8MMbcnha2Z+hP82Q/pVs7DsC3rJFg9Q5VHP5qzyQcRONYXWBjnM7 y54=
+ENTRY_END
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing.nic.cz. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NXDOMAIN
+SECTION QUESTION
+missing.nic.cz. IN MX
+SECTION AUTHORITY
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1438786503 10800 3600 1209600 7200
+nic.cz. 1800 IN RRSIG SOA 5 2 1800 20150819080542 20150805135503 24582 nic.cz. TDX7klpEuTI2vUQdmNzacxND0p828AD1HNxzTop0MJqKTehn8XgPoSK0 ZRWITLIMTtmC9UFLh/nb9I06HqUVdirxCKWvSzO840wjoVF7SjLWZysB 3VhPn84NA/9m8N8dmpTIt2IpN2N/T0lZVIIg/SSeru/dPNKH1uNtKekv 1eg=
+nic.cz. 7200 IN NSEC 6to4.nic.cz. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nic.cz. 7200 IN RRSIG NSEC 5 2 7200 20150818164706 20150805135503 24582 nic.cz. dqZiT0kHOtrap/aNq/M4u6KCGAS+f1yrAa6aDVBnqIopJ4DJJjnh67WF LedeHae5JLDNwuZV8SlkicIwW5K2ET4//2bJ6FCJcw89s40s3h/QnVxB +wV6hNhqfVnOjtHO4TWK96uNhf/B+A4N/voSpA21zYBMTV8mFvynj7oy ozk=
+*.mirrors.nic.cz. 7200 IN NSEC akuma.mnt.nic.cz. CNAME RRSIG NSEC
+*.mirrors.nic.cz. 7200 IN RRSIG NSEC 5 3 7200 20150819054509 20150805135503 24582 nic.cz. BDT/Rw1F7/QJd76/KWL0jdkdHkzWNxxZ2Hdgba6o1okc0mgqz2ag1P3s BkYtzWMwql4U7Au/KcLtq6P8X2/T9xytqmYfpn2O1dCaBzHubeTiz/aP wcPaYEC+jPR7JwmHpZlxs+KirS4yo7aVF1OPP7ZjtuqDeNLvmF4W7mHl r/A=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_dns64.rpl b/tests/deckard/sets/resolver/module_dns64.rpl
new file mode 100644
index 0000000..0e50dbb
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_dns64.rpl
@@ -0,0 +1,204 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ features: dns64_prefix = fe80::21b:aabb:0:0
+CONFIG_END
+
+SCENARIO_BEGIN Test dns64 features
+
+; 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
+cz. IN NS
+SECTION AUTHORITY
+cz. IN NS d.ns.nic.cz.
+SECTION ADDITIONAL
+d.ns.nic.cz. IN A 193.29.206.1
+;d.ns.nic.cz. IN AAAA 2001:678:1::1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 193.29.206.1
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.cz. IN NS
+SECTION AUTHORITY
+example.cz. IN NS ns.example.cz.
+SECTION ADDITIONAL
+ns.example.cz. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+www.example.cz. IN A 1.2.3.5
+www.example.cz. IN A 1.2.3.6
+SECTION AUTHORITY
+example.cz. IN NS ns.example.cz.
+SECTION ADDITIONAL
+ns.example.cz. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.cz. IN AAAA
+SECTION AUTHORITY
+example.cz. 3600 IN SOA bla. bla. 1 2 3 4 5
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www6.example.cz. IN AAAA
+SECTION ANSWER
+www6.example.cz. 3600 IN AAAA 2001:db8::1
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+cname.example.cz. IN CNAME
+SECTION ANSWER
+cname.example.cz. IN CNAME www.example.cz.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR REFUSED
+SECTION QUESTION
+fail6.example.cz. IN AAAA
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.cz. IN AAAA
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.cz. IN AAAA
+SECTION ANSWER
+www.example.cz. IN AAAA fe80::21b:aabb:102:305
+www.example.cz. IN AAAA fe80::21b:aabb:102:306
+ENTRY_END
+
+; Do not synthesize on +CD queries, sec. 5.5.3.
+STEP 12 QUERY
+ENTRY_BEGIN
+REPLY RD DO CD
+SECTION QUESTION
+www.example.cz. IN AAAA
+ENTRY_END
+
+STEP 13 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer authority
+REPLY QR RD RA DO CD NOERROR
+SECTION QUESTION
+www.example.cz. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.cz. 3600 IN SOA bla. bla. 1 2 3 4 5
+ENTRY_END
+
+; Do not synthesize if AAAA exists.
+STEP 14 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www6.example.cz. IN AAAA
+ENTRY_END
+
+STEP 15 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www6.example.cz. IN AAAA
+SECTION ANSWER
+www6.example.cz. 3600 IN AAAA 2001:db8::1
+ENTRY_END
+
+; Generate from simple NODATA behind a CNAME.
+STEP 16 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+cname.example.cz. IN AAAA
+ENTRY_END
+
+STEP 17 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+cname.example.cz. IN AAAA
+SECTION ANSWER
+cname.example.cz. IN CNAME www.example.cz.
+www.example.cz. IN AAAA fe80::21b:aabb:102:305
+www.example.cz. IN AAAA fe80::21b:aabb:102:306
+ENTRY_END
+
+; Fail for AAAA won't cause query for A (answer not defined).
+STEP 18 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+fail6.example.cz. IN AAAA
+ENTRY_END
+
+STEP 19 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+fail6.example.cz. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_hint_static.rpl b/tests/deckard/sets/resolver/module_hint_static.rpl
new file mode 100644
index 0000000..7a1bb73
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_hint_static.rpl
@@ -0,0 +1,43 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ features: static_hint_name = www.nic.cz
+ features: static_hint_addr = 1.2.3.4
+CONFIG_END
+
+SCENARIO_BEGIN Simple static hint test
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.nic.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.nic.cz. IN A
+SECTION ANSWER
+www.nic.cz. IN A 1.2.3.4
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+4.3.2.1.in-addr.arpa. IN PTR
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+4.3.2.1.in-addr.arpa. IN PTR
+SECTION ANSWER
+4.3.2.1.in-addr.arpa. IN PTR www.nic.cz
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_deny_all.rpl b/tests/deckard/sets/resolver/module_policy_deny_all.rpl
new file mode 100644
index 0000000..4c068e7
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_deny_all.rpl
@@ -0,0 +1,96 @@
+; config options
+ stub-addr: 1.2.3.4
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ feature-list: policy=policy:add(policy.all(policy.DENY))
+CONFIG_END
+
+SCENARIO_BEGIN DENY policy test, uses policy.all
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+dummy.example.cz. IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+dummy.nic.cz. IN A 9.10.11.12
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD AD DO
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.example.cz. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nic.cz. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.nic.cz. IN A
+ENTRY_END
+
+STEP 80 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_deny_suff_comm.rpl b/tests/deckard/sets/resolver/module_policy_deny_suff_comm.rpl
new file mode 100644
index 0000000..320ac33
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_deny_suff_comm.rpl
@@ -0,0 +1,148 @@
+; config options
+ stub-addr: 1.2.3.4
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ feature-list: policy=policy:add(policy.suffix_common(policy.DENY, policy.todnames({'example.cz', 'nic.cz'}), todname('cz')))
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN DENY policy test, uses policy.common_suffix and policy.todnames
+
+RANGE_BEGIN 0 110
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+dummy.example.cz. IN A 9.10.11.12
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+nic.cz. IN A 13.14.15.16
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+dummy.nic.cz. IN A 17.18.19.20
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 21.22.23.24
+ENTRY_END
+RANGE_END
+
+; blocked by policy, must return NXDOMAIN
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; blocked by policy, must return NXDOMAIN
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.example.cz. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; blocked by policy, must return NXDOMAIN
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nic.cz. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; blocked by policy, must return NXDOMAIN
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.nic.cz. IN A
+ENTRY_END
+
+STEP 80 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; does not match the policy, so script must retun valid answer
+STEP 90 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+STEP 100 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 21.22.23.24
+ENTRY_END
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_deny_suff_patt.rpl b/tests/deckard/sets/resolver/module_policy_deny_suff_patt.rpl
new file mode 100644
index 0000000..98b4cc6
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_deny_suff_patt.rpl
@@ -0,0 +1,148 @@
+; config options
+ stub-addr: 1.2.3.4
+ feature-list: policy=policy:add(policy.suffix(policy.DENY, {todname('nic.cz')}))
+ feature-list: policy=policy:add(policy.pattern(policy.DENY, '\8example[0-8]\2cz'))
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN DENY policy test; uses policy.suffix, policy.pattern, todname
+
+RANGE_BEGIN 0 110
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+nic.cz. IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+dummy.nic.cz. IN A 9.10.11.12
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example0.cz. IN A
+SECTION ANSWER
+example0.cz. IN A 13.14.15.16
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example0.cz. IN A
+SECTION ANSWER
+dummy.example0.cz. IN A 17.18.19.20
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example9.cz. IN A
+SECTION ANSWER
+example9.cz. IN A 21.22.23.24
+ENTRY_END
+RANGE_END
+
+; denied by policy.suffix(policy.DENY, {todname('nic.cz')})
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nic.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; denied by policy.suffix(policy.DENY, {todname('nic.cz')})
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.nic.cz. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; denied by policy.pattern(policy.DENY, todname('example[0-8].cz')
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example0.cz. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+example0.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; denied by policy.pattern(policy.DENY, todname('example[0-8].cz')
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.example0.cz. IN A
+ENTRY_END
+
+STEP 80 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.example0.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; does not match any policy; allowed
+STEP 90 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example9.cz. IN A
+ENTRY_END
+
+STEP 100 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example9.cz. IN A
+SECTION ANSWER
+example9.cz. IN A 21.22.23.24
+ENTRY_END
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_drop.rpl b/tests/deckard/sets/resolver/module_policy_drop.rpl
new file mode 100644
index 0000000..308584a
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_drop.rpl
@@ -0,0 +1,24 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ feature-list: policy=policy:add(policy.suffix(policy.DROP, {todname('example.cz')}))
+CONFIG_END
+
+SCENARIO_BEGIN Simple policy test
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_forward.rpl b/tests/deckard/sets/resolver/module_policy_forward.rpl
new file mode 100644
index 0000000..ebe0f4a
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_forward.rpl
@@ -0,0 +1,38 @@
+; config options
+ stub-addr: 1.2.3.4
+ feature-list: policy=policy:add(policy.suffix(policy.FORWARD('1.2.3.4'), {todname('example.cz')}))
+CONFIG_END
+
+SCENARIO_BEGIN Simple policy test
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+www.example.cz. IN A 5.6.7.8
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+www.example.cz. IN A 5.6.7.8
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_pass_deny.rpl b/tests/deckard/sets/resolver/module_policy_pass_deny.rpl
new file mode 100644
index 0000000..fef630c
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_pass_deny.rpl
@@ -0,0 +1,67 @@
+; config options
+ stub-addr: 1.2.3.4
+ feature-list: policy=policy:add(policy.pattern(policy.PASS, todname('dummy.example.cz')))
+ feature-list: policy=policy:add(policy.suffix(policy.DENY, {todname('example.cz')}))
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN PASS, DENY policy test; uses policy.pattern and policy.suffix
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+fake.example.cz. IN A
+SECTION ANSWER
+fake.example.cz. IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+dummy.example.cz. IN A 9.10.11.12
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+fake.example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+fake.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.example.cz. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+dummy.example.cz. IN A 9.10.11.12
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_rpz.rpl b/tests/deckard/sets/resolver/module_policy_rpz.rpl
new file mode 100644
index 0000000..e1588f1
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_rpz.rpl
@@ -0,0 +1,153 @@
+; config options
+ stub-addr: 1.2.3.4
+ feature-list: policy=policy:add(policy.rpz(policy.DENY, '{{INSTALL_DIR}}/sets/resolver/zone.rpz'))
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN policy.rpz test
+
+RANGE_BEGIN 0 110
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+example.cz. IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+dummy.example.cz. IN A 9.10.11.12
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+nic.cz. IN A 13.14.15.16
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+dummy.nic.cz. IN A 17.18.19.20
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 21.22.23.24
+ENTRY_END
+RANGE_END
+
+; blocked by example.cz CNAME .
+; NXDOMAIN expected
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; blocked by *.example.cz CNAME *.
+; NXDOMAIN expected
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.example.cz. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AA NXDOMAIN
+SECTION QUESTION
+dummy.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; blocked nic.cz CNAME rpz-drop.
+; SERVFAIL expected
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nic.cz. IN A
+ENTRY_END
+
+STEP 55 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; matches *.nic.cz CNAME rpz-tcp-only.
+; TC flag expected
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+dummy.nic.cz. IN A
+ENTRY_END
+
+STEP 65 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR TC RD RA NOERROR
+SECTION QUESTION
+dummy.nic.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+; matches example.com CNAME rpz-passthru.
+; rpz not affected
+STEP 70 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+example.com. IN A
+ENTRY_END
+
+STEP 80 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION ANSWER
+example.com. IN A 21.22.23.24
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_policy_tc.rpl b/tests/deckard/sets/resolver/module_policy_tc.rpl
new file mode 100644
index 0000000..620f531
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_policy_tc.rpl
@@ -0,0 +1,24 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ feature-list: policy=policy:add(policy.suffix(policy.TC, {todname('example.cz')}))
+CONFIG_END
+
+SCENARIO_BEGIN Simple policy test
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR TC RD RA
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_renumber.rpl b/tests/deckard/sets/resolver/module_renumber.rpl
new file mode 100644
index 0000000..b435585
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_renumber.rpl
@@ -0,0 +1,86 @@
+; config options
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ features: renumber_src = 1.2.3.0/24; renumber_dst = 4.5.6.0
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Simple renumber module test
+
+; 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
+cz. IN NS
+SECTION AUTHORITY
+cz. IN NS d.ns.nic.cz.
+SECTION ADDITIONAL
+d.ns.nic.cz. IN A 193.29.206.1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 193.29.206.1
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.cz. IN NS
+SECTION AUTHORITY
+example.cz. IN NS ns.example.cz.
+SECTION ADDITIONAL
+ns.example.cz. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+www.example.cz. IN A 1.2.3.5
+SECTION AUTHORITY
+example.cz. IN NS ns.example.cz.
+SECTION ADDITIONAL
+ns.example.cz. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.cz. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.cz. IN A
+SECTION ANSWER
+www.example.cz. IN A 4.5.6.5
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/module_workarounds_disable_0x20.rpl b/tests/deckard/sets/resolver/module_workarounds_disable_0x20.rpl
new file mode 100644
index 0000000..2906ee8
--- /dev/null
+++ b/tests/deckard/sets/resolver/module_workarounds_disable_0x20.rpl
@@ -0,0 +1,81 @@
+; config options
+ features: workarounds = true
+ stub-addr: 1.1.1.1
+CONFIG_END
+
+SCENARIO_BEGIN Test module workarounds disabling 0x20 for certain domains
+RANGE_BEGIN 0 100
+ ADDRESS 1.1.1.1
+ENTRY_BEGIN
+MATCH opcode qtype qcase ; case sensitive comparison
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A ; all lowercase
+SECTION ANSWER
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A 2.2.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 1.1.1.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. IN NS k.root-servers.net.
+SECTION ADDITIONAL
+k.root-servers.net. IN A 1.1.1.1
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A ; all lowercase: tests that 0x20 won't be used
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A
+SECTION ANSWER
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A 2.2.2.2
+ENTRY_END
+
+; expire cached results
+STEP 22 TIME_PASSES ELAPSE 4000
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.COM. IN A ; upper case in the TLD: tests making the name lowercase before sending the query
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A
+SECTION ANSWER
+b-0.19-23003008.1481.1518.19cf.3ea1.410.0.ekzijnekvvvg7gb38qcwur561b.avqs.mcafee.com. IN A 2.2.2.2
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec3_aggr_cache.rpl b/tests/deckard/sets/resolver/nsec3_aggr_cache.rpl
new file mode 100644
index 0000000..180ec87
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec3_aggr_cache.rpl
@@ -0,0 +1,5280 @@
+ trust-anchor: ". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ trust-anchor: ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D"
+ val-override-date: 20180727104904
+ stub-addr: 192.36.148.17
+CONFIG_END
+
+SCENARIO_BEGIN qlist
+
+; Scope ".
+
+; Server names:
+; f.root-servers.net.
+; a.root-servers.net.
+; j.root-servers.net.
+; e.root-servers.net.
+; i.root-servers.net.
+; d.root-servers.net.
+; m.root-servers.net.
+; h.root-servers.net.
+; c.root-servers.net.
+; l.root-servers.net.
+; g.root-servers.net.
+; b.root-servers.net.
+; k.root-servers.net.
+RANGE_BEGIN 0 1000
+ ADDRESS 192.36.148.17
+ ADDRESS 2001:7fe::53
+ ADDRESS 198.97.190.53
+ ADDRESS 2001:500:1::53
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 2001:503:c27::2:30
+ ADDRESS 2001:500:a8::e
+ ADDRESS 2001:7fd::1
+ ADDRESS 192.112.36.4
+ ADDRESS 2001:500:12::d0d
+ ADDRESS 199.7.91.13
+ ADDRESS 2001:500:2::c
+ ADDRESS 198.41.0.4
+ ADDRESS 2001:500:2d::d
+ ADDRESS 202.12.27.33
+ ADDRESS 2001:500:9f::42
+ ADDRESS 2001:dc3::35
+ ADDRESS 192.5.5.241
+ ADDRESS 192.33.4.12
+ ADDRESS 2001:500:2f::f
+ ADDRESS 199.7.83.42
+ ADDRESS 192.58.128.30
+ ADDRESS 192.203.230.10
+ ADDRESS 2001:500:200::b
+ ADDRESS 199.9.14.201
+ ADDRESS 193.0.14.129
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20180809050000 20180727040000 41656 . iPYXlPdWqSGLIBjkBHYPCkA7LpjtEq2l 3IxdgesYUMxKFrYsdxgySnyBHQ9YzAQc bl3fCtLvlx6msHw/cCqMRHhCCjDnqTa/ NqBRtr1hr8ZbPrb3pZf+1hjX+9eohhHQ OiyAiP1hVaEIBIiSt7W8aPYvjZRogQAy YPApw3dwsfTFWzTnd+EDZsuZeMz0k74x BEJmC/tzTjnzvNK8fU95Mv+pKLm09Hda eXP2i+zrAwguTZBUt30dnsrYA7dxkQcP s+SdFhfPlGYS2EWOoJsik3DGRHQpTHI5 N9sjytXS7IqWetnaNJyFL0KSpG1YdEyB JvYqCrUI6YLDopcgUSRjrA==
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAfaifSqh+9ItxYRCwuiY0FY2NkaE wd/zmyVvakixDgTOkgG/PUzlEauAiKzl xGwezjqbKFPSwrY3qHmbbsSTY6G8hZtn a8k26eCwy59Chh573cu8qtBkmUIXMYG3 fSdlUReP+uhBWBfKI2aGwhRmQYR0zSmg 7PGOde34c/rOItK1ebJhjTAJ6TmnON7q Mfk/lKvH4qOvYtzstLhr7Pn9ZOVLx/WU KQpU/nEyFyTduRbz1nZqkp6yMuHwWVsA BK8lUYXSaUrDAsuMSldhafmR/A15BxNh v9M7mzJj7UH2RVME9JbYinBEzWwW9Gpn Y+ZmBWgZiRVTaDuemCTJ5ZJWLRs=
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29 euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v 58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8 g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37 NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/E fucp2gaDX6RS6CXpoY68LsvPVjR0ZSwz z1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgu l0sGIcGOYl7OyQdXfZ57relSQageu+ip AdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1 dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 172800 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexT BAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq 7HrxRixHlFlExOLAJr5emLvN7SWXgnLh 4+B5xQlNVz8Og8kvArMtNROxVQuCaSnI DdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLr jyBxWezF0jLHwVN8efS3rCj/EWgvIWgb 9tarpVUDK/b58Da+sqqls3eNbuv7pr+e oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTId sIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6 +cn8HFRm+2hM8AnXGXws9555KrUB5qih ylGa8subX2Nn6UwNR1AkUTV74bU=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20180811000000 20180721000000 19036 . U2thj3DQzTGRF8m2ZytqANs9YF9PYb1B QC5bDHi+d7apJve5u3Ik1cCeYg9AlW2v 2vstMSUtTR0eI2mzBeZ8aBHLwPylyDhS jbe6lwxnaoZhncO4oM9bJTUha1ovCXPO oZm5dKhfI6FradAaitRfMaC7s/+XZ/Dh nlLQNe08F0qepkG52RsUJZEyiQkkOK5a /hNkV5gyKdMecjtJ7eiR1w68vWwP6iGp ohuLDlapbEniJXHhEysUtRJbE3EFYgwG EGeKwEQC3tDCb8ABYnbrkMg/OqhGP1cX aYfZwhEIUOvsplTdXU1tsVbPjGtbVBjy 4aKLY+pjsvWuT2dzMac18A==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN NULL
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN DNSKEY
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN DS
+SECTION ANSWER
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN A
+SECTION ANSWER
+f.root-servers.net. 3600000 IN A 192.5.5.241
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN AAAA
+SECTION ANSWER
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN A
+SECTION ANSWER
+a.root-servers.net. 3600000 IN A 198.41.0.4
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN AAAA
+SECTION ANSWER
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN A
+SECTION ANSWER
+j.root-servers.net. 3600000 IN A 192.58.128.30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN AAAA
+SECTION ANSWER
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN A
+SECTION ANSWER
+e.root-servers.net. 3600000 IN A 192.203.230.10
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN AAAA
+SECTION ANSWER
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN A
+SECTION ANSWER
+i.root-servers.net. 3600000 IN A 192.36.148.17
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN AAAA
+SECTION ANSWER
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN A
+SECTION ANSWER
+d.root-servers.net. 3600000 IN A 199.7.91.13
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN AAAA
+SECTION ANSWER
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN A
+SECTION ANSWER
+m.root-servers.net. 3600000 IN A 202.12.27.33
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN AAAA
+SECTION ANSWER
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN A
+SECTION ANSWER
+h.root-servers.net. 3600000 IN A 198.97.190.53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN AAAA
+SECTION ANSWER
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN A
+SECTION ANSWER
+c.root-servers.net. 3600000 IN A 192.33.4.12
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN AAAA
+SECTION ANSWER
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN A
+SECTION ANSWER
+l.root-servers.net. 3600000 IN A 199.7.83.42
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN AAAA
+SECTION ANSWER
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN A
+SECTION ANSWER
+g.root-servers.net. 3600000 IN A 192.112.36.4
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN AAAA
+SECTION ANSWER
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN A
+SECTION ANSWER
+b.root-servers.net. 3600000 IN A 199.9.14.201
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN AAAA
+SECTION ANSWER
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN DNSKEY
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN DS
+SECTION ANSWER
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "com.
+
+; Server names:
+; a.gtld-servers.net.
+; j.gtld-servers.net.
+; e.gtld-servers.net.
+; i.gtld-servers.net.
+; d.gtld-servers.net.
+; m.gtld-servers.net.
+; h.gtld-servers.net.
+; c.gtld-servers.net.
+; l.gtld-servers.net.
+; g.gtld-servers.net.
+; b.gtld-servers.net.
+; k.gtld-servers.net.
+; f.gtld-servers.net.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:503:d2d::30
+ ADDRESS 192.31.80.30
+ ADDRESS 2001:502:7094::30
+ ADDRESS 2001:501:b1f9::30
+ ADDRESS 192.35.51.30
+ ADDRESS 2001:503:39c1::30
+ ADDRESS 2001:502:1ca1::30
+ ADDRESS 2001:503:a83e::2:30
+ ADDRESS 192.55.83.30
+ ADDRESS 192.26.92.30
+ ADDRESS 2001:503:eea3::30
+ ADDRESS 192.12.94.30
+ ADDRESS 192.42.93.30
+ ADDRESS 2001:502:8cc::30
+ ADDRESS 2001:503:d414::30
+ ADDRESS 2001:503:83eb::30
+ ADDRESS 192.52.178.30
+ ADDRESS 192.54.112.30
+ ADDRESS 2001:500:856e::30
+ ADDRESS 192.5.6.30
+ ADDRESS 192.41.162.30
+ ADDRESS 192.43.172.30
+ ADDRESS 192.48.79.30
+ ADDRESS 192.33.14.30
+ ADDRESS 2001:500:d937::30
+ ADDRESS 2001:503:231d::2:30
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+net. 900 IN RRSIG SOA 8 1 900 20180803084842 20180727073842 7934 net. GaMDNiWJZrDpU6uLTjDm3xG9RH1Ltojc knesMgzdxlcYAtennPH8HUtc3lsCIKUI 0uU22sXG/dSakls2ihWIrPXm13mGjYio UdCPTCEHyBApbe5Xh6m+wMWlbI8yxSYy b6bFCsH/2fgLlGHZ7DwQy+Cji5d/1H8x iTDVF1WfLvo=
+net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532681322 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DS
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+net. 900 IN RRSIG SOA 8 1 900 20180803084842 20180727073842 7934 net. GaMDNiWJZrDpU6uLTjDm3xG9RH1Ltojc knesMgzdxlcYAtennPH8HUtc3lsCIKUI 0uU22sXG/dSakls2ihWIrPXm13mGjYio UdCPTCEHyBApbe5Xh6m+wMWlbI8yxSYy b6bFCsH/2fgLlGHZ7DwQy+Cji5d/1H8x iTDVF1WfLvo=
+net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532681322 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN A
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN DNSKEY
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN DS
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+com. 900 IN RRSIG SOA 8 1 900 20180803084843 20180727073843 46475 com. wzmp/pygt6idgcjTbWpXcNftz17R3m2G 3IPBt3h54AEI1BEwbI7oPRO+NZjmHN/W 9hsD0KUoDiHMOLndA8gJIV2ZG7ACTHvD HtRgvKIxqE1KvxDU7mmxULrWPNjNZgcg PlBUehxbf774Xcn4wE/aFNMZEjn5B2re A6MYOJoNby0=
+com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532681323 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN DNSKEY
+SECTION ANSWER
+net. 86400 IN DNSKEY 256 3 8 AQO6ELLy73I+l1XTVPuW3zfQkw5nublx oY4QgdTVOfUjdv6ooKTMRMgfKb+alpX5 8L5pfhndd+o7hisIwgiH2b6aqjdljzTf dV4XeZ/2CROv1ki/BRWwD61P/w688bpu Bl/u3vsTjvjq6FdVZVf3/afMXtSO1RR7 uaQ7qn8oupY/6w==
+net. 86400 IN DNSKEY 257 3 8 AQOYBnzqWXIEj6mlgXg4LWC0HP2n8eK8 XqgHlmJ/69iuIHsa1TrHDG6TcOra/pye GKwH0nKZhTmXSuUFGh9BCNiwVDuyyb6O BGy2Nte9Kr8NwWg4q+zhSoOf4D+gC9dE zg0yFdwT0DKEvmNPt0K4jbQDS4Yimb+u PKuF6yieWWrPYYCrv8C9KC8JMze2uT6N uWBfsl2fDUoV4l65qMww06D7n+p7Rbdw WkAZ0fA63mXVXBZF6kpDtsYD7SUB9jhh fLQE/r85bvg3FaSs5Wi2BaqN06SzGWI1 DHu7axthIOeHwg00zxlhTpoYCH0ldoQz +S65zWYi/fRJiyLSBb6JZOvn
+net. 86400 IN RRSIG DNSKEY 8 1 86400 20180808153857 20180724153357 35886 net. lmab/pWDgNRz6BN1BFZmkwiZz0qay0rz +46JXwgzI/g8eadEAev1OaIfsply91iM Sn+87NMPDN1Spjr3LKSXQB7+nc8n3yrf h1gxPRsjwuWxvPc3dJwlB4P8NvXTk4B5 vzjSpcfzvb+6YuAoC171yFcIcER1RN5d j3y1NRx1EAnuanMfoHIm+2dcu14a2hKn fB0zc/hm4L/rO/Qm8c3z97d1OffQs0L0 MGCU/kBDm/UyjymSFobMlIcn0bIha7A1 QN753OY+LEOWq0flQgUrKeuXvAe2o46g GebT+8euJahn/HmgmHD/bCNn+GC/KRJJ L1wFQH3x8uqlq9loQMPjwQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN DNSKEY
+SECTION ANSWER
+com. 86400 IN DNSKEY 256 3 8 AQPeabgR6Fgrk5FSLilDYUedwsHA0HH2 2e8+Zp/uvp4aj1dVDAy5C9bkRA+xot3s G1KaT5hvgoE7eNV93F7pBW9rvVE3A/BN vJbLXxKhkAJV5KMFC10NRcdb+xF+sM4X TMPESPrYwTLUEpSFntMIVLAtUzLaBo6Y pTVR20osgGgc3Q==
+com. 86400 IN DNSKEY 257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F 3MyQR0lpBmVcNcsIszxNFxsBfKNW9JYC Yqpik8366LE7VbIcNRzfp2h9OO8HRl+H +E08zauK8k7evWEmu/6od+2boggPoiEf GNyvNPaSI7FOIroDsnw/taggzHRX1Z7S OiOiPWPNIwSUyWOZ79VmcQ1GLkC6NlYv G3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0H XvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9i oVNc0+7ASbqmZN7Z98EGU/Qh2K/BgUe8 Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2 /2HDHjRPJ2aywIpKNnv4oPo/
+com. 86400 IN RRSIG DNSKEY 8 1 86400 20180810182533 20180726182033 30909 com. pytllCSmnIFN69hPKx3IcJSV3ZD+4qoF CXIuN+LXSJpkWmpD4gOWKgAytIBMImbh iUrfLECS2c3TJkjWjthKjL+GpYIHN1Z/ UY2zdSqKr0JqBQjHs456zBsJIrRriQKh e7MEFWV+JLSYAHQi/8+ot3l9GKO9nSK6 zqP+FrMtkPtZbJeNo1muSQ4lrdvYw4/t k0FADV0DK8p8/D/OQEPg2+Mpwx9GjCVN VOlKS5vuGHGAKI0gXlhJoe28i5McJVc5 O/evqbRX37xmfX01F8W4f6lZBt3qVIVq gW9iJAjY5vd4l4m53lTzYKTLeJTFH358 TsJO93q0NpaWL78xLxkVrg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN NS
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 172800 IN RRSIG NS 8 1 172800 20180802053055 20180726042055 7934 net. KR3mBpGrNgRPgB/LuPhUC4sjhy9F+GPU BXemSi46ZJlIWc7sK40AQ2rccrU5MDSa puWa2pVvx74pSU2w3gqeW9RH9E3wNh9t toAxJYJBNvTlXv3D1qG0LIXEsold+cvQ 0VqnFhVePojFFtFqE19H5OHaa87LVUOB Ib0gTx7i73Y=
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 172800 IN RRSIG NS 8 1 172800 20180731044815 20180724033815 46475 com. JgH5uVQ8OQlpGeX/UJQRQHvQJjXOlQoZ o87eG2e/PP2y1R5Td93n/BckALIzqxT9 UyZsfIKDbRbK5junHSwV8FL5HC+3Hj0K QX8k4+yrpeYB1EM/Upkb5Db1E6F4NCcs iUyDsLNUS3trL+X7/ohrTM3ScPKdMux0 a0kAzuZMWJk=
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "nstld.com.
+
+; Server names:
+; av1.nstld.com.
+; av2.nstld.com.
+; av3.nstld.com.
+; av4.nstld.com.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:500:126::30
+ ADDRESS 2001:500:124::30
+ ADDRESS 192.82.134.30
+ ADDRESS 192.82.133.30
+ ADDRESS 2001:500:125::30
+ ADDRESS 2001:500:127::30
+ ADDRESS 192.42.177.30
+ ADDRESS 192.42.178.30
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. 86400 IN A 192.5.6.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+a.gtld-servers.net. 86400 IN AAAA 2001:503:a83e::2:30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN A
+SECTION ANSWER
+j.gtld-servers.net. 86400 IN A 192.48.79.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN AAAA
+SECTION ANSWER
+j.gtld-servers.net. 86400 IN AAAA 2001:502:7094::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. 86400 IN A 192.12.94.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION ANSWER
+e.gtld-servers.net. 86400 IN AAAA 2001:502:1ca1::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN A
+SECTION ANSWER
+i.gtld-servers.net. 86400 IN A 192.43.172.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN AAAA
+SECTION ANSWER
+i.gtld-servers.net. 86400 IN AAAA 2001:503:39c1::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN A
+SECTION ANSWER
+d.gtld-servers.net. 86400 IN A 192.31.80.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN AAAA
+SECTION ANSWER
+d.gtld-servers.net. 86400 IN AAAA 2001:500:856e::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN A
+SECTION ANSWER
+m.gtld-servers.net. 86400 IN A 192.55.83.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN AAAA
+SECTION ANSWER
+m.gtld-servers.net. 86400 IN AAAA 2001:501:b1f9::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN A
+SECTION ANSWER
+h.gtld-servers.net. 86400 IN A 192.54.112.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN AAAA
+SECTION ANSWER
+h.gtld-servers.net. 86400 IN AAAA 2001:502:8cc::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN A
+SECTION ANSWER
+c.gtld-servers.net. 86400 IN A 192.26.92.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN AAAA
+SECTION ANSWER
+c.gtld-servers.net. 86400 IN AAAA 2001:503:83eb::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN A
+SECTION ANSWER
+l.gtld-servers.net. 86400 IN A 192.41.162.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN AAAA
+SECTION ANSWER
+l.gtld-servers.net. 86400 IN AAAA 2001:500:d937::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN A
+SECTION ANSWER
+g.gtld-servers.net. 86400 IN A 192.42.93.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN AAAA
+SECTION ANSWER
+g.gtld-servers.net. 86400 IN AAAA 2001:503:eea3::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN A
+SECTION ANSWER
+b.gtld-servers.net. 86400 IN A 192.33.14.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN AAAA
+SECTION ANSWER
+b.gtld-servers.net. 86400 IN AAAA 2001:503:231d::2:30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN A
+SECTION ANSWER
+k.gtld-servers.net. 86400 IN A 192.52.178.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN AAAA
+SECTION ANSWER
+k.gtld-servers.net. 86400 IN AAAA 2001:503:d2d::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN A
+SECTION ANSWER
+f.gtld-servers.net. 86400 IN A 192.35.51.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN AAAA
+SECTION ANSWER
+f.gtld-servers.net. 86400 IN AAAA 2001:503:d414::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN A
+SECTION ANSWER
+av1.nstld.com. 300 IN A 192.42.177.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN AAAA
+SECTION ANSWER
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN A
+SECTION ANSWER
+av2.nstld.com. 300 IN A 192.42.178.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN AAAA
+SECTION ANSWER
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN A
+SECTION ANSWER
+av3.nstld.com. 300 IN A 192.82.133.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN AAAA
+SECTION ANSWER
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN A
+SECTION ANSWER
+av4.nstld.com. 300 IN A 192.82.134.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN AAAA
+SECTION ANSWER
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN NS
+SECTION ANSWER
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "cz.
+
+; Server names:
+; b.ns.nic.cz.
+; d.ns.nic.cz.
+; a.ns.nic.cz.
+; c.ns.nic.cz.
+RANGE_BEGIN 0 1000
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:1::1
+ ADDRESS 2001:678:11::1
+ ADDRESS 194.0.12.1
+ ADDRESS 194.0.13.1
+ ADDRESS 2001:678:f::1
+ ADDRESS 2001:678:10::1
+ ADDRESS 194.0.14.1
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN NULL
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN DNSKEY
+SECTION ANSWER
+knot-resolver.cz. 1800 IN DNSKEY 256 3 13 a85wAU1EB4C7Xl82/BuF/gkkNwrQPdAF w1f9uqkz3qjLXK3S+21F4SJOSWHgIW6I 8GHuBZeCMvimvj/KscrVhw==
+knot-resolver.cz. 1800 IN DNSKEY 257 3 13 KDAJfPGWgvNAEHUMzmmSa+c3gHfoGIsX nhIO1iAYGTAyVBo+CLTyIk3wxDtt4Yn3 eCrCiYsEAHBJgQvA3pwJ8w==
+knot-resolver.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20180808043000 20180725030000 54959 knot-resolver.cz. Yc3LFy9LfuakNaC9AJDIikUtjDocgdUV WiQ2b/A3YQ7+uExdT5oJHTY0JDfhdHXt 4bSy8G+yYlIYYKXUPIToBg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN DS
+SECTION ANSWER
+knot-resolver.cz. 3600 IN DS 54959 13 2 a4e5db1e2e4607243c4fe4ee79a77d3538791b7ecab85a52290878de1224d7d4
+knot-resolver.cz. 3600 IN RRSIG DS 13 2 3600 20180803113206 20180720153540 62295 cz. ttYnNfVXQw5sKc2YobPQ1rknQjPi2a5f smkJssgzQOpMT16RKyZML9SpmNM17Xng bPpPseWR94HuFgIME4A+YA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN A
+SECTION ANSWER
+knot-resolver.cz. 1800 IN A 217.31.192.18
+knot-resolver.cz. 1800 IN RRSIG A 13 2 1800 20180808033000 20180725020000 34376 knot-resolver.cz. uO0N7ttfRoQsS9McxAWJTIZqyJOl3WAo Pkc9QJrlrS/UG0KwJzBFBCWMxX+k5o7n C2Fi5GaDwmrcG1l+f+TTtA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN AAAA
+SECTION ANSWER
+knot-resolver.cz. 1800 IN AAAA 2001:1488:ac15:ff30::18
+knot-resolver.cz. 1800 IN RRSIG AAAA 13 2 1800 20180808033000 20180725020000 34376 knot-resolver.cz. Y/wxR2e0nfYSfpYGJV6CMekYSuIIt2Jl bFl/oOhE9eiSTlXSEfT8GWxy5Q8dhhkR en+NEXApI31ZX4I5EGEXtg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+nic.cz. 1800 IN A 217.31.205.50
+nic.cz. 1800 IN RRSIG A 13 2 1800 20180809122156 20180727064002 33494 nic.cz. p0uxXNMUIA1Zf6x/wqAdlNTSiLKrYs8P nNYlBe0SPQ8kTSGp49BlEaiy+B9ewcYp YbPTgjIpmvoMFeIOShUqgw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION ANSWER
+nic.cz. 1800 IN DNSKEY 256 3 13 a10sJr/8DQL8M1nLPzWfNoASGTsm4cKE P577ZX3c3lruiWZiUL78fUp0B2YJh8U9 DyiZsq18i6CM9eYTDVemzA==
+nic.cz. 1800 IN DNSKEY 257 3 13 LM4zvjUgZi2XZKsYooDE0HFYGfWp242f KB+O8sLsuox8S6MJTowY8lBDjZD7JKbm aNot3+1H8zU9TrDzWmmHwQ==
+nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20180809084714 20180727064002 61281 nic.cz. zotLLX9vPojjz21OSVfMGNspvWIVzzcW ZGJTTYOPlIHmrxAfE3GxHqV7QK8QO1W5 8rGsf9eebQw3+aJ+QGaNSA==
+nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20180810022459 20180727064002 33494 nic.cz. Ol85KlI1HVLYmVRmD2q0QBCqLZM5bUDr sECC2XN0gmtkbEPfI1HmhylvM9sur3kE 4kCxCKOAOCozExhDZtgV2w==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN DS
+SECTION ANSWER
+nic.cz. 3600 IN DS 61281 13 2 4104d40c8fe2030bf7a09a199fcf37b36f7ec8ddd16f5a84f2e61c248d3afd0f
+nic.cz. 3600 IN RRSIG DS 13 2 3600 20180805030735 20180722073550 62295 cz. iF+/iu01Jx4ls0md5OHm25GHCuaLkEmd U4N8pzQRw0WYTmP71ZuMEqd4e5KPeGS2 hLqh134rBssNSGagGazLNw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+knot-s-01.nic.cz. IN A
+SECTION AUTHORITY
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 03keq03alogetpm9cgasqk7bremd66d1 A RRSIG
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810043745 20180727064002 33494 nic.cz. qfSOy12hZJf/gtPn3k+34fhT3RTZgsq2 27nLVIx4DBHB2vzVTnXiZyqyU7D7LrO8 jXu43W5aNvtZzOK8RWPwkA==
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 4i3o1eq9upce2qv1rkubgt7v5qgb90s4 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810054917 20180727064002 33494 nic.cz. SVSQya2mV73pXk5HeXrJXgKSGRiVo/LP PcCjihQqRzfQKK5XWDRgas7+Ve7khf/H wMBk2jSTLOKbvHJLW14K+Q==
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 lb5verduef1iorjs8glp93io39d6aib4 A AAAA RRSIG
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810063920 20180727064002 33494 nic.cz. p8egKoFkZcK1M81lCEaestRHkuFWxp4k lmNZv05NdyCSZd4juLFGGgfWcl49eE/j UyIOQwouuaVrn5OjuvBilA==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+knot-s-01.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 03keq03alogetpm9cgasqk7bremd66d1 A RRSIG
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810043745 20180727064002 33494 nic.cz. qfSOy12hZJf/gtPn3k+34fhT3RTZgsq2 27nLVIx4DBHB2vzVTnXiZyqyU7D7LrO8 jXu43W5aNvtZzOK8RWPwkA==
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 4i3o1eq9upce2qv1rkubgt7v5qgb90s4 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810054917 20180727064002 33494 nic.cz. SVSQya2mV73pXk5HeXrJXgKSGRiVo/LP PcCjihQqRzfQKK5XWDRgas7+Ve7khf/H wMBk2jSTLOKbvHJLW14K+Q==
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 lb5verduef1iorjs8glp93io39d6aib4 A AAAA RRSIG
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810063920 20180727064002 33494 nic.cz. p8egKoFkZcK1M81lCEaestRHkuFWxp4k lmNZv05NdyCSZd4juLFGGgfWcl49eE/j UyIOQwouuaVrn5OjuvBilA==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+knot-s-01.nic.cz. IN NS
+SECTION AUTHORITY
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 03keq03alogetpm9cgasqk7bremd66d1 A RRSIG
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810043745 20180727064002 33494 nic.cz. qfSOy12hZJf/gtPn3k+34fhT3RTZgsq2 27nLVIx4DBHB2vzVTnXiZyqyU7D7LrO8 jXu43W5aNvtZzOK8RWPwkA==
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 4i3o1eq9upce2qv1rkubgt7v5qgb90s4 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810054917 20180727064002 33494 nic.cz. SVSQya2mV73pXk5HeXrJXgKSGRiVo/LP PcCjihQqRzfQKK5XWDRgas7+Ve7khf/H wMBk2jSTLOKbvHJLW14K+Q==
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 lb5verduef1iorjs8glp93io39d6aib4 A AAAA RRSIG
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810063920 20180727064002 33494 nic.cz. p8egKoFkZcK1M81lCEaestRHkuFWxp4k lmNZv05NdyCSZd4juLFGGgfWcl49eE/j UyIOQwouuaVrn5OjuvBilA==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+knot-s-01.nic.cz. IN DS
+SECTION AUTHORITY
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 03keq03alogetpm9cgasqk7bremd66d1 A RRSIG
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810043745 20180727064002 33494 nic.cz. qfSOy12hZJf/gtPn3k+34fhT3RTZgsq2 27nLVIx4DBHB2vzVTnXiZyqyU7D7LrO8 jXu43W5aNvtZzOK8RWPwkA==
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 4i3o1eq9upce2qv1rkubgt7v5qgb90s4 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810054917 20180727064002 33494 nic.cz. SVSQya2mV73pXk5HeXrJXgKSGRiVo/LP PcCjihQqRzfQKK5XWDRgas7+Ve7khf/H wMBk2jSTLOKbvHJLW14K+Q==
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 lb5verduef1iorjs8glp93io39d6aib4 A AAAA RRSIG
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810063920 20180727064002 33494 nic.cz. p8egKoFkZcK1M81lCEaestRHkuFWxp4k lmNZv05NdyCSZd4juLFGGgfWcl49eE/j UyIOQwouuaVrn5OjuvBilA==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+knot-s-01.nic.cz. IN AAAA
+SECTION AUTHORITY
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 03keq03alogetpm9cgasqk7bremd66d1 A RRSIG
+01bgrmosedn3jh21oq2cq3obvl9q56k8.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810043745 20180727064002 33494 nic.cz. qfSOy12hZJf/gtPn3k+34fhT3RTZgsq2 27nLVIx4DBHB2vzVTnXiZyqyU7D7LrO8 jXu43W5aNvtZzOK8RWPwkA==
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 4i3o1eq9upce2qv1rkubgt7v5qgb90s4 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM
+4g0hefga47i70br94ljss5us62b0ln71.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810054917 20180727064002 33494 nic.cz. SVSQya2mV73pXk5HeXrJXgKSGRiVo/LP PcCjihQqRzfQKK5XWDRgas7+Ve7khf/H wMBk2jSTLOKbvHJLW14K+Q==
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 lb5verduef1iorjs8glp93io39d6aib4 A AAAA RRSIG
+l80r74a5vjicpcbvnlpa2bk6bbvs5jjn.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810063920 20180727064002 33494 nic.cz. p8egKoFkZcK1M81lCEaestRHkuFWxp4k lmNZv05NdyCSZd4juLFGGgfWcl49eE/j UyIOQwouuaVrn5OjuvBilA==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN A
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f rgofdsarih9kv8kcht41osd09tkl8o7v NS DS RRSIG
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x /H4aDF24oVFrRn2XTNNghu2OzmcVJV0E QlNIHd8aXfdQwLEz4FUAhw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN DNSKEY
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f rgofdsarih9kv8kcht41osd09tkl8o7v NS DS RRSIG
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x /H4aDF24oVFrRn2XTNNghu2OzmcVJV0E QlNIHd8aXfdQwLEz4FUAhw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN NS
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f rgofdsarih9kv8kcht41osd09tkl8o7v NS DS RRSIG
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x /H4aDF24oVFrRn2XTNNghu2OzmcVJV0E QlNIHd8aXfdQwLEz4FUAhw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN DS
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f rgofdsarih9kv8kcht41osd09tkl8o7v NS DS RRSIG
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x /H4aDF24oVFrRn2XTNNghu2OzmcVJV0E QlNIHd8aXfdQwLEz4FUAhw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN AAAA
+SECTION AUTHORITY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f ei8u933svpm4qdfn713b66buji430uc7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux 2/X8SwY2PmrcK/ff6wmFejIrGUHvrG1U NS9icqQqTV3swNymGz4Dbw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN NSEC3 1 0 10 f49e445b0b4ad67f rgofdsarih9kv8kcht41osd09tkl8o7v NS DS RRSIG
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x /H4aDF24oVFrRn2XTNNghu2OzmcVJV0E QlNIHd8aXfdQwLEz4FUAhw==
+knot-resolver.cz. 1800 IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mh yueV6+fJI1V5N3dEoczePO5yBZiffk91 Xi2d4aYHRf2DLyfEX0HDVA==
+knot-resolver.cz. 1800 IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+labs.nic.cz. IN A
+SECTION ANSWER
+labs.nic.cz. 1800 IN A 217.31.192.130
+labs.nic.cz. 1800 IN RRSIG A 13 3 1800 20180808225840 20180725212840 5070 labs.nic.cz. GYUF3qBsSa9Zi8ijUnwijskJxjtVlUHC fj5qMOCg1tfsg7jf2nV8Au4llaWEAsxp AR0Hh/R808odDxyONg2wwA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+labs.nic.cz. IN DNSKEY
+SECTION ANSWER
+labs.nic.cz. 1800 IN DNSKEY 256 3 13 EGR6/v4U4maTcZF6Gprv1oXZPmph09UL 5AX1gwt5AaIPh6X8Eti7ccgMH5vsHdvQ isdW1HmgGLPwEQAyO/W/MA==
+labs.nic.cz. 1800 IN DNSKEY 257 3 13 3Lk0VNzQzj9EDPJQwSPCVixCc+oyz0nr Uzik6UqtvCA0OLDd4v4sQjXmwxWniPrm aSGlEHCOXkrnQ455xgT2Pg==
+labs.nic.cz. 1800 IN RRSIG DNSKEY 13 3 1800 20180808235840 20180725222840 13482 labs.nic.cz. yCe+PodZZ4pqopxX0gTKf3LEKhOnDaV6 23kCc0Op4mzV+fASs6NrrkQVVSsdfv0G qAi/ThM3yXLvnsGB0XVnIA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+labs.nic.cz. IN DS
+SECTION ANSWER
+labs.nic.cz. 1800 IN DS 13482 13 2 708b193611d70021885f8499d3b3de25b3c11a6c6801d62ef74cc87905428dc6
+labs.nic.cz. 1800 IN RRSIG DS 13 3 1800 20180810013825 20180727064002 33494 nic.cz. aM0ZTi5msMd2UOKvJv7sTQWLZP22B5dj NqfuvLf88vuW46gKokVGkOOSAgx7CeaH VVq7Ma4bzMuuXCqnjQiDcQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent7.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+SECTION AUTHORITY
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 61q3lko2dr2vnmncn1sh2vdiv449lmg3 A RRSIG
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180808122435 20180725105435 5070 labs.nic.cz. jrf7jm1Bc6YgN7WsYv1OBPFsOIfFxc2e kZZC9n2oMuyUgXV6KzYTJaHr8fvGOCKR GUWpo16osMQI1mdfcHskTw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN DNSKEY
+SECTION ANSWER
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent7.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+SECTION AUTHORITY
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 61q3lko2dr2vnmncn1sh2vdiv449lmg3 A RRSIG
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180808122435 20180725105435 5070 labs.nic.cz. jrf7jm1Bc6YgN7WsYv1OBPFsOIfFxc2e kZZC9n2oMuyUgXV6KzYTJaHr8fvGOCKR GUWpo16osMQI1mdfcHskTw==
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN NS
+SECTION ANSWER
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent7.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+SECTION AUTHORITY
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 61q3lko2dr2vnmncn1sh2vdiv449lmg3 A RRSIG
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180808122435 20180725105435 5070 labs.nic.cz. jrf7jm1Bc6YgN7WsYv1OBPFsOIfFxc2e kZZC9n2oMuyUgXV6KzYTJaHr8fvGOCKR GUWpo16osMQI1mdfcHskTw==
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN DS
+SECTION ANSWER
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent7.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+SECTION AUTHORITY
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 61q3lko2dr2vnmncn1sh2vdiv449lmg3 A RRSIG
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180808122435 20180725105435 5070 labs.nic.cz. jrf7jm1Bc6YgN7WsYv1OBPFsOIfFxc2e kZZC9n2oMuyUgXV6KzYTJaHr8fvGOCKR GUWpo16osMQI1mdfcHskTw==
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN AAAA
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN AAAA 2001:1488:ac15:ff90::133
+gitlab.labs.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. MkeWa5P2vNXqAxc1B7u8OEdbtadhLbsY Yy8IRlOcb6y2pn9xyjFyplyDqDMskX/6 J9kILbyTQCvxv2dOZ9prDQ==
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent7.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+SECTION AUTHORITY
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 61q3lko2dr2vnmncn1sh2vdiv449lmg3 A RRSIG
+4o5ekull1peq8leuf98l9iudrraqmqs4.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180808122435 20180725105435 5070 labs.nic.cz. jrf7jm1Bc6YgN7WsYv1OBPFsOIfFxc2e kZZC9n2oMuyUgXV6KzYTJaHr8fvGOCKR GUWpo16osMQI1mdfcHskTw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gitlab.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gitlab.labs.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gitlab.labs.nic.cz. IN NS
+SECTION AUTHORITY
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gitlab.labs.nic.cz. IN DS
+SECTION AUTHORITY
+labs.nic.cz. 1800 IN RRSIG SOA 13 3 1800 20180809143632 20180726130632 5070 labs.nic.cz. 3ZHmg1c9QRZSwroHmnLMYkJsxl2OiaS9 jPsfDZ2Ckm7MiQXUS4lXqXf+sfqMhcyP gpHwqhckCJOemCyaV/thfw==
+labs.nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532615793 10800 3600 1209600 7200
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN NSEC3 1 0 10 31ae62a0971eb1e7 pts6cg332bg2eqir8ga7efdju4elnad0 A AAAA SSHFP RRSIG
+pqats6gslj1en2mqjg1nok27ljrn62r3.labs.nic.cz. 7200 IN RRSIG NSEC3 13 4 7200 20180803103542 20180720090542 5070 labs.nic.cz. GK/DcFwOUvYfq02jwezQWLZhTSH1xSfl 8o1v0bi+7Vy40W70tra5ZvO6+UlQxnNN j5s6Fw5eenYl5qa/AmsNow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gitlab.labs.nic.cz. IN AAAA
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN AAAA 2001:1488:ac15:ff90::133
+gitlab.labs.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. MkeWa5P2vNXqAxc1B7u8OEdbtadhLbsY Yy8IRlOcb6y2pn9xyjFyplyDqDMskX/6 J9kILbyTQCvxv2dOZ9prDQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN A
+SECTION AUTHORITY
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN NS
+SECTION AUTHORITY
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN DS
+SECTION AUTHORITY
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN A
+SECTION ANSWER
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN NS
+SECTION AUTHORITY
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN DS
+SECTION AUTHORITY
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN AAAA
+SECTION ANSWER
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN A
+SECTION ANSWER
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN NS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN DS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN AAAA
+SECTION ANSWER
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN A
+SECTION ANSWER
+c.ns.nic.cz. 1800 IN A 194.0.14.1
+c.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809230245 20180727064002 33494 nic.cz. vlIESyKHWExpovMlpGstO7X8Qk1YnJYc w8i6u28JjABo/2qa20s3wFXVgenziyEn 3VTsenqk6TTTi8RutaSmhA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN NS
+SECTION AUTHORITY
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN DS
+SECTION AUTHORITY
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN AAAA
+SECTION ANSWER
+c.ns.nic.cz. 1800 IN AAAA 2001:678:11::1
+c.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809162728 20180727064002 33494 nic.cz. QRpoOGOlRV5YZkfr8rvOdGVZDqaFY4hV WsjpEl2cB1A9Rkw9/aX2toXhBoHTD7SX djgg2xiJzfNqtbBZNcpCrw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN A
+SECTION ANSWER
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN NS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN DS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN AAAA
+SECTION ANSWER
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 13 LSpU2wluEwbQLak1XGlg3KEYygKfIiAu Q8iJxgDDSKuPLIA/BIn40LC1nPzfLwoa zmL7sPJRetzjxwtErBLCmw==
+cz. 18000 IN DNSKEY 257 3 13 nqzH7xP1QU5UOVy/VvxFSlrB/XgX9JDJ zj51PzIj35TXjZTyalTlAT/f7PAfaSD5 mEG1N8Vk9NmI2nxgQqhzDQ==
+cz. 18000 IN RRSIG DNSKEY 13 1 18000 20180803000000 20180720000000 20237 cz. 2KI6brDc06P9gKXv+omp0NDfgxwMa2DD NnMNf7sE97/vGyCVdu0FkA3NdtpUs3UC RwD3Nb5+jh7O45sLwyu6yw==
+cz. 18000 IN RRSIG DNSKEY 13 1 18000 20180808205901 20180727070544 62295 cz. ICIV0ZsxkXXW4GBBHszAaNu09H00KyVB MNm6/DZOBzz/hwnkM9XUYVboyEwrXoSC FfMdDZlHNmrhpseHnkKjYg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+labs.nic.cz. IN NS
+SECTION ANSWER
+labs.nic.cz. 1800 IN NS a.ns.nic.cz.
+labs.nic.cz. 1800 IN NS b.ns.nic.cz.
+labs.nic.cz. 1800 IN NS d.ns.nic.cz.
+labs.nic.cz. 1800 IN RRSIG NS 13 3 1800 20180808225840 20180725212840 5070 labs.nic.cz. 4jhEp7GYmfxSSYschJjwKX8W/m03rDut 926G5kUJNNhaZLxTz4ORJ6IEMUz9OS6m 8tijL+7grvRjTk7bY6XQkQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN NS
+SECTION ANSWER
+knot-resolver.cz. 1800 IN NS a.ns.nic.cz.
+knot-resolver.cz. 1800 IN NS b.ns.nic.cz.
+knot-resolver.cz. 1800 IN NS d.ns.nic.cz.
+knot-resolver.cz. 1800 IN RRSIG NS 13 2 1800 20180808033000 20180725020000 34376 knot-resolver.cz. R/b3f4usP/+xCuNPKdTmG1twtSrvTOeM s9xyUn9538B2PPEhV0SHdnuzDMcgFgbw AmnDJMLqEMNce2Io76txDA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN NS
+SECTION ANSWER
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 3600 IN NS a.ns.nic.cz.
+cz. 3600 IN NS b.ns.nic.cz.
+cz. 3600 IN NS c.ns.nic.cz.
+cz. 3600 IN NS d.ns.nic.cz.
+cz. 3600 IN RRSIG NS 13 1 3600 20180806013233 20180724063548 62295 cz. NYwbiceGXv+yKrhwwMPUO5WihpVt4nip dQpjpbVxJfUp4s+j5lOHsxcbCm4EEaBx x1+UXCK6Gnw9TCnaZaOiBQ==
+SECTION ADDITIONAL
+a.ns.nic.cz. 3600 IN A 194.0.12.1
+a.ns.nic.cz. 3600 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 3600 IN A 194.0.13.1
+b.ns.nic.cz. 3600 IN AAAA 2001:678:10::1
+d.ns.nic.cz. 3600 IN A 193.29.206.1
+d.ns.nic.cz. 3600 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+RANGE_END
+
+; fill in cache with negative proofs
+
+; name exists but RRtype NULL does not
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+knot-resolver.cz. IN NULL
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags question rcode
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN NULL
+ENTRY_END
+
+; name does not exist
+; NSEC3 interval ei8u933svpm4qdfn713b66buji430uc7..rgofdsarih9kv8kcht41osd09tkl8o7v
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question
+REPLY QR RD RA NXDOMAIN
+SECTION QUESTION
+nonexistent1123.knot-resolver.cz. IN A
+ENTRY_END
+
+; name does not exist BUT wildcard exists
+; NSEC3 interval 4o5ekull1peq8leuf98l9iudrraqmqs4..61q3lko2dr2vnmncn1sh2vdiv449lmg3
+STEP 31 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN A
+ENTRY_END
+
+STEP 32 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+nonexistent7.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+;gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+nonexistent7.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+ENTRY_END
+
+
+; check that other negative answers are generated from cache
+; (authoritative servers do not respond anymore)
+
+; name exists but RRtype TYPE65534 does not
+STEP 1010 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+knot-resolver.cz. IN TYPE65534
+ENTRY_END
+
+STEP 1011 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+knot-resolver.cz. IN TYPE65534
+ENTRY_END
+
+
+; second name which does not exist - must be synthesized because it is in the same
+; NSEC3 interval ei8u933svpm4qdfn713b66buji430uc7..rgofdsarih9kv8kcht41osd09tkl8o7v
+STEP 1020 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+nonexistent2.knot-resolver.cz. IN A
+ENTRY_END
+
+STEP 1021 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question
+REPLY QR RD RA AD NXDOMAIN
+SECTION QUESTION
+nonexistent2.knot-resolver.cz. IN A
+ENTRY_END
+
+; deeper names from the same
+; NSEC3 interval ei8u933svpm4qdfn713b66buji430uc7..rgofdsarih9kv8kcht41osd09tkl8o7v
+STEP 1022 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deep.nonexistent5.knot-resolver.cz. IN A
+ENTRY_END
+
+STEP 1023 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question authority
+REPLY QR RD RA DO AD NXDOMAIN
+SECTION QUESTION
+deep.nonexistent5.knot-resolver.cz. IN A
+SECTION AUTHORITY
+knot-resolver.cz. IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+knot-resolver.cz. IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mhyueV6+fJI1V5N3dEoczePO5y BZiffk91Xi2d4aYHRf2DLyfEX0HDVA==
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 1800 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux2/X8SwY2PmrcK/ff6wmFejIr GUHvrG1UNS9icqQqTV3swNymGz4Dbw==
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. IN NSEC3 1 0 10 F49E445B0B4AD67F EI8U933SVPM4QDFN713B66BUJI430UC7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x/H4aDF24oVFrRn2XTNNghu2O zmcVJV0EQlNIHd8aXfdQwLEz4FUAhw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. IN NSEC3 1 0 10 F49E445B0B4AD67F RGOFDSARIH9KV8KCHT41OSD09TKL8O7V NS DS RRSIG
+ENTRY_END
+
+STEP 1024 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deeper.deep.nonexistent5.knot-resolver.cz. IN A
+ENTRY_END
+
+STEP 1025 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question authority
+REPLY QR RD RA DO AD NXDOMAIN
+SECTION QUESTION
+deeper.deep.nonexistent5.knot-resolver.cz. IN A
+SECTION AUTHORITY
+knot-resolver.cz. IN SOA knot-s-01.nic.cz. hostmaster.nic.cz. 2018042353 10800 3600 1209600 7200
+knot-resolver.cz. IN RRSIG SOA 13 2 1800 20180809085235 20180726072235 34376 knot-resolver.cz. Yvpm+c/R4Y/Kj1a2Bz3JQBu+5admt4mhyueV6+fJI1V5N3dEoczePO5y BZiffk91Xi2d4aYHRf2DLyfEX0HDVA==
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. 1800 IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. KjH6+xM1sFW05x4sND+cIr2KTttyKiux2/X8SwY2PmrcK/ff6wmFejIr GUHvrG1UNS9icqQqTV3swNymGz4Dbw==
+0b1klvkf05j25j32u97kue78u2ejhm0s.knot-resolver.cz. IN NSEC3 1 0 10 F49E445B0B4AD67F EI8U933SVPM4QDFN713B66BUJI430UC7 A NS SOA MX AAAA RRSIG DNSKEY NSEC3PARAM CDS CDNSKEY
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. IN RRSIG NSEC3 13 3 7200 20180809085235 20180726072235 34376 knot-resolver.cz. 6wMAvVzU6xeyDZV1bDa/Av4n9k0kRB/x/H4aDF24oVFrRn2XTNNghu2O zmcVJV0EQlNIHd8aXfdQwLEz4FUAhw==
+ei8u933svpm4qdfn713b66buji430uc7.knot-resolver.cz. IN NSEC3 1 0 10 F49E445B0B4AD67F RGOFDSARIH9KV8KCHT41OSD09TKL8O7V NS DS RRSIG
+ENTRY_END
+
+
+; name does not exist BUT wildcard exists - must be synthesized from the same
+; NSEC3 interval 4o5ekull1peq8leuf98l9iudrraqmqs4..61q3lko2dr2vnmncn1sh2vdiv449lmg3
+STEP 1031 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+nonexistent899.labs.nic.cz. IN A
+ENTRY_END
+
+STEP 1032 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+nonexistent899.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+nonexistent899.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+nonexistent899.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+ENTRY_END
+
+; wildcard synthesis for deeper names from the same
+; NSEC3 interval 4o5ekull1peq8leuf98l9iudrraqmqs4..61q3lko2dr2vnmncn1sh2vdiv449lmg3
+STEP 1033 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deep.nonexistent47.labs.nic.cz. IN A
+ENTRY_END
+
+STEP 1034 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+deep.nonexistent47.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+deep.nonexistent47.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+deep.nonexistent47.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+ENTRY_END
+
+STEP 1035 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deeper.deep.nonexistent73.labs.nic.cz. IN A
+ENTRY_END
+
+STEP 1036 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+deeper.deep.nonexistent73.labs.nic.cz. IN A
+SECTION ANSWER
+gitlab.labs.nic.cz. 1800 IN A 217.31.192.133
+gitlab.labs.nic.cz. 1800 IN RRSIG A 13 4 1800 20180808062633 20180725045633 5070 labs.nic.cz. vIOy8SJPTE1CdRk71JAo+MxzbVhDvnh/ NQfkgdY5KOW081Jhrz74HJsAUsfJk4dD bTKY1DFVoUYYX49o0R7GGA==
+deeper.deep.nonexistent73.labs.nic.cz. 30 IN CNAME gitlab.labs.nic.cz.
+deeper.deep.nonexistent73.labs.nic.cz. 30 IN RRSIG CNAME 13 3 30 20180808062633 20180725045633 5070 labs.nic.cz. UPdL0dAWPX68OawblUE27nbM3drLu3yE 4jTQpefbhjTTmjs3I1dJ9IXgO6AEXHFx eWnlfK2r/45KZF7v/1NN6A==
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec3_wildcard_no_data_response.rpl b/tests/deckard/sets/resolver/nsec3_wildcard_no_data_response.rpl
new file mode 100644
index 0000000..45d7bac
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec3_wildcard_no_data_response.rpl
@@ -0,0 +1,110 @@
+; config options
+;server:
+ stub-addr: 193.0.14.129
+ trust-anchor: ". 3600 IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-timestamp: "1450794800"
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC wildcard answer response.
+
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 15182 IN DNSKEY 256 3 8 AwEAAbr/RV0stAWYbmKOldjShp4AOQGOyY3ATI1NUpP4X1qBs6lsXpc+1ABgv6zkg02IktjZrHnmD0HsElu3wqXMrT5KL1W7Spmg0Pou9WZ8QttdTKXwrVXrASsaGI2z/pLBSnK8EdzqUrTVxY4TEGZtxV519isM06CCMihxTn5cfFBF
+. 15182 IN DNSKEY 256 3 8 AwEAAbgVvZmZibtBpha3AIykU0OY4gcCXTcskYJUxGsdmV/awfmKcHlSrjNMioSgy4sByj+HpcbsyrZVGPp+JBXzYwwuEF/6w1k7vKYTK6vMSqgVcgooNkfb5MaRF2y7MEpPxfStnfwu8knE24ExB0hYE1URxJ9CqB3zMSl/vicXYXXl
+. 15182 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 15182 IN RRSIG DNSKEY 8 0 172800 20160105235959 20151221000000 19036 . BfU0HEA1JUuZA0+4EXsFhwW7iH03vwPD+u9DtjF5mmeITV7kkJyg8IguzAlPsLDNFfe+hudz+NZafgaGq1bMUT3Ax4/qlH5qxVBfJi/n8fWeF4hEcyGtIsDVBsTUwqez7ZXVVoUffHcLAE+xuXaKeqdiz9bU70vsCMNu+DmIWXi8G1AFV/fjqtN1UtxF91R2XajWvSFm2tfOnGUJ6iS4tvxWe2Qi133CNMP1P3zd7oWiFg2bTwt2OjlhGH3CAg2WvDt72t/9hGNDy/dk2ukOZv4V1lsv2X4cW5NVN6ZmVf/UMyTdD/YGumHkTMbGKHHbTyBlJjYdBf0yXBTXD9Hulg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20160101050000 20151222040000 62530 . RW66z4Mh1Z97WHCw9exQB24SvNQ9nFC6zYZ+Ta6MuiLXLQnrn5OcEeZia0cotsa1W/7N55a/JzS0PCOBuQoGEZyRhWva9Cdl6PcKzAskD4UEWLeWnBDZfSL21a+fxl/aPDslfxhG78ZB7nTj0PRdqE6HK97DHwDyF5HNNzq7r4E=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+qwr.cz. IN A
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20160101050000 20151222040000 62530 . RW66z4Mh1Z97WHCw9exQB24SvNQ9nFC6zYZ+Ta6MuiLXLQnrn5OcEeZia0cotsa1W/7N55a/JzS0PCOBuQoGEZyRhWva9Cdl6PcKzAskD4UEWLeWnBDZfSL21a+fxl/aPDslfxhG78ZB7nTj0PRdqE6HK97DHwDyF5HNNzq7r4E=
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAdptcFzJsHzR4xeGi3Cyq5FG9N0S3Ch9qrSIa3rQHsKwsdgfNZ5UX5v91AROH9lZo60d/fIxtuDefnID+uIJDAsiwIAzWFzJbmCBPJ24jqhCJ03N6ejrIM1qvvwjnoh655wh2LfaejnDMdjPth0L+q+vRoJL0cjv0dhdDs532ch/
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5HeRVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYhT2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPjOZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJxES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20151230000000 20151216000000 54576 cz. d1tJTXuUjtEa5JO07K7clczFvUgSNHHO0o6LT8HL2i0a2K6P6A9g9pWywarBNYpRJrwlq243Pub5cU2Tr+MNwzyYgORVO7gFPTTLDZlRAWmE3ujGNrzsVcalQHBQzwji5JN20ujnps1jj7Xy17pHJCLbnNEZP6HkQR4b7GkSI5iAFYSZ8vYzWup5Ei57EIlpPRVJtB6K6Sa4vPaRhXQgwFZBtcmgfBLMI7YQrMpjKMftpHsabzB4gjTB8TLofJR8hPWCR2x7+X9HMtj9O6U93WyIYCC41hCCLON8yNIxhp8tjKN/ZxTy5JycElxMHvGaxFl8kuVBAySdVRsxx+Ffwg==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20160105041723 20151222140958 50870 cz. sr+1HKa9BqRSNLDF8hpcKL9MVm6vR3WMeEpOokYK4ij2wCGcv8fzdFJg6Wc7dSKhs5Jt3+toq4ypFtkcIjN7UTgokWD87Du3oKeZUsrISCSpoMpz3Q5ozpLSU/aqmuXrAFqMKNAXQ6uEf6vfJoHuESmouH7r9muNv9AetYCG0S4=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+qwr.cz. IN A
+SECTION AUTHORITY
+cz. 900 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1450796998 900 300 604800 900
+e07bsbm6cddl06sj99fmff7td56savbn.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 E07G4NAI26HIBP3R8NEJGTUVV1JPT11N NS SOA RRSIG DNSKEY NSEC3PARAM
+9tjfc6416bffr8mbna7d52ke1hpes293.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 9TJLDJIGE8VDG8MMHORIG0DCLM4NA5F5 NS
+4qk800tsde3b9rihkgedb581mv504cha.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 4QK94GS2KQ6T0C5HTJROTGVJMBQK7RFC NS
+cz. 18000 IN RRSIG SOA 10 1 18000 20160104010623 20151222140958 50870 cz. RhhKmE9ZAoqiAFoSH6ZFSomqVFmHF99xKgPGxf+3QSLrohPOYiuLL/CVEEjUxiITDd7g3jfRN/ZzHNOm6cU0kLqmSf4kaOfBE+bJ/5w6NBAARvWsirk3M//IVJ7G603Dizsykt9fkEaLpstAtJXdhLq1pUqAEXYmyEOKlgYOe+A=
+e07bsbm6cddl06sj99fmff7td56savbn.cz. 900 IN RRSIG NSEC3 10 2 900 20160104070356 20151222070953 50870 cz. yzP9bcqgS1KoHJCY7qi/NEvtkUAKTN70dbMJKZAWAmNJX9RYsGEV+VNg2D8ifZ2jxxcMXbO0kPjFiJXNg7Jz1ekmpEBC+wYMVvgVhtVhKzAIfMIweiSwiOqKFTmyyb0Tk/WukrYAqDFaeQ7nTJzl+kLU8sH72yOiYyWUJDDQHpo=
+9tjfc6416bffr8mbna7d52ke1hpes293.cz. 900 IN RRSIG NSEC3 10 2 900 20151230104714 20151216200951 50870 cz. n4hQwoX3aOVNNEei/46RCkR+J4TOwCq9Pe+ikEIsXBrj+xOOf0bAd/bthUq2wBX05e2SVem6YnzW9UyaRqwOS0pRvtypAdcmgrTXtaKVI+0+EiwaZHPF1fLi3+p9kxrGkJ5wkyKiFUrfa4zstEoQMnMxTU4eQUBDYgN3LlrEQcc=
+4qk800tsde3b9rihkgedb581mv504cha.cz. 900 IN RRSIG NSEC3 10 2 900 20151230070920 20151217171007 50870 cz. ZR76bT+u5t5tJ1qoYhS8Ak6OgHRfY9T0FjQrEuRd9U7ROTytxGDupH+nZZfnMyTC48ELrZRCHvxwFYskbI2XtBWyE3Vaid43ntq9b+eAvjqYYXJu5V1wC8+K56LlmStdCL/U4OEliwfPHuUnS/AcX0hci2XSslGWRfJzTVLjQcc=
+ENTRY_END
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+qwr.cz. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NXDOMAIN
+SECTION QUESTION
+qwr.cz. IN A
+SECTION AUTHORITY
+cz. 900 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1450796998 900 300 604800 900
+e07bsbm6cddl06sj99fmff7td56savbn.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 E07G4NAI26HIBP3R8NEJGTUVV1JPT11N NS SOA RRSIG DNSKEY NSEC3PARAM
+9tjfc6416bffr8mbna7d52ke1hpes293.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 9TJLDJIGE8VDG8MMHORIG0DCLM4NA5F5 NS
+4qk800tsde3b9rihkgedb581mv504cha.cz. 900 IN NSEC3 1 0 10 FC6C06CB130A4809 4QK94GS2KQ6T0C5HTJROTGVJMBQK7RFC NS
+cz. 18000 IN RRSIG SOA 10 1 18000 20160104010623 20151222140958 50870 cz. RhhKmE9ZAoqiAFoSH6ZFSomqVFmHF99xKgPGxf+3QSLrohPOYiuLL/CVEEjUxiITDd7g3jfRN/ZzHNOm6cU0kLqmSf4kaOfBE+bJ/5w6NBAARvWsirk3M//IVJ7G603Dizsykt9fkEaLpstAtJXdhLq1pUqAEXYmyEOKlgYOe+A=
+e07bsbm6cddl06sj99fmff7td56savbn.cz. 900 IN RRSIG NSEC3 10 2 900 20160104070356 20151222070953 50870 cz. yzP9bcqgS1KoHJCY7qi/NEvtkUAKTN70dbMJKZAWAmNJX9RYsGEV+VNg2D8ifZ2jxxcMXbO0kPjFiJXNg7Jz1ekmpEBC+wYMVvgVhtVhKzAIfMIweiSwiOqKFTmyyb0Tk/WukrYAqDFaeQ7nTJzl+kLU8sH72yOiYyWUJDDQHpo=
+9tjfc6416bffr8mbna7d52ke1hpes293.cz. 900 IN RRSIG NSEC3 10 2 900 20151230104714 20151216200951 50870 cz. n4hQwoX3aOVNNEei/46RCkR+J4TOwCq9Pe+ikEIsXBrj+xOOf0bAd/bthUq2wBX05e2SVem6YnzW9UyaRqwOS0pRvtypAdcmgrTXtaKVI+0+EiwaZHPF1fLi3+p9kxrGkJ5wkyKiFUrfa4zstEoQMnMxTU4eQUBDYgN3LlrEQcc=
+4qk800tsde3b9rihkgedb581mv504cha.cz. 900 IN RRSIG NSEC3 10 2 900 20151230070920 20151217171007 50870 cz. ZR76bT+u5t5tJ1qoYhS8Ak6OgHRfY9T0FjQrEuRd9U7ROTytxGDupH+nZZfnMyTC48ELrZRCHvxwFYskbI2XtBWyE3Vaid43ntq9b+eAvjqYYXJu5V1wC8+K56LlmStdCL/U4OEliwfPHuUnS/AcX0hci2XSslGWRfJzTVLjQcc=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_aggr_cache.rpl b/tests/deckard/sets/resolver/nsec_aggr_cache.rpl
new file mode 100644
index 0000000..6230de7
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_aggr_cache.rpl
@@ -0,0 +1,6355 @@
+ trust-anchor: ". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ trust-anchor: ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D"
+ val-override-date: 20180727184403
+ stub-addr: 2001:7fe::53
+CONFIG_END
+
+SCENARIO_BEGIN qlist
+
+; Scope ".
+
+; Server names:
+; f.root-servers.net.
+; a.root-servers.net.
+; j.root-servers.net.
+; e.root-servers.net.
+; i.root-servers.net.
+; d.root-servers.net.
+; m.root-servers.net.
+; h.root-servers.net.
+; c.root-servers.net.
+; l.root-servers.net.
+; g.root-servers.net.
+; b.root-servers.net.
+; k.root-servers.net.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:7fe::53
+ ADDRESS 192.203.230.10
+ ADDRESS 2001:500:2d::d
+ ADDRESS 193.0.14.129
+ ADDRESS 202.12.27.33
+ ADDRESS 192.112.36.4
+ ADDRESS 2001:500:2f::f
+ ADDRESS 198.97.190.53
+ ADDRESS 192.5.5.241
+ ADDRESS 199.7.91.13
+ ADDRESS 199.9.14.201
+ ADDRESS 192.58.128.30
+ ADDRESS 2001:500:a8::e
+ ADDRESS 198.41.0.4
+ ADDRESS 2001:500:9f::42
+ ADDRESS 2001:dc3::35
+ ADDRESS 192.33.4.12
+ ADDRESS 199.7.83.42
+ ADDRESS 2001:500:1::53
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 2001:7fd::1
+ ADDRESS 2001:500:2::c
+ ADDRESS 2001:500:200::b
+ ADDRESS 2001:503:c27::2:30
+ ADDRESS 2001:500:12::d0d
+ ADDRESS 192.36.148.17
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN DS
+SECTION AUTHORITY
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+hm. IN DNSKEY
+SECTION AUTHORITY
+hm. 172800 IN NS ns1.registry.hm.
+hm. 172800 IN NS ns2.registry.hm.
+hm. 172800 IN NS ns3.registry.hm.
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+SECTION ADDITIONAL
+ns1.registry.hm. 172800 IN A 208.70.79.25
+ns2.registry.hm. 172800 IN A 208.70.79.24
+ns3.registry.hm. 172800 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+hm. IN A
+SECTION AUTHORITY
+hm. 172800 IN NS ns1.registry.hm.
+hm. 172800 IN NS ns2.registry.hm.
+hm. 172800 IN NS ns3.registry.hm.
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+SECTION ADDITIONAL
+ns1.registry.hm. 172800 IN A 208.70.79.25
+ns2.registry.hm. 172800 IN A 208.70.79.24
+ns3.registry.hm. 172800 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+hm. IN SOA
+SECTION AUTHORITY
+hm. 172800 IN NS ns1.registry.hm.
+hm. 172800 IN NS ns2.registry.hm.
+hm. 172800 IN NS ns3.registry.hm.
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+SECTION ADDITIONAL
+ns1.registry.hm. 172800 IN A 208.70.79.25
+ns2.registry.hm. 172800 IN A 208.70.79.24
+ns3.registry.hm. 172800 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+sk2. IN DS
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+sk2. IN DNSKEY
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+sk2. IN NS
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+sk2. IN A
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NXDOMAIN
+SECTION QUESTION
+sk2. IN AAAA
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN TYPE65535
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN A
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN DNSKEY
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN DS
+SECTION ANSWER
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN A
+SECTION ANSWER
+f.root-servers.net. 3600000 IN A 192.5.5.241
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.root-servers.net. IN AAAA
+SECTION ANSWER
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN A
+SECTION ANSWER
+a.root-servers.net. 3600000 IN A 198.41.0.4
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.root-servers.net. IN AAAA
+SECTION ANSWER
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN A
+SECTION ANSWER
+j.root-servers.net. 3600000 IN A 192.58.128.30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.root-servers.net. IN AAAA
+SECTION ANSWER
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN A
+SECTION ANSWER
+e.root-servers.net. 3600000 IN A 192.203.230.10
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.root-servers.net. IN AAAA
+SECTION ANSWER
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN A
+SECTION ANSWER
+i.root-servers.net. 3600000 IN A 192.36.148.17
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.root-servers.net. IN AAAA
+SECTION ANSWER
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN A
+SECTION ANSWER
+d.root-servers.net. 3600000 IN A 199.7.91.13
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.root-servers.net. IN AAAA
+SECTION ANSWER
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN A
+SECTION ANSWER
+m.root-servers.net. 3600000 IN A 202.12.27.33
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.root-servers.net. IN AAAA
+SECTION ANSWER
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN A
+SECTION ANSWER
+h.root-servers.net. 3600000 IN A 198.97.190.53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.root-servers.net. IN AAAA
+SECTION ANSWER
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN A
+SECTION ANSWER
+c.root-servers.net. 3600000 IN A 192.33.4.12
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.root-servers.net. IN AAAA
+SECTION ANSWER
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN A
+SECTION ANSWER
+l.root-servers.net. 3600000 IN A 199.7.83.42
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.root-servers.net. IN AAAA
+SECTION ANSWER
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN A
+SECTION ANSWER
+g.root-servers.net. 3600000 IN A 192.112.36.4
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.root-servers.net. IN AAAA
+SECTION ANSWER
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN A
+SECTION ANSWER
+b.root-servers.net. 3600000 IN A 199.9.14.201
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.root-servers.net. IN AAAA
+SECTION ANSWER
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN NS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN DS
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+SECTION AUTHORITY
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN DNSKEY
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN DS
+SECTION ANSWER
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20180809050000 20180727040000 41656 . iPYXlPdWqSGLIBjkBHYPCkA7LpjtEq2l 3IxdgesYUMxKFrYsdxgySnyBHQ9YzAQc bl3fCtLvlx6msHw/cCqMRHhCCjDnqTa/ NqBRtr1hr8ZbPrb3pZf+1hjX+9eohhHQ OiyAiP1hVaEIBIiSt7W8aPYvjZRogQAy YPApw3dwsfTFWzTnd+EDZsuZeMz0k74x BEJmC/tzTjnzvNK8fU95Mv+pKLm09Hda eXP2i+zrAwguTZBUt30dnsrYA7dxkQcP s+SdFhfPlGYS2EWOoJsik3DGRHQpTHI5 N9sjytXS7IqWetnaNJyFL0KSpG1YdEyB JvYqCrUI6YLDopcgUSRjrA==
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAfaifSqh+9ItxYRCwuiY0FY2NkaE wd/zmyVvakixDgTOkgG/PUzlEauAiKzl xGwezjqbKFPSwrY3qHmbbsSTY6G8hZtn a8k26eCwy59Chh573cu8qtBkmUIXMYG3 fSdlUReP+uhBWBfKI2aGwhRmQYR0zSmg 7PGOde34c/rOItK1ebJhjTAJ6TmnON7q Mfk/lKvH4qOvYtzstLhr7Pn9ZOVLx/WU KQpU/nEyFyTduRbz1nZqkp6yMuHwWVsA BK8lUYXSaUrDAsuMSldhafmR/A15BxNh v9M7mzJj7UH2RVME9JbYinBEzWwW9Gpn Y+ZmBWgZiRVTaDuemCTJ5ZJWLRs=
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29 euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v 58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8 g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37 NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/E fucp2gaDX6RS6CXpoY68LsvPVjR0ZSwz z1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgu l0sGIcGOYl7OyQdXfZ57relSQageu+ip AdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1 dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 172800 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexT BAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq 7HrxRixHlFlExOLAJr5emLvN7SWXgnLh 4+B5xQlNVz8Og8kvArMtNROxVQuCaSnI DdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLr jyBxWezF0jLHwVN8efS3rCj/EWgvIWgb 9tarpVUDK/b58Da+sqqls3eNbuv7pr+e oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTId sIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6 +cn8HFRm+2hM8AnXGXws9555KrUB5qih ylGa8subX2Nn6UwNR1AkUTV74bU=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20180811000000 20180721000000 19036 . U2thj3DQzTGRF8m2ZytqANs9YF9PYb1B QC5bDHi+d7apJve5u3Ik1cCeYg9AlW2v 2vstMSUtTR0eI2mzBeZ8aBHLwPylyDhS jbe6lwxnaoZhncO4oM9bJTUha1ovCXPO oZm5dKhfI6FradAaitRfMaC7s/+XZ/Dh nlLQNe08F0qepkG52RsUJZEyiQkkOK5a /hNkV5gyKdMecjtJ7eiR1w68vWwP6iGp ohuLDlapbEniJXHhEysUtRJbE3EFYgwG EGeKwEQC3tDCb8ABYnbrkMg/OqhGP1cX aYfZwhEIUOvsplTdXU1tsVbPjGtbVBjy 4aKLY+pjsvWuT2dzMac18A==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+root-servers.net. 3600000 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018070900 14400 7200 1209600 3600000
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION ANSWER
+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.
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 199.9.14.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:200::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+hm. IN NS
+SECTION AUTHORITY
+hm. 172800 IN NS ns1.registry.hm.
+hm. 172800 IN NS ns2.registry.hm.
+hm. 172800 IN NS ns3.registry.hm.
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+SECTION ADDITIONAL
+ns1.registry.hm. 172800 IN A 208.70.79.25
+ns2.registry.hm. 172800 IN A 208.70.79.24
+ns3.registry.hm. 172800 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 20237 13 2 cff0f3ecdbc529c1f0031ba1840bfb835853b9209ed1e508fff48451d7b778e2
+cz. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . BkGaXhVOBlSGZkRo6m6xYxeXSEIqVZKa 7wHxKdNn+6F/DDJoD0aEgEg6H7yhjKs2 tt4uyp9l8/L8r/mWoFPjYsSsQgc2hpxJ Ql2wTDRNaRpQ+spbiefndoyr1/5YBMFv mItzzMSg93ekx3gebfVqMpe0fpvs7NjA +33vGJO3e3ficaYDIf9HY/npnHgjOtpE wiFPYmLTb+zLlIHd4hhXOXg/Kv5CNGvN aBdBE2s2GXJbYI3Zd5FDHxhZ+qLuhL5J qjtrGDokRgM0Jk8dDroIk0yQHfNU022s ZAhIeEZJhwiuh4bNuJJCKoB+a5UIiNx+ rCUU2ntIsqLbxbnpKLamow==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862b27f5f516ebe19680444d4ce5e762981931842c465f00236401d8bd973ee
+net. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . 0Uvgipa8bRqTwVpcmpPngKx1brdQ0rIB H8QbEl4KyFE+CI8nB3jNk9rHF15WYQm1 Xov0E1uCMvYfv1w96LvC+N4w7hPsCpgG sK3+pT90vhsLRqoP7dws5MU0fsXfpmGP X3utMPZGwk7JDSUhQAbIWiCD81JAi05y I5xbaeveUSSvMbyXJKyzsbHWVP6997BX 4Las1O8H/1Eds743+Cfc5hPULqH5ZUWB EPIKN+MZQM9DjmgUUJSlktWQwK42BeXU 9O4DUGP2oxwbQ8uw4PlRhhxYp3UCP9b5 B2d4fqlaalhiPY86u7TkzEbEJJlW2tf+ 3bGAiX9a9icfbsrdS9hsuw==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION AUTHORITY
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766
+com. 86400 IN RRSIG DS 8 1 86400 20180809050000 20180727040000 41656 . eGyv2a7tzQdljtzCX0sF211why7uD3PI c1rSQxJKfd0AbhZKvcl6jQW+rRHHQHui ljjsXG1fp35P7P02269xj5Hbu2eNV5vr jRdXTzAQ+waZZHBn87mNOiURZwh0sG44 7XQYdpkC656acDJ8TP6Szox1gCkBo6eM /SquL8Jmtl6IQSszxT71auHUytVRL8NR bv57T/PXQ9fSAjq5+lgZ7ZVvCs6sVjRl KvtaGLixnb7pR9C08jLWA/j2jAG0RBV2 pOz7BVDm7V34FIjJ9yd8BbSKeEJFcQWl m9x26nQREBmpKp8AmUiUoxfyuZvMxu// EGVxIEh71OHxT46+AhCipg==
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+RANGE_END
+
+; Scope "com.
+
+; Server names:
+; a.gtld-servers.net.
+; j.gtld-servers.net.
+; e.gtld-servers.net.
+; i.gtld-servers.net.
+; d.gtld-servers.net.
+; m.gtld-servers.net.
+; h.gtld-servers.net.
+; c.gtld-servers.net.
+; l.gtld-servers.net.
+; g.gtld-servers.net.
+; b.gtld-servers.net.
+; k.gtld-servers.net.
+; f.gtld-servers.net.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:500:d937::30
+ ADDRESS 2001:503:eea3::30
+ ADDRESS 192.26.92.30
+ ADDRESS 192.33.14.30
+ ADDRESS 192.54.112.30
+ ADDRESS 2001:503:d414::30
+ ADDRESS 2001:503:231d::2:30
+ ADDRESS 192.42.93.30
+ ADDRESS 2001:502:7094::30
+ ADDRESS 192.43.172.30
+ ADDRESS 192.41.162.30
+ ADDRESS 192.12.94.30
+ ADDRESS 192.31.80.30
+ ADDRESS 192.35.51.30
+ ADDRESS 192.48.79.30
+ ADDRESS 2001:501:b1f9::30
+ ADDRESS 192.55.83.30
+ ADDRESS 2001:503:a83e::2:30
+ ADDRESS 192.5.6.30
+ ADDRESS 2001:503:83eb::30
+ ADDRESS 192.52.178.30
+ ADDRESS 2001:502:8cc::30
+ ADDRESS 2001:503:39c1::30
+ ADDRESS 2001:500:856e::30
+ ADDRESS 2001:502:1ca1::30
+ ADDRESS 2001:503:d2d::30
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN A
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DNSKEY
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root-servers.net. IN DS
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+net. 900 IN RRSIG SOA 8 1 900 20180803164343 20180727153343 7934 net. saMkeHnnZmFjMmrWJIcMIWfKP8XuvHyF 9S27EbEZJOze88EKxPoMirhwWptR9wge NZraLn79mYdFOYaxEWG3BmxablU7/0e4 4UUivo2svI8/0olxwD2jb7/VtF9e7FCv RpUuMeQZMarVejw343R4GcKPDMbpeEyh 0SbIk3mrhng=
+net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532709823 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN A
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DS
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+net. 900 IN RRSIG SOA 8 1 900 20180803164328 20180727153328 7934 net. ZWXeaMxei6TLZhNkc4cXpocES6HhF1gb COvQ/kMTDUs5xK/d9gxxKcKje1hWmbUM 4rx00UkmCD6LrMkBKA0dfNFQVcQ1RAkN TWw21eotUZ0zisthm4LD2vG9fQ9q9X1n MhurnN4hOURgFcaeBzTcK63HXA/iMziH ICsuOHsJxa4=
+net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532709808 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN A
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN DNSKEY
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN DS
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+com. 900 IN RRSIG SOA 8 1 900 20180803164344 20180727153344 46475 com. mBKTxHc1L8vSbi+fiS0UNrRFChdlnFyM 63qD+GwUugwtsu9uNhTA+9SrwhgSdM1O MOwX2B/Erqt7e68Ur+4BfCzD9SuaZVS2 7rfb5wFQeumdHJs4wZyXk/jL9DbjdnHL 5y8b0uGkv8H2YmnWMEVo7pCWQbOphrhz pbNXp+c3mb8=
+com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1532709824 1800 900 604800 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN DNSKEY
+SECTION ANSWER
+net. 86400 IN DNSKEY 256 3 8 AQO6ELLy73I+l1XTVPuW3zfQkw5nublx oY4QgdTVOfUjdv6ooKTMRMgfKb+alpX5 8L5pfhndd+o7hisIwgiH2b6aqjdljzTf dV4XeZ/2CROv1ki/BRWwD61P/w688bpu Bl/u3vsTjvjq6FdVZVf3/afMXtSO1RR7 uaQ7qn8oupY/6w==
+net. 86400 IN DNSKEY 257 3 8 AQOYBnzqWXIEj6mlgXg4LWC0HP2n8eK8 XqgHlmJ/69iuIHsa1TrHDG6TcOra/pye GKwH0nKZhTmXSuUFGh9BCNiwVDuyyb6O BGy2Nte9Kr8NwWg4q+zhSoOf4D+gC9dE zg0yFdwT0DKEvmNPt0K4jbQDS4Yimb+u PKuF6yieWWrPYYCrv8C9KC8JMze2uT6N uWBfsl2fDUoV4l65qMww06D7n+p7Rbdw WkAZ0fA63mXVXBZF6kpDtsYD7SUB9jhh fLQE/r85bvg3FaSs5Wi2BaqN06SzGWI1 DHu7axthIOeHwg00zxlhTpoYCH0ldoQz +S65zWYi/fRJiyLSBb6JZOvn
+net. 86400 IN RRSIG DNSKEY 8 1 86400 20180808153857 20180724153357 35886 net. lmab/pWDgNRz6BN1BFZmkwiZz0qay0rz +46JXwgzI/g8eadEAev1OaIfsply91iM Sn+87NMPDN1Spjr3LKSXQB7+nc8n3yrf h1gxPRsjwuWxvPc3dJwlB4P8NvXTk4B5 vzjSpcfzvb+6YuAoC171yFcIcER1RN5d j3y1NRx1EAnuanMfoHIm+2dcu14a2hKn fB0zc/hm4L/rO/Qm8c3z97d1OffQs0L0 MGCU/kBDm/UyjymSFobMlIcn0bIha7A1 QN753OY+LEOWq0flQgUrKeuXvAe2o46g GebT+8euJahn/HmgmHD/bCNn+GC/KRJJ L1wFQH3x8uqlq9loQMPjwQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN DNSKEY
+SECTION ANSWER
+com. 86400 IN DNSKEY 256 3 8 AQPeabgR6Fgrk5FSLilDYUedwsHA0HH2 2e8+Zp/uvp4aj1dVDAy5C9bkRA+xot3s G1KaT5hvgoE7eNV93F7pBW9rvVE3A/BN vJbLXxKhkAJV5KMFC10NRcdb+xF+sM4X TMPESPrYwTLUEpSFntMIVLAtUzLaBo6Y pTVR20osgGgc3Q==
+com. 86400 IN DNSKEY 257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F 3MyQR0lpBmVcNcsIszxNFxsBfKNW9JYC Yqpik8366LE7VbIcNRzfp2h9OO8HRl+H +E08zauK8k7evWEmu/6od+2boggPoiEf GNyvNPaSI7FOIroDsnw/taggzHRX1Z7S OiOiPWPNIwSUyWOZ79VmcQ1GLkC6NlYv G3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0H XvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9i oVNc0+7ASbqmZN7Z98EGU/Qh2K/BgUe8 Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2 /2HDHjRPJ2aywIpKNnv4oPo/
+com. 86400 IN RRSIG DNSKEY 8 1 86400 20180810182533 20180726182033 30909 com. pytllCSmnIFN69hPKx3IcJSV3ZD+4qoF CXIuN+LXSJpkWmpD4gOWKgAytIBMImbh iUrfLECS2c3TJkjWjthKjL+GpYIHN1Z/ UY2zdSqKr0JqBQjHs456zBsJIrRriQKh e7MEFWV+JLSYAHQi/8+ot3l9GKO9nSK6 zqP+FrMtkPtZbJeNo1muSQ4lrdvYw4/t k0FADV0DK8p8/D/OQEPg2+Mpwx9GjCVN VOlKS5vuGHGAKI0gXlhJoe28i5McJVc5 O/evqbRX37xmfX01F8W4f6lZBt3qVIVq gW9iJAjY5vd4l4m53lTzYKTLeJTFH358 TsJO93q0NpaWL78xLxkVrg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION AUTHORITY
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN NSEC3 1 1 0 - t2ukct9k5i0uhv7b3m3na6jaigdjm0gr NS DS RRSIG
+T2UF21DR03E0BNPB42UQMVUF38P2TA8D.net. 86400 IN RRSIG NSEC3 8 2 86400 20180802052514 20180726041514 7934 net. LDVOVqnK+2HRKN6dUmVP3pP2RE0dCKTQ oE0d2w1AiDAOhn3Ye9Aq0yUjkz+frcUj ZqvTdiC58q0mXpyLUbqWiGmazUVG5qT7 zx5mhp1Leetq1wVJH8KGYLEmTstTCT56 oMbtWugGmZeY2B47rCsCeaWPNdH/b8qb UrwpfdPbhJE=
+root-servers.net. 172800 IN NS a.root-servers.net.
+root-servers.net. 172800 IN NS b.root-servers.net.
+root-servers.net. 172800 IN NS c.root-servers.net.
+root-servers.net. 172800 IN NS d.root-servers.net.
+root-servers.net. 172800 IN NS e.root-servers.net.
+root-servers.net. 172800 IN NS f.root-servers.net.
+root-servers.net. 172800 IN NS g.root-servers.net.
+root-servers.net. 172800 IN NS h.root-servers.net.
+root-servers.net. 172800 IN NS i.root-servers.net.
+root-servers.net. 172800 IN NS j.root-servers.net.
+root-servers.net. 172800 IN NS k.root-servers.net.
+root-servers.net. 172800 IN NS l.root-servers.net.
+root-servers.net. 172800 IN NS m.root-servers.net.
+SECTION ADDITIONAL
+a.root-servers.net. 172800 IN A 198.41.0.4
+a.root-servers.net. 172800 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 172800 IN A 199.9.14.201
+b.root-servers.net. 172800 IN AAAA 2001:500:200::b
+c.root-servers.net. 172800 IN A 192.33.4.12
+c.root-servers.net. 172800 IN AAAA 2001:500:2::c
+d.root-servers.net. 172800 IN A 199.7.91.13
+d.root-servers.net. 172800 IN AAAA 2001:500:2d::d
+e.root-servers.net. 172800 IN A 192.203.230.10
+e.root-servers.net. 172800 IN AAAA 2001:500:a8::e
+f.root-servers.net. 172800 IN A 192.5.5.241
+f.root-servers.net. 172800 IN AAAA 2001:500:2f::f
+g.root-servers.net. 172800 IN A 192.112.36.4
+g.root-servers.net. 172800 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 172800 IN A 198.97.190.53
+h.root-servers.net. 172800 IN AAAA 2001:500:1::53
+i.root-servers.net. 172800 IN A 192.36.148.17
+i.root-servers.net. 172800 IN AAAA 2001:7fe::53
+j.root-servers.net. 172800 IN A 192.58.128.30
+j.root-servers.net. 172800 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 172800 IN A 193.0.14.129
+k.root-servers.net. 172800 IN AAAA 2001:7fd::1
+l.root-servers.net. 172800 IN A 199.7.83.42
+l.root-servers.net. 172800 IN AAAA 2001:500:9f::42
+m.root-servers.net. 172800 IN A 202.12.27.33
+m.root-servers.net. 172800 IN AAAA 2001:dc3::35
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION AUTHORITY
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5qdppotuk27kkp9ligtrb0k1cbvm9cim NS DS RRSIG
+5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20180801102320 20180725091320 7934 net. ZKWDEle0ZQbeLFqJNnGWN9zZNZ4qXpns WEmuTMy1Ou9IRpBl0YU1RQRdjRJ4aFWM 5Kcl/UIOgeN4yD+B8HludqzhxRGDxqZ1 N1ObndmMNLbokcgyIYVnmhoe3doOnedK KRU5F6YcJpEOQ4jcJsjQd9ekQTB9aBP3 j33L4T3A1PM=
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - a1ruuffjkct2q54p78f8ejgj8jbk7i8b NS SOA RRSIG DNSKEY NSEC3PARAM
+A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20180731053505 20180724042505 7934 net. aQ1+tOFuT3esonx3VUVqcQGwUlcby0Wa Rit1P1ikFjowshfV9AUsn/bkka2dFgxC PgDtmMiQ6TzAKiwciFJ5mZitfFZSEoS/ Z3pnsZsvB062GrKNup9+x4SBiRB3HH8T xMMd6sVV9LjOE2iOm4ekIUHieMwJjfnY 7yG7obH6OFI=
+gtld-servers.net. 172800 IN NS av1.nstld.com.
+gtld-servers.net. 172800 IN NS av2.nstld.com.
+gtld-servers.net. 172800 IN NS av3.nstld.com.
+gtld-servers.net. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+nstld.com. IN NS
+SECTION AUTHORITY
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN NSEC3 1 1 0 - 5v13q049b9ittui4fbdtm34dtev47bgj NS DS RRSIG
+5V12UURISSGGLPAS52GE1V3R0V7KR5BS.com. 86400 IN RRSIG NSEC3 8 2 86400 20180802050635 20180726035635 46475 com. lF01rDWQAlm2v2Pfut1so+I6lSb4bLUA SXn21EAw0lSKAMPg5sOQHElu8EEcJInY zTFRpTOtCs6QGRlk//3+IpFK3nNunJrD GFS9A8XP5l4z8Z4/ZtQDsPhrfSZTizwA M7Un8JL9LniZ1ueo8409gEFbA8Xqw4sP ojwW8QIrt7Y=
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - ck0q1gin43n1arrc9osm6qpqr81h5m9a NS SOA RRSIG DNSKEY NSEC3PARAM
+CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20180731044815 20180724033815 46475 com. fM3ga8tkCx9ZVu/L/hQGXNcPxPVEGLfC gCgTtsJyUNefVSPOCMdqneA70UMVn06T bkGLDe85cA8ZViEnqc3iG6zhZIAwqas1 /5G509o4Ppf4lDI5CsH3iEhL5ofH+xfL t+wWEaTCLsUtmJN/VrSdqwpgJTNIJCcM QNF5A4J5btQ=
+nstld.com. 172800 IN NS av1.nstld.com.
+nstld.com. 172800 IN NS av2.nstld.com.
+nstld.com. 172800 IN NS av3.nstld.com.
+nstld.com. 172800 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 172800 IN A 192.42.177.30
+av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+av2.nstld.com. 172800 IN A 192.42.178.30
+av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+av3.nstld.com. 172800 IN A 192.82.133.30
+av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+av4.nstld.com. 172800 IN A 192.82.134.30
+av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. 172800 IN NS a.gtld-servers.net.
+net. 172800 IN NS b.gtld-servers.net.
+net. 172800 IN NS c.gtld-servers.net.
+net. 172800 IN NS d.gtld-servers.net.
+net. 172800 IN NS e.gtld-servers.net.
+net. 172800 IN NS f.gtld-servers.net.
+net. 172800 IN NS g.gtld-servers.net.
+net. 172800 IN NS h.gtld-servers.net.
+net. 172800 IN NS i.gtld-servers.net.
+net. 172800 IN NS j.gtld-servers.net.
+net. 172800 IN NS k.gtld-servers.net.
+net. 172800 IN NS l.gtld-servers.net.
+net. 172800 IN NS m.gtld-servers.net.
+net. 172800 IN RRSIG NS 8 1 172800 20180802053055 20180726042055 7934 net. KR3mBpGrNgRPgB/LuPhUC4sjhy9F+GPU BXemSi46ZJlIWc7sK40AQ2rccrU5MDSa puWa2pVvx74pSU2w3gqeW9RH9E3wNh9t toAxJYJBNvTlXv3D1qG0LIXEsold+cvQ 0VqnFhVePojFFtFqE19H5OHaa87LVUOB Ib0gTx7i73Y=
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+com. IN NS
+SECTION ANSWER
+com. 172800 IN NS a.gtld-servers.net.
+com. 172800 IN NS b.gtld-servers.net.
+com. 172800 IN NS c.gtld-servers.net.
+com. 172800 IN NS d.gtld-servers.net.
+com. 172800 IN NS e.gtld-servers.net.
+com. 172800 IN NS f.gtld-servers.net.
+com. 172800 IN NS g.gtld-servers.net.
+com. 172800 IN NS h.gtld-servers.net.
+com. 172800 IN NS i.gtld-servers.net.
+com. 172800 IN NS j.gtld-servers.net.
+com. 172800 IN NS k.gtld-servers.net.
+com. 172800 IN NS l.gtld-servers.net.
+com. 172800 IN NS m.gtld-servers.net.
+com. 172800 IN RRSIG NS 8 1 172800 20180731044815 20180724033815 46475 com. JgH5uVQ8OQlpGeX/UJQRQHvQJjXOlQoZ o87eG2e/PP2y1R5Td93n/BckALIzqxT9 UyZsfIKDbRbK5junHSwV8FL5HC+3Hj0K QX8k4+yrpeYB1EM/Upkb5Db1E6F4NCcs iUyDsLNUS3trL+X7/ohrTM3ScPKdMux0 a0kAzuZMWJk=
+SECTION ADDITIONAL
+a.gtld-servers.net. 172800 IN A 192.5.6.30
+a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+b.gtld-servers.net. 172800 IN A 192.33.14.30
+b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+c.gtld-servers.net. 172800 IN A 192.26.92.30
+c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
+d.gtld-servers.net. 172800 IN A 192.31.80.30
+d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30
+e.gtld-servers.net. 172800 IN A 192.12.94.30
+e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
+f.gtld-servers.net. 172800 IN A 192.35.51.30
+f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
+g.gtld-servers.net. 172800 IN A 192.42.93.30
+g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
+h.gtld-servers.net. 172800 IN A 192.54.112.30
+h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
+i.gtld-servers.net. 172800 IN A 192.43.172.30
+i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
+j.gtld-servers.net. 172800 IN A 192.48.79.30
+j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
+k.gtld-servers.net. 172800 IN A 192.52.178.30
+k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
+l.gtld-servers.net. 172800 IN A 192.41.162.30
+l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
+m.gtld-servers.net. 172800 IN A 192.55.83.30
+m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "nstld.com.
+
+; Server names:
+; av1.nstld.com.
+; av2.nstld.com.
+; av3.nstld.com.
+; av4.nstld.com.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:500:124::30
+ ADDRESS 2001:500:126::30
+ ADDRESS 192.42.177.30
+ ADDRESS 192.82.134.30
+ ADDRESS 2001:500:127::30
+ ADDRESS 2001:500:125::30
+ ADDRESS 192.42.178.30
+ ADDRESS 192.82.133.30
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. 86400 IN A 192.5.6.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+a.gtld-servers.net. 86400 IN AAAA 2001:503:a83e::2:30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN A
+SECTION ANSWER
+j.gtld-servers.net. 86400 IN A 192.48.79.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+j.gtld-servers.net. IN AAAA
+SECTION ANSWER
+j.gtld-servers.net. 86400 IN AAAA 2001:502:7094::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN A
+SECTION ANSWER
+e.gtld-servers.net. 86400 IN A 192.12.94.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+e.gtld-servers.net. IN AAAA
+SECTION ANSWER
+e.gtld-servers.net. 86400 IN AAAA 2001:502:1ca1::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN A
+SECTION ANSWER
+i.gtld-servers.net. 86400 IN A 192.43.172.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+i.gtld-servers.net. IN AAAA
+SECTION ANSWER
+i.gtld-servers.net. 86400 IN AAAA 2001:503:39c1::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN A
+SECTION ANSWER
+d.gtld-servers.net. 86400 IN A 192.31.80.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.gtld-servers.net. IN AAAA
+SECTION ANSWER
+d.gtld-servers.net. 86400 IN AAAA 2001:500:856e::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN A
+SECTION ANSWER
+m.gtld-servers.net. 86400 IN A 192.55.83.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+m.gtld-servers.net. IN AAAA
+SECTION ANSWER
+m.gtld-servers.net. 86400 IN AAAA 2001:501:b1f9::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN A
+SECTION ANSWER
+h.gtld-servers.net. 86400 IN A 192.54.112.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+h.gtld-servers.net. IN AAAA
+SECTION ANSWER
+h.gtld-servers.net. 86400 IN AAAA 2001:502:8cc::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN A
+SECTION ANSWER
+c.gtld-servers.net. 86400 IN A 192.26.92.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.gtld-servers.net. IN AAAA
+SECTION ANSWER
+c.gtld-servers.net. 86400 IN AAAA 2001:503:83eb::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN A
+SECTION ANSWER
+l.gtld-servers.net. 86400 IN A 192.41.162.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+l.gtld-servers.net. IN AAAA
+SECTION ANSWER
+l.gtld-servers.net. 86400 IN AAAA 2001:500:d937::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN A
+SECTION ANSWER
+g.gtld-servers.net. 86400 IN A 192.42.93.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+g.gtld-servers.net. IN AAAA
+SECTION ANSWER
+g.gtld-servers.net. 86400 IN AAAA 2001:503:eea3::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN A
+SECTION ANSWER
+b.gtld-servers.net. 86400 IN A 192.33.14.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.gtld-servers.net. IN AAAA
+SECTION ANSWER
+b.gtld-servers.net. 86400 IN AAAA 2001:503:231d::2:30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN A
+SECTION ANSWER
+k.gtld-servers.net. 86400 IN A 192.52.178.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+k.gtld-servers.net. IN AAAA
+SECTION ANSWER
+k.gtld-servers.net. 86400 IN AAAA 2001:503:d2d::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN A
+SECTION ANSWER
+f.gtld-servers.net. 86400 IN A 192.35.51.30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN NS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN DS
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+f.gtld-servers.net. IN AAAA
+SECTION ANSWER
+f.gtld-servers.net. 86400 IN AAAA 2001:503:d414::30
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN A
+SECTION ANSWER
+av1.nstld.com. 300 IN A 192.42.177.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av1.nstld.com. IN AAAA
+SECTION ANSWER
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN A
+SECTION ANSWER
+av2.nstld.com. 300 IN A 192.42.178.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av2.nstld.com. IN AAAA
+SECTION ANSWER
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN A
+SECTION ANSWER
+av3.nstld.com. 300 IN A 192.82.133.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av3.nstld.com. IN AAAA
+SECTION ANSWER
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN A
+SECTION ANSWER
+av4.nstld.com. 300 IN A 192.82.134.30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN NS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN DS
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+av4.nstld.com. IN AAAA
+SECTION ANSWER
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+SECTION AUTHORITY
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN DNSKEY
+SECTION AUTHORITY
+gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2017061500 3600 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN DNSKEY
+SECTION AUTHORITY
+nstld.com. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2018062000 7200 900 1209600 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+gtld-servers.net. IN NS
+SECTION ANSWER
+gtld-servers.net. 86400 IN NS av1.nstld.com.
+gtld-servers.net. 86400 IN NS av2.nstld.com.
+gtld-servers.net. 86400 IN NS av3.nstld.com.
+gtld-servers.net. 86400 IN NS av4.nstld.com.
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nstld.com. IN NS
+SECTION ANSWER
+nstld.com. 86400 IN NS av1.nstld.com.
+nstld.com. 86400 IN NS av2.nstld.com.
+nstld.com. 86400 IN NS av3.nstld.com.
+nstld.com. 86400 IN NS av4.nstld.com.
+SECTION ADDITIONAL
+av1.nstld.com. 300 IN A 192.42.177.30
+av1.nstld.com. 300 IN AAAA 2001:500:124::30
+av2.nstld.com. 300 IN A 192.42.178.30
+av2.nstld.com. 300 IN AAAA 2001:500:125::30
+av3.nstld.com. 300 IN A 192.82.133.30
+av3.nstld.com. 300 IN AAAA 2001:500:126::30
+av4.nstld.com. 300 IN A 192.82.134.30
+av4.nstld.com. 300 IN AAAA 2001:500:127::30
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "cz.
+
+; Server names:
+; b.ns.nic.cz.
+; d.ns.nic.cz.
+; a.ns.nic.cz.
+; c.ns.nic.cz.
+RANGE_BEGIN 0 1000
+ ADDRESS 2001:678:11::1
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:10::1
+ ADDRESS 2001:678:f::1
+ ADDRESS 194.0.12.1
+ ADDRESS 217.31.205.50
+ ADDRESS 2001:678:1::1
+ ADDRESS 194.0.14.1
+ ADDRESS 194.0.13.1
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root.cz. IN TYPE65535
+SECTION AUTHORITY
+root.cz. 3600 IN DS 21523 5 2 b73053df8858181e1940ee6160e75d5339103264b9e56a9a1ecd64adabb2e54f
+root.cz. 3600 IN NS ns.iinfo.cz.
+root.cz. 3600 IN NS ns6.adminit.cz.
+root.cz. 3600 IN RRSIG DS 13 2 3600 20180809020236 20180727093611 62295 cz. vQCM/GJGJky3kC1IcQZpFddgl0iTTvzq EPV6FPEttgS59K3TnAd9jHKqQrXi7cEW yQ8eO7k27czWZ1UyA4wM2g==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root.cz. IN DNSKEY
+SECTION AUTHORITY
+root.cz. 3600 IN DS 21523 5 2 b73053df8858181e1940ee6160e75d5339103264b9e56a9a1ecd64adabb2e54f
+root.cz. 3600 IN NS ns.iinfo.cz.
+root.cz. 3600 IN NS ns6.adminit.cz.
+root.cz. 3600 IN RRSIG DS 13 2 3600 20180809020236 20180727093611 62295 cz. vQCM/GJGJky3kC1IcQZpFddgl0iTTvzq EPV6FPEttgS59K3TnAd9jHKqQrXi7cEW yQ8eO7k27czWZ1UyA4wM2g==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN DS
+SECTION ANSWER
+root.cz. 3600 IN DS 21523 5 2 b73053df8858181e1940ee6160e75d5339103264b9e56a9a1ecd64adabb2e54f
+root.cz. 3600 IN RRSIG DS 13 2 3600 20180809020236 20180727093611 62295 cz. vQCM/GJGJky3kC1IcQZpFddgl0iTTvzq EPV6FPEttgS59K3TnAd9jHKqQrXi7cEW yQ8eO7k27czWZ1UyA4wM2g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN A
+SECTION AUTHORITY
+iinfo.cz. 3600 IN DS 21523 5 2 1f3ad3f9eace2aacf2cca9464e6642fe4bafce5a2817da25faef31e59c1fb74e
+iinfo.cz. 3600 IN NS ns.iinfo.cz.
+iinfo.cz. 3600 IN NS ns6.adminit.cz.
+iinfo.cz. 3600 IN RRSIG DS 13 2 3600 20180809121603 20180727063545 62295 cz. 7Y0LIeZxiEPiUqrOxA+SOmEdSCKjlehi hq+64xyIatKjPMWIK77Hh/rywef10beV NzWngBAx6lCKKj0jQJZn8Q==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN DNSKEY
+SECTION AUTHORITY
+iinfo.cz. 3600 IN DS 21523 5 2 1f3ad3f9eace2aacf2cca9464e6642fe4bafce5a2817da25faef31e59c1fb74e
+iinfo.cz. 3600 IN NS ns.iinfo.cz.
+iinfo.cz. 3600 IN NS ns6.adminit.cz.
+iinfo.cz. 3600 IN RRSIG DS 13 2 3600 20180809121603 20180727063545 62295 cz. 7Y0LIeZxiEPiUqrOxA+SOmEdSCKjlehi hq+64xyIatKjPMWIK77Hh/rywef10beV NzWngBAx6lCKKj0jQJZn8Q==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN DS
+SECTION ANSWER
+iinfo.cz. 3600 IN DS 21523 5 2 1f3ad3f9eace2aacf2cca9464e6642fe4bafce5a2817da25faef31e59c1fb74e
+iinfo.cz. 3600 IN RRSIG DS 13 2 3600 20180809121603 20180727063545 62295 cz. 7Y0LIeZxiEPiUqrOxA+SOmEdSCKjlehi hq+64xyIatKjPMWIK77Hh/rywef10beV NzWngBAx6lCKKj0jQJZn8Q==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+root.cz. IN A
+SECTION AUTHORITY
+root.cz. 3600 IN DS 21523 5 2 b73053df8858181e1940ee6160e75d5339103264b9e56a9a1ecd64adabb2e54f
+root.cz. 3600 IN NS ns.iinfo.cz.
+root.cz. 3600 IN NS ns6.adminit.cz.
+root.cz. 3600 IN RRSIG DS 13 2 3600 20180809020236 20180727093611 62295 cz. vQCM/GJGJky3kC1IcQZpFddgl0iTTvzq EPV6FPEttgS59K3TnAd9jHKqQrXi7cEW yQ8eO7k27czWZ1UyA4wM2g==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN A
+SECTION ANSWER
+nic.cz. 1800 IN A 217.31.205.50
+nic.cz. 1800 IN RRSIG A 13 2 1800 20180809122156 20180727064002 33494 nic.cz. p0uxXNMUIA1Zf6x/wqAdlNTSiLKrYs8P nNYlBe0SPQ8kTSGp49BlEaiy+B9ewcYp YbPTgjIpmvoMFeIOShUqgw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN DNSKEY
+SECTION ANSWER
+nic.cz. 1800 IN DNSKEY 256 3 13 a10sJr/8DQL8M1nLPzWfNoASGTsm4cKE P577ZX3c3lruiWZiUL78fUp0B2YJh8U9 DyiZsq18i6CM9eYTDVemzA==
+nic.cz. 1800 IN DNSKEY 257 3 13 LM4zvjUgZi2XZKsYooDE0HFYGfWp242f KB+O8sLsuox8S6MJTowY8lBDjZD7JKbm aNot3+1H8zU9TrDzWmmHwQ==
+nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20180809084714 20180727064002 61281 nic.cz. zotLLX9vPojjz21OSVfMGNspvWIVzzcW ZGJTTYOPlIHmrxAfE3GxHqV7QK8QO1W5 8rGsf9eebQw3+aJ+QGaNSA==
+nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20180810022459 20180727064002 33494 nic.cz. Ol85KlI1HVLYmVRmD2q0QBCqLZM5bUDr sECC2XN0gmtkbEPfI1HmhylvM9sur3kE 4kCxCKOAOCozExhDZtgV2w==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN DS
+SECTION ANSWER
+nic.cz. 3600 IN DS 61281 13 2 4104d40c8fe2030bf7a09a199fcf37b36f7ec8ddd16f5a84f2e61c248d3afd0f
+nic.cz. 3600 IN RRSIG DS 13 2 3600 20180805030735 20180722073550 62295 cz. iF+/iu01Jx4ls0md5OHm25GHCuaLkEmd U4N8pzQRw0WYTmP71ZuMEqd4e5KPeGS2 hLqh134rBssNSGagGazLNw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN A
+SECTION AUTHORITY
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7d87lcrpk6rt27kalh4sqt2rurekmmti.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN NS
+SECTION AUTHORITY
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.nic.cz. IN DS
+SECTION AUTHORITY
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 7dios8rb1rae9ugm9mubblifgm1pdql0
+7D87LCRPK6RT27KALH4SQT2RUREKMMTI.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809215742 20180727064002 33494 nic.cz. rGSwaAjCkz0BBxXgIv+Aq1rq/0gAnxkr Kx+eOR6h0iJDuUKoOogBdCD/XbNihwEr 3RjU+GlaxFjDVqb59fPE4g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN A
+SECTION ANSWER
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN NS
+SECTION AUTHORITY
+0PEAUR41J22DBMN7U135FQ4FTAUCUJHF.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0PEAUR41J22DBMN7U135FQ4FTAUCUJHF.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN DS
+SECTION AUTHORITY
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 0pr0tt6lsanr7gh1a7b43qfgll0ce3m7 A AAAA RRSIG
+0peaur41j22dbmn7u135fq4ftaucujhf.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809114457 20180727064002 33494 nic.cz. JVwfhA8YvpMShhq+ZkjOjPwGTwqw0U+7 vgK0Dt+RaW9KhFydcmohq0YLO207c0Sm UnYvWvDBSu+PHAOSL+Hgkw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+a.ns.nic.cz. IN AAAA
+SECTION ANSWER
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN A
+SECTION ANSWER
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+QO01QT0TH20IVKDANQ04F4G7V2EAJ3UR.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+QO01QT0TH20IVKDANQ04F4G7V2EAJ3UR.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN NS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+qo01qt0th20ivkdanq04f4g7v2eaj3ur.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN DS
+SECTION AUTHORITY
+QO01QT0TH20IVKDANQ04F4G7V2EAJ3UR.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 qrn61qbmo7ba8fufp4f15q8v233rd7s1 A AAAA RRSIG
+QO01QT0TH20IVKDANQ04F4G7V2EAJ3UR.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180810053445 20180727064002 33494 nic.cz. NPU0frxy34iY0tCv3Kvgew+zKlulbVF9 4y1Ml0ohKTr659CYBmX0y0C9Kt9vBfzz oDoYnIslWIwouM+u7186yw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+b.ns.nic.cz. IN AAAA
+SECTION ANSWER
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN A
+SECTION ANSWER
+c.ns.nic.cz. 1800 IN A 194.0.14.1
+c.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809230245 20180727064002 33494 nic.cz. vlIESyKHWExpovMlpGstO7X8Qk1YnJYc w8i6u28JjABo/2qa20s3wFXVgenziyEn 3VTsenqk6TTTi8RutaSmhA==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+ccueinlfu0s4ji2bgsprv30rcletotkq.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN NS
+SECTION AUTHORITY
+CCUEINLFU0S4JI2BGSPRV30RCLETOTKQ.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+CCUEINLFU0S4JI2BGSPRV30RCLETOTKQ.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN DS
+SECTION AUTHORITY
+CCUEINLFU0S4JI2BGSPRV30RCLETOTKQ.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 cem50d1dfrtnfqk2gdjo4405j9lvostb A AAAA RRSIG
+CCUEINLFU0S4JI2BGSPRV30RCLETOTKQ.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809155831 20180727064002 33494 nic.cz. 9kekS/gKCcN1h0h5JhWV+r+tq9p0RpY4 QXT8aVrcxaD0LbXR+tGc8laMcdxOmrbd kXCxuSt6FVPmueKlCZj1Kw==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+c.ns.nic.cz. IN AAAA
+SECTION ANSWER
+c.ns.nic.cz. 1800 IN AAAA 2001:678:11::1
+c.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809162728 20180727064002 33494 nic.cz. QRpoOGOlRV5YZkfr8rvOdGVZDqaFY4hV WsjpEl2cB1A9Rkw9/aX2toXhBoHTD7SX djgg2xiJzfNqtbBZNcpCrw==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN A
+SECTION ANSWER
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN DNSKEY
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN NS
+SECTION AUTHORITY
+VF5FP77TRRD78PATQGIAVTGGUM6CAJH9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+VF5FP77TRRD78PATQGIAVTGGUM6CAJH9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN DS
+SECTION AUTHORITY
+nic.cz. 1800 IN RRSIG SOA 13 2 1800 20180809064029 20180727064002 33494 nic.cz. fErlGowdWxs4Fouw84ToJt02qqX+qnY+ ieVzHu+w01jj0z3tMK8uLid0G04ZRLA2 CHnO0NKCAPfRVX+K5X+yFQ==
+nic.cz. 1800 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532677202 10800 3600 1209600 7200
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN NSEC3 1 0 10 6d024fda550cdd61 vg8e7aak4v5n8qc7q065is15lgndiok5 A AAAA RRSIG
+vf5fp77trrd78patqgiavtggum6cajh9.nic.cz. 7200 IN RRSIG NSEC3 13 3 7200 20180809144711 20180727064002 33494 nic.cz. qGRXKiwS8f+uEggVDFRUqt27euEuDV+T 2rrwkPqlCXvHiaKYI/P0eTkHe2SamKZT Fe2nbLIeuppDRzKo9DPx+g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+d.ns.nic.cz. IN AAAA
+SECTION ANSWER
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+SECTION AUTHORITY
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+adminit.cz. IN A
+SECTION AUTHORITY
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN NSEC3 1 0 10 10e824b15ffa0abd 9hfku52m3alurnj3eavfg458gn3418f6 NS
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN RRSIG NSEC3 13 2 900 20180804023913 20180721053541 62295 cz. rJ/nyZPYNwZxgjf7asIyASKmSX+dHt4S nIRGX3ROuIqHp5k9TVkeW0XxAOYgRpAJ Gm1C9gayX3JGikaPZeYXuQ==
+adminit.cz. 3600 IN NS ns.adminit.cz.
+adminit.cz. 3600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 3600 IN A 89.185.231.140
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR RD NOERROR
+SECTION QUESTION
+adminit.cz. IN DNSKEY
+SECTION AUTHORITY
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN NSEC3 1 0 10 10e824b15ffa0abd 9hfku52m3alurnj3eavfg458gn3418f6 NS
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN RRSIG NSEC3 13 2 900 20180804023913 20180721053541 62295 cz. rJ/nyZPYNwZxgjf7asIyASKmSX+dHt4S nIRGX3ROuIqHp5k9TVkeW0XxAOYgRpAJ Gm1C9gayX3JGikaPZeYXuQ==
+adminit.cz. 3600 IN NS ns.adminit.cz.
+adminit.cz. 3600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 3600 IN A 89.185.231.140
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+adminit.cz. IN DS
+SECTION AUTHORITY
+9hfklgvaurtdmcotlk0nh1nsrj43deje.cz. 900 IN NSEC3 1 0 10 10e824b15ffa0abd 9hfku52m3alurnj3eavfg458gn3418f6 NS
+9hfklgvaurtdmcotlk0nh1nsrj43deje.cz. 900 IN RRSIG NSEC3 13 2 900 20180804023913 20180721053541 62295 cz. rJ/nyZPYNwZxgjf7asIyASKmSX+dHt4S nIRGX3ROuIqHp5k9TVkeW0XxAOYgRpAJ Gm1C9gayX3JGikaPZeYXuQ==
+cz. 900 IN RRSIG SOA 13 1 3600 20180809150540 20180727150545 62295 cz. UEx5NuZh+/viBicZcEp4A+zBy93jYDYL TW5QjK7B1NW978PJ+KY1so6ErplYU51Q ME8009WszzXXObYR3+kwdw==
+cz. 900 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1532707545 900 300 604800 900
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 13 LSpU2wluEwbQLak1XGlg3KEYygKfIiAu Q8iJxgDDSKuPLIA/BIn40LC1nPzfLwoa zmL7sPJRetzjxwtErBLCmw==
+cz. 18000 IN DNSKEY 257 3 13 nqzH7xP1QU5UOVy/VvxFSlrB/XgX9JDJ zj51PzIj35TXjZTyalTlAT/f7PAfaSD5 mEG1N8Vk9NmI2nxgQqhzDQ==
+cz. 18000 IN RRSIG DNSKEY 13 1 18000 20180803000000 20180720000000 20237 cz. 2KI6brDc06P9gKXv+omp0NDfgxwMa2DD NnMNf7sE97/vGyCVdu0FkA3NdtpUs3UC RwD3Nb5+jh7O45sLwyu6yw==
+cz. 18000 IN RRSIG DNSKEY 13 1 18000 20180809010634 20180727150545 62295 cz. RlVw07JKCfgZCR2i09sgK7V43KFl7xpb Rzyg0Z9pD9nO/bvenRHgnpWUyFXM+1Ma kjVQkrHxmw5vVvDu8Er/fA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+root.cz. IN NS
+SECTION AUTHORITY
+root.cz. 3600 IN DS 21523 5 2 b73053df8858181e1940ee6160e75d5339103264b9e56a9a1ecd64adabb2e54f
+root.cz. 3600 IN NS ns.iinfo.cz.
+root.cz. 3600 IN NS ns6.adminit.cz.
+root.cz. 3600 IN RRSIG DS 13 2 3600 20180809020236 20180727093611 62295 cz. vQCM/GJGJky3kC1IcQZpFddgl0iTTvzq EPV6FPEttgS59K3TnAd9jHKqQrXi7cEW yQ8eO7k27czWZ1UyA4wM2g==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN NS
+SECTION AUTHORITY
+iinfo.cz. 3600 IN DS 21523 5 2 1f3ad3f9eace2aacf2cca9464e6642fe4bafce5a2817da25faef31e59c1fb74e
+iinfo.cz. 3600 IN NS ns.iinfo.cz.
+iinfo.cz. 3600 IN NS ns6.adminit.cz.
+iinfo.cz. 3600 IN RRSIG DS 13 2 3600 20180809121603 20180727063545 62295 cz. 7Y0LIeZxiEPiUqrOxA+SOmEdSCKjlehi hq+64xyIatKjPMWIK77Hh/rywef10beV NzWngBAx6lCKKj0jQJZn8Q==
+SECTION ADDITIONAL
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nic.cz. IN NS
+SECTION ANSWER
+nic.cz. 1800 IN NS a.ns.nic.cz.
+nic.cz. 1800 IN NS b.ns.nic.cz.
+nic.cz. 1800 IN NS d.ns.nic.cz.
+nic.cz. 1800 IN RRSIG NS 13 2 1800 20180809162254 20180727064002 33494 nic.cz. UOY4VdLFGrtMr22EaYes+1lbCAjFkhlt N5Q+0jpGucbyEFXrbxN4lFoQGpkX/+aU IWuKxWQI8VVmBKYLFBqSTw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 1800 IN A 194.0.12.1
+a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180810011809 20180727064002 33494 nic.cz. dlRCgD1PxXFCid2m1djf5URx+SbMMFtR aaeNB5G7jj9nqFv252cwhnOz7NLPqEBG yr+h8eEOqFKbV92ZfzygLw==
+a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809213334 20180727064002 33494 nic.cz. TQvt6opeQKp4V/VTYgEsw25AFAD3l9I6 UE5HhJUVGpnn8YzmZZs1QTNC1ZVf0MCs Flr3H2mTNm0r/Mb3m6Q+Yw==
+b.ns.nic.cz. 1800 IN A 194.0.13.1
+b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809112828 20180727064002 33494 nic.cz. GO5Wc2EWoV4yRvc3ktazw+lNZ7nGtR6S 4MsumQDKuADSGMLAhwm+htASUXxWZtV+ wWv74LD2g2cNjHpXHH1PBg==
+b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809130835 20180727064002 33494 nic.cz. sesuNekVgD2YLYl51sKLEYZeDmcxtQKl oFYnpXMUBVlqLTUGjn0RRcDvpJCxj/Ac isifFcEwvZ4W0B5/Ry1oVQ==
+d.ns.nic.cz. 1800 IN A 193.29.206.1
+d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20180809211641 20180727064002 33494 nic.cz. yLSqZnGG2G5+StFxEPpuV3I5slNKLF3o 7QahlX4mKk/iN74C7zh62cR+Q/s3SDxE fFF2M/owNT3T2wspOh4L/g==
+d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20180809225253 20180727064002 33494 nic.cz. Rm0kQ0l//ZsEDNi1M3Hmns4C2aWzcGI/ oUBN92egsGSvQ0EGVgZMWZp/Pun+Tgr/ AHHCsD4lW8ZNNxHh5CCtZQ==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR RD NOERROR
+SECTION QUESTION
+adminit.cz. IN NS
+SECTION AUTHORITY
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN NSEC3 1 0 10 10e824b15ffa0abd 9hfku52m3alurnj3eavfg458gn3418f6 NS
+9HFKLGVAURTDMCOTLK0NH1NSRJ43DEJE.cz. 900 IN RRSIG NSEC3 13 2 900 20180804023913 20180721053541 62295 cz. rJ/nyZPYNwZxgjf7asIyASKmSX+dHt4S nIRGX3ROuIqHp5k9TVkeW0XxAOYgRpAJ Gm1C9gayX3JGikaPZeYXuQ==
+adminit.cz. 3600 IN NS ns.adminit.cz.
+adminit.cz. 3600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 3600 IN A 89.185.231.140
+ns.iinfo.cz. 3600 IN A 91.213.160.5
+ns.iinfo.cz. 3600 IN AAAA 2001:67c:68::5
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 3600 IN NS a.ns.nic.cz.
+cz. 3600 IN NS b.ns.nic.cz.
+cz. 3600 IN NS c.ns.nic.cz.
+cz. 3600 IN NS d.ns.nic.cz.
+cz. 3600 IN RRSIG NS 13 1 3600 20180806013233 20180724063548 62295 cz. NYwbiceGXv+yKrhwwMPUO5WihpVt4nip dQpjpbVxJfUp4s+j5lOHsxcbCm4EEaBx x1+UXCK6Gnw9TCnaZaOiBQ==
+SECTION ADDITIONAL
+a.ns.nic.cz. 3600 IN A 194.0.12.1
+a.ns.nic.cz. 3600 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 3600 IN A 194.0.13.1
+b.ns.nic.cz. 3600 IN AAAA 2001:678:10::1
+d.ns.nic.cz. 3600 IN A 193.29.206.1
+d.ns.nic.cz. 3600 IN AAAA 2001:678:1::1
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "root.cz.
+
+; Server names:
+; ns6.adminit.cz.
+; ns.iinfo.cz.
+RANGE_BEGIN 0 1000
+ ADDRESS 46.101.163.95
+ ADDRESS 2001:67c:68::5
+ ADDRESS 91.213.160.5
+ ADDRESS 2a03:b0c0:3:d0::4c:2001
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN A
+SECTION ANSWER
+root.cz. 600 IN A 91.213.160.118
+root.cz. 600 IN RRSIG A 5 2 600 20190528123431 20180528123431 8130 root.cz. VbfAvnvnwmW04evIkjQTSeJN5J9Gtfum 2m13VOQCetKK01G4h5yS18qS5Yl4dZQh zftnYpQ1WJlkM6a3RXAgPw==
+SECTION AUTHORITY
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN AAAA
+SECTION ANSWER
+root.cz. 600 IN AAAA 2001:67c:68::76
+root.cz. 600 IN RRSIG AAAA 5 2 600 20190528123431 20180528123431 8130 root.cz. DUKH/DmP1XFWtKXHpCLJ49786krOOqO0 cIeEn+5sFsKx+ZS96WRyNpYyy0VQyvqm /D+y2HwZFpxRQMM3oAa+IQ==
+SECTION AUTHORITY
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN TYPE65535
+SECTION AUTHORITY
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.iinfo.cz. IN A
+SECTION ANSWER
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+SECTION AUTHORITY
+iinfo.cz. 600 IN NS ns.iinfo.cz.
+iinfo.cz. 600 IN NS ns6.adminit.cz.
+iinfo.cz. 600 IN RRSIG NS 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. pnOulEq9+lsY62m4J7rnsVL5JojezXVo BpX0aNCbJ/L4786RSE4no5KBZPfLvDns gmWQqT/WaMqYQTWQd/AfyA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.iinfo.cz. IN DNSKEY
+SECTION AUTHORITY
+iinfo.cz. 600 IN RRSIG SOA 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. j0qa9fTHdIXHZl72BcOfokHxk8LzxxpY x3LULH7xBsRMEGgBg9BYDYyJChyibjoo PSACAn8wfCATJbaST26lbQ==
+iinfo.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 1800 3600 604800 600
+ns.iinfo.cz. 600 IN NSEC ocelot.iinfo.cz. A AAAA RRSIG NSEC
+ns.iinfo.cz. 600 IN RRSIG NSEC 5 3 600 20190528123437 20180528123437 8130 iinfo.cz. s5VnlUMkC1MVFJooQRhhZ6abt5pBvvfl hiMWNjrE13MeSpdjwQho4aTTIlvV+ewR Vo5rr1uj+h3Z5TA2eClzWg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.iinfo.cz. IN NS
+SECTION AUTHORITY
+iinfo.cz. 600 IN RRSIG SOA 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. j0qa9fTHdIXHZl72BcOfokHxk8LzxxpY x3LULH7xBsRMEGgBg9BYDYyJChyibjoo PSACAn8wfCATJbaST26lbQ==
+iinfo.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 1800 3600 604800 600
+ns.iinfo.cz. 600 IN NSEC ocelot.iinfo.cz. A AAAA RRSIG NSEC
+ns.iinfo.cz. 600 IN RRSIG NSEC 5 3 600 20190528123437 20180528123437 8130 iinfo.cz. s5VnlUMkC1MVFJooQRhhZ6abt5pBvvfl hiMWNjrE13MeSpdjwQho4aTTIlvV+ewR Vo5rr1uj+h3Z5TA2eClzWg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.iinfo.cz. IN DS
+SECTION AUTHORITY
+iinfo.cz. 600 IN RRSIG SOA 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. j0qa9fTHdIXHZl72BcOfokHxk8LzxxpY x3LULH7xBsRMEGgBg9BYDYyJChyibjoo PSACAn8wfCATJbaST26lbQ==
+iinfo.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 1800 3600 604800 600
+ns.iinfo.cz. 600 IN NSEC ocelot.iinfo.cz. A AAAA RRSIG NSEC
+ns.iinfo.cz. 600 IN RRSIG NSEC 5 3 600 20190528123437 20180528123437 8130 iinfo.cz. s5VnlUMkC1MVFJooQRhhZ6abt5pBvvfl hiMWNjrE13MeSpdjwQho4aTTIlvV+ewR Vo5rr1uj+h3Z5TA2eClzWg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.iinfo.cz. IN AAAA
+SECTION ANSWER
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+SECTION AUTHORITY
+iinfo.cz. 600 IN NS ns.iinfo.cz.
+iinfo.cz. 600 IN NS ns6.adminit.cz.
+iinfo.cz. 600 IN RRSIG NS 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. pnOulEq9+lsY62m4J7rnsVL5JojezXVo BpX0aNCbJ/L4786RSE4no5KBZPfLvDns gmWQqT/WaMqYQTWQd/AfyA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN A
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+root.cz. 600 IN A 91.213.160.118
+root.cz. 600 IN RRSIG A 5 2 600 20190528123431 20180528123431 8130 root.cz. VbfAvnvnwmW04evIkjQTSeJN5J9Gtfum 2m13VOQCetKK01G4h5yS18qS5Yl4dZQh zftnYpQ1WJlkM6a3RXAgPw==
+SECTION AUTHORITY
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN DNSKEY
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+root.cz. 600 IN DNSKEY 256 3 5 AwEAAdX9H0Z0zTYKmh4NjmMARj16ThCn et8JUvivs+/+0QidPtCyW8ww0CUDyeqo rXOw0CI5otOccm2Es4v1SuFwMPs=
+root.cz. 600 IN DNSKEY 257 3 5 AwEAAd0gb4uhOraiCsHKE6JjR6HKOeRq Ry8Nxj4cg2AmKtaSF78rmvN27vtU8tKD LUGtiGgg33pcAOp+bvtd9ACu5s//Dch0 MHJpCDHFGoR4WVLbqBz9isTs3DLVLxWQ luMKeo/Kxed7sR3fMyPxAP1+FFi3esdX xANsVur/h9gGI5WVNtyXhq+qkWqLX0Y6 Q0jGzIuDrd5I4cVrWOei1OM4xV53Gh6D h98lptCA2ek35RuW3tPb7zHGXF3s+Baf gq7H8QJjnWmcFJh8ACdmbT63afQchYWT oyWdWUOeSpm/Uu0JOcbodAUD4m44P1Ed V1hzwwrHQIFUfdyA6He8mBPxS1k=
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 21523 root.cz. FifAZ5ePqDd5e5/oMiUeCZ2wA0OAqz03 I5ZkHb1OgKnZEpbI3yCHnF+3V4RS7ILu qJB/j04fXTiBwLsbBB+ZITUJ/PMA0VJ+ EA5hPJ0Cyei9cWKHw71peaLLCbH1T06g BntUshxxtKhGVjzhvaBqKw039HDu/2m3 RCj/pKSw71Lc+uLwR9lkaxmLeO9YfK/m 8SHdP6EOhadPIe4525iPGktWiLCDbdey DbdrlF8k1nXLtzWwFTwYl/L2n2NrJxSy GNJ7iHFzvfNCm6EWvhvdSijA9hSaFl2S D1IgD0kdix1F4wzRZpyzNlB2LsCYAH9q WkMyoKF0aH67YraYre44Nw==
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 8130 root.cz. GBADhpGGSxw8B+ke+K0rOAYwYL3KmweD j1PKaSleBOmftpFjb8gyvKX3LJgn66m/ UrKAOccPTriwkN+4ZJgq7g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN DS
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+SECTION AUTHORITY
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN A
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+root.cz. 600 IN A 91.213.160.118
+root.cz. 600 IN RRSIG A 5 2 600 20190528123431 20180528123431 8130 root.cz. VbfAvnvnwmW04evIkjQTSeJN5J9Gtfum 2m13VOQCetKK01G4h5yS18qS5Yl4dZQh zftnYpQ1WJlkM6a3RXAgPw==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN DNSKEY
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+root.cz. 600 IN DNSKEY 256 3 5 AwEAAdX9H0Z0zTYKmh4NjmMARj16ThCn et8JUvivs+/+0QidPtCyW8ww0CUDyeqo rXOw0CI5otOccm2Es4v1SuFwMPs=
+root.cz. 600 IN DNSKEY 257 3 5 AwEAAd0gb4uhOraiCsHKE6JjR6HKOeRq Ry8Nxj4cg2AmKtaSF78rmvN27vtU8tKD LUGtiGgg33pcAOp+bvtd9ACu5s//Dch0 MHJpCDHFGoR4WVLbqBz9isTs3DLVLxWQ luMKeo/Kxed7sR3fMyPxAP1+FFi3esdX xANsVur/h9gGI5WVNtyXhq+qkWqLX0Y6 Q0jGzIuDrd5I4cVrWOei1OM4xV53Gh6D h98lptCA2ek35RuW3tPb7zHGXF3s+Baf gq7H8QJjnWmcFJh8ACdmbT63afQchYWT oyWdWUOeSpm/Uu0JOcbodAUD4m44P1Ed V1hzwwrHQIFUfdyA6He8mBPxS1k=
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 21523 root.cz. FifAZ5ePqDd5e5/oMiUeCZ2wA0OAqz03 I5ZkHb1OgKnZEpbI3yCHnF+3V4RS7ILu qJB/j04fXTiBwLsbBB+ZITUJ/PMA0VJ+ EA5hPJ0Cyei9cWKHw71peaLLCbH1T06g BntUshxxtKhGVjzhvaBqKw039HDu/2m3 RCj/pKSw71Lc+uLwR9lkaxmLeO9YfK/m 8SHdP6EOhadPIe4525iPGktWiLCDbdey DbdrlF8k1nXLtzWwFTwYl/L2n2NrJxSy GNJ7iHFzvfNCm6EWvhvdSijA9hSaFl2S D1IgD0kdix1F4wzRZpyzNlB2LsCYAH9q WkMyoKF0aH67YraYre44Nw==
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 8130 root.cz. GBADhpGGSxw8B+ke+K0rOAYwYL3KmweD j1PKaSleBOmftpFjb8gyvKX3LJgn66m/ UrKAOccPTriwkN+4ZJgq7g==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN DS
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN AAAA
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+root.cz. 600 IN AAAA 2001:67c:68::76
+root.cz. 600 IN RRSIG AAAA 5 2 600 20190528123431 20180528123431 8130 root.cz. DUKH/DmP1XFWtKXHpCLJ49786krOOqO0 cIeEn+5sFsKx+ZS96WRyNpYyy0VQyvqm /D+y2HwZFpxRQMM3oAa+IQ==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN AAAA
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+root.cz. 600 IN AAAA 2001:67c:68::76
+root.cz. 600 IN RRSIG AAAA 5 2 600 20190528123431 20180528123431 8130 root.cz. DUKH/DmP1XFWtKXHpCLJ49786krOOqO0 cIeEn+5sFsKx+ZS96WRyNpYyy0VQyvqm /D+y2HwZFpxRQMM3oAa+IQ==
+SECTION AUTHORITY
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN TYPE65535
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+SECTION AUTHORITY
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN TYPE65535
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns6.adminit.cz. IN A
+SECTION ANSWER
+ns6.adminit.cz. 600 IN A 46.101.163.95
+SECTION AUTHORITY
+adminit.cz. 600 IN NS ns.adminit.cz.
+adminit.cz. 600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 600 IN A 89.185.231.140
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns6.adminit.cz. IN DNSKEY
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns6.adminit.cz. IN NS
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns6.adminit.cz. IN DS
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns6.adminit.cz. IN AAAA
+SECTION ANSWER
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+SECTION AUTHORITY
+adminit.cz. 600 IN NS ns.adminit.cz.
+adminit.cz. 600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 600 IN A 89.185.231.140
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.adminit.cz. IN A
+SECTION ANSWER
+ns.adminit.cz. 600 IN A 89.185.231.140
+SECTION AUTHORITY
+adminit.cz. 600 IN NS ns.adminit.cz.
+adminit.cz. 600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.adminit.cz. IN DNSKEY
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.adminit.cz. IN NS
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.adminit.cz. IN DS
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns.adminit.cz. IN AAAA
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN DNSKEY
+SECTION ANSWER
+root.cz. 600 IN DNSKEY 256 3 5 AwEAAdX9H0Z0zTYKmh4NjmMARj16ThCn et8JUvivs+/+0QidPtCyW8ww0CUDyeqo rXOw0CI5otOccm2Es4v1SuFwMPs=
+root.cz. 600 IN DNSKEY 257 3 5 AwEAAd0gb4uhOraiCsHKE6JjR6HKOeRq Ry8Nxj4cg2AmKtaSF78rmvN27vtU8tKD LUGtiGgg33pcAOp+bvtd9ACu5s//Dch0 MHJpCDHFGoR4WVLbqBz9isTs3DLVLxWQ luMKeo/Kxed7sR3fMyPxAP1+FFi3esdX xANsVur/h9gGI5WVNtyXhq+qkWqLX0Y6 Q0jGzIuDrd5I4cVrWOei1OM4xV53Gh6D h98lptCA2ek35RuW3tPb7zHGXF3s+Baf gq7H8QJjnWmcFJh8ACdmbT63afQchYWT oyWdWUOeSpm/Uu0JOcbodAUD4m44P1Ed V1hzwwrHQIFUfdyA6He8mBPxS1k=
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 21523 root.cz. FifAZ5ePqDd5e5/oMiUeCZ2wA0OAqz03 I5ZkHb1OgKnZEpbI3yCHnF+3V4RS7ILu qJB/j04fXTiBwLsbBB+ZITUJ/PMA0VJ+ EA5hPJ0Cyei9cWKHw71peaLLCbH1T06g BntUshxxtKhGVjzhvaBqKw039HDu/2m3 RCj/pKSw71Lc+uLwR9lkaxmLeO9YfK/m 8SHdP6EOhadPIe4525iPGktWiLCDbdey DbdrlF8k1nXLtzWwFTwYl/L2n2NrJxSy GNJ7iHFzvfNCm6EWvhvdSijA9hSaFl2S D1IgD0kdix1F4wzRZpyzNlB2LsCYAH9q WkMyoKF0aH67YraYre44Nw==
+root.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123431 20180528123431 8130 root.cz. GBADhpGGSxw8B+ke+K0rOAYwYL3KmweD j1PKaSleBOmftpFjb8gyvKX3LJgn66m/ UrKAOccPTriwkN+4ZJgq7g==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN DNSKEY
+SECTION ANSWER
+iinfo.cz. 600 IN DNSKEY 256 3 5 AwEAAdX9H0Z0zTYKmh4NjmMARj16ThCn et8JUvivs+/+0QidPtCyW8ww0CUDyeqo rXOw0CI5otOccm2Es4v1SuFwMPs=
+iinfo.cz. 600 IN DNSKEY 257 3 5 AwEAAd0gb4uhOraiCsHKE6JjR6HKOeRq Ry8Nxj4cg2AmKtaSF78rmvN27vtU8tKD LUGtiGgg33pcAOp+bvtd9ACu5s//Dch0 MHJpCDHFGoR4WVLbqBz9isTs3DLVLxWQ luMKeo/Kxed7sR3fMyPxAP1+FFi3esdX xANsVur/h9gGI5WVNtyXhq+qkWqLX0Y6 Q0jGzIuDrd5I4cVrWOei1OM4xV53Gh6D h98lptCA2ek35RuW3tPb7zHGXF3s+Baf gq7H8QJjnWmcFJh8ACdmbT63afQchYWT oyWdWUOeSpm/Uu0JOcbodAUD4m44P1Ed V1hzwwrHQIFUfdyA6He8mBPxS1k=
+iinfo.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123437 20180528123437 21523 iinfo.cz. gK/B0ceILXhEGpXHL9o/0aAAw9FWKa8T 2775dB9FlzpfQsmmhedDY+swXpYpieXp nHtchHe0n0AiWjmQ4pYQ9f+ABX9/1w6e kmsQEQ4BH7oD2iHWFzCwEnjbGfE78nVx rcGyaq6VQ50yoRFn6KdVSvydtHtR7jtN 4cAzz9z6AgL41goi89SEUMB6XtA1puKZ yOq9QXXQ31bU/3pb9oitGIh8hrpaPnpC APLHMdNo9ixQCzdOY4zHXOYRoSkeoh0E skWuBDw9xaA3PpiAhW1YuWRqsM5ogn2T wF4NCOhQD8JP7o8jbCS75+KySaWILznl vapvUu8P//OVfLvb3KmQBA==
+iinfo.cz. 600 IN RRSIG DNSKEY 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. uFrBPh3dsFIbmOE5m9VuHeuxhPEnNQE0 DwoeoZsre7RwSPWtqEvENypioV1goDIf 0cZmsNrK5Q5lgIBOo4rKug==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+adminit.cz. IN DNSKEY
+SECTION AUTHORITY
+adminit.cz. 600 IN SOA ns.adminit.cz. hostmaster.adminit.cz. 2018072003 10800 3600 604800 600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN NS
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+random1.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+blog.root.cz. IN NS
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+root.cz. IN NS
+SECTION ANSWER
+root.cz. 600 IN NS ns.iinfo.cz.
+root.cz. 600 IN NS ns6.adminit.cz.
+root.cz. 600 IN RRSIG NS 5 2 600 20190528123431 20180528123431 8130 root.cz. SXqkv2rcKBDAYKzsn3FL+2djE4ob+BbJ OjNcHcihIQFaCLHfvTpmh7bKDyDrtyBj xAB/EPVJWdn1Gvu8PUKGOA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+iinfo.cz. IN NS
+SECTION ANSWER
+iinfo.cz. 600 IN NS ns.iinfo.cz.
+iinfo.cz. 600 IN NS ns6.adminit.cz.
+iinfo.cz. 600 IN RRSIG NS 5 2 600 20190528123437 20180528123437 8130 iinfo.cz. pnOulEq9+lsY62m4J7rnsVL5JojezXVo BpX0aNCbJ/L4786RSE4no5KBZPfLvDns gmWQqT/WaMqYQTWQd/AfyA==
+SECTION ADDITIONAL
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ns6.adminit.cz. 600 IN A 46.101.163.95
+ns6.adminit.cz. 600 IN AAAA 2a03:b0c0:3:d0::4c:2001
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+adminit.cz. IN NS
+SECTION ANSWER
+adminit.cz. 600 IN NS ns.adminit.cz.
+adminit.cz. 600 IN NS ns.iinfo.cz.
+SECTION ADDITIONAL
+ns.adminit.cz. 600 IN A 89.185.231.140
+ns.iinfo.cz. 360 IN A 91.213.160.5
+ns.iinfo.cz. 360 IN AAAA 2001:67c:68::5
+ns.iinfo.cz. 360 IN RRSIG A 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. Rf//ObuX0E/s5d7Z1Ld0MjHa+q+tVdl8 GwY4pZTW7DHRivIEij+owDnmDNID62EB MpURuInEPV5FaF/9sT6X8A==
+ns.iinfo.cz. 360 IN RRSIG AAAA 5 3 360 20190528123437 20180528123437 8130 iinfo.cz. q5hoFF0ldADkVxxKTgXgh3RUL+JseejX tcUvRqaD+VTwbJO5J0Kl+tJufKw7tRVt EJP8opneZsIsKamQhdWrDg==
+ENTRY_END
+
+
+RANGE_END
+
+
+; Scope "hm.
+
+; Server names:
+; ns1.registry.hm.
+; ns2.registry.hm.
+; ns3.registry.hm.
+RANGE_BEGIN 0 1000
+ ADDRESS 208.70.79.24
+ ADDRESS 208.70.79.25
+ ADDRESS 128.199.180.188
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN A
+SECTION AUTHORITY
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN DS
+SECTION AUTHORITY
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN AAAA
+SECTION AUTHORITY
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+registry.hm. IN A
+SECTION ANSWER
+registry.hm. 86400 IN A 208.70.79.55
+SECTION AUTHORITY
+registry.hm. 86400 IN NS ns1.registry.hm.
+registry.hm. 86400 IN NS ns2.registry.hm.
+registry.hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+registry.hm. IN DNSKEY
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+registry.hm. IN DS
+SECTION AUTHORITY
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns1.registry.hm. IN A
+SECTION ANSWER
+ns1.registry.hm. 86400 IN A 208.70.79.25
+SECTION AUTHORITY
+registry.hm. 86400 IN NS ns1.registry.hm.
+registry.hm. 86400 IN NS ns2.registry.hm.
+registry.hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns1.registry.hm. IN DNSKEY
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns1.registry.hm. IN NS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns1.registry.hm. IN DS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns1.registry.hm. IN AAAA
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN SOA
+SECTION ANSWER
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+SECTION AUTHORITY
+hm. 86400 IN NS ns1.registry.hm.
+hm. 86400 IN NS ns2.registry.hm.
+hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns2.registry.hm. IN A
+SECTION ANSWER
+ns2.registry.hm. 86400 IN A 208.70.79.24
+SECTION AUTHORITY
+registry.hm. 86400 IN NS ns1.registry.hm.
+registry.hm. 86400 IN NS ns2.registry.hm.
+registry.hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns2.registry.hm. IN DNSKEY
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns2.registry.hm. IN NS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns2.registry.hm. IN DS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns2.registry.hm. IN AAAA
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns3.registry.hm. IN A
+SECTION ANSWER
+ns3.registry.hm. 86400 IN A 128.199.180.188
+SECTION AUTHORITY
+registry.hm. 86400 IN NS ns1.registry.hm.
+registry.hm. 86400 IN NS ns2.registry.hm.
+registry.hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns3.registry.hm. IN DNSKEY
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns3.registry.hm. IN NS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns3.registry.hm. IN DS
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+ns3.registry.hm. IN AAAA
+SECTION AUTHORITY
+registry.hm. 3600 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2015072302 10800 3600 604800 3600
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH qname qtype
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN DNSKEY
+SECTION AUTHORITY
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+registry.hm. IN NS
+SECTION ANSWER
+registry.hm. 86400 IN NS ns1.registry.hm.
+registry.hm. 86400 IN NS ns2.registry.hm.
+registry.hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+hm. IN NS
+SECTION ANSWER
+hm. 86400 IN NS ns1.registry.hm.
+hm. 86400 IN NS ns2.registry.hm.
+hm. 86400 IN NS ns3.registry.hm.
+SECTION ADDITIONAL
+ns1.registry.hm. 86400 IN A 208.70.79.25
+ns2.registry.hm. 86400 IN A 208.70.79.24
+ns3.registry.hm. 86400 IN A 128.199.180.188
+ENTRY_END
+
+
+RANGE_END
+
+
+
+; hm. DS in the root does not exist
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+hm. IN DS
+ENTRY_END
+
+STEP 101 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+hm. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+hm. 86400 IN NSEC hn. NS RRSIG NSEC
+hm. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . vI+rf8FDWlQOpAPeJTvoMH7bceC0qe2U hzdXApcCQK50pacs356TAcnKRKsNu+wa qR0+pM51vnG1AT+pPSK0M70soXrbh8uI TfFMV6u+/6qgU9TzzzQk49UK4Ww6m4l6 uh7/I302reJjTsc9mpCrjkRX7lk96c31 xzcYMlbADfzQsCfofoZDw7bS45mY6nRH /zTNUuEtFZGef0XtkNK9Op32Sf7Qqqqu YuzKBWa1irDaYCCLeyaqSmXQDzl7xKQa szrWtZeA1pwxJ2KKzCfuaYsRk/R6INLv i4tfJ73oKHl7nhKxH/K1fWUrWTuxkR1q R1zQb7VOg0Jf9GUqXxPVXg==
+ENTRY_END
+
+; negative cache in parent zone must not mask data in child
+STEP 102 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+hm. IN SOA
+ENTRY_END
+
+STEP 103 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+hm. IN SOA
+SECTION ANSWER
+hm. 86400 IN SOA ns1.registry.hm. hostmaster.registry.hm. 2018072709 10800 600 6048000 86400
+ENTRY_END
+
+
+; fill new NSEC interval sk..ski
+STEP 200 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sk2. IN DS
+ENTRY_END
+
+STEP 201 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question authority
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+sk2. IN DS
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+; deeper answers for interval sk..ski must be generated from cache
+STEP 202 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deep.sk2. IN A
+ENTRY_END
+
+STEP 203 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question authority
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+deep.sk2. IN A
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+STEP 204 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+deeper.deep.sk2. IN DS
+ENTRY_END
+
+STEP 205 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question authority
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+deeper.deep.sk2. IN DS
+SECTION AUTHORITY
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180809050000 20180727040000 41656 . CU1vfnY07l8A4bd60jFERRzilD9G1Glp Cx5l/o65fIh2fvCTt/pn4C1W1MfpHIOv j23gN/HS3m64+UE6lYPbJlrOcCLOslgK C+8tfmqWjDbI2C5jnDK0shibLIU2MW3L +0PxOZWOeU2a6XRUYYkqyI9jpfQIEDcZ fuQWiBXOtneXsLKNfQf4YxwC+WCxHGPu mc1g9hza83iziIfgmzxFU5Hg05HjAnni Uw4PL8sNrAZsv4sRZqtfoM6KHo84RCP+ Y2pIR97bPW0dspAtTjD9WAbTz0DpvC3f o3flnVlnWxdJhDEBRASUzAGc2d4FwzPO JdbCJNde9bc9VKSx1jEHpQ==
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+; sk. DS record does not exist in root and this answer must be synthesized from cache as well
+STEP 206 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sk. IN DS
+ENTRY_END
+
+STEP 207 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+sk. IN DS
+SECTION AUTHORITY
+. 86400 IN RRSIG SOA 8 0 86400 20180809050000 20180727040000 41656 . zo+cNHA1N9Av53qwpB/bCmnTxAWj6ubo 58W4VkEPk9jzrOKvCm9dVJv7P+JJOX5C t5yx4zch+DBRSRR1U9mmrbegEX4hXtec L3Ev9ZpxYAYUFd7gQ/oM5ZyrUZ08wLYg pYV6vE4qYdxP58dtknbpGUQKz4H3l0SQ eWoSyhOtYK9nNovCNN0swXdkmogEhDxP gY1nhEZiLXFH8W8/G96IgAa2hineMnqV 0z8/K2m7EGjwszDOyCD05Z77cMAryvjL X6Jm7I83+D8UwtfAck8ZGDJFz3l+w08G oeB9ntD1OicidpLtHmeSsN+1nuEL3s1M U47kwIJMAHu8bcyvm4HGRw==
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018072700 1800 900 604800 86400
+sk. 86400 IN NSEC ski. NS RRSIG NSEC
+sk. 86400 IN RRSIG NSEC 8 1 86400 20180809050000 20180727040000 41656 . Z7ihB8GIbqYBTvBPWxq22UkxSfJf/1I5 eIQ0E3cCVB+srJs2mECa3FmiPkzaYEZv mGzDNGlr5T2BHunJHWVED3gN6Y9Mn0YD 8v+0sIfPTTO74uWxHZFQsudZSzBqWaEI S2zHlM8VTiE6/x6QrAyDNIdjLSI5563X q/qVCsYxx10bRKIog4g73ZwBvlmwd1wa Rd/IIaEDCRO/ed6yFMOL5dhhMERrcJVY HdbNCpSb27LT4HFoqXtBMt1Z8VJVqDI3 NMojUq7a0JWMrFhBEiNwgNJ5xHCiiDuc 4nvszt1wiZAebsr8Qcniy4PrDDs+3XOg lBDRhozaOZYS436/Bs27Xw==
+ENTRY_END
+
+
+; ask for type which does not exist
+STEP 400 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root.cz. IN TYPE65535
+ENTRY_END
+
+STEP 401 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+root.cz. IN TYPE65535
+ENTRY_END
+
+; ask for another type which does not exist
+; answer must be generated from cache (is not present in any RANGE)
+STEP 402 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+root.cz. IN TYPE65530
+ENTRY_END
+
+STEP 403 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+root.cz. IN TYPE65530
+SECTION ANSWER
+SECTION AUTHORITY
+root.cz. 600 IN NSEC 10.root.cz. A NS SOA MX TXT AAAA RRSIG NSEC DNSKEY
+root.cz. 600 IN RRSIG NSEC 5 2 600 20190528123431 20180528123431 8130 root.cz. zyNxcRCooKSKBrLYS+o8ZXZXqN+OakCK 3/A06vZsprPaKyy1Q67Zu7J8I1WW0faX SB5Zvv7ka+TeoE4HfYZmQQ==
+root.cz. 600 IN RRSIG SOA 5 2 600 20190528123431 20180528123431 8130 root.cz. BEf0O/YUhGy6Xoh15SYLu5K/BKmlOW/x g39vk0ficFELb7FYzHUEKghXaSCAtjzL 41ZhRQqB6yHXMBSxujHxeA==
+root.cz. 600 IN SOA ns.iinfo.cz. hostmaster.iinfo.cz. 2018052801 86400 3600 3600000 600
+ENTRY_END
+
+; synthesized answer must not block other data at the same node
+STEP 405 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root.cz. IN A
+ENTRY_END
+
+STEP 406 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+root.cz. IN A
+SECTION ANSWER
+root.cz. 600 IN A 91.213.160.118
+ENTRY_END
+
+; fill cache with *.blog.root.cz. CNAME
+STEP 501 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+random1.blog.root.cz. IN A
+ENTRY_END
+
+STEP 502 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN A
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+root.cz. 600 IN A 91.213.160.118
+ENTRY_END
+
+; test final NODATA answer from wildcard
+STEP 503 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+random1.blog.root.cz. IN TYPE65535
+ENTRY_END
+
+STEP 504 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+random1.blog.root.cz. IN TYPE65535
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+random1.blog.root.cz. 600 IN CNAME blog.root.cz.
+ENTRY_END
+
+; complete answer must be synthesized from wildcard
+STEP 505 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+random2.blog.root.cz. IN A
+ENTRY_END
+
+STEP 506 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+random2.blog.root.cz. IN A
+SECTION ANSWER
+blog.root.cz. 600 IN CNAME root.cz.
+blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. DSHP4iTt49vRSsPjtBBxXj876UXSZukv 5Uko/B3GfLujWV/fOwZIQaHJTmfwzmT0 l4I+FSGkhwwHRQpCpqvzOQ==
+random2.blog.root.cz. 600 IN CNAME blog.root.cz.
+random2.blog.root.cz. 600 IN RRSIG CNAME 5 3 600 20190528123431 20180528123431 8130 root.cz. db6OwEqbgywxPO8tTqz/nh9yj1mY/hYZ KmHhH4HH1v2eH1wIU/S1jvD1ZHGAssVw xbh9LoY0x0mSPdCciX1WvQ==
+root.cz. 600 IN A 91.213.160.118
+root.cz. 600 IN RRSIG A 5 2 600 20190528123431 20180528123431 8130 root.cz. VbfAvnvnwmW04evIkjQTSeJN5J9Gtfum 2m13VOQCetKK01G4h5yS18qS5Yl4dZQh zftnYpQ1WJlkM6a3RXAgPw==
+SECTION AUTHORITY
+*.blog.root.cz. 600 IN NSEC blog-beta.root.cz. CNAME RRSIG NSEC
+*.blog.root.cz. 600 IN RRSIG NSEC 5 3 600 20190528123431 20180528123431 8130 root.cz. dq9cWL5b4ogXMDfVhICOc6uBAuV8YnlA +eNB09aH8vjwJlNtiKPZknER3foS8bVx OEhJrYXGtldnMFP3rLlcKA==
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_name_error_response-part2.rpl b/tests/deckard/sets/resolver/nsec_name_error_response-part2.rpl
new file mode 100644
index 0000000..af91839
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_name_error_response-part2.rpl
@@ -0,0 +1,227 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 17272 13 4 B87AD8C76DC2244E7AA57285057BF533F2E248CC8D7E1A071D8A3837A711A5EA705C4707E6E8911DA653BE1AE019927B"
+ val-override-timestamp: "1442323400"
+ do-not-query-localhost: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 127.0.0.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC name error responses.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+. 3600 IN RRSIG NS 13 0 3600 20151014142315 20150914142315 17272 . aEIYUS4S8Hd7vAVYvHwFyV97lKx4xt2PgAUbM4A7JUXHkTJDHUQEDVQh LWGxK6e+AUeuq4qlDo4vSz3IedmOBQ==
+SECTION ADDITIONAL
+ns. 3600 IN A 127.0.0.1
+ns. 3600 IN RRSIG A 13 1 3600 20151014142315 20150914142315 17272 . 27h0pFJyb5t/2cZsFjynp0TRIdUlQwPYcAwCer2UbXTiBBaD8n15hfh8 PFU0if8X0ikqHusz6rCNTx/aBraYdQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 256 3 13 qKlBZ0TvdY8C8+7bTcdnQdrLZxEwvxEwlGmIOTd/ccL5Jiei1whNktoE /Qzo1lJ0cXfVssy4EVMaqEdzIa+pkA==
+. 3600 IN RRSIG DNSKEY 13 0 3600 20151014142315 20150914142315 17272 . FaY+kslqSPIRZsk65z8SrROt7kfx+RGUEBGbVgLQxKruJxc9+MMrl4e4 +RefYIlwpecj4jXwb75RTbT0g7OGGg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN MX
+SECTION AUTHORITY
+example. 3600 IN NS ns.example.
+example. 3600 IN DS 11225 13 4 B4BDAB0B3751300BFB9D0D240649279B4BA0E67A308E1B0BFE2931D9 47F7FD71A2BD807D84CDE24286D955A35752484F
+example. 3600 IN RRSIG DS 13 1 3600 20151014143533 20150914143533 17272 . b0+fXKmsBBXkzf+Myr5eRsXWDvY75oMlr4Yi5j+3iF7cOviVGKz3Dw8u bfKW+OmyHiuTeL71gez/84P+vHEvHA==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.2
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+example. 3600 IN NS ns.example.
+example. 3600 IN RRSIG NS 13 1 3600 20151014143225 20150914143225 11225 example. C6KOyVJzeRh/3KL9BxSVOVZN0RIyBhlBmmmnVEFT5qPUrn3m5FjcIBtI hi7cAl2FeY1rqstztvKAY6UOBE0kGQ==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ns.example. 3600 IN RRSIG A 13 2 3600 20151014143225 20150914143225 11225 example. fM/mwUOtyIbKTxgxaekZf5A8kV3qYIFADtvhcQi0TUh09nfkHQtUqhew zVBXCEtjKMnYFvNhWF6PyiirtOeM8w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. 3600 IN DNSKEY 256 3 13 d9Qb4Tj90Y2cvdWcZfu45clfoLKqGbJn2vQKqZv07nc4FMf2oRkrNXtP fixVTLfbbWAFtbbFf3mhCNUsetRUVQ==
+example. 3600 IN RRSIG DNSKEY 13 1 3600 20151015124839 20150915124839 11225 example. 4DemFjvys9Gfq+gG1i8IB6GPBUw9lIv3F082JwW7O8tqNIn45n2z14gg ieeJTRhU9xXOVIfj6amITZWbjvGyFA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN DS 54343 13 4 90ABD4FB9F053CF67F6D838DD2437FB16104B8BF127319706223004F 2ED72AF2872B4E507EB483A303BF60BF08C87364
+nsec.example. 3600 IN RRSIG DS 13 2 3600 20151015124611 20150915124611 11225 example. HYzlEdyYugggsEwUVyyY4XHFVUZZ8yiIh4vnuViGBQQJP+yryYh1aLyN ap2Q51nkmSG1fXDb2IySiAYuqUJyLw==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ENTRY_END
+
+RANGE_END
+
+; ns.nsec.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.3
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION ANSWER
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN RRSIG NS 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 6s75LEuylIKAxqAbcPmmnkOMC7jxF6cPZGW5EFbhOOeR63ENyh642GE1 71WtJc7Ta4Y/PsnAT+/dTv8NSTDCHQ==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ns.nsec.example. 3600 IN RRSIG A 13 3 3600 20151015124917 20150915124917 54343 nsec.example. oJpF87bjXR0DjIoNvEAo+Wu+p9jF+URX5lxi+g53OFCX1Q1lxqj5ujGd KOPsNAbKvTCsoFFW4tQyhCYJYD1HlQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN DNSKEY
+SECTION ANSWER
+nsec.example. 3600 IN DNSKEY 256 3 13 HA6nKf+X7/mYkmmRO8qS2tIKT0B60P7COAiRs25xKs/rAP+tDtGWkrkG NQx2D3ajccC9whjRaKz2JVS3ItTFQg==
+nsec.example. 3600 IN RRSIG DNSKEY 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 965Mfxs1QtgxwzyhfxXyKyOZ9iT1DXpvypBBR10sLyjHe/w7cRhgcyev Cza6K+2jJwHJBmbknc3Qhi+1dd+AJw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+aaa.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+mail.nsec.example. 3600 IN NSEC multiple.nsec.example. A AAAA RRSIG NSEC
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+mail.nsec.example. 3600 IN RRSIG NSEC 13 3 3600 20151015124917 20150915124917 54343 nsec.example. kM+Z63RDn377szwbOqPPinkH98BuCljY7hoeM8jGJcnQ90fA3NFi72Jg k/0T1bo4r0cNMn6lm9OUotawa6BOqw==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing1.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing2.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+mail.nsec.example. 3600 IN NSEC multiple.nsec.example. A AAAA RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+mail.nsec.example. 3600 IN RRSIG NSEC 13 3 3600 20151015124917 20150915124917 54343 nsec.example. kM+Z63RDn377szwbOqPPinkH98BuCljY7hoeM8jGJcnQ90fA3NFi72Jg k/0T1bo4r0cNMn6lm9OUotawa6BOqw==
+ENTRY_END
+
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+
+
+STEP 5 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing1.nsec.example. IN MX
+ENTRY_END
+
+STEP 6 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing1.nsec.example. IN MX
+SECTION AUTHORITY
+ENTRY_END
+
+STEP 7 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing2.nsec.example. IN MX
+ENTRY_END
+
+STEP 8 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing2.nsec.example. IN MX
+SECTION AUTHORITY
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_name_error_response.rpl b/tests/deckard/sets/resolver/nsec_name_error_response.rpl
new file mode 100644
index 0000000..80deb25
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_name_error_response.rpl
@@ -0,0 +1,240 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 17272 13 4 B87AD8C76DC2244E7AA57285057BF533F2E248CC8D7E1A071D8A3837A711A5EA705C4707E6E8911DA653BE1AE019927B"
+ val-override-timestamp: "1442323400"
+ do-not-query-localhost: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 127.0.0.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC name error responses.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+. 3600 IN RRSIG NS 13 0 3600 20151014142315 20150914142315 17272 . aEIYUS4S8Hd7vAVYvHwFyV97lKx4xt2PgAUbM4A7JUXHkTJDHUQEDVQh LWGxK6e+AUeuq4qlDo4vSz3IedmOBQ==
+SECTION ADDITIONAL
+ns. 3600 IN A 127.0.0.1
+ns. 3600 IN RRSIG A 13 1 3600 20151014142315 20150914142315 17272 . 27h0pFJyb5t/2cZsFjynp0TRIdUlQwPYcAwCer2UbXTiBBaD8n15hfh8 PFU0if8X0ikqHusz6rCNTx/aBraYdQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 256 3 13 qKlBZ0TvdY8C8+7bTcdnQdrLZxEwvxEwlGmIOTd/ccL5Jiei1whNktoE /Qzo1lJ0cXfVssy4EVMaqEdzIa+pkA==
+. 3600 IN RRSIG DNSKEY 13 0 3600 20151014142315 20150914142315 17272 . FaY+kslqSPIRZsk65z8SrROt7kfx+RGUEBGbVgLQxKruJxc9+MMrl4e4 +RefYIlwpecj4jXwb75RTbT0g7OGGg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN MX
+SECTION AUTHORITY
+example. 3600 IN NS ns.example.
+example. 3600 IN DS 11225 13 4 B4BDAB0B3751300BFB9D0D240649279B4BA0E67A308E1B0BFE2931D9 47F7FD71A2BD807D84CDE24286D955A35752484F
+example. 3600 IN RRSIG DS 13 1 3600 20151014143533 20150914143533 17272 . b0+fXKmsBBXkzf+Myr5eRsXWDvY75oMlr4Yi5j+3iF7cOviVGKz3Dw8u bfKW+OmyHiuTeL71gez/84P+vHEvHA==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.2
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+example. 3600 IN NS ns.example.
+example. 3600 IN RRSIG NS 13 1 3600 20151014143225 20150914143225 11225 example. C6KOyVJzeRh/3KL9BxSVOVZN0RIyBhlBmmmnVEFT5qPUrn3m5FjcIBtI hi7cAl2FeY1rqstztvKAY6UOBE0kGQ==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ns.example. 3600 IN RRSIG A 13 2 3600 20151014143225 20150914143225 11225 example. fM/mwUOtyIbKTxgxaekZf5A8kV3qYIFADtvhcQi0TUh09nfkHQtUqhew zVBXCEtjKMnYFvNhWF6PyiirtOeM8w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. 3600 IN DNSKEY 256 3 13 d9Qb4Tj90Y2cvdWcZfu45clfoLKqGbJn2vQKqZv07nc4FMf2oRkrNXtP fixVTLfbbWAFtbbFf3mhCNUsetRUVQ==
+example. 3600 IN RRSIG DNSKEY 13 1 3600 20151015124839 20150915124839 11225 example. 4DemFjvys9Gfq+gG1i8IB6GPBUw9lIv3F082JwW7O8tqNIn45n2z14gg ieeJTRhU9xXOVIfj6amITZWbjvGyFA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN DS 54343 13 4 90ABD4FB9F053CF67F6D838DD2437FB16104B8BF127319706223004F 2ED72AF2872B4E507EB483A303BF60BF08C87364
+nsec.example. 3600 IN RRSIG DS 13 2 3600 20151015124611 20150915124611 11225 example. HYzlEdyYugggsEwUVyyY4XHFVUZZ8yiIh4vnuViGBQQJP+yryYh1aLyN ap2Q51nkmSG1fXDb2IySiAYuqUJyLw==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ENTRY_END
+
+RANGE_END
+
+; ns.nsec.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.3
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION ANSWER
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN RRSIG NS 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 6s75LEuylIKAxqAbcPmmnkOMC7jxF6cPZGW5EFbhOOeR63ENyh642GE1 71WtJc7Ta4Y/PsnAT+/dTv8NSTDCHQ==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ns.nsec.example. 3600 IN RRSIG A 13 3 3600 20151015124917 20150915124917 54343 nsec.example. oJpF87bjXR0DjIoNvEAo+Wu+p9jF+URX5lxi+g53OFCX1Q1lxqj5ujGd KOPsNAbKvTCsoFFW4tQyhCYJYD1HlQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN DNSKEY
+SECTION ANSWER
+nsec.example. 3600 IN DNSKEY 256 3 13 HA6nKf+X7/mYkmmRO8qS2tIKT0B60P7COAiRs25xKs/rAP+tDtGWkrkG NQx2D3ajccC9whjRaKz2JVS3ItTFQg==
+nsec.example. 3600 IN RRSIG DNSKEY 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 965Mfxs1QtgxwzyhfxXyKyOZ9iT1DXpvypBBR10sLyjHe/w7cRhgcyev Cza6K+2jJwHJBmbknc3Qhi+1dd+AJw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+aaa.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+mail.nsec.example. 3600 IN NSEC multiple.nsec.example. A AAAA RRSIG NSEC
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+mail.nsec.example. 3600 IN RRSIG NSEC 13 3 3600 20151015124917 20150915124917 54343 nsec.example. kM+Z63RDn377szwbOqPPinkH98BuCljY7hoeM8jGJcnQ90fA3NFi72Jg k/0T1bo4r0cNMn6lm9OUotawa6BOqw==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing1.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+missing2.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+mail.nsec.example. 3600 IN NSEC multiple.nsec.example. A AAAA RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+mail.nsec.example. 3600 IN RRSIG NSEC 13 3 3600 20151015124917 20150915124917 54343 nsec.example. kM+Z63RDn377szwbOqPPinkH98BuCljY7hoeM8jGJcnQ90fA3NFi72Jg k/0T1bo4r0cNMn6lm9OUotawa6BOqw==
+ENTRY_END
+
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+aaa.nsec.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NXDOMAIN
+SECTION QUESTION
+aaa.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+STEP 3 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing.nsec.example. IN MX
+ENTRY_END
+
+STEP 4 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NXDOMAIN
+SECTION QUESTION
+missing.nsec.example. IN MX
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 2 60 60 120 3600
+mail.nsec.example. 3600 IN NSEC multiple.nsec.example. A AAAA RRSIG NSEC
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151015124917 20150915124917 54343 nsec.example. AcjIOhRgJMRILo06O2yl/G4Q6gTuA0NIGpnejpgcoVHg8kZy6xmURhTc kYf//qbx/WPB9k+8j+ymmQPe1phJCQ==
+mail.nsec.example. 3600 IN RRSIG NSEC 13 3 3600 20151015124917 20150915124917 54343 nsec.example. kM+Z63RDn377szwbOqPPinkH98BuCljY7hoeM8jGJcnQ90fA3NFi72Jg k/0T1bo4r0cNMn6lm9OUotawa6BOqw==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+;; TODO: use INCLUDE when it's available.
+;; Aggressive cache can answer STEP 5 and 7 without asking,
+;; from the record in previous answer, as `missing*` is between `mail` and `multiple`.
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_no_data_response.rpl b/tests/deckard/sets/resolver/nsec_no_data_response.rpl
new file mode 100644
index 0000000..aa8deaa
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_no_data_response.rpl
@@ -0,0 +1,201 @@
+; config options
+;server:
+ trust-anchor: ". 3600 IN DS 17272 13 4 B87AD8C76DC2244E7AA57285057BF533F2E248CC8D7E1A071D8A3837A711A5EA705C4707E6E8911DA653BE1AE019927B"
+ val-override-timestamp: "1442839270"
+ do-not-query-localhost: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 127.0.0.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC name error responses.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+. 3600 IN RRSIG NS 13 0 3600 20151014142315 20150914142315 17272 . aEIYUS4S8Hd7vAVYvHwFyV97lKx4xt2PgAUbM4A7JUXHkTJDHUQEDVQh LWGxK6e+AUeuq4qlDo4vSz3IedmOBQ==
+SECTION ADDITIONAL
+ns. 3600 IN A 127.0.0.1
+ns. 3600 IN RRSIG A 13 1 3600 20151014142315 20150914142315 17272 . 27h0pFJyb5t/2cZsFjynp0TRIdUlQwPYcAwCer2UbXTiBBaD8n15hfh8 PFU0if8X0ikqHusz6rCNTx/aBraYdQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 256 3 13 qKlBZ0TvdY8C8+7bTcdnQdrLZxEwvxEwlGmIOTd/ccL5Jiei1whNktoE /Qzo1lJ0cXfVssy4EVMaqEdzIa+pkA==
+. 3600 IN RRSIG DNSKEY 13 0 3600 20151014142315 20150914142315 17272 . FaY+kslqSPIRZsk65z8SrROt7kfx+RGUEBGbVgLQxKruJxc9+MMrl4e4 +RefYIlwpecj4jXwb75RTbT0g7OGGg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION AUTHORITY
+example. 3600 IN NS ns.example.
+example. 3600 IN DS 11225 13 4 B4BDAB0B3751300BFB9D0D240649279B4BA0E67A308E1B0BFE2931D9 47F7FD71A2BD807D84CDE24286D955A35752484F
+example. 3600 IN RRSIG DS 13 1 3600 20151014143533 20150914143533 17272 . b0+fXKmsBBXkzf+Myr5eRsXWDvY75oMlr4Yi5j+3iF7cOviVGKz3Dw8u bfKW+OmyHiuTeL71gez/84P+vHEvHA==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.2
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+example. 3600 IN NS ns.example.
+example. 3600 IN RRSIG NS 13 1 3600 20151014143225 20150914143225 11225 example. C6KOyVJzeRh/3KL9BxSVOVZN0RIyBhlBmmmnVEFT5qPUrn3m5FjcIBtI hi7cAl2FeY1rqstztvKAY6UOBE0kGQ==
+SECTION ADDITIONAL
+ns.example. 3600 IN A 127.0.0.2
+ns.example. 3600 IN RRSIG A 13 2 3600 20151014143225 20150914143225 11225 example. fM/mwUOtyIbKTxgxaekZf5A8kV3qYIFADtvhcQi0TUh09nfkHQtUqhew zVBXCEtjKMnYFvNhWF6PyiirtOeM8w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. 3600 IN DNSKEY 256 3 13 d9Qb4Tj90Y2cvdWcZfu45clfoLKqGbJn2vQKqZv07nc4FMf2oRkrNXtP fixVTLfbbWAFtbbFf3mhCNUsetRUVQ==
+example. 3600 IN RRSIG DNSKEY 13 1 3600 20151015124839 20150915124839 11225 example. 4DemFjvys9Gfq+gG1i8IB6GPBUw9lIv3F082JwW7O8tqNIn45n2z14gg ieeJTRhU9xXOVIfj6amITZWbjvGyFA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN DS 54343 13 4 90ABD4FB9F053CF67F6D838DD2437FB16104B8BF127319706223004F 2ED72AF2872B4E507EB483A303BF60BF08C87364
+nsec.example. 3600 IN RRSIG DS 13 2 3600 20151015124611 20150915124611 11225 example. HYzlEdyYugggsEwUVyyY4XHFVUZZ8yiIh4vnuViGBQQJP+yryYh1aLyN ap2Q51nkmSG1fXDb2IySiAYuqUJyLw==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ENTRY_END
+
+RANGE_END
+
+; ns.nsec.example.
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.3
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION ANSWER
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN RRSIG NS 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 6s75LEuylIKAxqAbcPmmnkOMC7jxF6cPZGW5EFbhOOeR63ENyh642GE1 71WtJc7Ta4Y/PsnAT+/dTv8NSTDCHQ==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 127.0.0.3
+ns.nsec.example. 3600 IN RRSIG A 13 3 3600 20151015124917 20150915124917 54343 nsec.example. oJpF87bjXR0DjIoNvEAo+Wu+p9jF+URX5lxi+g53OFCX1Q1lxqj5ujGd KOPsNAbKvTCsoFFW4tQyhCYJYD1HlQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN DNSKEY
+SECTION ANSWER
+nsec.example. 3600 IN DNSKEY 256 3 13 HA6nKf+X7/mYkmmRO8qS2tIKT0B60P7COAiRs25xKs/rAP+tDtGWkrkG NQx2D3ajccC9whjRaKz2JVS3ItTFQg==
+nsec.example. 3600 IN RRSIG DNSKEY 13 2 3600 20151015124917 20150915124917 54343 nsec.example. 965Mfxs1QtgxwzyhfxXyKyOZ9iT1DXpvypBBR10sLyjHe/w7cRhgcyev Cza6K+2jJwHJBmbknc3Qhi+1dd+AJw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151017113144 20150917113144 54343 nsec.example. /3orb3cezQbBCZsFP9rx6Col9AB2QxHQtzQ32BYe09MfN7YZxtTE/HZJ aSXGWD3D7sLBdEkg8TGP8JPQtbW2yQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN TYPE1000
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151017113144 20150917113144 54343 nsec.example. /3orb3cezQbBCZsFP9rx6Col9AB2QxHQtzQ32BYe09MfN7YZxtTE/HZJ aSXGWD3D7sLBdEkg8TGP8JPQtbW2yQ==
+ENTRY_END
+
+RANGE_END
+
+;STEP 0 TIME_PASSES ELAPSE 1000
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+nsec.example. IN CNAME
+ENTRY_END
+
+; recursion happens here.
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN NSEC alias.nsec.example. A NS SOA MX AAAA RRSIG NSEC DNSKEY
+nsec.example. 3600 IN RRSIG SOA 13 2 3600 20151017113144 20150917113144 54343 nsec.example. /3orb3cezQbBCZsFP9rx6Col9AB2QxHQtzQ32BYe09MfN7YZxtTE/HZJ aSXGWD3D7sLBdEkg8TGP8JPQtbW2yQ==
+nsec.example. 3600 IN RRSIG NSEC 13 2 3600 20151015124917 20150915124917 54343 nsec.example. STcV7Lc1a794i9DTgflI+d0N0KXTMws0G8VGc0Wo4tVI8lvFJcG1SFXW /jJaXkQstdZ2EM63fIs/u1hhBaV2Gw==
+ENTRY_END
+
+; TODO: aggressive caching can return the same answer as in STEP 2, without asking again.
+;STEP 3 QUERY
+;ENTRY_BEGIN
+;REPLY RD DO
+;SECTION QUESTION
+;nsec.example. IN TYPE1000
+;ENTRY_END
+;
+;STEP 4 CHECK_ANSWER
+;ENTRY_BEGIN
+;MATCH all
+;ADJUST copy_id
+;REPLY QR RD RA SERVFAIL
+;SECTION QUESTION
+;nsec.example. IN TYPE1000
+;SECTION AUTHORITY
+;ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_ref_to_unsigned1.rpl b/tests/deckard/sets/resolver/nsec_ref_to_unsigned1.rpl
new file mode 100644
index 0000000..3570eb7
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_ref_to_unsigned1.rpl
@@ -0,0 +1,196 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN NSEC, referral to unsigned subzone, no ds, nsec.
+
+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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2016022600 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 10 2 3600 20251231235959 20160308093040 2843 example.com. s3pCq6ZK3DEUkWYX3XKvr5v9Z4AhbJ4P7/AKQkhe3zymnTba7Bo5Uhmb Vav/A+u8gsoo9yBumReXLAv047btO+jdCOLD/yXvmaSt/yGGcipFoX6r 4kQWzUHby4NlQEdO3YykiZx7FtCGsMp0cfwPae4glkDsAPnIhhQurzzE VP4=
+sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+a.sub.example.com. 3600 IN A 1.2.3.11
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.sub.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+a.sub.example.com. 3600 IN A 1.2.3.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_ref_to_unsigned2.rpl b/tests/deckard/sets/resolver/nsec_ref_to_unsigned2.rpl
new file mode 100644
index 0000000..fdf8e06
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_ref_to_unsigned2.rpl
@@ -0,0 +1,197 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN NSEC, referral to unsigned subzone, no ds, no nsec, ds soa.
+
+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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+; no ds, no nsec
+;sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+;sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2016022600 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 10 2 3600 20251231235959 20160308093040 2843 example.com. s3pCq6ZK3DEUkWYX3XKvr5v9Z4AhbJ4P7/AKQkhe3zymnTba7Bo5Uhmb Vav/A+u8gsoo9yBumReXLAv047btO+jdCOLD/yXvmaSt/yGGcipFoX6r 4kQWzUHby4NlQEdO3YykiZx7FtCGsMp0cfwPae4glkDsAPnIhhQurzzE VP4=
+sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+a.sub.example.com. 3600 IN A 1.2.3.11
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.sub.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+a.sub.example.com. 3600 IN A 1.2.3.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_ref_to_unsigned3.rpl b/tests/deckard/sets/resolver/nsec_ref_to_unsigned3.rpl
new file mode 100644
index 0000000..bd9ffc0
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_ref_to_unsigned3.rpl
@@ -0,0 +1,197 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN NSEC, referral to unsigned subzone, no ds, no nsec, bad ds soa.
+
+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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+; no ds, no nsec
+;sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+;sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2016022600 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 10 2 3600 20251231235959 20160308093040 2843 example.com. s3pCq6ZK3DEUkWYX3XKvr5v9Z4AhbJ4P7/AKQkhe3zymnTba7Bo5Uhmb Vav/A+u8gsoo9yBumReXLAv047btO+jdCOLD/yXvmaSt/yGGcipFoX6r 4kQWzUHby4NlQEdO3YykiZx7FtCGsMp0cfwPae4glkDsAPnIhhQurzzE VP4=
+; no nsec
+;sub.example.com. 3600 IN NSEC example.com. NS RRSIG NSEC
+;sub.example.com. 3600 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. extoqd9mqaALMQf5kY5deuxZDL6INjsEKEUSfDibHTEAdNxfnmOJ9wcf hfpQfmgFLUAHsN0V/YB8qq6JhzkEkMV9f7BI/nZpuKCbSHo4ZOEUTflX mGM+VRBQc8gb25K03N0nwb6AvueSVA1PRizrRpQm/wvVWfDNZ+rM/lO6 +i4=
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+a.sub.example.com. 3600 IN A 1.2.3.11
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.sub.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+a.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_answer_response.rpl b/tests/deckard/sets/resolver/nsec_wildcard_answer_response.rpl
new file mode 100644
index 0000000..e51d351
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_answer_response.rpl
@@ -0,0 +1,418 @@
+; config options
+;server:
+ trust-anchor: ". IN DS 41524 8 2 5175938255D97A88F9D16A5A46ED3AE373441DF5058C1666D953005D A6BD57F3"
+ val-override-date: "20170401000000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 192.0.2.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC wildcard answer response.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+. 3600 IN RRSIG NS 8 0 3600 20170418124934 20170319124934 41524 . cclqaWsABHoHHSVEjxvWUkj7WBJQGdxvEj2/brtPw9wh42JsedoAsu9g e7885/LSxVOSFf5mZ3eHN1dfxHF5QLYVO2oKgDOl8kM7Hyb3rkqmOp7L lqVS4v4iH4etaonhIW6qwqZTLlets59Z48sF/qurX6EVE/xTc7Kc917c 7oUgHoPoKa8RXkBvXFOuSgXA+OkewLrBcdGaokSLD92/+wZKLAWopc32 mTbZMSImdywm4CvePEZUyXeeQASc7H4eCKE6LFw/4577YrHzDYp2QVnq meJfYg46NXm7xC4bJni/zHmnjKxIS+vi2CdqA7uJviTFpj5XF3g+73aj LHI99Q==
+SECTION ADDITIONAL
+ns. 3600 IN A 192.0.2.1
+ns. 3600 IN RRSIG A 8 1 3600 20170418124934 20170319124934 41524 . r+kPV+Qp088ifM2RRJd9/kTwlFV4Ejuhb8G8VAPmWwkiXSJSrS7HXR9n xkO1CHSzwGYumIDoZsPqZ+RQwY4EBd6xPuAdMAmN/zbebmz+UtNTGLz3 8KVjZoRsJt0BftJs/o3SogiV6cfUtFVnRJN4sCRzAQcyywtKxhtKgHjX 1A47NKzjkbkm2TlUeVwXJjkp0FleZaiNP6wEoxE2cr1hKX4HutXzegzr PaiNGgQhY3yLohBmoSozFLYUN8YPMw6BTf0CLAqyU6N51fVaPZIlARbd V9Ia48AGz44324WrvssuaW2wb0OQie0RAPrHlXg5Ly5I9DeE6m6Czc+M fHBZUQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 192.0.2.1
+ns. 3600 IN RRSIG A 8 1 3600 20170418124934 20170319124934 41524 . r+kPV+Qp088ifM2RRJd9/kTwlFV4Ejuhb8G8VAPmWwkiXSJSrS7HXR9n xkO1CHSzwGYumIDoZsPqZ+RQwY4EBd6xPuAdMAmN/zbebmz+UtNTGLz3 8KVjZoRsJt0BftJs/o3SogiV6cfUtFVnRJN4sCRzAQcyywtKxhtKgHjX 1A47NKzjkbkm2TlUeVwXJjkp0FleZaiNP6wEoxE2cr1hKX4HutXzegzr PaiNGgQhY3yLohBmoSozFLYUN8YPMw6BTf0CLAqyU6N51fVaPZIlARbd V9Ia48AGz44324WrvssuaW2wb0OQie0RAPrHlXg5Ly5I9DeE6m6Czc+M fHBZUQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+ns. 0 IN NSEC . A RRSIG NSEC
+. 3600 IN RRSIG SOA 8 0 3600 20170418124934 20170319124934 41524 . njTin0/F2e0rVDB1tR4Qf3Fy7yFhsEQBjBP0tLbjAGxkXXmkf3RQAQI6 2OzbNgFH+v+SlupN03LwNbGgxVpvgpEC9X9wh5/l6t+YgMFEHwzVu5Qv 9Mybiqe0gMU8KBtYnTcFkUGs+gE+t7Z/DhPx88zBixYTNGXbDNUWI5nl /xq4FlIAcEb1r+bKpFbpAHyVTrqjy1ZIpn5lYrQPwfrQ/g0iL76SgwT+ 8oBF9LDmrgeVZA5lzzjfu7jp7/N7eYAA6YYZCaK6tca33xTc2RUbmyKQ VJMN8wets+iPxrwAAbHVc5FmxmdlDVQlh4AXkgDahFoUtZwzvLCuphj/ D66dsA==
+ns. 0 IN RRSIG NSEC 8 1 0 20170418124934 20170319124934 41524 . ELuSBQbX8wpCTnUBj2OC/if7HEc0DyekwfNccg84kG9vCfn4PS+AcwJB ZbjJjRWGIIYJBesXuRbaZ1P0yYWSlPfwqbWhO1amSmqOgKEMKgVDmQ3g Qc3e3qqRi5YiGpAnQen7EOnbtUuFKH/OTd5Valq+sKxaYVpJxz53tgTm 42nYuWJg/9aDr9P6NNtl1XoTV+84ApFSxQ9EM9WHsYkVzYTrLZQhMmlQ K1zAsUoUcLISTf5q0T7npsMY7bjaoWfNvGeuUT2VMz44sevivR39Wy3o utWn9zcXa2hXPXW3XXrzIQfkQN9CDkJ5IAwKRPWq1a5vFmbyXN8GfBR3 6le6qA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
+. 3600 IN RRSIG DNSKEY 8 0 3600 20170418124934 20170319124934 41524 . j/TFYuMrE2Hw4fVUjyIeawIGjuPSGYpmaPQO6fo6B36LG+Fi+GsdrR8x 0OltpfgM7K6QXXZvvPe8IiBACfwPhjUbDgocjkT3VfXONO2wg3xI4pbh rBP7va2otZxPKnnOHWg78l9wcDdaJePOvRv9XjqW6TxO1tugskUy612/ fZpaCrqqQPnCxmjxso8VbKYJHy5dRJFVGX0q2BTsoK55x6+Ecao4eDFo d5VFP9R+oMFlMHV9GPF+NPpfWp3lvQa+6jEikJlZXIExx4x0vUzHgrfZ 2V+4C8Hn0Bc9JfyLqYk6aulbfqkxs+Ao9fm+aNkQVJR4+1PLXnqSCH+/ iP0FVQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+. 0 IN NSEC *.nsec.example. NS SOA RRSIG NSEC DNSKEY
+. 3600 IN RRSIG SOA 8 0 3600 20170418145253 20170319145253 41524 . GrQu0mY+qRcyVrfn2tp3IpLLZhXUEVCEIg6oVa+wlS5eNULJIJ4xZLG8 T8Dt/ca7XYiWz5Hbv5FP2UG8vbME9Qi3W4pghCSeUq+r0Z+sKJ//BS20 wcX9gpv3KeenLCiLggZDuDvhIJ0Ce8V+p9p+BFbpL4rSESEOLR7VDt5q 2bXgra5ukVp94OF6mCuMSTv2uPfgoNV5b53waJ2TS98E2yOPnNd/LgYa XWqao2a0en3odQPGy+5sdg+Z+UkLS1ySn6hB50Xl6f1CMYVPU7X8+bub g2bHD3yK2Sy5bkNipyohcW8P7tNnR78HhlJyOOGeHzOS2975B6E34mjV zSumrA==
+. 0 IN RRSIG NSEC 8 0 0 20170418145253 20170319145253 41524 . C0tKsifl3qXK5OqpVW4boQleYwtWtT3P7UeVZhBSqEMAIV7UcEWMnnUW wUgtgA181pwvyqwcDYmbz1sM+1GfewfjQY1ulZyj3bjgOy7/w+0BT8JX +FFXrE6j2vRvHFHF0nyfNHwJHAYxaoEl1m5uobPYQy8Cb61MfbRGfj1Q rF5OcSI1O0ExXoPIcIuS3WN2wAqLGLwzSsrltp6K8N81+bbMHZD4TIlA ED3Rl+hL6eg/kx1IcY5PEKI+T6gaqbRlfXicyk+Z4ZYnMn5nH7k5s6Hw CaMUYMsJLpU5ZUfjgQUFbUyKOU5ivTbPQEcujy9yXJ5dX3K2JP4u7MrY sIpuCA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+name.example. IN NS
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+. 0 IN NSEC *.nsec.example. NS SOA RRSIG NSEC DNSKEY
+. 3600 IN RRSIG SOA 8 0 3600 20170418145253 20170319145253 41524 . GrQu0mY+qRcyVrfn2tp3IpLLZhXUEVCEIg6oVa+wlS5eNULJIJ4xZLG8 T8Dt/ca7XYiWz5Hbv5FP2UG8vbME9Qi3W4pghCSeUq+r0Z+sKJ//BS20 wcX9gpv3KeenLCiLggZDuDvhIJ0Ce8V+p9p+BFbpL4rSESEOLR7VDt5q 2bXgra5ukVp94OF6mCuMSTv2uPfgoNV5b53waJ2TS98E2yOPnNd/LgYa XWqao2a0en3odQPGy+5sdg+Z+UkLS1ySn6hB50Xl6f1CMYVPU7X8+bub g2bHD3yK2Sy5bkNipyohcW8P7tNnR78HhlJyOOGeHzOS2975B6E34mjV zSumrA==
+. 0 IN RRSIG NSEC 8 0 0 20170418145253 20170319145253 41524 . C0tKsifl3qXK5OqpVW4boQleYwtWtT3P7UeVZhBSqEMAIV7UcEWMnnUW wUgtgA181pwvyqwcDYmbz1sM+1GfewfjQY1ulZyj3bjgOy7/w+0BT8JX +FFXrE6j2vRvHFHF0nyfNHwJHAYxaoEl1m5uobPYQy8Cb61MfbRGfj1Q rF5OcSI1O0ExXoPIcIuS3WN2wAqLGLwzSsrltp6K8N81+bbMHZD4TIlA ED3Rl+hL6eg/kx1IcY5PEKI+T6gaqbRlfXicyk+Z4ZYnMn5nH7k5s6Hw CaMUYMsJLpU5ZUfjgQUFbUyKOU5ivTbPQEcujy9yXJ5dX3K2JP4u7MrY sIpuCA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+. 0 IN NSEC *.nsec.example. NS SOA RRSIG NSEC DNSKEY
+*.nsec.example. 0 IN NSEC explicita.nsec.example. A RRSIG NSEC
+. 3600 IN RRSIG SOA 8 0 3600 20170418145253 20170319145253 41524 . GrQu0mY+qRcyVrfn2tp3IpLLZhXUEVCEIg6oVa+wlS5eNULJIJ4xZLG8 T8Dt/ca7XYiWz5Hbv5FP2UG8vbME9Qi3W4pghCSeUq+r0Z+sKJ//BS20 wcX9gpv3KeenLCiLggZDuDvhIJ0Ce8V+p9p+BFbpL4rSESEOLR7VDt5q 2bXgra5ukVp94OF6mCuMSTv2uPfgoNV5b53waJ2TS98E2yOPnNd/LgYa XWqao2a0en3odQPGy+5sdg+Z+UkLS1ySn6hB50Xl6f1CMYVPU7X8+bub g2bHD3yK2Sy5bkNipyohcW8P7tNnR78HhlJyOOGeHzOS2975B6E34mjV zSumrA==
+. 0 IN RRSIG NSEC 8 0 0 20170418145253 20170319145253 41524 . C0tKsifl3qXK5OqpVW4boQleYwtWtT3P7UeVZhBSqEMAIV7UcEWMnnUW wUgtgA181pwvyqwcDYmbz1sM+1GfewfjQY1ulZyj3bjgOy7/w+0BT8JX +FFXrE6j2vRvHFHF0nyfNHwJHAYxaoEl1m5uobPYQy8Cb61MfbRGfj1Q rF5OcSI1O0ExXoPIcIuS3WN2wAqLGLwzSsrltp6K8N81+bbMHZD4TIlA ED3Rl+hL6eg/kx1IcY5PEKI+T6gaqbRlfXicyk+Z4ZYnMn5nH7k5s6Hw CaMUYMsJLpU5ZUfjgQUFbUyKOU5ivTbPQEcujy9yXJ5dX3K2JP4u7MrY sIpuCA==
+*.nsec.example. 0 IN RRSIG NSEC 8 2 0 20170418145253 20170319145253 41524 . A60R/W7nJnrOGnESzKm1//8kydq91hlsk9+2r5z/AT3vuyLdrDVRmmZg LzIdcJ/9qIt4XrfvaGWmqhs2qmm5EbjFoXh+AoRqaetaK1auuAGHqH9U KdMOuxlkoJ4z6sDpSxumbgVxKq7kj7nKGYF/dyCHTcJhKuo498XYh+MQ MDKu82CfmLPdwroqgQyyux/9oimLbYDo/fz09w+/uzApnOWgyM5WiE/M Q6tgHL+UTi5hdZ7jIF2gCtp+V5YcWLI/wcmuJ7lkCh3B9UoCy0box8PB V4U2chvK7pR3DG8slgEaag5wiPto6fwru7PShfp0oC6d6m0x4jsuT6u1 j6GmIw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+local.nsec.example. IN A
+SECTION ANSWER
+local.nsec.example. 3600 IN A 10.6.6.6
+local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418145253 20170319145253 41524 . aHyII7vYA6ELENm2C+88GLhJ0D+WBO/TaabT4jnHpyPaVlg+KXOg7Ar1 s04vcPDczmzft178ZcQYbeY2/UR7LsDZoj8j+86MTkVP/FIyNt/8rHch r/AFQQvXvjqD1XTho+3Fyk1HLD+VKI8Rkq894cfc9rAPb1+H3PPz6JWb EwM7S6Ox2OixUEVNKStrsEIDzYSyWmdpRXFC8CVR5zEv1OxBlNBUvza2 KNJHTxwEIcFQY5MdKkGIa25TckAYhncboI1j79VdRa0xqymO81E7AR/D HTBVLD/gENvgN7HGAduC834SuZ1ReDhlbSD1KHw5GPgBGw9e7kzpsoYH MASASg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+local.nsec.example. IN NS
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+*.nsec.example. 0 IN NSEC explicita.nsec.example. A RRSIG NSEC
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+. 3600 IN RRSIG SOA 8 0 3600 20170418145253 20170319145253 41524 . GrQu0mY+qRcyVrfn2tp3IpLLZhXUEVCEIg6oVa+wlS5eNULJIJ4xZLG8 T8Dt/ca7XYiWz5Hbv5FP2UG8vbME9Qi3W4pghCSeUq+r0Z+sKJ//BS20 wcX9gpv3KeenLCiLggZDuDvhIJ0Ce8V+p9p+BFbpL4rSESEOLR7VDt5q 2bXgra5ukVp94OF6mCuMSTv2uPfgoNV5b53waJ2TS98E2yOPnNd/LgYa XWqao2a0en3odQPGy+5sdg+Z+UkLS1ySn6hB50Xl6f1CMYVPU7X8+bub g2bHD3yK2Sy5bkNipyohcW8P7tNnR78HhlJyOOGeHzOS2975B6E34mjV zSumrA==
+*.nsec.example. 0 IN RRSIG NSEC 8 2 0 20170418145253 20170319145253 41524 . A60R/W7nJnrOGnESzKm1//8kydq91hlsk9+2r5z/AT3vuyLdrDVRmmZg LzIdcJ/9qIt4XrfvaGWmqhs2qmm5EbjFoXh+AoRqaetaK1auuAGHqH9U KdMOuxlkoJ4z6sDpSxumbgVxKq7kj7nKGYF/dyCHTcJhKuo498XYh+MQ MDKu82CfmLPdwroqgQyyux/9oimLbYDo/fz09w+/uzApnOWgyM5WiE/M Q6tgHL+UTi5hdZ7jIF2gCtp+V5YcWLI/wcmuJ7lkCh3B9UoCy0box8PB V4U2chvK7pR3DG8slgEaag5wiPto6fwru7PShfp0oC6d6m0x4jsuT6u1 j6GmIw==
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.local.nsec.example. IN A
+SECTION ANSWER
+a.local.nsec.example. 3600 IN A 10.6.6.6
+a.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+; Missing NSEC covering the wildcard.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN A
+SECTION ANSWER
+missing-nsec.local.nsec.example. 3600 IN A 10.6.6.6
+missing-nsec.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+ENTRY_END
+
+; kresd will detect validation failure and query for RRSIG
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN RRSIG
+SECTION ANSWER
+missing-nsec.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+ENTRY_END
+
+; NSEC record was attached to another answer created by copying wildcard data to different owner name
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+incorrect.name.example. IN A
+SECTION ANSWER
+incorrect.name.example. 3600 IN A 10.6.6.6
+incorrect.name.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+; kresd will detect validation failure and query for RRSIG
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+incorrect.name.example. IN RRSIG
+SECTION ANSWER
+incorrect.name.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+ENTRY_END
+
+; explicita.nsec.example.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+explicita.nsec.example. IN A
+SECTION ANSWER
+explicita.nsec.example. 3600 IN A 203.0.113.1
+explicita.nsec.example. 3600 IN RRSIG A 8 3 3600 20170418134059 20170319134059 41524 . Nn0DZ1gwzj0FLrgmoeePfKJbvJvTpwtmw6CPehUHyNW7pUOYG8HE45qt tcvx4LWvzYAKy9TY6B7c4D5eMu8+rXXyLg21DX3zFKABEYIeMaJPqPpF WxYqhbP0qQwI/w29B7n3blzzbMOkNvNI4y4RZyBqyqBBfKu/xXYljZG2 MyDlRyEAeV1vewMdhlr6TJoclE6PqYvxiMuXc1f9Nu/TwB22Pp29OTrN A3HFieYVbfWM1F3HtoO6aAk2FVCEveYQOsQ81mgweMKF2OMIK4rjCwlL ffziuSYwF5TcheNATYlaQQZTxKhKsdmGM4BZNprQ/MzoutqIS7j7Vdxs O4N+1Q==
+ENTRY_END
+
+; explicita2.nsec.example. - fake answer attempting to replace explicit record with wildcard data
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+explicita2.nsec.example. IN A
+SECTION ANSWER
+; this was copied from wildcard answer for a.local.nsec.example. IN A
+explicits2.nsec.example. 3600 IN A 10.6.6.6
+explicita2.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.local.nsec.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+a.local.nsec.example. IN A
+SECTION ANSWER
+a.local.nsec.example. 3600 IN A 10.6.6.6
+a.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+; test answer from cache
+STEP 12 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.local.nsec.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 13 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+a.local.nsec.example. IN A
+SECTION ANSWER
+a.local.nsec.example. 3600 IN A 10.6.6.6
+a.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170418134059 20170319134059 41524 . KMkFd5M1F8wVtVhXUnyPZMhY6dGj3g54tX+wgRiGSnqlRICCUdc8NCKG w+lJ1HvDrfNduth5De82MwCfgu2qORDGRF1H0DaoLlYOzy7pNPV1kA9R sXals6EyoFw0pEJkdW/pI5/EJz611c5Oy94iz5LbhkM/kwosmtK1ln3Z N+zGGDRj8xAaWsvmAvPXQoIJhHEblPp/Mcs4V6vX0b7plfkdDxa0hCgf 4UYipsqHo6BXksCEkRznIlDWym9jpVqD7TNAIbO/03TpvhnD50C0Wusb k75cTy24NDD7PTmAZwBlT6qZGnODdc1/ECTnq3kYniN6ceevMZQYEVqw S9haUg==
+SECTION AUTHORITY
+explicita2.nsec.example. 0 IN NSEC ns. A RRSIG NSEC
+explicita2.nsec.example. 0 IN RRSIG NSEC 8 3 0 20170418145253 20170319145253 41524 . kam1hKBwoeTPR0wpvPs2Jyik3hB+Q0Ek4rpD3BNhUa+gTbBk1Z0q5yEs RFVsp6EZlpcP357QiipC2wrPfd3SunGVTVfAD4h6gn1/e5mPN4kJJfOa nMgwZQATF/vilnGu2+5Xtup3blFhg43UJB//iyTcn8c+phMaySbyT5uG xXaM1Gv2maHeJQNOB8cwFWHpYy/Uoph5rpEcZoxGjGkTLNE8pvhlSAgB wYEtMvli3KJH6hjBnOzhMAtOl+ZHy3VFo/UVm/Lwyzmlg+OQ8LCz+NY0 kmAH8z7ZNKZMxyvBpLzxAU2O+j4uSmp5ENuLcqvEyofr2xrq5Fm7OSoH qZvQ1A==
+ENTRY_END
+
+; missing-nsec.local.nsec.example. is covered by explicita2.nsec.example. -> ns.
+; and then the *.nsec.example. wildcard applies (both from the last answer above)
+; kresd by default caches even zero-TTL records for 5 seconds, so let's expire those,
+; so that the aggressive cache won't use them.
+STEP 19 TIME_PASSES ELAPSE 10
+
+; NSEC record is missing
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN A
+ENTRY_END
+
+STEP 22 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN A
+ENTRY_END
+
+; test answer from cache
+STEP 23 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing-nsec.local.nsec.example. IN A
+ENTRY_END
+
+
+; NSEC answer was copied to another name in the same zone
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+incorrect.name.example. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+incorrect.name.example. IN A
+ENTRY_END
+
+; test answer from cache
+STEP 32 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+incorrect.name.example. IN A
+ENTRY_END
+
+STEP 33 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+incorrect.name.example. IN A
+ENTRY_END
+
+; explicitly defined records gets properly validated even with cached wildcard
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO AD
+SECTION QUESTION
+explicita.nsec.example. IN A
+ENTRY_END
+
+STEP 41 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO AD
+SECTION QUESTION
+explicita.nsec.example. IN A
+SECTION ANSWER
+explicita.nsec.example. 3600 IN A 203.0.113.1
+explicita.nsec.example. 3600 IN RRSIG A 8 3 3600 20170418134059 20170319134059 41524 . Nn0DZ1gwzj0FLrgmoeePfKJbvJvTpwtmw6CPehUHyNW7pUOYG8HE45qt tcvx4LWvzYAKy9TY6B7c4D5eMu8+rXXyLg21DX3zFKABEYIeMaJPqPpF WxYqhbP0qQwI/w29B7n3blzzbMOkNvNI4y4RZyBqyqBBfKu/xXYljZG2 MyDlRyEAeV1vewMdhlr6TJoclE6PqYvxiMuXc1f9Nu/TwB22Pp29OTrN A3HFieYVbfWM1F3HtoO6aAk2FVCEveYQOsQ81mgweMKF2OMIK4rjCwlL ffziuSYwF5TcheNATYlaQQZTxKhKsdmGM4BZNprQ/MzoutqIS7j7Vdxs O4N+1Q==
+ENTRY_END
+
+; test answer from cache
+STEP 42 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+explicita.nsec.example. IN A
+ENTRY_END
+
+STEP 43 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO AD
+SECTION QUESTION
+explicita.nsec.example. IN A
+SECTION ANSWER
+explicita.nsec.example. 3600 IN A 203.0.113.1
+explicita.nsec.example. 3600 IN RRSIG A 8 3 3600 20170418134059 20170319134059 41524 . Nn0DZ1gwzj0FLrgmoeePfKJbvJvTpwtmw6CPehUHyNW7pUOYG8HE45qt tcvx4LWvzYAKy9TY6B7c4D5eMu8+rXXyLg21DX3zFKABEYIeMaJPqPpF WxYqhbP0qQwI/w29B7n3blzzbMOkNvNI4y4RZyBqyqBBfKu/xXYljZG2 MyDlRyEAeV1vewMdhlr6TJoclE6PqYvxiMuXc1f9Nu/TwB22Pp29OTrN A3HFieYVbfWM1F3HtoO6aAk2FVCEveYQOsQ81mgweMKF2OMIK4rjCwlL ffziuSYwF5TcheNATYlaQQZTxKhKsdmGM4BZNprQ/MzoutqIS7j7Vdxs O4N+1Q==
+ENTRY_END
+
+; check that explicit record cannot be masked by wildcard
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+explicita2.nsec.example. IN A
+ENTRY_END
+
+STEP 51 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+explicita2.nsec.example. IN A
+ENTRY_END
+
+; it has to work even if wildcard is not in the cache
+STEP 53 TIME_PASSES ELAPSE 4000
+
+STEP 54 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+explicita2.nsec.example. IN A
+ENTRY_END
+
+STEP 55 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+explicita2.nsec.example. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.key b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.key
new file mode 100644
index 0000000..1511e45
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.key
@@ -0,0 +1,5 @@
+; This is a key-signing key, keyid 41524, for .
+; Created: 20170319134901 (Sun Mar 19 14:49:01 2017)
+; Publish: 20170319134901 (Sun Mar 19 14:49:01 2017)
+; Activate: 20170319134901 (Sun Mar 19 14:49:01 2017)
+. IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.private b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.private
new file mode 100644
index 0000000..2811b2b
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/K.+008+41524.private
@@ -0,0 +1,13 @@
+Private-key-format: v1.3
+Algorithm: 8 (RSASHA256)
+Modulus: uDK9hDZWV9/+Kem/g1kuUiTb6XWwvQmh45SVYdnd55ZdkrFAlqRAhfIaLzGy4A3O79hK0unfVJ9T8WPimJRyKoD5Tvgui3VL+Nwzv/V5zOHr1ioZQA9mSt5nfPYOlbME3iWA9H/DQ69Np1rcPja5XZvO5Ir+dcyIylm8/W9nXKQ1GZuSxPMD4eet59GLbK4xJSowdu19t8XCpVNDV11XBIruognTaOj3lglRJkM9RRCVzMiwWxrtnGfqBBmX6JpG4NjqcvHFK1hiVypmFUAblTwPHgjOdDQWQQmn1Fe2/mua0KVxCm50KXWATQYL9b5NNQBreEPn3t+icf6z8590IQ==
+PublicExponent: AQAB
+PrivateExponent: HEH8fPnxCQ4d6cQoUzgtOQDak9gwQu/lXAqBWD+aIVsaA9UZeYK9O09G4RKYxHKZ2oWuBOlID61ZrWCLdKjhUs/yb0D3swFNpGHztnEsPFg0W+idcwxpvvabnboJxsFt776FJ/0psYqFOTVhMFIo4clzVfBU1TGJkrFtotuiWb28eZ85pFJiQUR+agbWjstXaXMmXeSRPYAueBD/bo6u5DqDagH1fzNxhKUxC9nhpeoIj1AtH4bJuO0v4oxq6yrcGEn6Jus5wku9goLCJqykfRikYwQzyUCP/AQMVC++qiQJ89A66psa0F2lcmps5/2skBEM9QB5Vv12jbIw6j6TeQ==
+Prime1: 6AkeSU4ZcvsxDem0IJLhC4zYEpCN+ZAr/757pkv6oIfQv2PhJmXQ1bmiCsYD/uoRDUFNtNGOFjIlmnGHKIefvCSHlZRxCDDzDAvZ6IthkMQEzDcSQkZIpprCt7QMl1Kz2gjEs84+DNxozB54UbEYG908PrF7CF7ix3RHHEDcX6M=
+Prime2: yzjUYzFjM52Q5cwtMHL8gHnacpzQSUidYLZF+xA4dYjc0pjSRMo87sfp2r6wdm3ZOcfOy0SZl4LvO0Kcrz/VB2v0yiBqanDcM3SBg6n7lz/l5Xaoj5rw9JmYj981nJe8vcerZvJl8MLT00uikr1gqoABxKIvHyt7kYcYB2qqSWs=
+Exponent1: Sjzgm8OJEOidQT5Miz9zESb22rm1MuuVqDVhiks03LeXaiSinI5mynqiBaBlFuH8oqkKG5gQRbm1njxEags6aA+n8YuUvnIq0OfZyDUP+ik8/7l+9gVWqTdKpUvN23xyXof/pyeNYsACJ4x4Imrus7uM0uIl4v+4vufM+JUn7NE=
+Exponent2: HUmqakVC27x4lnWviYz40Pc+wUfSSM17SOXb/gvfZyj7UiqOGzXeRDdxf4H94oOAS/B84BSZ4hkPq0W1WRhk9jXbyImVbJOpWI0Q4U3NIYYm9sP8FP4qfcXpE8sCafgAToWJMUP75w/dAVWkL2u1k7zxBEqvadmVbGrAzsjTk9M=
+Coefficient: ms+SW3tNI975ejCbI1vIB31uUqVfvVvxv7eWtzJEdyxBVQKb0aQnXaTMdXiESNc+H5HMau3lbDOw5IcQkp79fKdxLt3SjMYPdnQmBWg7StY3fV1FJcPEEJeFQjWXxioY8rdvMUTMk1FfjxlllBkCyMWuIE4cbRTNdcq76ozM60g=
+Created: 20170319134901
+Publish: 20170319134901
+Activate: 20170319134901
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_answer_response/root.zone b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/root.zone
new file mode 100644
index 0000000..557c92a
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_answer_response/root.zone
@@ -0,0 +1,8 @@
+*.nsec.example. 3600 IN A 10.6.6.6
+
+explicita.nsec.example. 3600 IN A 203.0.113.1
+explicita2.nsec.example. 3600 IN A 203.0.113.2
+
+. 3600 IN SOA . . 0 0 0 0 0
+. 3600 IN NS ns.
+ns. 3600 IN A 192.0.2.1
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_no_data_response-part2.rpl b/tests/deckard/sets/resolver/nsec_wildcard_no_data_response-part2.rpl
new file mode 100644
index 0000000..fbb802a
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_no_data_response-part2.rpl
@@ -0,0 +1,257 @@
+; config options
+;server:
+ trust-anchor: "nsec.example. IN DS 41524 8 2 D6B102667845D6CDDC05B44466426D9CCC189989BF67ADB23605EED0 BFE2A443"
+ val-override-date: "20170401000000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 192.0.2.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC name error responses.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+SECTION ADDITIONAL
+ns. 3600 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION AUTHORITY
+. 3600 IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN CNAME
+SECTION AUTHORITY
+example. 3600 IN NS ns.example.
+SECTION ADDITIONAL
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.2
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+example. 3600 IN NS ns.example.
+SECTION ADDITIONAL
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example. IN A
+SECTION ANSWER
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example. IN AAAA
+SECTION AUTHORITY
+example. 3600 IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN NS ns.nsec.example.
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 192.0.2.3
+ENTRY_END
+
+RANGE_END
+
+; ns.nsec.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.3
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION ANSWER
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN RRSIG NS 8 2 3600 20170419140236 20170320140236 41524 nsec.example. KECif/B3ckfo5d9Qd/5dtIDt/8nIpTfTMxeJU3qw1U8jzQ/+nQ6qZAvr GH4MeGwY0M9kj2Jj3h2tdI+uhfLaGC7LStXIG0Q+PfalGdddDQwwd/p0 oOQ6bt0eilZN5OKF7Frzn4jmV1x7R/iieWp65xB7OByvguYoXOlzuoU1 ikaL43rm/whxn6iHf0K7NfaVqQwO26N/P3EBFFZMwuhHOB2+bVXKoE7r O4bC04tF7wG7CRUlc44xNs08L512RXRuFIrkHg932BFVlEYmPwbflE6+ zfpZafFzYutEHx7XZw2+gAklynmcAXltPCOiqThkDJzw2rpyUmiH0ztm lG76Tg==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 192.0.2.3
+ns.nsec.example. 3600 IN RRSIG A 8 3 3600 20170419140236 20170320140236 41524 nsec.example. E6Cx+MIElwAbw4Hg48Ee4CC4pKSjPkW8fmcHVoTqNwMyRs4Jjyymf1tE mNdjYkoN0kxI8PEgbGxzuwlFLpGncQhuZ0dyTzCPvnYFPLIkDmdtyIcj 4MVZiJpdyc5yRTC+Aja1Ik9cQ25QsSGAg4z54Zv0o6uqodppCHILgBzm Q833AQFh6hOQE3BFM3c8h3PCsH6HJOOIlgqculfT5d0S1XPFGmtjVW4G gZNsNeBtLB/SkvYKzNS+Yw38J9VTtWMlgTUwkjVXzC+f83AgzXHM3neq QhRhf72VO/xP5sd33VXDVBtOqbFSDZHLpGLfaXJSrnzKX5H8nCMuIXbs kWK60w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.nsec.example. IN A
+SECTION ANSWER
+ns.nsec.example. 3600 IN A 192.0.2.3
+ns.nsec.example. 3600 IN RRSIG A 8 3 3600 20170419140236 20170320140236 41524 nsec.example. E6Cx+MIElwAbw4Hg48Ee4CC4pKSjPkW8fmcHVoTqNwMyRs4Jjyymf1tE mNdjYkoN0kxI8PEgbGxzuwlFLpGncQhuZ0dyTzCPvnYFPLIkDmdtyIcj 4MVZiJpdyc5yRTC+Aja1Ik9cQ25QsSGAg4z54Zv0o6uqodppCHILgBzm Q833AQFh6hOQE3BFM3c8h3PCsH6HJOOIlgqculfT5d0S1XPFGmtjVW4G gZNsNeBtLB/SkvYKzNS+Yw38J9VTtWMlgTUwkjVXzC+f83AgzXHM3neq QhRhf72VO/xP5sd33VXDVBtOqbFSDZHLpGLfaXJSrnzKX5H8nCMuIXbs kWK60w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.nsec.example. IN AAAA
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+ns.nsec.example. 3600 IN NSEC nsec.example. A RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ns.nsec.example. 3600 IN RRSIG NSEC 8 3 3600 20170419140236 20170320140236 41524 nsec.example. iOfnQqIT9V87emJsd/Aym6JqU4H8bzjNq3cbWUmiohgdKr2pkqdt3RV1 r/LGbhSm+seWC/xWuBinEH2WAwXwQMUGrYi5htGazk9C97gkSvle/gXT NZweNC7SkrkBv1VXHG/PrinzFP/YWRn7zMn7fOj/uYWDaYAi0Fzh+Ctn fx2hsHIXC9LduIs+Uv9B58tr9tkF5JNYapoZO59Wtiz1GPaPnfUg9X2u 2T+J5rWpYHJkzKulW+yi0YpipfJY+9J9KWGr2PorChm/W1mc83MptyK2 Po+IbX/I0YStNv+nCLccBo94y/DGOLVnF0XpJZnR5ZDcb8ZmbZIP7uD3 GBFKMg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN DNSKEY
+SECTION ANSWER
+nsec.example. 3600 IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
+nsec.example. 3600 IN RRSIG DNSKEY 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Z1kUmre0LJX76zuKEYhCN5bNNPvXONZK8LElwgNqEQW4kPApz8+vfLmb 4Xlz6D9ChG6J0Pp/JHdKn+S+Le4B5dUOPzuOksfkHTmRsh9oN2ccSEq3 eJK1VhWwRN69xs1LZgXzVJk7DnDnPVUyIbDpb5piBCJHQVwkrIa1Ykeh hexHJb7YZBmF1B6GqTl7K9QwIvfnpKH+iM83QngepAJqpJuHSEPNWCbQ S9rfuP1SObyZD4L/Z3hBFpaZL9N25ThH7znfTc60xNCitmNMFfq68X2/ JoSrVrFLNv9nlneYNkihorhzDMlzN/i/EhrtBkdaSiRlEODnY7zN4Eax m3JkFQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+local.nsec.example. IN A
+SECTION ANSWER
+local.nsec.example. 3600 IN A 10.6.6.6
+local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+SECTION AUTHORITY
+*.nsec.example. 3600 IN NSEC ns.nsec.example. A RRSIG NSEC
+*.nsec.example. 3600 IN RRSIG NSEC 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Hp/6sgDgYZuewpSkAugLRERgVAGgAIAN9vAqfuAGcqCxfQXLIXcXD8ji o4rjuSMmAaRw0AQ70pEWldc2Yqre+++/lnEJt5tpGrIhH2raJU9RS/Ix NaN40vwspRdN7tDNLH1T0oTDll76bVc/D4VFtnpGOlM3eIGjFVVdACvZ V0oVW8xp686xwB3uP2DqA0fxMjs4p9PC1FrnTAlGvTX0ThgZR6EmmWJH HCy4kpjfTFR93k/nuAendDVVZNkHL+EncojmUX+U0PRSZPXWBWXbb0kq h1OVaT4HpyWKet+PxKkTGaoNbXRk0BAKC/4Qg4A/+kRk+1OXG4dQMdsS zLnt/Q==
+ENTRY_END
+
+; missing NSEC proof
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN CNAME
+SECTION ANSWER
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN RRSIG
+SECTION ANSWER
+missing-nsec-nodata.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+ENTRY_END
+
+; synthesized A record was removed and replaced with SOA but no NSEC
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN A
+SECTION ANSWER
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN RRSIG
+SECTION ANSWER
+missing-nsec-masked-data.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+local.nsec.example. IN NS
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+*.nsec.example. 3600 IN NSEC ns.nsec.example. A RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+*.nsec.example. 3600 IN RRSIG NSEC 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Hp/6sgDgYZuewpSkAugLRERgVAGgAIAN9vAqfuAGcqCxfQXLIXcXD8ji o4rjuSMmAaRw0AQ70pEWldc2Yqre+++/lnEJt5tpGrIhH2raJU9RS/Ix NaN40vwspRdN7tDNLH1T0oTDll76bVc/D4VFtnpGOlM3eIGjFVVdACvZ V0oVW8xp686xwB3uP2DqA0fxMjs4p9PC1FrnTAlGvTX0ThgZR6EmmWJH HCy4kpjfTFR93k/nuAendDVVZNkHL+EncojmUX+U0PRSZPXWBWXbb0kq h1OVaT4HpyWKet+PxKkTGaoNbXRk0BAKC/4Qg4A/+kRk+1OXG4dQMdsS zLnt/Q==
+ENTRY_END
+
+RANGE_END
+
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN CNAME
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN CNAME
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/nsec_wildcard_no_data_response.rpl b/tests/deckard/sets/resolver/nsec_wildcard_no_data_response.rpl
new file mode 100644
index 0000000..0882917
--- /dev/null
+++ b/tests/deckard/sets/resolver/nsec_wildcard_no_data_response.rpl
@@ -0,0 +1,282 @@
+; config options
+;server:
+ trust-anchor: "nsec.example. IN DS 41524 8 2 D6B102667845D6CDDC05B44466426D9CCC189989BF67ADB23605EED0 BFE2A443"
+ val-override-date: "20170401000000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 192.0.2.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of NSEC name error responses.
+
+; ns.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+SECTION ADDITIONAL
+ns. 3600 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION AUTHORITY
+. 3600 IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN CNAME
+SECTION AUTHORITY
+example. 3600 IN NS ns.example.
+SECTION ADDITIONAL
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+RANGE_END
+
+; ns.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.2
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+example. 3600 IN NS ns.example.
+SECTION ADDITIONAL
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example. IN A
+SECTION ANSWER
+ns.example. 3600 IN A 192.0.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example. IN AAAA
+SECTION AUTHORITY
+example. 3600 IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN NS ns.nsec.example.
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 192.0.2.3
+ENTRY_END
+
+RANGE_END
+
+; ns.nsec.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.3
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN NS
+SECTION ANSWER
+nsec.example. 3600 IN NS ns.nsec.example.
+nsec.example. 3600 IN RRSIG NS 8 2 3600 20170419140236 20170320140236 41524 nsec.example. KECif/B3ckfo5d9Qd/5dtIDt/8nIpTfTMxeJU3qw1U8jzQ/+nQ6qZAvr GH4MeGwY0M9kj2Jj3h2tdI+uhfLaGC7LStXIG0Q+PfalGdddDQwwd/p0 oOQ6bt0eilZN5OKF7Frzn4jmV1x7R/iieWp65xB7OByvguYoXOlzuoU1 ikaL43rm/whxn6iHf0K7NfaVqQwO26N/P3EBFFZMwuhHOB2+bVXKoE7r O4bC04tF7wG7CRUlc44xNs08L512RXRuFIrkHg932BFVlEYmPwbflE6+ zfpZafFzYutEHx7XZw2+gAklynmcAXltPCOiqThkDJzw2rpyUmiH0ztm lG76Tg==
+SECTION ADDITIONAL
+ns.nsec.example. 3600 IN A 192.0.2.3
+ns.nsec.example. 3600 IN RRSIG A 8 3 3600 20170419140236 20170320140236 41524 nsec.example. E6Cx+MIElwAbw4Hg48Ee4CC4pKSjPkW8fmcHVoTqNwMyRs4Jjyymf1tE mNdjYkoN0kxI8PEgbGxzuwlFLpGncQhuZ0dyTzCPvnYFPLIkDmdtyIcj 4MVZiJpdyc5yRTC+Aja1Ik9cQ25QsSGAg4z54Zv0o6uqodppCHILgBzm Q833AQFh6hOQE3BFM3c8h3PCsH6HJOOIlgqculfT5d0S1XPFGmtjVW4G gZNsNeBtLB/SkvYKzNS+Yw38J9VTtWMlgTUwkjVXzC+f83AgzXHM3neq QhRhf72VO/xP5sd33VXDVBtOqbFSDZHLpGLfaXJSrnzKX5H8nCMuIXbs kWK60w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.nsec.example. IN A
+SECTION ANSWER
+ns.nsec.example. 3600 IN A 192.0.2.3
+ns.nsec.example. 3600 IN RRSIG A 8 3 3600 20170419140236 20170320140236 41524 nsec.example. E6Cx+MIElwAbw4Hg48Ee4CC4pKSjPkW8fmcHVoTqNwMyRs4Jjyymf1tE mNdjYkoN0kxI8PEgbGxzuwlFLpGncQhuZ0dyTzCPvnYFPLIkDmdtyIcj 4MVZiJpdyc5yRTC+Aja1Ik9cQ25QsSGAg4z54Zv0o6uqodppCHILgBzm Q833AQFh6hOQE3BFM3c8h3PCsH6HJOOIlgqculfT5d0S1XPFGmtjVW4G gZNsNeBtLB/SkvYKzNS+Yw38J9VTtWMlgTUwkjVXzC+f83AgzXHM3neq QhRhf72VO/xP5sd33VXDVBtOqbFSDZHLpGLfaXJSrnzKX5H8nCMuIXbs kWK60w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.nsec.example. IN AAAA
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+ns.nsec.example. 3600 IN NSEC nsec.example. A RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ns.nsec.example. 3600 IN RRSIG NSEC 8 3 3600 20170419140236 20170320140236 41524 nsec.example. iOfnQqIT9V87emJsd/Aym6JqU4H8bzjNq3cbWUmiohgdKr2pkqdt3RV1 r/LGbhSm+seWC/xWuBinEH2WAwXwQMUGrYi5htGazk9C97gkSvle/gXT NZweNC7SkrkBv1VXHG/PrinzFP/YWRn7zMn7fOj/uYWDaYAi0Fzh+Ctn fx2hsHIXC9LduIs+Uv9B58tr9tkF5JNYapoZO59Wtiz1GPaPnfUg9X2u 2T+J5rWpYHJkzKulW+yi0YpipfJY+9J9KWGr2PorChm/W1mc83MptyK2 Po+IbX/I0YStNv+nCLccBo94y/DGOLVnF0XpJZnR5ZDcb8ZmbZIP7uD3 GBFKMg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+nsec.example. IN DNSKEY
+SECTION ANSWER
+nsec.example. 3600 IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
+nsec.example. 3600 IN RRSIG DNSKEY 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Z1kUmre0LJX76zuKEYhCN5bNNPvXONZK8LElwgNqEQW4kPApz8+vfLmb 4Xlz6D9ChG6J0Pp/JHdKn+S+Le4B5dUOPzuOksfkHTmRsh9oN2ccSEq3 eJK1VhWwRN69xs1LZgXzVJk7DnDnPVUyIbDpb5piBCJHQVwkrIa1Ykeh hexHJb7YZBmF1B6GqTl7K9QwIvfnpKH+iM83QngepAJqpJuHSEPNWCbQ S9rfuP1SObyZD4L/Z3hBFpaZL9N25ThH7znfTc60xNCitmNMFfq68X2/ JoSrVrFLNv9nlneYNkihorhzDMlzN/i/EhrtBkdaSiRlEODnY7zN4Eax m3JkFQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+local.nsec.example. IN A
+SECTION ANSWER
+local.nsec.example. 3600 IN A 10.6.6.6
+local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+SECTION AUTHORITY
+*.nsec.example. 3600 IN NSEC ns.nsec.example. A RRSIG NSEC
+*.nsec.example. 3600 IN RRSIG NSEC 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Hp/6sgDgYZuewpSkAugLRERgVAGgAIAN9vAqfuAGcqCxfQXLIXcXD8ji o4rjuSMmAaRw0AQ70pEWldc2Yqre+++/lnEJt5tpGrIhH2raJU9RS/Ix NaN40vwspRdN7tDNLH1T0oTDll76bVc/D4VFtnpGOlM3eIGjFVVdACvZ V0oVW8xp686xwB3uP2DqA0fxMjs4p9PC1FrnTAlGvTX0ThgZR6EmmWJH HCy4kpjfTFR93k/nuAendDVVZNkHL+EncojmUX+U0PRSZPXWBWXbb0kq h1OVaT4HpyWKet+PxKkTGaoNbXRk0BAKC/4Qg4A/+kRk+1OXG4dQMdsS zLnt/Q==
+ENTRY_END
+
+; missing NSEC proof
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN CNAME
+SECTION ANSWER
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-nodata.local.nsec.example. IN RRSIG
+SECTION ANSWER
+missing-nsec-nodata.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+ENTRY_END
+
+; synthesized A record was removed and replaced with SOA but no NSEC
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN A
+SECTION ANSWER
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN RRSIG
+SECTION ANSWER
+missing-nsec-masked-data.local.nsec.example. 3600 IN RRSIG A 8 2 3600 20170419140236 20170320140236 41524 nsec.example. H6auzgGxcWIcfhki7px+Iza4QRw5V47GXpPFDofXoORBdGtVYOhx+ILM pYA8ng4rzYCRFh/g9j8lIzU9y9WDfJyy8CMAJUsjiin/b9iJ0heQQU9r GmV1v+MvNxlcfMdJrec2O31RKBt7bK/FFesD4l3c3+XauwsOIsry+4t6 48uzUO48QVsbuw0PPDH82fPpSNgWyiAIEVwzz/tgrekk4eDwTVUkle4A 9ntjr5CFyKuoeDVTr0rZdJ90W6j4KYRUuk3x1V5w8eil7pNIN3arBzEv OXg4Du3AYskQ98a1VWz7MO/MX9u5WciXSbpDdI/2VtxMeKzkPotDds65 zLIsTA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+local.nsec.example. IN NS
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+*.nsec.example. 3600 IN NSEC ns.nsec.example. A RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+*.nsec.example. 3600 IN RRSIG NSEC 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Hp/6sgDgYZuewpSkAugLRERgVAGgAIAN9vAqfuAGcqCxfQXLIXcXD8ji o4rjuSMmAaRw0AQ70pEWldc2Yqre+++/lnEJt5tpGrIhH2raJU9RS/Ix NaN40vwspRdN7tDNLH1T0oTDll76bVc/D4VFtnpGOlM3eIGjFVVdACvZ V0oVW8xp686xwB3uP2DqA0fxMjs4p9PC1FrnTAlGvTX0ThgZR6EmmWJH HCy4kpjfTFR93k/nuAendDVVZNkHL+EncojmUX+U0PRSZPXWBWXbb0kq h1OVaT4HpyWKet+PxKkTGaoNbXRk0BAKC/4Qg4A/+kRk+1OXG4dQMdsS zLnt/Q==
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+aaa.local.nsec.example. IN CNAME
+ENTRY_END
+
+; recursion happens here, we expect NODATA with wildcard proof
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+aaa.local.nsec.example. IN CNAME
+SECTION AUTHORITY
+nsec.example. 3600 IN SOA ns.nsec.example. root.nsec.example. 6 60 60 120 3600
+*.nsec.example. 3600 IN NSEC ns.nsec.example. A RRSIG NSEC
+nsec.example. 3600 IN RRSIG SOA 8 2 3600 20170419140236 20170320140236 41524 nsec.example. gZCIxxFWL04vgzuNbZYq3Ghb7OZsZCp1WCcByM602yEgf0IUk8KSqkol pTem3IXQELhFTzbddGFV3Cis5MxZq8XjNbSwXelbUkOkKE4EzDcpldtR yqGnp+ZdZhBrymZvS8dOhwOGllF6AobXx7iFHaY7wtC17XvODduxOBdV mQ/t2QDUnl+Io3s1KfDRf4e22WvtatlQNr9NW+PueeGtGhEdDeyR7VMA fxEqL6Lds7NWN7DPKfsCVgUNkwHzy9opQ64AyVyQAmwRohuon652jKiu MbvJ1vaLxJLeDBnnT3hbMrI/CIfmjqucSOgM9JNXXggIcfBxok5Ze2R5 SL35VA==
+*.nsec.example. 3600 IN RRSIG NSEC 8 2 3600 20170419140236 20170320140236 41524 nsec.example. Hp/6sgDgYZuewpSkAugLRERgVAGgAIAN9vAqfuAGcqCxfQXLIXcXD8ji o4rjuSMmAaRw0AQ70pEWldc2Yqre+++/lnEJt5tpGrIhH2raJU9RS/Ix NaN40vwspRdN7tDNLH1T0oTDll76bVc/D4VFtnpGOlM3eIGjFVVdACvZ V0oVW8xp686xwB3uP2DqA0fxMjs4p9PC1FrnTAlGvTX0ThgZR6EmmWJH HCy4kpjfTFR93k/nuAendDVVZNkHL+EncojmUX+U0PRSZPXWBWXbb0kq h1OVaT4HpyWKet+PxKkTGaoNbXRk0BAKC/4Qg4A/+kRk+1OXG4dQMdsS zLnt/Q==
+ENTRY_END
+
+;; TODO: use INCLUDE when it's available.
+;; Aggressive cache can answer STEP20 without asking,
+;; from the record in previous answer, so it has been split-out for now.
+
+; missing data in NOERROR answer synthtesized from wildcard must be detected
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN A
+ENTRY_END
+
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+missing-nsec-masked-data.local.nsec.example. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/rfc5011/README b/tests/deckard/sets/resolver/rfc5011/README
new file mode 100644
index 0000000..f762956
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/README
@@ -0,0 +1,5 @@
+Start with `genkeyszones.sh` and generate DNSSEC keys + signed versions of `unsigned.db`.
+Then use `dns2rpl.py` to run Knot DNS server with signed zone
+and to generate RPL file from server's answers.
+
+See comments in script headers to further details.
diff --git a/tests/deckard/sets/resolver/rfc5011/dns2rpl.py b/tests/deckard/sets/resolver/rfc5011/dns2rpl.py
new file mode 100755
index 0000000..5a12743
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/dns2rpl.py
@@ -0,0 +1,182 @@
+#!/usr/bin/python3
+"""
+Generate RFC 5011 test simulating succesfull KSK roll-over in 2017.
+
+Depedencies: Knot DNS server + Deckard library.
+Environment: Set PYTHONPATH variable so "import pydnstest" will use module from Deckard.
+Input: Root zone files, presumably created by genkeyszones.sh.
+Output: RPL file for Deckard on standard output.
+"""
+
+import copy
+import datetime
+import os.path
+import subprocess
+import time
+
+import dns.resolver
+
+import pydnstest.scenario
+
+
+def store_answer(qname, qtype, template):
+ answ = dns.resolver.query(qname, qtype, raise_on_no_answer=False)
+ entr = copy.copy(template)
+ entr.message = answ.response
+ return entr
+
+
+def resolver_init():
+ """
+ Configure dns.resolver to ask ::1@5353 with EDNS0 DO set.
+ """
+ dns.resolver.reset_default_resolver()
+ dns.resolver.default_resolver.use_edns(0, dns.flags.DO, 4096)
+ dns.resolver.default_resolver.nameservers = ['::1']
+ dns.resolver.default_resolver.nameserver_ports = {'::1': 5353}
+ dns.resolver.default_resolver.flags = 0
+
+
+def get_templates():
+ """
+ Return empty objects for RANGE and ENTRY suitable as object templates.
+ """
+ empty_case, _ = pydnstest.scenario.parse_file(os.path.realpath('empty.rpl'))
+
+ rng = copy.copy(empty_case.ranges[0])
+
+ entry = copy.copy(rng.stored[0])
+ entry.adjust_fields = ['copy_id']
+ entry.match_fields = ['opcode', 'question']
+
+ rng.addresses = {'198.41.0.4', '2001:503:ba3e::2:30'}
+ rng.stored = []
+
+ return rng, entry
+
+
+def generate_range(filename, rng_templ, entry_templ):
+ """
+ Run Knot DNS server with specified zone file and generate RANGE object.
+ """
+ assert filename.startswith('20')
+ assert filename.endswith('.db')
+ try:
+ os.unlink('root.db')
+ except FileNotFoundError:
+ pass
+ os.link(filename, 'root.db')
+
+ # run server
+ knotd = subprocess.Popen(['/usr/local/sbin/knotd', '-c', 'knot.root.conf'])
+ time.sleep(0.1) # give kresd time to start so we do not wait for first timeout
+
+ # query data
+ rng = copy.copy(rng_templ)
+ rng.stored = []
+ rng.stored.append(store_answer('.', 'SOA', entry_templ))
+ rng.stored.append(store_answer('.', 'DNSKEY', entry_templ))
+ rng.stored.append(store_answer('.', 'NS', entry_templ))
+ rng.stored.append(store_answer('rootns.', 'NS', entry_templ))
+ rng.stored.append(store_answer('rootns.', 'A', entry_templ))
+ rng.stored.append(store_answer('rootns.', 'AAAA', entry_templ))
+ rng.stored.append(store_answer('test.', 'TXT', entry_templ))
+ rng.a = int(filename[:-len('.db')])
+
+ # kill server
+ knotd.kill()
+
+ return rng
+
+
+def generate_step_query(tcurr, id_prefix):
+ out = '; {0}'.format(tcurr.isoformat())
+ out += '''
+STEP {0}000000 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+test. IN TXT
+ENTRY_END
+'''.format(id_prefix)
+ return out
+
+
+def generate_step_check(id_prefix):
+ return '''STEP {0}000001 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+test. IN TXT
+SECTION ANSWER
+test. IN TXT "it works"
+ENTRY_END
+'''.format(id_prefix)
+
+
+def generate_step_elapse(tstep, id_prefix):
+ out = '; move time by {0}\n'.format(tstep)
+ out += '''STEP {0}000099 TIME_PASSES ELAPSE {1}\n\n'''.format(
+ id_prefix, int(tstep.total_seconds()))
+ return out
+
+
+def main():
+ resolver_init()
+ rng_templ, entry_templ = get_templates()
+ ranges = []
+
+ # transform data in zones files into RANGEs
+ files = os.listdir()
+ files.sort()
+ for fn in files:
+ if not fn.endswith('.db') or not fn.startswith('20'):
+ continue
+ ranges.append(generate_range(fn, rng_templ, entry_templ))
+
+ # connect ranges
+ for i in range(1, len(ranges)):
+ ranges[i - 1].b = ranges[i].a - 1
+ ranges[-1].b = 99999999999999
+
+ # steps
+ steps = []
+ tstart = datetime.datetime(year=2017, month=7, day=1)
+ tend = datetime.datetime(year=2017, month=12, day=31, hour=23, minute=59, second=59)
+ tstep = datetime.timedelta(days=1)
+ tcurr = tstart
+ while tcurr < tend:
+ id_prefix = tcurr.strftime('%Y%m%d')
+ steps.append(generate_step_query(tcurr, id_prefix))
+ steps.append(generate_step_check(id_prefix))
+ steps.append(generate_step_elapse(tstep, id_prefix))
+ tcurr += tstep
+
+ # generate output
+ with open('keys/ds') as dsfile:
+ ta = dsfile.read().strip()
+
+ # constant RPL file header
+ print("""stub-addr: 2001:503:ba3e::2:30
+ trust-anchor: {ta}
+ val-override-date: 20170701000000
+ query-minimization: off
+ CONFIG_END
+
+ SCENARIO_BEGIN Simulation of successfull RFC 5011 KSK roll-over during 2017
+ """.format(ta=ta))
+ for rng in ranges:
+ print(rng)
+
+ for step in steps:
+ print(step)
+
+ # constant RPL file footer
+ print('''
+ SCENARIO_END
+ ''')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/deckard/sets/resolver/rfc5011/empty.rpl b/tests/deckard/sets/resolver/rfc5011/empty.rpl
new file mode 100644
index 0000000..295d5a5
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/empty.rpl
@@ -0,0 +1,20 @@
+stub-addr: 127.0.0.10
+CONFIG_END
+
+SCENARIO_BEGIN empty replies
+
+RANGE_BEGIN 0 100
+ ADDRESS 127.0.0.10
+ENTRY_BEGIN
+MATCH subdomain
+ADJUST copy_id copy_query
+SECTION QUESTION
+. IN A
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/rfc5011/genkeyszones.sh b/tests/deckard/sets/resolver/rfc5011/genkeyszones.sh
new file mode 100755
index 0000000..8e650cb
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/genkeyszones.sh
@@ -0,0 +1,90 @@
+#!/usr/bin/bash
+
+# First, generate DNSSEC keys with timers set to simulate 2017 KSK roll-over.
+# Second, fake system time to pretend that we are at the beginning on time slots
+# used during 2017 and sign our fake root zone.
+
+# Depends on libfaketime + dnssec-keygen and dnssec-signzone from BIND 9.11.
+
+# Output: Bunch of DNSSEC keys + several versions of signed root zone.
+
+set -o nounset -o errexit -o xtrace
+
+GEN="dnssec-keygen -r /dev/urandom -K keys/ -a RSASHA256 -b 2048 -L 21d"
+
+function sign {
+ OUTFILE="$(echo "$1" | sed 's/[- :]//g').db"
+ TZ=UTC \
+ LD_PRELOAD="/usr/lib64/faketime/libfaketimeMT.so.1" \
+ FAKETIME="$1" \
+ dnssec-signzone \
+ -r /dev/urandom \
+ -K keys/ \
+ -o . \
+ -S \
+ -T 21d \
+ -s now \
+ -e +14d \
+ -X +21d \
+ -O full \
+ -f "${OUTFILE}" \
+ unsigned.db
+
+ # DS for the very first KSK
+ test ! -f keys/ds && dnssec-dsfromkey -2 -f "${OUTFILE}" . > keys/ds || : initial DS RR already exists
+}
+
+rm -f 20*.db
+rm -f keys/K*
+rm -f keys/ds
+mkdir -p keys/
+
+# old KSK
+${GEN} -f KSK -P 20100715000000 -A 20100715000000 -I 20171011000000 -R 20180111000000 -D 20180322000000 .
+# new KSK
+${GEN} -f KSK -P 20170711000000 -A 20171011000000 .
+
+# ZSK before roll-over: 2017-Q2
+${GEN} -P 20170320000000 -A 20170401000000 -I 20170701000000 -D 20170711000000 .
+# ZSK-q1: 2017-Q3
+${GEN} -P 20170621000000 -A 20170701000000 -I 20171001000000 -D 20171011000000 .
+# ZSK-q2: 2017-Q4
+${GEN} -P 20170919000000 -A 20171001000000 -I 20180101000000 -D 20180111000000 .
+# ZSK-q3: 2018-Q1
+${GEN} -P 20171220000000 -A 20180101000000 -I 20180401000000 -D 20180411000000 .
+# ZSK: 2018-Q2
+${GEN} -P 20180322000000 -A 20180401000000 .
+
+
+# hopefully slots according to
+# https://www.icann.org/en/system/files/files/ksk-rollover-operational-implementation-plan-22jul16-en.pdf
+# https://data.iana.org/ksk-ceremony/29/KC29_Script_Annotated.pdf
+sign "2017-07-01 00:00:00" # 2017 Q3 slot 1
+sign "2017-07-11 00:00:00" # 2017 Q3 slot 2
+sign "2017-07-21 00:00:00" # 2017 Q3 slot 3
+sign "2017-07-31 00:00:00" # 2017 Q3 slot 4
+sign "2017-08-10 00:00:00" # 2017 Q3 slot 5
+sign "2017-08-20 00:00:00" # 2017 Q3 slot 6
+sign "2017-08-30 00:00:00" # 2017 Q3 slot 7
+sign "2017-09-09 00:00:00" # 2017 Q3 slot 8
+sign "2017-09-19 00:00:00" # 2017 Q3 slot 9
+
+sign "2017-10-01 00:00:00" # 2017 Q4 slot 1
+sign "2017-10-11 00:00:00" # 2017 Q4 slot 2
+sign "2017-10-21 00:00:00" # 2017 Q4 slot 3
+sign "2017-10-31 00:00:00" # 2017 Q4 slot 4
+sign "2017-11-10 00:00:00" # 2017 Q4 slot 5
+sign "2017-11-20 00:00:00" # 2017 Q4 slot 6
+sign "2017-11-30 00:00:00" # 2017 Q4 slot 7
+sign "2017-12-10 00:00:00" # 2017 Q4 slot 8
+sign "2017-12-20 00:00:00" # 2017 Q4 slot 9
+
+# 2018-01-01 00:00:00 # 2018 Q1 slot 1
+# 2018-01-11 00:00:00 # 2018 Q1 slot 2
+# 2018-01-21 00:00:00 # 2018 Q1 slot 3
+# 2018-01-31 00:00:00 # 2018 Q1 slot 4
+# 2018-02-10 00:00:00 # 2018 Q1 slot 5
+# 2018-02-20 00:00:00 # 2018 Q1 slot 6
+# 2018-03-02 00:00:00 # 2018 Q1 slot 7
+# 2018-03-12 00:00:00 # 2018 Q1 slot 8
+# 2018-03-22 00:00:00 # 2018 Q1 slot 9
diff --git a/tests/deckard/sets/resolver/rfc5011/knot.root.conf b/tests/deckard/sets/resolver/rfc5011/knot.root.conf
new file mode 100644
index 0000000..5e20747
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/knot.root.conf
@@ -0,0 +1,26 @@
+#
+# Minimal configuration file for Knot DNS server used by dns2rpl.py.
+#
+
+server:
+ # Listen on all configured IPv4 interfaces.
+ listen: 0.0.0.0@5353
+ # Listen on all configured IPv6 interfaces.
+ listen: ::@5353
+ # User for running the server.
+ # user: knot:knot
+# Log info and more serious events to syslog.
+log:
+ - target: stderr
+ any: debug
+
+template:
+# - id: default
+# storage: "/usr/local/var/lib/knot"
+
+zone:
+# Master zone.
+ - domain: .
+ storage: "."
+ file: "root.db"
+
diff --git a/tests/deckard/sets/resolver/rfc5011/unsigned.db b/tests/deckard/sets/resolver/rfc5011/unsigned.db
new file mode 100644
index 0000000..b837acd
--- /dev/null
+++ b/tests/deckard/sets/resolver/rfc5011/unsigned.db
@@ -0,0 +1,8 @@
+. 86400 IN SOA rootns. you.test. 2017071100 1800 900 604800 86400
+
+. 518400 IN NS rootns.
+
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+
+test. 1 IN TXT "it works"
diff --git a/tests/deckard/sets/resolver/val_ad_qtype_ds.rpl b/tests/deckard/sets/resolver/val_ad_qtype_ds.rpl
new file mode 100644
index 0000000..365b33e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ad_qtype_ds.rpl
@@ -0,0 +1,196 @@
+; config options
+ stub-addr: 193.0.14.129
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD0888 5C36700F"
+ val-override-date: "20170807130000"
+CONFIG_END
+
+SCENARIO_BEGIN Test setting AD bit in secured answer which contains proof of DS record non-existence
+
+RANGE_BEGIN 1 2
+ ADDRESS 193.0.14.129 ;k.root-servers.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+. IN SOA
+SECTION ANSWER
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170831093859 20170801093859 20661 . wYDoBQrcHODYzOxqM+P+gOfgi4HCFNtdhnIZtuoc2vujg6J9U3zYUg3H u78cOyqEJ/H6iTxnVGmJvGYSh+Cf0TiDfgDL0TbQrfisTtAKOGNbLVb0 wfGzroQ08c2i/R2xXyN6ZA/0ywYdyJe1bhRlWcDGhbUTDpKBhMAFxCZe NaIt/gT1TCODgjgHsRMjj3uxxtPef3/A3+x4iUt9PdQxTJoPXo21nEin PY4ByO80QYYa8iomOJG7PauhhZk4/md03bSU1F+AlniiuiFHNsvdpyxO qimsB9sQW5sr1wVgQ25BKlUrwwqeTE+gEECR5BGF29YjRHLN5OEban4N 1Lv3SA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170831093859 20170801093859 20661 . tRUB/UNRUgLH8jn9wda2CjPW3+2IuahZXB3LyPiP+ENd8Tu37WuYr9R9 a0Pi1/WSrliQtmxNCbmbPi36EBo0Wi4YXAEuaD6ip3ARC0QBWstzlMnN ea1IgiWoP61NtauuElQzRb6PL03cmg1ouElvlncMNkhkzupHIee060Ok OSHPk4scXnAaxJ4dASLZCYza6C2k0VqCMI2qJ8kDlfm2/Lt8PPFyhGYa bQaO4zzOecg2dvDDSdw4STBjL3K84enZ/ilTo81zrM1O4SNe2TYm8C37 cMlNXQ+XB0O4+18UzjNDKCMfJ1H6rXt6A52MU2ZONOT6U+eanM7RKfZd 6NSTYw==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170831093859 20170801093859 20661 . q3gs2/4X9gIYWZ0nR/ADRFFgeJaaJ/jmXysnMa2I+uuuPutjegwudOCe qEG7NKc/S0Sb90KspvAfWBb4E8UeBlkgNk4aGrzM5lNWinEJ7lszUn7Z 3kpg7m1xyzgt0YxOxrQiyznA4x2wom/66G7Bc8XkajSV7+6+ZIHxQqid hVFq2zg2UdfNVMTXHfaCrtQrTxQJZ19M+IJmGIjFjomIyrE4BEiL6IcM vyK9/kdWL892wMwYxlAoMWIHPz2mU5WbmOPqgEzd8Wwc7RwTZFgE6wqL vo6JZDRME70ScN4iIXQHfVcJMYJscoFiMfhnrlOfbeB1dDKjBcWimCf4 uJ2hDw==
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170831093859 20170801093859 49060 . lpsdS4U/p63Jl4YimV5+S0jxuMZoFPGiskKCUOhdUS6pN2yoFAHDVsx6 MmbswhIw9NFSmjuxuWvz4iSuLIEL4L7CFSK0g/RNJx2MabJJS40ZONJy sDFRNvBROwPI8AgOdXuimWausYHwJU3MG+q15GC0k31WTA3JPhDXpfCx ULusODH4FwjrvuQMVSZId0hF7LLrH4/rTEVE/EkXohQ2/all51v8OEn3 8zulw9nol1w0rAYpGV3BNWUYtHKY64eZHOxlArvWFZbf5R1JV0MAsa2U zqjBwI3dMTyVPIerLcR77dPNCMXNxo/81Ye37YA/H8ABTda67SPhD+hf GcP6Tg==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA REFUSED
+SECTION QUESTION
+. IN RRSIG
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.net
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+test. IN DS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+test. 86400 IN NSEC . NS RRSIG NSEC
+. 86400 IN RRSIG SOA 8 0 86400 20170831093859 20170801093859 20661 . wYDoBQrcHODYzOxqM+P+gOfgi4HCFNtdhnIZtuoc2vujg6J9U3zYUg3H u78cOyqEJ/H6iTxnVGmJvGYSh+Cf0TiDfgDL0TbQrfisTtAKOGNbLVb0 wfGzroQ08c2i/R2xXyN6ZA/0ywYdyJe1bhRlWcDGhbUTDpKBhMAFxCZe NaIt/gT1TCODgjgHsRMjj3uxxtPef3/A3+x4iUt9PdQxTJoPXo21nEin PY4ByO80QYYa8iomOJG7PauhhZk4/md03bSU1F+AlniiuiFHNsvdpyxO qimsB9sQW5sr1wVgQ25BKlUrwwqeTE+gEECR5BGF29YjRHLN5OEban4N 1Lv3SA==
+test. 86400 IN RRSIG NSEC 8 1 86400 20170831093859 20170801093859 20661 . BjSarwsXmvmeIXuEZyCKpFpB6eU8w+Nz98pGxp7B18BZGysjjAHEV+Y+ +aqGX0KP9S3ZdKO4zc8p4iBUbCzprN80Zkn/1eIZnbil4zZsnxkqXgZG 0hcUK/H2ximacRtL0ITEmQ0iTykFzo9OVgv+OgKigyBqZvziahPVhN8/ zl/wbqGdVx8UUgvvMUsTITSWdfZt3UK6KKVpQIrwuJroaVLvc69uxkLm 1ZCHe1FTf385yf7pKLD3vkJ2rWh4MZHwls6YQXUCDv4jf7D+rXIde/Jk SB9yko98xcu+ccdoCoFWzoBI2Ep0Io4bV40Izq+NwiYmMOpPL03SQrOq WRImyQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA REFUSED
+SECTION QUESTION
+test. IN RRSIG
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170831093859 20170801093859 20661 . wYDoBQrcHODYzOxqM+P+gOfgi4HCFNtdhnIZtuoc2vujg6J9U3zYUg3H u78cOyqEJ/H6iTxnVGmJvGYSh+Cf0TiDfgDL0TbQrfisTtAKOGNbLVb0 wfGzroQ08c2i/R2xXyN6ZA/0ywYdyJe1bhRlWcDGhbUTDpKBhMAFxCZe NaIt/gT1TCODgjgHsRMjj3uxxtPef3/A3+x4iUt9PdQxTJoPXo21nEin PY4ByO80QYYa8iomOJG7PauhhZk4/md03bSU1F+AlniiuiFHNsvdpyxO qimsB9sQW5sr1wVgQ25BKlUrwwqeTE+gEECR5BGF29YjRHLN5OEban4N
+. 86400 IN NSEC ns.net. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20170831093859 20170801093859 20661 . o4mpXOChyzVuB08Yu18oUFyNw+rYlia6nNe05ESNkW3sx+umUTX7SvzO 4QrpOIGqflr2Jxks5kLMK6b3q0pDq/d1Z5zAMIlOHsjtMYvVqz4LJHiu kqsoKKBSxY6LEfsalcRE02VhSNuQLZXiUDbeErO1kBU05fIAc7lfefS1 iNqUvZ2u6u3SiEJISWu0l7+IVPCd/0DaoQUsp2ja3MuYOM36sYsa8yxE /lDqHzgSj+qBn2fMUcu9CEzNwVXhAK65ngu6rSlbhG+NdAkpHRgsKXxL qSC/iFoGm2cZ1idMCijIdoj6/qf2aMPh7ThrfXaHmf5ZhePXxdqIrmPO IpU3Ww==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170831093859 20170801093859 20661 . wYDoBQrcHODYzOxqM+P+gOfgi4HCFNtdhnIZtuoc2vujg6J9U3zYUg3H u78cOyqEJ/H6iTxnVGmJvGYSh+Cf0TiDfgDL0TbQrfisTtAKOGNbLVb0 wfGzroQ08c2i/R2xXyN6ZA/0ywYdyJe1bhRlWcDGhbUTDpKBhMAFxCZe NaIt/gT1TCODgjgHsRMjj3uxxtPef3/A3+x4iUt9PdQxTJoPXo21nEin PY4ByO80QYYa8iomOJG7PauhhZk4/md03bSU1F+AlniiuiFHNsvdpyxO qimsB9sQW5sr1wVgQ25BKlUrwwqeTE+gEECR5BGF29YjRHLN5OEban4N
+. 86400 IN NSEC ns.net. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20170831093859 20170801093859 20661 . o4mpXOChyzVuB08Yu18oUFyNw+rYlia6nNe05ESNkW3sx+umUTX7SvzO 4QrpOIGqflr2Jxks5kLMK6b3q0pDq/d1Z5zAMIlOHsjtMYvVqz4LJHiu kqsoKKBSxY6LEfsalcRE02VhSNuQLZXiUDbeErO1kBU05fIAc7lfefS1 iNqUvZ2u6u3SiEJISWu0l7+IVPCd/0DaoQUsp2ja3MuYOM36sYsa8yxE /lDqHzgSj+qBn2fMUcu9CEzNwVXhAK65ngu6rSlbhG+NdAkpHRgsKXxL qSC/iFoGm2cZ1idMCijIdoj6/qf2aMPh7ThrfXaHmf5ZhePXxdqIrmPO IpU3Ww==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+ns.net. IN A
+SECTION ANSWER
+ns.net. 600 IN A 1.1.1.1
+ns.net. 600 IN RRSIG A 8 2 600 20170831093859 20170801093859 20661 . mOCn7tQWemwBfXtGUSexyMARUQFmWH6Sk6Z6U1HRB3dn7yZxHYf+tw/+ 3bLHv38zeqdOU0cgUMDsthWkzFfKDL+CgW/dNO6oY/9UmX0p8mqgQ5Yw J4uH82il0TBlbnr4TkNz27EQgGiQvKdOyEPW5/+Ogh1M0b228jMY0DzV gzk9shaGZGH7mzJyKX9JPtG+sEvx6YsNTN3MP4s5JBaIk3sMczz+szb4 nmx+AvIuJnTQXq/dH/emTR/JzPsSZryadtf/Y+zOQnVg3YcaUs9yaIFj 4aq1aRMPPX6asCKliOeixC4qPR/fJkaVtN7Q3oiE0M3ci2jAj1JJLL6g /fDfZA==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170831093859 20170801093859 20661 . WkAHLRnyepbR5iqggYRyFmUIgXhZpnyEL/CUlQ/AEf5c6so1cmWlzVXd TuuUtkNbkVEq8bbvOxa1jFF01vVituLlwn1wEuTdfpgOBDOHxf5/jASm CZ+/31Lln3scmDVRuAyKDO9tvR0O6N/WKFOYcGhrtfQ21P4f58aFLy11 F4kKpARwyhBMhB4/MpmOMKcWhTx8Fyackwl20uBZMi85+aBhR2eJMloN YEvphzLvBwvNTaNrXBlDrtz6Kbrr0akRdd2jFoyRe+0DGSEvI7ujaMuo +v+yxg6qW6q125R7++69vis2HRbm1Hjb23EbH+AH7H9mL+royo0+GY3C 5fYUeg==
+
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 2
+ ADDRESS 1.1.1.1 ;ns.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test. IN SOA
+SECTION ANSWER
+test. 86400 IN SOA ns.net. hostmaster.example.com. 1234 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test. IN NS
+SECTION ANSWER
+test. IN NS ns.net
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns.net. IN A
+SECTION ANSWER
+ns.net. 86400 IN A 1.1.1.1
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD AD DO
+SECTION QUESTION
+test. IN DS
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR ; AD flag is set
+SECTION QUESTION
+test. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+test. 86400 IN NSEC . NS RRSIG NSEC
+. 86400 IN RRSIG SOA 8 0 86400 20170831093859 20170801093859 20661 . wYDoBQrcHODYzOxqM+P+gOfgi4HCFNtdhnIZtuoc2vujg6J9U3zYUg3H u78cOyqEJ/H6iTxnVGmJvGYSh+Cf0TiDfgDL0TbQrfisTtAKOGNbLVb0 wfGzroQ08c2i/R2xXyN6ZA/0ywYdyJe1bhRlWcDGhbUTDpKBhMAFxCZe NaIt/gT1TCODgjgHsRMjj3uxxtPef3/A3+x4iUt9PdQxTJoPXo21nEin PY4ByO80QYYa8iomOJG7PauhhZk4/md03bSU1F+AlniiuiFHNsvdpyxO qimsB9sQW5sr1wVgQ25BKlUrwwqeTE+gEECR5BGF29YjRHLN5OEban4N 1Lv3SA==
+test. 86400 IN RRSIG NSEC 8 1 86400 20170831093859 20170801093859 20661 . BjSarwsXmvmeIXuEZyCKpFpB6eU8w+Nz98pGxp7B18BZGysjjAHEV+Y+ +aqGX0KP9S3ZdKO4zc8p4iBUbCzprN80Zkn/1eIZnbil4zZsnxkqXgZG 0hcUK/H2ximacRtL0ITEmQ0iTykFzo9OVgv+OgKigyBqZvziahPVhN8/ zl/wbqGdVx8UUgvvMUsTITSWdfZt3UK6KKVpQIrwuJroaVLvc69uxkLm 1ZCHe1FTf385yf7pKLD3vkJ2rWh4MZHwls6YQXUCDv4jf7D+rXIde/Jk SB9yko98xcu+ccdoCoFWzoBI2Ep0Io4bV40Izq+NwiYmMOpPL03SQrOq WRImyQ==
+
+ENTRY_END
+
+SCENARIO_END \ No newline at end of file
diff --git a/tests/deckard/sets/resolver/val_adbit.rpl b/tests/deckard/sets/resolver/val_adbit.rpl
new file mode 100644
index 0000000..2823e81
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_adbit.rpl
@@ -0,0 +1,172 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 6224 7 1 79120CA22E585593836A1F7F261ED6295627C77A "
+val-override-date: "20181130121814"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator AD bit signaling
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101814 20181130101814 6224 example.com. ESn6yJxsNZI197N+QTzEanisVKGGIc6mUugEBCcFOA7UUL6mbqx7It1k Yg/sFKnjpsmRYCPVR7Wa3K5f2yj7HOKXEcJ+7iNJ3lNG2QtgtaAIkBqa f9BFs1JVJqnlJ3w6XCUfxTmjtLepYKXgOwGg+SGI3GNLGx7EBkOJie1F JYo= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101814 20181130101814 6224 example.com. lgLIbRjRpUYJ6WuSWSpOljVYdDoWQiC+NndpFpPb9EIlk3tXgbE3gmpk hbQ4Nj2tRoje9UpDV3GNath1ZBZEKBovVGCCb8n7d5e+VvuIJMHreD3i 33VTfIaM3NOS6v+vZM5ZUGC7QTkczqHwrC8SPZMUqM9EA4cABYhkSMFy yoU= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAa+IW+C5GZhaOvN6/UjjowGAVDC2/BoGwILcFw5c6RL/30LHrM1f b3Qs9s9Z2u8xZz0VVwrb70eQlYkcdgMUXqI+eplu0OdXI2skN4nHkSkr OeEfA1ISNCchqRmLdONRobPTcBEYYbJWDiuwDmShpitVYT4KZhpIJErh Vzqf5e2V ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101814 20181130101814 6224 example.com. WidInu/eUjNWNA6oF+TspmaUHXTx3TLpmA2ET4QPeRVvH3K0YIBGuVfA NLZvawiKvWfkwZfgVj9As/T2PBOK+9HENOMIXkxMQWcXVBy8KompOGOR T9ENoMWto3CXZEmc7kMtYZtxr5CXsGf4eEJ4AKZNbnwFCaHCtIhlhSIP pa8= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101814 20181130101814 6224 example.com. ESn6yJxsNZI197N+QTzEanisVKGGIc6mUugEBCcFOA7UUL6mbqx7It1k Yg/sFKnjpsmRYCPVR7Wa3K5f2yj7HOKXEcJ+7iNJ3lNG2QtgtaAIkBqa f9BFs1JVJqnlJ3w6XCUfxTmjtLepYKXgOwGg+SGI3GNLGx7EBkOJie1F JYo= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101814 20181130101814 6224 example.com. lgLIbRjRpUYJ6WuSWSpOljVYdDoWQiC+NndpFpPb9EIlk3tXgbE3gmpk hbQ4Nj2tRoje9UpDV3GNath1ZBZEKBovVGCCb8n7d5e+VvuIJMHreD3i 33VTfIaM3NOS6v+vZM5ZUGC7QTkczqHwrC8SPZMUqM9EA4cABYhkSMFy yoU= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101814 20181130101814 6224 example.com. WBUrYLsgHSpl6O4O0WsXydo4AfgF3n2YbLQV9ViOv7CQIeucPMKedjqZ hpr1rmmd8gZU+IGd/RBwIXsiNyC0Y7npNnuBX8Na3FOTWXRiJaorboxh 1UpP6cyEvgMWuV5JqeAql75/8m5Qo/e7pcTQllUoooRuS+HJejkU6R66 Bjo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101814 20181130101814 6224 example.com. ESn6yJxsNZI197N+QTzEanisVKGGIc6mUugEBCcFOA7UUL6mbqx7It1k Yg/sFKnjpsmRYCPVR7Wa3K5f2yj7HOKXEcJ+7iNJ3lNG2QtgtaAIkBqa f9BFs1JVJqnlJ3w6XCUfxTmjtLepYKXgOwGg+SGI3GNLGx7EBkOJie1F JYo= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101814 20181130101814 6224 example.com. lgLIbRjRpUYJ6WuSWSpOljVYdDoWQiC+NndpFpPb9EIlk3tXgbE3gmpk hbQ4Nj2tRoje9UpDV3GNath1ZBZEKBovVGCCb8n7d5e+VvuIJMHreD3i 33VTfIaM3NOS6v+vZM5ZUGC7QTkczqHwrC8SPZMUqM9EA4cABYhkSMFy yoU= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+; ask from cache too
+STEP 21 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 23 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_adcopy.rpl b/tests/deckard/sets/resolver/val_adcopy.rpl
new file mode 100644
index 0000000..76b5e9e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_adcopy.rpl
@@ -0,0 +1,164 @@
+; config options
+; The island of trust is at example.com
+;server:
+; trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator AD bit sent by untrusted upstream
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RA AD NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RA AD NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RA AD NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+; ask from cache too
+STEP 21 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 23 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_anchor_nx_nosig.rpl b/tests/deckard/sets/resolver/val_anchor_nx_nosig.rpl
new file mode 100644
index 0000000..74178ae
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_anchor_nx_nosig.rpl
@@ -0,0 +1,218 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with unsigned denial of 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response for sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854}
+blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC
+blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854}
+example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC
+example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854}
+blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC
+blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854}
+example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC
+example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION AUTHORITY
+example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854}
+blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC
+blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854}
+example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC
+example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854}
+blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC
+blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854}
+example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC
+example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ans_dsent.rpl b/tests/deckard/sets/resolver/val_ans_dsent.rpl
new file mode 100644
index 0000000..d016ce8
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ans_dsent.rpl
@@ -0,0 +1,246 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 5969 7 1 A4AC909154F325EA3F437CD0626ABB2C039E9C50 "
+val-override-date: "20181130121817"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with empty nonterminals on the trust chain.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101817 20181130101817 5969 example.com. Wg9pfH674/AQOaiB7c4EKHYPJp81/v3o5w4GreQBjCr6nx759rE74DLg uLyeldgMaAO+PZD6EXcyuV9acrfLbR+unhUbWHXRktkRrUwJf/5+WsCp yITuzmCezNL7bRrW+f8mxa5pkm7IfaSAoUmu54c/dP5QnbwGZoUK3ObY Ztg= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101817 20181130101817 5969 example.com. TYw9E6WMcbN6izjKoga5IEBGweWCXVpgKEjcWYZcBkEcFZX/hr7eyHok qnGsOi+hHwyMt6EatU2JU0A9WAQzosDxw3xib8F9mk2GlNlpbmrsRwec x6MuPCD5Ur4+GKwevmQOe8mxsqMXdbLKXT56WU2tPBtKsFxQlAS7JA9t pAY= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAeDMFHMvUzUDUFCAAJryyhH1w3V/mHk+Y2wpcMy37G+Ur1JTrIS+ fz1USHOaoNO+ynyCq3XqRbik8vXHUi3oOyLjEu+xTRjLuEgtB4GrEZSV 8umKzMVJZI335YOuAfvPrvA+Ish2hRg+H0otRnNAwqUshFgMRGX1UnjL oo9EwWu1 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101817 20181130101817 5969 example.com. jHGQFzBToq7eUEWW30SDECUfcQJagrP8IbREf+hwKBHEWLEY2E0acQN6 ce/+3DJJHwVF0VTX4Jdo0l43hlOp+bRUBLzsvoWToWtdt2S3nJy1Ay4e +DdockqRbUvs4X16HuYBIL2wxnispH1PRoUUvnF6Aeq4egCQiIx4+SOF pRs= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101817 20181130101817 5969 example.com. Wg9pfH674/AQOaiB7c4EKHYPJp81/v3o5w4GreQBjCr6nx759rE74DLg uLyeldgMaAO+PZD6EXcyuV9acrfLbR+unhUbWHXRktkRrUwJf/5+WsCp yITuzmCezNL7bRrW+f8mxa5pkm7IfaSAoUmu54c/dP5QnbwGZoUK3ObY Ztg= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101817 20181130101817 5969 example.com. TYw9E6WMcbN6izjKoga5IEBGweWCXVpgKEjcWYZcBkEcFZX/hr7eyHok qnGsOi+hHwyMt6EatU2JU0A9WAQzosDxw3xib8F9mk2GlNlpbmrsRwec x6MuPCD5Ur4+GKwevmQOe8mxsqMXdbLKXT56WU2tPBtKsFxQlAS7JA9t pAY= ;{id = 2854}
+ENTRY_END
+
+; responses to DS empty nonterminal queries.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+194.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101817 20181130101817 5969 example.com. CdUsF1NFbkBgKLO10zT/ecIDU/059ZKRK/qsMTp2mTDMLY5BL4Q1cV+f HZWXLkz7eCgvQw4jhaycEKh65I+LdBPFGQBOPM6IJzzqjpMNZkNIAiC/ 98FfWN5MQCD9Rf/Xary2oRbQ6Hzacvc9sRABX1sY9w0n/xIpeRXQ4Zaf eV8= ;{id = 2854}
+
+; This NSEC proves the NOERROR/NODATA case.
+194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC
+194.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101817 20181130101817 5969 example.com. r/fKSY1tFbI3PkF/OvDavn08S6YCx0HJDk5Qyi0mt2sOcD2/c/Rqe+d3 FqR4OFAPQcf405CV7oScQ1/rWMqNFeJxRX1CisY3bRwFhCckXLgCCLKD dZbGNidxQtc7WbiFKZMMmfqEmS1UbpaXNycmlbH7oDmLpqLdzURKFVDM kTw= ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+; this should be NOERROR.
+REPLY QR AA NOERROR
+SECTION QUESTION
+0.194.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101817 20181130101817 5969 example.com. CdUsF1NFbkBgKLO10zT/ecIDU/059ZKRK/qsMTp2mTDMLY5BL4Q1cV+f HZWXLkz7eCgvQw4jhaycEKh65I+LdBPFGQBOPM6IJzzqjpMNZkNIAiC/ 98FfWN5MQCD9Rf/Xary2oRbQ6Hzacvc9sRABX1sY9w0n/xIpeRXQ4Zaf eV8= ;{id = 2854}
+
+; This NSEC proves the NOERROR/NODATA case.
+194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC
+194.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101817 20181130101817 5969 example.com. r/fKSY1tFbI3PkF/OvDavn08S6YCx0HJDk5Qyi0mt2sOcD2/c/Rqe+d3 FqR4OFAPQcf405CV7oScQ1/rWMqNFeJxRX1CisY3bRwFhCckXLgCCLKD dZbGNidxQtc7WbiFKZMMmfqEmS1UbpaXNycmlbH7oDmLpqLdzURKFVDM kTw= ;{id = 2854}
+
+ENTRY_END
+
+; response for delegation to sub zone.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN DS 23400 5 1 F98448C953B01B087D505FB4FCA99DFF9FF37DBD
+0.0.194.example.com. 3600 IN RRSIG DS 7 5 3600 20181230101817 20181130101817 5969 example.com. 1V7MTc/3CMbqswXWDzxwRM9sTNVKNt+W9fTWu6Zn72xDl26r3GRhYgAV 5L7JI/qmDsMSebz6qXojzf58Ev1EO9avxemg6cNQBK+Lrxo1LhFzbzyC LYwRRShPP2D+eTNlgBh6TBNpUfeBDUHGt7hOPqDUqKm7Iru3kvAEY9T1 Fqk= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub zone
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN DS 23400 5 1 F98448C953B01B087D505FB4FCA99DFF9FF37DBD
+0.0.194.example.com. 3600 IN RRSIG DS 7 5 3600 20181230101817 20181130101817 5969 example.com. 1V7MTc/3CMbqswXWDzxwRM9sTNVKNt+W9fTWu6Zn72xDl26r3GRhYgAV 5L7JI/qmDsMSebz6qXojzf58Ev1EO9avxemg6cNQBK+Lrxo1LhFzbzyC LYwRRShPP2D+eTNlgBh6TBNpUfeBDUHGt7hOPqDUqKm7Iru3kvAEY9T1 Fqk= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com. for zone 0.0.194.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN NS
+SECTION ANSWER
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20181230101817 20181130101817 23400 0.0.194.example.com. cUuqSDfttEihyAPLyjzQgLqo5j3dtmQE+xNJ9stwFFL4bNr7bjlux3MS mZcGzOY5skzIK2B+ufkXh+XJVk0HOD/VjEdSyTQCO8elzKbSv6pjsx5E 48FA5scTeX67GFdiJji9Ssk/dQtIWrsmoRLzWITtVANxtrN6mvSHCKVM gHc= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+
+; response to DNSKEY priming query
+; 0.0.194.example.com. 3600 IN DS 23400 5 1 F98448C953B01B087D505FB4FCA99DFF9FF37DBD
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN DNSKEY
+SECTION ANSWER
+0.0.194.example.com. 3600 IN DNSKEY 256 3 5 AwEAAccLvnsSmtCYMulOPc34e+ZK1eQM6EyCmCZ0hh1dD1MD5tCR2qu5 AROP3GARZDnC14wcTFuTmX7U9JJGw7UXb+V7bNHw91v/DTr3dJkJkqYY wL08wwLPbl9jK9q6P+GcZErucXwugK+eSDdWdwZ3u0DHllby0euw7VM1 o+3oFvsZ ;{id = 30899 (zsk), size = 512b}
+0.0.194.example.com. 3600 IN RRSIG DNSKEY 5 5 3600 20181230101817 20181130101817 23400 0.0.194.example.com. EBz3F9s6y1zo2TT21XqfMmqddYaiicUjDSDDYgqTCnocF+8It4AXAf+X 85zJV08+x4APyCs5ROcYkcdtwXMC7Uj5sgPtn5UkxIF8G1UkdQzh5WSr yr0DBhqQOGNTEntIz35xQv+r3GfoXnsE2BqV8TBQ7V1AM6bnfHmQ2lHs F5I= ;{id = 30899}
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20181230101817 20181130101817 23400 0.0.194.example.com. cUuqSDfttEihyAPLyjzQgLqo5j3dtmQE+xNJ9stwFFL4bNr7bjlux3MS mZcGzOY5skzIK2B+ufkXh+XJVk0HOD/VjEdSyTQCO8elzKbSv6pjsx5E 48FA5scTeX67GFdiJji9Ssk/dQtIWrsmoRLzWITtVANxtrN6mvSHCKVM gHc= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+328.0.0.194.example.com. IN A 11.11.11.11
+328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20181230101817 20181130101817 23400 0.0.194.example.com. XqdIgy6JxkR9DYPhI4hJHZqWbHVyoqLk4Arq69Sa7SSvnIhE/Nsf0BrF /EK1XMoepiN8kR9QMnrQWk7fsE9w3PzzcecWQrQ/4Bps8g+gu6DtgNOx k5Cm6b+caRJ2oT3z+n2/7r7VdPndk1bzHOwQINOUJiQN1Q1ya4M5Nw/I c9U= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+328.0.0.194.example.com. 3600 IN A 11.11.11.11
+328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20181230101817 20181130101817 23400 0.0.194.example.com. XqdIgy6JxkR9DYPhI4hJHZqWbHVyoqLk4Arq69Sa7SSvnIhE/Nsf0BrF /EK1XMoepiN8kR9QMnrQWk7fsE9w3PzzcecWQrQ/4Bps8g+gu6DtgNOx k5Cm6b+caRJ2oT3z+n2/7r7VdPndk1bzHOwQINOUJiQN1Q1ya4M5Nw/I c9U= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ans_nx.rpl b/tests/deckard/sets/resolver/val_ans_nx.rpl
new file mode 100644
index 0000000..0223abc
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ans_nx.rpl
@@ -0,0 +1,248 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 53207 7 1 ED9E33A0CCBFAE631929D9064C69EAF91E9872E3 "
+val-override-date: "20181130121819"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with DS nodata as nxdomain on trust chain
+; This is a bug in ANS 2.8.1.0 where it gives an NXDOMAIN instead of
+; NOERROR for an empty nonterminal DS query. The proof for this NXDOMAIN
+; is the NSEC that proves emptynonterminal.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101819 20181130101819 53207 example.com. 0lXU7ewAPEKEpwxF+qH+N99cfG/SFw3S+BGgky/UFgtFpzQip2o+xkOB 0Kr2e8coW7MTMMAtb4XNFqk26liB2klncvAmy8OrZBgCoz0n9RMDpiU5 5U3DCdJOonBkLZp7r/QjdwIY2RAN2ooTR5CnBxTvU8TqsFuK+qvIPZoc 1GU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101819 20181130101819 53207 example.com. ro/KUUe+1uPXGO0Y/sbylsbh26miTgZgLEBLhQPrKLpjl1l4Jcuph+4m NRYJoOnXwsqYHoAZiNIGCagi2LqIZ8hgiLSZnkFSI21xw7uZ1UKjw1yx MY0UXtWf7tF2NGY8wXctKRXkLPkP0D0vZXDIiVHRmAA3RJILXV6VSuyk ZQs= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAeENZGV8/uWkUDIdb5on+NfJs19ejJpnPECDh8pR++7WQl8fk0xm 87kirUT8v1gZzwsbr0Vb0zBi4YewFG3Xe8Ei1d57cJRHKf2uoJ6L93xm C+IPfurFRcGfJDUIWdMH1lth6GbEilxesKdt3lnqSNOln0/rU99jZ+kJ QGGn+M+7 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101819 20181130101819 53207 example.com. ScZ8gDOVfCumrFANbTXFgFFp+0uOR6r9MzJJQWYQZY1omSXUrc8dpx8a 6MEP+hJGydmMjXmL09l2ZzsKlzjGm7kdCtXZLBAnJiZ0e3+tQdpb/mJ4 cRUIrGfQF7VOckzN0oW7hlTqJjkdbfvKW7paRgMBil97Y9J0AcMj0GjW UIA= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101819 20181130101819 53207 example.com. 0lXU7ewAPEKEpwxF+qH+N99cfG/SFw3S+BGgky/UFgtFpzQip2o+xkOB 0Kr2e8coW7MTMMAtb4XNFqk26liB2klncvAmy8OrZBgCoz0n9RMDpiU5 5U3DCdJOonBkLZp7r/QjdwIY2RAN2ooTR5CnBxTvU8TqsFuK+qvIPZoc 1GU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101819 20181130101819 53207 example.com. ro/KUUe+1uPXGO0Y/sbylsbh26miTgZgLEBLhQPrKLpjl1l4Jcuph+4m NRYJoOnXwsqYHoAZiNIGCagi2LqIZ8hgiLSZnkFSI21xw7uZ1UKjw1yx MY0UXtWf7tF2NGY8wXctKRXkLPkP0D0vZXDIiVHRmAA3RJILXV6VSuyk ZQs= ;{id = 2854}
+ENTRY_END
+
+; responses to DS empty nonterminal queries.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+194.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101819 20181130101819 53207 example.com. ypY/mUi4F0lXJ5dp2XmUG2yiP/CN5EPvCHTNUCxkXGkFYA298WkvA16V u3yj/DLzDXm0x70QHWzLqNawdo3v8GzRGRJmvVSf7dXzNzOxC/SUyTdT ad8H/5XwYpQDAMy5pLlk6DC8I8xXyQIChv133eCIn6uVqjIH/Nr1lj6j +n8= ;{id = 2854}
+
+; This NSEC proves the NOERROR/NODATA case.
+194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC
+194.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101819 20181130101819 53207 example.com. mVuTRbUXm5qZJZzH980ndaNBJDgUJ57o30lNKeir6AhM2GY4Fkttntz3 p1FWDkWCX5PGBVdnUsMxA9d5tMU+hQKuAD1pv41xq8KuQYc5Csbk0GgX N0HJ5gqP9SRXdSIvHl+DM5euM3b9eA/p0a7oCJ24dwMw4mRd5vdL7CD5 SAA= ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+; Bad NXDOMAIN response, this should be NOERROR.
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+0.194.example.com. IN DS
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101819 20181130101819 53207 example.com. ypY/mUi4F0lXJ5dp2XmUG2yiP/CN5EPvCHTNUCxkXGkFYA298WkvA16V u3yj/DLzDXm0x70QHWzLqNawdo3v8GzRGRJmvVSf7dXzNzOxC/SUyTdT ad8H/5XwYpQDAMy5pLlk6DC8I8xXyQIChv133eCIn6uVqjIH/Nr1lj6j +n8= ;{id = 2854}
+
+; This NSEC proves the NOERROR/NODATA case.
+194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC
+194.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101819 20181130101819 53207 example.com. mVuTRbUXm5qZJZzH980ndaNBJDgUJ57o30lNKeir6AhM2GY4Fkttntz3 p1FWDkWCX5PGBVdnUsMxA9d5tMU+hQKuAD1pv41xq8KuQYc5Csbk0GgX N0HJ5gqP9SRXdSIvHl+DM5euM3b9eA/p0a7oCJ24dwMw4mRd5vdL7CD5 SAA= ;{id = 2854}
+
+ENTRY_END
+
+; response for delegation to sub zone.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN DS 22635 5 1 042026877E24C586D775608A2AFEE6179F5C43AF
+0.0.194.example.com. 3600 IN RRSIG DS 7 5 3600 20181230101819 20181130101819 53207 example.com. NxLJhRVh78CARarasz3Ks4lanafpN8+AsJgbiYnCQQPmn9X3fq9jbG5n KO0AlyvvcCy/W7z7KMFsMNVD1CvKCDzM2DKbTm17HaPAGXONkxGj53a1 OLn1+hXQ3O+4Th2lNfsUDmk0cMCIyRJetNVBTnz0ywXBHNiQIfyzsGHY UEs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub zone
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN DS 22635 5 1 042026877E24C586D775608A2AFEE6179F5C43AF
+0.0.194.example.com. 3600 IN RRSIG DS 7 5 3600 20181230101819 20181130101819 53207 example.com. NxLJhRVh78CARarasz3Ks4lanafpN8+AsJgbiYnCQQPmn9X3fq9jbG5n KO0AlyvvcCy/W7z7KMFsMNVD1CvKCDzM2DKbTm17HaPAGXONkxGj53a1 OLn1+hXQ3O+4Th2lNfsUDmk0cMCIyRJetNVBTnz0ywXBHNiQIfyzsGHY UEs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com. for zone 0.0.194.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN NS
+SECTION ANSWER
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20181230101818 20181130101818 22635 0.0.194.example.com. OEIHwyYg+Yp9hF/P10nwxq5Lv0pz5RLjtv3hP3N4dpUPQTEwKL0e4hVG 68s6d6RSKNMzhOFrO7PA+QePRzC4ksC7+2SgKA+XvaGP9kRsjWou9jv0 8SdyaV8Agjx7OwRpbZNFs//wdX0l0RU6XHcQ0ZwkcfseK0RE6btI/YvL oA4= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to DNSKEY priming query
+; 0.0.194.example.com. 3600 IN DS 22635 5 1 042026877E24C586D775608A2AFEE6179F5C43AF
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+0.0.194.example.com. IN DNSKEY
+SECTION ANSWER
+0.0.194.example.com. 3600 IN DNSKEY 256 3 5 AwEAAdYRWdf35UAjLYIYyuKr5Cnb17qGYZ3mC1CZjOt3j7muMunvFjGw a75XHGOUVj4CXW4J4TqjeL86foJx8DcqLbwreTHPfJyqcjsjGIVhSDyB Xjb0vImIj7baOOaFnXlolcx8ljob3GUIv5R/sTGcPIQGVk5T0VHLqrnp bdNyyk9/ ;{id = 30899 (zsk), size = 512b}
+0.0.194.example.com. 3600 IN RRSIG DNSKEY 5 5 3600 20181230101818 20181130101818 22635 0.0.194.example.com. OaXVEJcwCQwfYS1QFfPz8Se0NN7uEPUHUk3Ty0eiO0j40mKwCvm7ZFzl Q1xufxJATYXO9rV1wZl1dzN+Vv68tQmmByinvEomUpqsyuAtVbFqsNDT NOSK6TwKYKDo9/g7Xr10KfjCvLXdR4BgUYQwG9XZu+t1z4Qgu4vob0iq bLw= ;{id = 30899}
+SECTION AUTHORITY
+0.0.194.example.com. IN NS ns.sub.example.com.
+0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20181230101818 20181130101818 22635 0.0.194.example.com. OEIHwyYg+Yp9hF/P10nwxq5Lv0pz5RLjtv3hP3N4dpUPQTEwKL0e4hVG 68s6d6RSKNMzhOFrO7PA+QePRzC4ksC7+2SgKA+XvaGP9kRsjWou9jv0 8SdyaV8Agjx7OwRpbZNFs//wdX0l0RU6XHcQ0ZwkcfseK0RE6btI/YvL oA4= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+328.0.0.194.example.com. IN A 11.11.11.11
+328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20181230101818 20181130101818 22635 0.0.194.example.com. gQKa5rIogGvzHsC+oKjjNY5X1wp3NGUm8jj7Dxn8/x0wd8z7GmcMQCVV 6xR18r8t5m6uCFQ2USLFadWPWei6OnPmMw0KDKxrTs3sG6HKe4yMtLcO NY1IZ6pdHpCc8btAhw5DfYEilo+6Mod2KD6ulRJKcY4rE7jFosLdpwM7 5hw= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+328.0.0.194.example.com. IN A
+SECTION ANSWER
+328.0.0.194.example.com. 3600 IN A 11.11.11.11
+328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20181230101818 20181130101818 22635 0.0.194.example.com. gQKa5rIogGvzHsC+oKjjNY5X1wp3NGUm8jj7Dxn8/x0wd8z7GmcMQCVV 6xR18r8t5m6uCFQ2USLFadWPWei6OnPmMw0KDKxrTs3sG6HKe4yMtLcO NY1IZ6pdHpCc8btAhw5DfYEilo+6Mod2KD6ulRJKcY4rE7jFosLdpwM7 5hw= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_loop1.rpl b/tests/deckard/sets/resolver/val_cname_loop1.rpl
new file mode 100644
index 0000000..45e233f
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_loop1.rpl
@@ -0,0 +1,142 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN CNAME loop.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. gMjZEEynrC1cW2t6s6bpRRxSmlq2Jt+7+vIHYP4pq9pqGHg6EM+Nexob au3wmIJv7c5vMmlQmk2z63HLXIEYHFjSzAHgyhfRVM9iEkK8Ules0k6H y5xuE3Z4aE3kGU5d7oNOQs4RlcNEI13bF7dxQ6c+41mNd3ihX9ZqCeXF O8E=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_loop1_3.rpl b/tests/deckard/sets/resolver/val_cname_loop1_3.rpl
new file mode 100644
index 0000000..d75ffbf
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_loop1_3.rpl
@@ -0,0 +1,182 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN CNAME loop.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+bar.example.com. 3600 IN CNAME www.example.com.
+bar.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. azRcQFNDdj0HVMR4CS4cSX1039MJIqsFPP2Fxnr1DLwlvTPxOkqWGumu PKhBkcnX8JMFyJpVBD+3qHrOOuz7BOKvu6Subj0ku+qCdVmrDsdxwabP 7lf63j92EE0ofGoYtN7sdkH6c89OHxTfR5CsALFyT+syABYjyl/tKx9n 8JA=
+foo.example.com. 3600 IN CNAME bar.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. ke8Jzx4GK1yIfiVJjMTrhP5OJihx0g3iwBGk9qz8XiV4/K9Z6KztlPut KVAqlKIXWgvKshyvWG/fGrCr9NZZ2+h8LfxRopvYRArh5mP2QN5kLV6O DhRkKJFYthsyU0swGZXJAd2CZ2plz1qauQYmrzGCRK336vu4+b/lzJP8 D4M=
+www.example.com. 3600 IN CNAME foo.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. Bn3zMkt2HEfIt5kLCEmcT6Kj/20qcvob2RdQaaTtZD+xrbDmqjFkiW09 d+RGP4g7ydXxIDczs4d3dTaSjEp2mgzd8GG0yegG1wiLzObp+gXTLaIT LLz53neab4yS0ZOaformDeWSCx3//U8guRRfOSnPHLQGAmqrVG7Dr30D RKU=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.example.com. IN A
+SECTION ANSWER
+foo.example.com. 3600 IN CNAME bar.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. ke8Jzx4GK1yIfiVJjMTrhP5OJihx0g3iwBGk9qz8XiV4/K9Z6KztlPut KVAqlKIXWgvKshyvWG/fGrCr9NZZ2+h8LfxRopvYRArh5mP2QN5kLV6O DhRkKJFYthsyU0swGZXJAd2CZ2plz1qauQYmrzGCRK336vu4+b/lzJP8 D4M=
+www.example.com. 3600 IN CNAME foo.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. Bn3zMkt2HEfIt5kLCEmcT6Kj/20qcvob2RdQaaTtZD+xrbDmqjFkiW09 d+RGP4g7ydXxIDczs4d3dTaSjEp2mgzd8GG0yegG1wiLzObp+gXTLaIT LLz53neab4yS0ZOaformDeWSCx3//U8guRRfOSnPHLQGAmqrVG7Dr30D RKU=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bar.example.com. IN A
+SECTION ANSWER
+bar.example.com. 3600 IN CNAME www.example.com.
+bar.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. azRcQFNDdj0HVMR4CS4cSX1039MJIqsFPP2Fxnr1DLwlvTPxOkqWGumu PKhBkcnX8JMFyJpVBD+3qHrOOuz7BOKvu6Subj0ku+qCdVmrDsdxwabP 7lf63j92EE0ofGoYtN7sdkH6c89OHxTfR5CsALFyT+syABYjyl/tKx9n 8JA=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_loop3.rpl b/tests/deckard/sets/resolver/val_cname_loop3.rpl
new file mode 100644
index 0000000..a9d9092
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_loop3.rpl
@@ -0,0 +1,164 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN CNAME loop.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME foo.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. Bn3zMkt2HEfIt5kLCEmcT6Kj/20qcvob2RdQaaTtZD+xrbDmqjFkiW09 d+RGP4g7ydXxIDczs4d3dTaSjEp2mgzd8GG0yegG1wiLzObp+gXTLaIT LLz53neab4yS0ZOaformDeWSCx3//U8guRRfOSnPHLQGAmqrVG7Dr30D RKU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.example.com. IN A
+SECTION ANSWER
+foo.example.com. 3600 IN CNAME bar.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. ke8Jzx4GK1yIfiVJjMTrhP5OJihx0g3iwBGk9qz8XiV4/K9Z6KztlPut KVAqlKIXWgvKshyvWG/fGrCr9NZZ2+h8LfxRopvYRArh5mP2QN5kLV6O DhRkKJFYthsyU0swGZXJAd2CZ2plz1qauQYmrzGCRK336vu4+b/lzJP8 D4M=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+bar.example.com. IN A
+SECTION ANSWER
+bar.example.com. 3600 IN CNAME www.example.com.
+bar.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. azRcQFNDdj0HVMR4CS4cSX1039MJIqsFPP2Fxnr1DLwlvTPxOkqWGumu PKhBkcnX8JMFyJpVBD+3qHrOOuz7BOKvu6Subj0ku+qCdVmrDsdxwabP 7lf63j92EE0ofGoYtN7sdkH6c89OHxTfR5CsALFyT+syABYjyl/tKx9n 8JA=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_new_signer.rpl b/tests/deckard/sets/resolver/val_cname_new_signer.rpl
new file mode 100644
index 0000000..fe50d3b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_new_signer.rpl
@@ -0,0 +1,239 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN CNAME chain with different signer names in RRSIGs.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 38364 7 1 66DC14443014B2727261B50B447170DE18CF43A9
+sub.example.com. 3600 IN DS 38364 7 2 719A6680950A624D2C71A67981A7AF884C23E3C21074FF1CF8FB7EFE 20C52F97
+sub.example.com. 3600 IN RRSIG DS 10 3 3600 20251231235959 20160308093040 438 example.com. mu/x2yR8nFrwOnnfN7dMQ2e2MAAuZigua0wakXaPT0j4pe5AjQhriZXU pWLk5z77ck8Kswt+O23v1sUxmq1bUsIc2kw6N02UyiHnPoxmcu0rg0Kc ustfA++YT5/L+fpq5PRm3kKfHLo81WdZ/VJoaafH/kXHnZTcP62ZoteQ sqw=
+sub.example.com. 3600 IN RRSIG DS 10 3 3600 20251231235959 20160308093040 2843 example.com. ZLx28ZpzPpaafVH3hqV9h6AZJH7Zn0ELOfFxodogJfWue86xjuWhzpBV O9jCOqyURitiBgKNYazghmciNw4wzANbz+hhtc4rIPsfOr/8Vn3pjyev yScX227d16hXKBNKTrAeKNvM8fVPT0E7cG3CY0mzVp3SVqrr+6hl+dgb gXU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME foo.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. Bn3zMkt2HEfIt5kLCEmcT6Kj/20qcvob2RdQaaTtZD+xrbDmqjFkiW09 d+RGP4g7ydXxIDczs4d3dTaSjEp2mgzd8GG0yegG1wiLzObp+gXTLaIT LLz53neab4yS0ZOaformDeWSCx3//U8guRRfOSnPHLQGAmqrVG7Dr30D RKU=
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. FpyDEo49Y1b5Hb112BDCohW+93sDTmBrYc1rRfI8QrfLPXRwpMFVZBhU fDk8aG6qyKVlCa3DhpcHRyPi9SAz1nNPNhstcSqmmj7vNWjBVY5wtt1m 9AqEXFca5liXxVhuijpW9GBMm1LFyNYzuNqQszyje8/NZSumaIbqJiJy f6c=
+foo.example.com. 3600 IN CNAME foo.sub.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. aD8FHTvx3sL/prnJ5tfeZG1Tb7gUknU7GGJg8H5W4MkZKteMsF+Vydy9 LI/yTMjk+43Hmsim1lqtzL4GLoegG9xJCMVo14QVqsAwSzzyA/ySfWox Hw/tiltI8VBfOmRDL9V3qRhW6ZaYbXFHY1AbIapIsO/gFPcJ/nVsnugZ tHc=
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. ht4bE1Q5IevG+F0qvLDjbEaRvNRsnEKnEm3ntcXemtrtIpCLM5KsM2Bc oPrl3+ayQAv2NJM8GsJM9xWzZYAKEQk+THhusCE4j8/lX6Ngmb4M3x0R CI6sBxmN84v4HFXqk4W7dMW7BL9NlEMY2bgQe9g2kUcfA7FHaUQofrqS ASQ=
+foo.sub.example.com. 3600 IN CNAME www.sub.example.com.
+foo.sub.example.com. 3600 IN RRSIG CNAME 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. vd1rVNNnARpWt7AmfKL1Kt2tqD5/v52tmwJHabpDegmMZ9sW3cZ3u+VF zypg545TnxtRBJAKmhEooDAOt4oNaP7u8K83HUCwlZOYz2bu0lrZU5wL ALi4jX880lWc/AR9z1FzG6ZXEcK9lu+1nC5x09jedaUFOG5bEMSMmdN+ 2N1Rdf75l3CiJIigiUE2y5pS4rDemsTJqgF/QK8XBbBNaz6c2f6XRKnc fC40jsfcufR0wTrhZw7/7FthKoaLBi/xE11mItQkBGDbCAgyM3ftV3mZ ArmlCg8expcTRuGIvhpvMbTf4m3/zBHPxsxO75QvD84ysBz0C6hnquJH 1BfrNA==
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.example.com. IN A
+SECTION ANSWER
+foo.example.com. 3600 IN CNAME foo.sub.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. aD8FHTvx3sL/prnJ5tfeZG1Tb7gUknU7GGJg8H5W4MkZKteMsF+Vydy9 LI/yTMjk+43Hmsim1lqtzL4GLoegG9xJCMVo14QVqsAwSzzyA/ySfWox Hw/tiltI8VBfOmRDL9V3qRhW6ZaYbXFHY1AbIapIsO/gFPcJ/nVsnugZ tHc=
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. ht4bE1Q5IevG+F0qvLDjbEaRvNRsnEKnEm3ntcXemtrtIpCLM5KsM2Bc oPrl3+ayQAv2NJM8GsJM9xWzZYAKEQk+THhusCE4j8/lX6Ngmb4M3x0R CI6sBxmN84v4HFXqk4W7dMW7BL9NlEMY2bgQe9g2kUcfA7FHaUQofrqS ASQ=
+foo.sub.example.com. 3600 IN CNAME www.sub.example.com.
+foo.sub.example.com. 3600 IN RRSIG CNAME 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. vd1rVNNnARpWt7AmfKL1Kt2tqD5/v52tmwJHabpDegmMZ9sW3cZ3u+VF zypg545TnxtRBJAKmhEooDAOt4oNaP7u8K83HUCwlZOYz2bu0lrZU5wL ALi4jX880lWc/AR9z1FzG6ZXEcK9lu+1nC5x09jedaUFOG5bEMSMmdN+ 2N1Rdf75l3CiJIigiUE2y5pS4rDemsTJqgF/QK8XBbBNaz6c2f6XRKnc fC40jsfcufR0wTrhZw7/7FthKoaLBi/xE11mItQkBGDbCAgyM3ftV3mZ ArmlCg8expcTRuGIvhpvMbTf4m3/zBHPxsxO75QvD84ysBz0C6hnquJH 1BfrNA==
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 7 AwEAAfXXu2eDy9QsjLuHgEMWmG03TVauwmITCq520ANujsTZlPKyQKJe xyrYm61e0RuQJb5dB5JnE0O3YYJOpnrl8keieAqVt1efnNtcn8V1em48 et146ZYFAUb/PMdTOgd2XJnhVEWD3VsZbWNMCxP1KcJTATAaLDVCY//E sc9K3CvGUizNcSoTK2rGS73A6GqmvVNnGir6AQIZifkvb6PKzF/hVpS8 cgvKF/UP8hu+0Glbq1YYTFrXMUBzKUH+X19lRvk3eLHurSvGjDEM3ZO6 tp1QdpzIRPzYKENG+qs07dhgCZyb4zqwEycmL9/Vot0ByTGbeHvHN93P PrLxcM5zlVk=
+sub.example.com. 3600 IN DNSKEY 257 3 7 AwEAAfTD+gzZ2g7c9VoOUR2ekQiPNEyqcyl0MZ4sD3bleU8D8hQdDgAI 1G38raY3xmNea8yLCQYF0x00QbmKtzMjpZqKfsCFZDX6lBV5dP8IwJ0D F6L4hjO819IInf6upH9tfQNnueflWyKzfg2zitV+ILZ4YtZViyCKqayw CSPE8OkFlszZyCESzhrXqoPdJ0oHdZCG4lOlRIgZfrMLC4yTI56iiwFc UsKy7BhNPW+hcc4r+0WB9BCpsiei/FjPMcyeMrx1W+s/xgW7/55Nq+dM PUn9v24uCptZUupn/7CRgMGM5DmWe94QIswAQjH2mXNfOgVPOiceLYzU mcNoKudvSUu1hbzJbVHA4UNWDm2vvsdsEzrOEzqO0ZVczLoZzWU4WpLf IlKm481OKkzAP9Y5F4iTTSIrbVcAuEW/iz5zfqWirgGniiTCszAie8lH u1EPBgGnfotqhq9IbNA6aKNUreJPLvJnds7J/aQmiSdm15pAq71B26X5 BmoZVhbNmh6MHXkq99EIt0yRMEOfPLRN7euza8Idd4mA+E8jpdgtYdJD LC7f2SoQxaN4RMr5MC/Z1ENQgLMYRkd87pEQycAlNAoWMPJMuoDNdwhV 15F8+pvkvfu5cm9FoEWvgS+onibUM9EC9L9EDdfDdW1Hf1QfUinVoMf/ Szf1urkPVNl0nNYF
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308093040 27527 sub.example.com. CzB+UmU98ArL/HRIOMyHV87PPYoH3G/KKdJlbjtNZAaHG+K6Lad0pKW5 wZR3By1AMlIN9ta8374q+nCEtY+ryM7yBFpzSTmBqrf7ZhkxWh2OSnrI CllC3CsSeltsOq/AEQZwJLQG/gQiCqqQnJY4mneKhcg0Bzc0hpe8c1Dq C5eaHKqt7BaVRO1Ix6OKqEqjHzwd5HpKd2pzU91HyfvHsWrOnKyIwHJP nyOcuHESKN97YLey9Onw0eXjUYdbG5GM12OV1qawShOthcm7XUQiJ0Xl V7y0pNekCxXZdQQI/XhVj8XyLa5pLy8PaOLqypbMBg19J5diLUZYAt/f Dj/EzQ==
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308093040 38364 sub.example.com. xzyO85eLRwVsg9VI4RnXnjrwf0/TCMub7UcOr7TWWhwt9iR8KFSenx17 EVG1OlgEzRrdZLQWJBPlNBR5aLpsNlzUj+cnCpdG6NtUjcdqRJxb+64Y RktG5Hz35AV7Iegs3L6tFdE4J2moGCDC0y8Rm9wyL+mCUNylpnXUOo8D NDpd7VcYKoieGWxLd8OK5aCYUlB2ziL9yIMOZR+sGEPZWR6ABXDbUF6S ddj7lbZ7y+GHp2XpjDvpmbRSrznNmopzn71O59sCiog8obnGif02EXEn 3L2a8eGx3tMhCZZAPaqJrocTIAmye0vLt0xT22WFPxmcButV1UYZd00m KwJaKgUB450wdub4aAXVvtTx7Us++6zRepZ3VtXARDT+qGzBUkISEuSM FbLHlqqdQeLTcfdu7azEfyCWudoDTbXejFQjFtWkSo6SwEV8sC64rMV6 AFytMBvksBD0tjGrWvPkdDxWa43SQja8BiTlKugtM7zJgqBH9pi1MN4o asc3hyBHBKEiX8ilK7GBTqFph8tdRxawWsaK273pATBLeQfHM2jKcg5p ULhSLxYDvJ+TgYKJkFyFd4C78HffgrashJvrxNsK1QQk05bpTGk9j6ja fzzyB6mDhWGLux1/i++akwTOKsWmFnNe6MXKTN1gnEw4pny3m7zBmh0x gFkbfEo1aDU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.sub.example.com. IN A
+SECTION ANSWER
+foo.sub.example.com. 3600 IN CNAME www.sub.example.com.
+foo.sub.example.com. 3600 IN RRSIG CNAME 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. vd1rVNNnARpWt7AmfKL1Kt2tqD5/v52tmwJHabpDegmMZ9sW3cZ3u+VF zypg545TnxtRBJAKmhEooDAOt4oNaP7u8K83HUCwlZOYz2bu0lrZU5wL ALi4jX880lWc/AR9z1FzG6ZXEcK9lu+1nC5x09jedaUFOG5bEMSMmdN+ 2N1Rdf75l3CiJIigiUE2y5pS4rDemsTJqgF/QK8XBbBNaz6c2f6XRKnc fC40jsfcufR0wTrhZw7/7FthKoaLBi/xE11mItQkBGDbCAgyM3ftV3mZ ArmlCg8expcTRuGIvhpvMbTf4m3/zBHPxsxO75QvD84ysBz0C6hnquJH 1BfrNA==
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME foo.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. Bn3zMkt2HEfIt5kLCEmcT6Kj/20qcvob2RdQaaTtZD+xrbDmqjFkiW09 d+RGP4g7ydXxIDczs4d3dTaSjEp2mgzd8GG0yegG1wiLzObp+gXTLaIT LLz53neab4yS0ZOaformDeWSCx3//U8guRRfOSnPHLQGAmqrVG7Dr30D RKU=
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. FpyDEo49Y1b5Hb112BDCohW+93sDTmBrYc1rRfI8QrfLPXRwpMFVZBhU fDk8aG6qyKVlCa3DhpcHRyPi9SAz1nNPNhstcSqmmj7vNWjBVY5wtt1m 9AqEXFca5liXxVhuijpW9GBMm1LFyNYzuNqQszyje8/NZSumaIbqJiJy f6c=
+foo.example.com. 3600 IN CNAME foo.sub.example.com.
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. aD8FHTvx3sL/prnJ5tfeZG1Tb7gUknU7GGJg8H5W4MkZKteMsF+Vydy9 LI/yTMjk+43Hmsim1lqtzL4GLoegG9xJCMVo14QVqsAwSzzyA/ySfWox Hw/tiltI8VBfOmRDL9V3qRhW6ZaYbXFHY1AbIapIsO/gFPcJ/nVsnugZ tHc=
+foo.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. ht4bE1Q5IevG+F0qvLDjbEaRvNRsnEKnEm3ntcXemtrtIpCLM5KsM2Bc oPrl3+ayQAv2NJM8GsJM9xWzZYAKEQk+THhusCE4j8/lX6Ngmb4M3x0R CI6sBxmN84v4HFXqk4W7dMW7BL9NlEMY2bgQe9g2kUcfA7FHaUQofrqS ASQ=
+foo.sub.example.com. 3600 IN CNAME www.sub.example.com.
+foo.sub.example.com. 3600 IN RRSIG CNAME 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. vd1rVNNnARpWt7AmfKL1Kt2tqD5/v52tmwJHabpDegmMZ9sW3cZ3u+VF zypg545TnxtRBJAKmhEooDAOt4oNaP7u8K83HUCwlZOYz2bu0lrZU5wL ALi4jX880lWc/AR9z1FzG6ZXEcK9lu+1nC5x09jedaUFOG5bEMSMmdN+ 2N1Rdf75l3CiJIigiUE2y5pS4rDemsTJqgF/QK8XBbBNaz6c2f6XRKnc fC40jsfcufR0wTrhZw7/7FthKoaLBi/xE11mItQkBGDbCAgyM3ftV3mZ ArmlCg8expcTRuGIvhpvMbTf4m3/zBHPxsxO75QvD84ysBz0C6hnquJH 1BfrNA==
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_oob.rpl b/tests/deckard/sets/resolver/val_cname_oob.rpl
new file mode 100644
index 0000000..0dd3d4a
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_oob.rpl
@@ -0,0 +1,181 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN OOB CNAME to wrong name.
+
+; 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 A
+SECTION AUTHORITY
+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
+net. IN A
+SECTION AUTHORITY
+net. 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN A
+SECTION ANSWER
+a.gtld-servers.net. IN A 192.5.6.30
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.gtld-servers.net. IN AAAA
+SECTION ANSWER
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+farfaraway.com. IN A
+SECTION AUTHORITY
+com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1479809979 1800 900 604800 86400
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+alfa.example.com. IN A
+SECTION ANSWER
+alfa.example.com. 3600 IN CNAME www.farfaraway.com.
+alfa.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 438 example.com. yKZk1/bXS2mjUqJ9bS2KVrf1Cq/bsNoHj7VD3R8sp2Rn63vBEoxzqBxo 8lYuXlNw3sMAQFQYhaloVrNnDPwlAfY+qXuLutsAtKxql/FxdRWIjjMk fvO9zNbqzCpP1FtCO0PpFgJXYH5wkkq8/sBDRW8CbDotruSJPbJ1/OGn JPc=
+alfa.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. SglKK7SovflRnQVz1leE94Dez+obX9nWR5eAQ6ggun2xkZbUjK22UHbl ihP5F0PpqnTdgPNyEgCR1P/HON2VYMlB1CT2J/fm3ZriLyBEOEils98J UkWZYy5Kt3eXcye17YKBXIW9ivIWTh5brRWaPEbzXy73ID3HZYyKVM52 3UU=
+www.farfaraway.com. 3600 IN A 1.2.3.123
+www.farfaraway.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. 11111111111111111111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 11111111110=
+SECTION AUTHORITY
+farfaraway.com. 3600 IN NS ns.farfaraway.com.
+SECTION ADDITIONAL
+ns.farfaraway.com. 3600 IN A 1.2.3.10
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+alfa.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+alfa.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_to_unsigned.rpl b/tests/deckard/sets/resolver/val_cname_to_unsigned.rpl
new file mode 100644
index 0000000..66e795d
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_to_unsigned.rpl
@@ -0,0 +1,202 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN CNAME to unsigned subzone.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.sub.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. msZaF29s99toR+WhRyQsRR63Nclwvic7dOMKH3KW3g/mamiN22g9dJ7L VPdG1FX9+4qosyn37d/+jUXy2UIryBXuXBojpPU3UrPq/gJOYtp1y23e dHgeGpCv7Tmp/TDDWJPNSUL/rWjl64MK1Dkd+O4plU+SMgqN1wuTgBg8 fsk=
+ENTRY_END
+
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2016022600 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 10 2 3600 20251231235959 20160308093040 2843 example.com. s3pCq6ZK3DEUkWYX3XKvr5v9Z4AhbJ4P7/AKQkhe3zymnTba7Bo5Uhmb Vav/A+u8gsoo9yBumReXLAv047btO+jdCOLD/yXvmaSt/yGGcipFoX6r 4kQWzUHby4NlQEdO3YykiZx7FtCGsMp0cfwPae4glkDsAPnIhhQurzzE VP4=
+sub.example.com. 18000 IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 18000 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. vA2GpUEeAnbvg8t35VEZybJoJvxlu9UGXHNEzIohxKetvLTp761NaCW5 NIhYnVv/b9GDmu5sU9cvQxN+7nEGqLXKnzlGbzIdSedrzBgjOnQNOGO5 BJTollsCG71OfTs2/4kzi04N11yWqSaJyidWLXPH2lElTFQX/3dMcP2m 5uE=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.5
+ENTRY_END
+
+RANGE_END
+
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+ENTRY_END
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.sub.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. msZaF29s99toR+WhRyQsRR63Nclwvic7dOMKH3KW3g/mamiN22g9dJ7L VPdG1FX9+4qosyn37d/+jUXy2UIryBXuXBojpPU3UrPq/gJOYtp1y23e dHgeGpCv7Tmp/TDDWJPNSUL/rWjl64MK1Dkd+O4plU+SMgqN1wuTgBg8 fsk=
+www.sub.example.com. 3600 IN A 1.2.3.123
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; Cache hit
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.sub.example.com.
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. msZaF29s99toR+WhRyQsRR63Nclwvic7dOMKH3KW3g/mamiN22g9dJ7L VPdG1FX9+4qosyn37d/+jUXy2UIryBXuXBojpPU3UrPq/gJOYtp1y23e dHgeGpCv7Tmp/TDDWJPNSUL/rWjl64MK1Dkd+O4plU+SMgqN1wuTgBg8 fsk=
+www.sub.example.com. 3600 IN A 1.2.3.123
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_to_unsigned_fake_rrsig.rpl b/tests/deckard/sets/resolver/val_cname_to_unsigned_fake_rrsig.rpl
new file mode 100644
index 0000000..bc2a5c8
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_to_unsigned_fake_rrsig.rpl
@@ -0,0 +1,213 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN CNAME with invalid RRSIG to unsigned subzone must produce SERVFAIL
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME fake.sub.example.com.
+; following RRSIG was generated for www.example.com. 3600 IN CNAME www.sub.example.com.
+; -> rdata "fake.sub.example.com." == an attack!
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. msZaF29s99toR+WhRyQsRR63Nclwvic7dOMKH3KW3g/mamiN22g9dJ7L VPdG1FX9+4qosyn37d/+jUXy2UIryBXuXBojpPU3UrPq/gJOYtp1y23e dHgeGpCv7Tmp/TDDWJPNSUL/rWjl64MK1Dkd+O4plU+SMgqN1wuTgBg8 fsk=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN RRSIG
+SECTION ANSWER
+; following RRSIG was generated for www.example.com. 3600 IN CNAME www.sub.example.com.
+; -> rdata "fake.sub.example.com." obtained from previous query == an attack!
+www.example.com. 3600 IN RRSIG CNAME 10 3 3600 20251231235959 20160308093040 2843 example.com. msZaF29s99toR+WhRyQsRR63Nclwvic7dOMKH3KW3g/mamiN22g9dJ7L VPdG1FX9+4qosyn37d/+jUXy2UIryBXuXBojpPU3UrPq/gJOYtp1y23e dHgeGpCv7Tmp/TDDWJPNSUL/rWjl64MK1Dkd+O4plU+SMgqN1wuTgBg8 fsk=
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fake.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MANDATORY
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2016022600 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 10 2 3600 20251231235959 20160308093040 2843 example.com. s3pCq6ZK3DEUkWYX3XKvr5v9Z4AhbJ4P7/AKQkhe3zymnTba7Bo5Uhmb Vav/A+u8gsoo9yBumReXLAv047btO+jdCOLD/yXvmaSt/yGGcipFoX6r 4kQWzUHby4NlQEdO3YykiZx7FtCGsMp0cfwPae4glkDsAPnIhhQurzzE VP4=
+sub.example.com. 18000 IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 18000 IN RRSIG NSEC 10 3 18000 20251231235959 20160308093040 2843 example.com. vA2GpUEeAnbvg8t35VEZybJoJvxlu9UGXHNEzIohxKetvLTp761NaCW5 NIhYnVv/b9GDmu5sU9cvQxN+7nEGqLXKnzlGbzIdSedrzBgjOnQNOGO5 BJTollsCG71OfTs2/4kzi04N11yWqSaJyidWLXPH2lElTFQX/3dMcP2m 5uE=
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.example.com.
+; it should not be reached because of invalid RRSIG
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+fake.sub.example.com. IN A
+SECTION ANSWER
+fake.sub.example.com. 3600 IN A 1.2.3.123
+ENTRY_END
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; Cache hit
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cname_trust_domains.rpl b/tests/deckard/sets/resolver/val_cname_trust_domains.rpl
new file mode 100644
index 0000000..3120216
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cname_trust_domains.rpl
@@ -0,0 +1,438 @@
+; config options
+; The island of trust is at example.com and example.net; example.org is insecure
+trust-anchor: "example.com. 3600 IN DS 11901 7 1 4b5c9e50ad931b35fc507e0a20d141a056c19227"
+trust-anchor: "example.net. 3600 IN DS 59835 7 1 1fb3f5d45f4ffbf160e0f4fb75e3a1e8d34b6a67"
+val-override-date: "20170214000000"
+stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with a CNAMEs between sub-trees with different TAs
+
+; 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
+
+; subtree with own trust anchor
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+com. IN A
+SECTION AUTHORITY
+com. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; subtree with own trust anchor
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN A
+SECTION AUTHORITY
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+; insecure subtree
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+org. IN A
+SECTION AUTHORITY
+org. 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+org. IN NS
+SECTION ANSWER
+org. 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.org. IN A
+SECTION AUTHORITY
+example.org. IN NS ns.example.org.
+SECTION ADDITIONAL
+ns.example.org. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20170313131924 20170213131924 11901 example.com. B4VToCUqVSDSaOG1sK+p+WC1Ece0tB+0UZTBfD+zgfbkHv+nI0ehsBEFlcubMiWZ9qZJ37824b44qapOOvfzuuhtkk/z5VPVljfWz4vj/t+fYQjWqfNN+oVp+ul7ULsDNNNWO6rPJmtmEjUq/7QrGb1iFereC5oaH2J5D13y5hCMPxtepQ7EjsGSHGhT0nAuWJwV5iNcUUm0kRIiBZqIGCVx16G5S3kxBebcoDA+yjMiA5xmFoxEf4I4Vk0Ut7rh4TOStEQdZAW6VCD4e65gWwNu2dTHpdqctA8ppjOA3nVamjPlVQ0z0Cqxm6UHj+su7CnS7lg2fjGYfP0ebUTSYg==
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20170313131924 20170213131924 11901 example.com. LEvYqarAR/IXWSOknuV7DobkmjcvIIe1lFlJSucRp9v2GkdE384vMrSPmvRxItpEWgnnKlEZIYvMDcKT71muIlv7+0PmIPMtdBkB2rBL0s5dZxH//u9tWmgPAkG+BLJelr5iB63w8VhXJsiRiNGjCBc6t5MJHk7nTNK/8LLUZYDyi8YsiIxxy+emUwOW/LLfSECSBlz4QbyD1tQ0dErk48jAH56GwLJehmtMKbyF/negRLO9jOrzSOGiszw3VjyLfzkkfLJBNheSECGo3aN+/r/GPHr2CisgfROeR46PXs56ooGkO4x/PsplFTc+eZQioHuIPkv4sScyz2/2shxTLA==
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 257 3 7 AwEAAb7hP8/oYI+DGLG/Khpe0roTWUdmAEMRAaUbiFAMrMf1AiSTBf5oNrVPMFvM/MmqoAZ6Ku2AhyAnb6pfCrG1TQq5uuFYrp4h2u6jUxFT3OPNHb+gDlKRSqDzOXBImCf1SDz7bx4xw+zS/rYOF2mPk8YWi+jI3HzIkqCjw++oIu+Zwzcmc9fRTruDMDhFGcVMvdD97CbD0QpBDvgh2vQikZvmD4wwzrvjJC7SmkNPTYA2RaJj2GSggnYMcgPBNHBJzLqfCbciU1jUBazsAafQbnXfy3jz5Eh/X6vKlAtejMhoCqd9iXE7EqYWI9F4ny/a/17z/aEYrWsJsVIlnJ10nlE= ;{id = 11901 (ksk), size = 2048b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20170313131924 20170213131924 11901 example.com. V99TYdJIpoy6pJuFQx/VgK05YifhPcuuqdTzHM67ORzhpOpQj/2/aFWYPu7WoRhNOw895I41VIDuX0ljKXNUbAl+YF7+eRWDyrRsnWWhxWcTL0yWH71/b8U0IHFus++HKiYU+6pq148k0Pk4LmINWv7qDqOv+XVdfLqjRSWgZxEEXOaRgNp6m6UTJy9n9qvXejdxXBFLLsSRTHXBM3amyEl2LyXLyG4C8MNJPMMcwmBQASlj9AaUxewXQssacbagHy9CJtZcUjwco76dfyM/X2tgRfdXrVz1QCuA8D1o8FRtddnRugOSUqfF73dBVEoljWYNm6V2xR5uXnFyRZdyAQ==
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20170313131924 20170213131924 11901 example.com. B4VToCUqVSDSaOG1sK+p+WC1Ece0tB+0UZTBfD+zgfbkHv+nI0ehsBEFlcubMiWZ9qZJ37824b44qapOOvfzuuhtkk/z5VPVljfWz4vj/t+fYQjWqfNN+oVp+ul7ULsDNNNWO6rPJmtmEjUq/7QrGb1iFereC5oaH2J5D13y5hCMPxtepQ7EjsGSHGhT0nAuWJwV5iNcUUm0kRIiBZqIGCVx16G5S3kxBebcoDA+yjMiA5xmFoxEf4I4Vk0Ut7rh4TOStEQdZAW6VCD4e65gWwNu2dTHpdqctA8ppjOA3nVamjPlVQ0z0Cqxm6UHj+su7CnS7lg2fjGYfP0ebUTSYg==
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20170313131924 20170213131924 11901 example.com. LEvYqarAR/IXWSOknuV7DobkmjcvIIe1lFlJSucRp9v2GkdE384vMrSPmvRxItpEWgnnKlEZIYvMDcKT71muIlv7+0PmIPMtdBkB2rBL0s5dZxH//u9tWmgPAkG+BLJelr5iB63w8VhXJsiRiNGjCBc6t5MJHk7nTNK/8LLUZYDyi8YsiIxxy+emUwOW/LLfSECSBlz4QbyD1tQ0dErk48jAH56GwLJehmtMKbyF/negRLO9jOrzSOGiszw3VjyLfzkkfLJBNheSECGo3aN+/r/GPHr2CisgfROeR46PXs56ooGkO4x/PsplFTc+eZQioHuIPkv4sScyz2/2shxTLA==
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313131924 20170213131924 11901 example.com. TyWar/GZu4Vw5t4YTnxF8XRJAmHTWAA0snal0I6qH4pBxqmmYMHdFuGmiKwQNUpNlntOaAHj2UElkHa07eF+/Hb7mwf926bzGa13of2zS3rmwaqNi0nDns6PNWmzmpG65jKXqug5X7QrKIO00KeFWPM3T6LXp3TyZ9v1c5wtze1UGvK3OsSBs9aV9ovRcMjGA8ttPZbStM6VlblzdWfha+RY9Yt61OkAbS1ooQ2TRB1esGyd3EZgV0jTMtkbymitPog7XXEViIl5lp76clBOvUHCRhSO3XhU9ir840pQ+SOFTQBRK5OOhKOar2IX/n3smk+teqRbZ1zEa0cyrV/2Fg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+insecure.example.com. IN A
+SECTION ANSWER
+insecure.example.com. 3600 IN CNAME insecure.example.net.
+insecure.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313140157 20170213140157 11901 example.com. PwYkM20oqzXrK+48AJgJUQP5MNbVjV9Xt9PG5ag2U7DrckQbVvuZ6dorouqUbVvLXhpbfInGazxgGGSE+hObhkhJcrRcmg2pKHWbRpBJqNnMeXk/w5zzlIOBq+Hu+ZpyUsbfJeax0S+gOyKLSeqRLDzOxWsSiFfPD2PSdfHcdslDxWLt92J8Yr2/wqh5aW7HOYDRZbvZkfP+0J4FWfWI6j25flbR7/Kt8SBAcqvg4cFREVua847iAItKGZGqa6XWnUX9JSskBl97RG0T3jBel+nz3MjMVSDl5HYaazv+VuUcF4NbjIcZHt8QxVOLw6IF/XxwPunqLPGByIYrBreUJQ==
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN NS
+SECTION ANSWER
+example.net. 3600 IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS 7 2 3600 20170313131043 20170213131043 59835 example.net. XLDyXC3D0yyq3VOwjbHlI5QBl5pvmiGw 72k1nZIZbBSj6xJkGl0LXzRBO8gXbvYJ 2N1K2DwNQzR2ZPxoDzo60Mwe2gt7RjJt xMgLny0p6qWCvW1VYEyODvvnKrwcDvKm fbMPXmUaf2UuCj4OlaljJXDYACUG9+X2 yA+ipcop7rR+z4spnOfQIao1dzsH8itp yCRkV+X4jzDNaj9CN6nDfpCJsDDt4//5 V//3LQfAwmBBFOesnM3r68uCRqQySRzj UILvpWnu7T71FEHqIHSQmRUHAZRBsxGu IgWrEEHbcg5+eCvVe3X5lNMFAuU5ysXb mb2ENkyFPhfmytLLE/a96A==
+SECTION ADDITIONAL
+ns.example.net. 3600 IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. ewYu0740p/BWH2RRU+L7QXhj44AnFNaobCCSYxl3gEqLNQI3MSJffXle2JVsEpgMySHfDZQSBy5iAqOA7zQLUmtABWCjKb74nlngPWklneibxQiSGphf8OyVJTrYtcNvk458eBfyyMWQy7HYwDYtYBlGIqHzU7FUkONHteDGlb5aGtAbqib9LzsHExfJdRuy5l1NX+/cLqHeRDceSX4g7F2Xn+i4SLBTHa4HODiklB8ugjHuFHLVBJAm55aIDSmrSrDliL2QZ/aXtVhRh1lMaD+YdsaW7Gny9EGygnFGolmzmVxjeCQ1sfmAjd8VS+x979VLy9tT2GWQWv39dfBejA==
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN DNSKEY
+SECTION ANSWER
+example.net. 3600 IN DNSKEY 257 3 7 AwEAAZiIoYj0BuA2FiduSeydlfGOpKfK38KvFB5jHASrr1YIXOB3ky1WMzedwL6sti6EtMDNBZTnqr+4+b01zuAGDDuQvsVrd5y07lrc+8Y1S61s4QVo2r5P1+I54AucFCX+ZeqGhKkEhhu74LHbmKn32d9MUGHbazZ2+l7hrROVEljmrL/2waHOVu1flHxN5TfIcA9+UghA/aoT9p/oT8EzJ/oEbX2GT7hfvOmmOVUfEIgBlIKwwqaYIxjjzex2bPzkm/SN3oU3gwVcJv6q3R5a+4AeLv5lrsNL1qc7Juth4miiiwJpv8COBSFgBEhSqAjkurx+cXzYClBz+yxJJSsRYFs= ;{id = 59835 (ksk), size = 2048b}
+example.net. 3600 IN RRSIG DNSKEY 7 2 3600 20170313131043 20170213131043 59835 example.net. aQLRerV6GBcQY6dm4bYr7cCr6rkdl+GYPyyfw09d20FW/JuqiljvqKMQtfzVXBrqYIB/DMdGkSJ87w19vlPzey8CtI8oXk1AFwHD/aFqS3cv/2oFS71cm/eGhmf87led51NrqW6dQPkQZ2xOZ4cDxtmkrLMJy3OWIwH8+1rpy4dOg/aHw4+K7qARWJtj3iS9GmiZW88LRdSvJR14reAlM4XYhivdGZcEe+UQNymz+NY7KG1DwWU2AQCBq/QID+f5Zpxbfw2fEH7X1aMzjEj/HGZ3BXcXahM0wGQzRXmXNcXYqzST/RhrJ1g34xsgMFLk/Kfj+cQCOW8aK7/Zt9vRIg==
+SECTION AUTHORITY
+example.net. 3600 IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS 7 2 3600 20170313131043 20170213131043 59835 example.net. XLDyXC3D0yyq3VOwjbHlI5QBl5pvmiGw 72k1nZIZbBSj6xJkGl0LXzRBO8gXbvYJ 2N1K2DwNQzR2ZPxoDzo60Mwe2gt7RjJt xMgLny0p6qWCvW1VYEyODvvnKrwcDvKm fbMPXmUaf2UuCj4OlaljJXDYACUG9+X2 yA+ipcop7rR+z4spnOfQIao1dzsH8itp yCRkV+X4jzDNaj9CN6nDfpCJsDDt4//5 V//3LQfAwmBBFOesnM3r68uCRqQySRzj UILvpWnu7T71FEHqIHSQmRUHAZRBsxGu IgWrEEHbcg5+eCvVe3X5lNMFAuU5ysXb mb2ENkyFPhfmytLLE/a96A==
+SECTION ADDITIONAL
+ns.example.net. 3600 IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. ewYu0740p/BWH2RRU+L7QXhj44AnFNaobCCSYxl3gEqLNQI3MSJffXle2JVsEpgMySHfDZQSBy5iAqOA7zQLUmtABWCjKb74nlngPWklneibxQiSGphf8OyVJTrYtcNvk458eBfyyMWQy7HYwDYtYBlGIqHzU7FUkONHteDGlb5aGtAbqib9LzsHExfJdRuy5l1NX+/cLqHeRDceSX4g7F2Xn+i4SLBTHa4HODiklB8ugjHuFHLVBJAm55aIDSmrSrDliL2QZ/aXtVhRh1lMaD+YdsaW7Gny9EGygnFGolmzmVxjeCQ1sfmAjd8VS+x979VLy9tT2GWQWv39dfBejA==
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR DO NOERROR
+SECTION QUESTION
+www.example.net. IN A
+SECTION ANSWER
+www.example.net. 3600 IN A 10.0.0.1
+www.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. F0OiqJtl9nOonZePqV+boFuj5i1zTyDdj5yxZ80J7BQOoB0wGvcx105mriIW3mAQPmgq2K/lK317IejuP+kKBr8oGr82apCyP7NihAHr/dnqe4cTJJjQU1cjLJcIJHY6jg99DR6HkCZFRjEA8TI761E2GBfvxK0yPKEW1m8N9G9Wl5KZOHq8pQ1ZNDm4MR0rt2lvsuVaf+iGiw4HJkaD7Kceq3y9ukilsuP6Zl0dWMIeTqcs7UT3OS16HV21A9VL3rJGRLUonmJo7mUq8hpxKnFYK6/96IfXCf/XX1YI6rK0DVp1OE0S8s+teLG4UsE2p2+dC2arVwhHUGzlZMvO/A==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR DO NOERROR
+SECTION QUESTION
+insecure.example.net. IN A
+SECTION ANSWER
+insecure.example.net. 3600 IN CNAME insecure.example.org.
+insecure.example.net. 3600 IN RRSIG CNAME 7 3 3600 20170313140150 20170213140150 59835 example.net. L1NmsrbewJeWS4ZC07jR9EWPg5QqKwH8BklJIWnMYlfR1xaLcMS5hHeDQN3OUK8D79mxmoBQVIXPMig3CLJPkewJoOZMKD/UwHVosFbG9NbRbWtY6tTZtQnzLy45+AsoQeF0tnoJM+5pvE3wMyXLBgZWbZDGRd0/Uk5/wxddu7NkxAZ0U3zarFxpVnQgP+MKifaplfHko599psQ58BnoSMUB1FjeFsy78zkXd3PjX/VWevGNlABGmlpvWdQou8c6V9ihGVRmsha6ABW04cLgevDjgorrn1AAI88c1H/pRDoWjO5zyQ9PPFPusCTYTEWcuSDpN43RFCxrA7ENP2g1rw==
+ENTRY_END
+
+RANGE_END
+
+
+; ns.example.org.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.org. IN NS
+SECTION ANSWER
+example.org. 3600 IN NS ns.example.org.
+SECTION ADDITIONAL
+ns.example.org. 3600 IN A 1.2.3.6
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.org. IN A
+SECTION ANSWER
+www.example.org. 3600 IN CNAME www.example.com.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qname qtype
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+insecure.example.org. IN A
+SECTION ANSWER
+insecure.example.org. 3600 IN A 10.2.2.2
+ENTRY_END
+RANGE_END
+
+
+; CNAME from one trusted sub-tree to another trusted sub-tree
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313131924 20170213131924 11901 example.com. TyWar/GZu4Vw5t4YTnxF8XRJAmHTWAA0snal0I6qH4pBxqmmYMHdFuGmiKwQNUpNlntOaAHj2UElkHa07eF+/Hb7mwf926bzGa13of2zS3rmwaqNi0nDns6PNWmzmpG65jKXqug5X7QrKIO00KeFWPM3T6LXp3TyZ9v1c5wtze1UGvK3OsSBs9aV9ovRcMjGA8ttPZbStM6VlblzdWfha+RY9Yt61OkAbS1ooQ2TRB1esGyd3EZgV0jTMtkbymitPog7XXEViIl5lp76clBOvUHCRhSO3XhU9ir840pQ+SOFTQBRK5OOhKOar2IX/n3smk+teqRbZ1zEa0cyrV/2Fg==
+www.example.net. 3600 IN A 10.0.0.1
+www.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. F0OiqJtl9nOonZePqV+boFuj5i1zTyDdj5yxZ80J7BQOoB0wGvcx105mriIW3mAQPmgq2K/lK317IejuP+kKBr8oGr82apCyP7NihAHr/dnqe4cTJJjQU1cjLJcIJHY6jg99DR6HkCZFRjEA8TI761E2GBfvxK0yPKEW1m8N9G9Wl5KZOHq8pQ1ZNDm4MR0rt2lvsuVaf+iGiw4HJkaD7Kceq3y9ukilsuP6Zl0dWMIeTqcs7UT3OS16HV21A9VL3rJGRLUonmJo7mUq8hpxKnFYK6/96IfXCf/XX1YI6rK0DVp1OE0S8s+teLG4UsE2p2+dC2arVwhHUGzlZMvO/A==
+ENTRY_END
+
+; cache test
+STEP 12 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 13 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. 3600 IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313131924 20170213131924 11901 example.com. TyWar/GZu4Vw5t4YTnxF8XRJAmHTWAA0snal0I6qH4pBxqmmYMHdFuGmiKwQNUpNlntOaAHj2UElkHa07eF+/Hb7mwf926bzGa13of2zS3rmwaqNi0nDns6PNWmzmpG65jKXqug5X7QrKIO00KeFWPM3T6LXp3TyZ9v1c5wtze1UGvK3OsSBs9aV9ovRcMjGA8ttPZbStM6VlblzdWfha+RY9Yt61OkAbS1ooQ2TRB1esGyd3EZgV0jTMtkbymitPog7XXEViIl5lp76clBOvUHCRhSO3XhU9ir840pQ+SOFTQBRK5OOhKOar2IX/n3smk+teqRbZ1zEa0cyrV/2Fg==
+www.example.net. 3600 IN A 10.0.0.1
+www.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. F0OiqJtl9nOonZePqV+boFuj5i1zTyDdj5yxZ80J7BQOoB0wGvcx105mriIW3mAQPmgq2K/lK317IejuP+kKBr8oGr82apCyP7NihAHr/dnqe4cTJJjQU1cjLJcIJHY6jg99DR6HkCZFRjEA8TI761E2GBfvxK0yPKEW1m8N9G9Wl5KZOHq8pQ1ZNDm4MR0rt2lvsuVaf+iGiw4HJkaD7Kceq3y9ukilsuP6Zl0dWMIeTqcs7UT3OS16HV21A9VL3rJGRLUonmJo7mUq8hpxKnFYK6/96IfXCf/XX1YI6rK0DVp1OE0S8s+teLG4UsE2p2+dC2arVwhHUGzlZMvO/A==
+ENTRY_END
+
+
+; CNAME from untrusted to trusted sub-tree
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.org. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.org. IN A
+SECTION ANSWER
+www.example.org. IN CNAME www.example.com.
+www.example.com. 3600 IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313131924 20170213131924 11901 example.com. TyWar/GZu4Vw5t4YTnxF8XRJAmHTWAA0snal0I6qH4pBxqmmYMHdFuGmiKwQNUpNlntOaAHj2UElkHa07eF+/Hb7mwf926bzGa13of2zS3rmwaqNi0nDns6PNWmzmpG65jKXqug5X7QrKIO00KeFWPM3T6LXp3TyZ9v1c5wtze1UGvK3OsSBs9aV9ovRcMjGA8ttPZbStM6VlblzdWfha+RY9Yt61OkAbS1ooQ2TRB1esGyd3EZgV0jTMtkbymitPog7XXEViIl5lp76clBOvUHCRhSO3XhU9ir840pQ+SOFTQBRK5OOhKOar2IX/n3smk+teqRbZ1zEa0cyrV/2Fg==
+www.example.net. 3600 IN A 10.0.0.1
+www.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. F0OiqJtl9nOonZePqV+boFuj5i1zTyDdj5yxZ80J7BQOoB0wGvcx105mriIW3mAQPmgq2K/lK317IejuP+kKBr8oGr82apCyP7NihAHr/dnqe4cTJJjQU1cjLJcIJHY6jg99DR6HkCZFRjEA8TI761E2GBfvxK0yPKEW1m8N9G9Wl5KZOHq8pQ1ZNDm4MR0rt2lvsuVaf+iGiw4HJkaD7Kceq3y9ukilsuP6Zl0dWMIeTqcs7UT3OS16HV21A9VL3rJGRLUonmJo7mUq8hpxKnFYK6/96IfXCf/XX1YI6rK0DVp1OE0S8s+teLG4UsE2p2+dC2arVwhHUGzlZMvO/A==
+ENTRY_END
+
+; cache test
+STEP 22 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.org. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 23 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.org. IN A
+SECTION ANSWER
+www.example.org. IN CNAME www.example.com.
+www.example.com. 3600 IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313131924 20170213131924 11901 example.com. TyWar/GZu4Vw5t4YTnxF8XRJAmHTWAA0snal0I6qH4pBxqmmYMHdFuGmiKwQNUpNlntOaAHj2UElkHa07eF+/Hb7mwf926bzGa13of2zS3rmwaqNi0nDns6PNWmzmpG65jKXqug5X7QrKIO00KeFWPM3T6LXp3TyZ9v1c5wtze1UGvK3OsSBs9aV9ovRcMjGA8ttPZbStM6VlblzdWfha+RY9Yt61OkAbS1ooQ2TRB1esGyd3EZgV0jTMtkbymitPog7XXEViIl5lp76clBOvUHCRhSO3XhU9ir840pQ+SOFTQBRK5OOhKOar2IX/n3smk+teqRbZ1zEa0cyrV/2Fg==
+www.example.net. 3600 IN A 10.0.0.1
+www.example.net. 3600 IN RRSIG A 7 3 3600 20170313131043 20170213131043 59835 example.net. F0OiqJtl9nOonZePqV+boFuj5i1zTyDdj5yxZ80J7BQOoB0wGvcx105mriIW3mAQPmgq2K/lK317IejuP+kKBr8oGr82apCyP7NihAHr/dnqe4cTJJjQU1cjLJcIJHY6jg99DR6HkCZFRjEA8TI761E2GBfvxK0yPKEW1m8N9G9Wl5KZOHq8pQ1ZNDm4MR0rt2lvsuVaf+iGiw4HJkaD7Kceq3y9ukilsuP6Zl0dWMIeTqcs7UT3OS16HV21A9VL3rJGRLUonmJo7mUq8hpxKnFYK6/96IfXCf/XX1YI6rK0DVp1OE0S8s+teLG4UsE2p2+dC2arVwhHUGzlZMvO/A==
+ENTRY_END
+
+
+; CNAME from trusted to untrusted sub-tree
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+insecure.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 31 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+insecure.example.com. IN A
+SECTION ANSWER
+insecure.example.com. 3600 IN CNAME insecure.example.net.
+insecure.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313140157 20170213140157 11901 example.com. PwYkM20oqzXrK+48AJgJUQP5MNbVjV9Xt9PG5ag2U7DrckQbVvuZ6dorouqUbVvLXhpbfInGazxgGGSE+hObhkhJcrRcmg2pKHWbRpBJqNnMeXk/w5zzlIOBq+Hu+ZpyUsbfJeax0S+gOyKLSeqRLDzOxWsSiFfPD2PSdfHcdslDxWLt92J8Yr2/wqh5aW7HOYDRZbvZkfP+0J4FWfWI6j25flbR7/Kt8SBAcqvg4cFREVua847iAItKGZGqa6XWnUX9JSskBl97RG0T3jBel+nz3MjMVSDl5HYaazv+VuUcF4NbjIcZHt8QxVOLw6IF/XxwPunqLPGByIYrBreUJQ==
+insecure.example.net. 3600 IN CNAME insecure.example.org.
+insecure.example.net. 3600 IN RRSIG CNAME 7 3 3600 20170313140150 20170213140150 59835 example.net. L1NmsrbewJeWS4ZC07jR9EWPg5QqKwH8BklJIWnMYlfR1xaLcMS5hHeDQN3OUK8D79mxmoBQVIXPMig3CLJPkewJoOZMKD/UwHVosFbG9NbRbWtY6tTZtQnzLy45+AsoQeF0tnoJM+5pvE3wMyXLBgZWbZDGRd0/Uk5/wxddu7NkxAZ0U3zarFxpVnQgP+MKifaplfHko599psQ58BnoSMUB1FjeFsy78zkXd3PjX/VWevGNlABGmlpvWdQou8c6V9ihGVRmsha6ABW04cLgevDjgorrn1AAI88c1H/pRDoWjO5zyQ9PPFPusCTYTEWcuSDpN43RFCxrA7ENP2g1rw==
+insecure.example.org. 3600 IN A 10.2.2.2
+ENTRY_END
+
+; cache test
+STEP 32 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+insecure.example.com. IN A
+ENTRY_END
+
+STEP 33 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+insecure.example.com. IN A
+SECTION ANSWER
+insecure.example.com. 3600 IN CNAME insecure.example.net.
+insecure.example.com. 3600 IN RRSIG CNAME 7 3 3600 20170313140157 20170213140157 11901 example.com. PwYkM20oqzXrK+48AJgJUQP5MNbVjV9Xt9PG5ag2U7DrckQbVvuZ6dorouqUbVvLXhpbfInGazxgGGSE+hObhkhJcrRcmg2pKHWbRpBJqNnMeXk/w5zzlIOBq+Hu+ZpyUsbfJeax0S+gOyKLSeqRLDzOxWsSiFfPD2PSdfHcdslDxWLt92J8Yr2/wqh5aW7HOYDRZbvZkfP+0J4FWfWI6j25flbR7/Kt8SBAcqvg4cFREVua847iAItKGZGqa6XWnUX9JSskBl97RG0T3jBel+nz3MjMVSDl5HYaazv+VuUcF4NbjIcZHt8QxVOLw6IF/XxwPunqLPGByIYrBreUJQ==
+insecure.example.net. 3600 IN CNAME insecure.example.org.
+insecure.example.net. 3600 IN RRSIG CNAME 7 3 3600 20170313140150 20170213140150 59835 example.net. L1NmsrbewJeWS4ZC07jR9EWPg5QqKwH8BklJIWnMYlfR1xaLcMS5hHeDQN3OUK8D79mxmoBQVIXPMig3CLJPkewJoOZMKD/UwHVosFbG9NbRbWtY6tTZtQnzLy45+AsoQeF0tnoJM+5pvE3wMyXLBgZWbZDGRd0/Uk5/wxddu7NkxAZ0U3zarFxpVnQgP+MKifaplfHko599psQ58BnoSMUB1FjeFsy78zkXd3PjX/VWevGNlABGmlpvWdQou8c6V9ihGVRmsha6ABW04cLgevDjgorrn1AAI88c1H/pRDoWjO5zyQ9PPFPusCTYTEWcuSDpN43RFCxrA7ENP2g1rw==
+insecure.example.org. 3600 IN A 10.2.2.2
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cnamenx_dblnsec.rpl b/tests/deckard/sets/resolver/val_cnamenx_dblnsec.rpl
new file mode 100644
index 0000000..5c6f423
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cnamenx_dblnsec.rpl
@@ -0,0 +1,178 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 21485 7 1 D0AED7DEAE346B008881F31F9ABBB055DF94CBD5 "
+val-override-date: "20181130121821"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with cname-nxdomain for duplicate NSEC detection
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cname.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+cname.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101821 20181130101821 21485 example.com. cdC5PUdx8wOzA3Ffx0jI2KrGMpU0VmxM/Y7RpFM0JgCMO3aeYsGbtcpR pvS6i9sSFUTA3XNp0tiGqpS1iH07CJy67U0g1qKh/peHn07TWCrR9Kqy 0OXGlNfZQL4BG5i7hq0VXvUeBvyquMeTd0c6n/yni8DDFx0l95lvu5nr k5w= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101821 20181130101821 21485 example.com. soIpMtGzUOKCj5F6RjqQxrrhSJwhWLv9plOIEfGyI9OLgTYaTYgqC1R9 /4IIVPjzk4mB5VJSLcLNN2/QP8Qa/gO/dIb5o6nnHKdfDS4IPpG6ikeM T9cS2EMJ0+5rI5nLTCIofvGmsYTtjMuT3ysJ8xM4/9p1A7yjd49Mrkeb JWo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdHIjtVPYHtA3eUV5xOLpXVDAxdm16vsbjbfA4zFA9h2i1snUhCo fZV3hnOzn6WGpJkn/K2FBioTbwqhtQgEKnAg4+wxr+FnE/D89hdTF3CJ av/DRtw5pOu7PK5LbVZWWE2ztmok57RoMr31ecQGJ3S/B2rCZDaEDbYg EK+MoKHZ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101821 20181130101821 21485 example.com. gHeTNDlfGHqlxNke2s0TIm4x6fFdV64FgkCyc9CVf+eR5gMqpnhkRBk5 DdDK1Gi5MO3XnbzRcUrC2Y+7i20M+nTA+KD9ZlQsXWszevLYJY3TJmnQ cz9d5hQJexrAx1+G0C78vDO6vWZNJz3J0LzvDQcmH23R3j9ow2wM1W7x f4k= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101821 20181130101821 21485 example.com. cdC5PUdx8wOzA3Ffx0jI2KrGMpU0VmxM/Y7RpFM0JgCMO3aeYsGbtcpR pvS6i9sSFUTA3XNp0tiGqpS1iH07CJy67U0g1qKh/peHn07TWCrR9Kqy 0OXGlNfZQL4BG5i7hq0VXvUeBvyquMeTd0c6n/yni8DDFx0l95lvu5nr k5w= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101821 20181130101821 21485 example.com. soIpMtGzUOKCj5F6RjqQxrrhSJwhWLv9plOIEfGyI9OLgTYaTYgqC1R9 /4IIVPjzk4mB5VJSLcLNN2/QP8Qa/gO/dIb5o6nnHKdfDS4IPpG6ikeM T9cS2EMJ0+5rI5nLTCIofvGmsYTtjMuT3ysJ8xM4/9p1A7yjd49Mrkeb JWo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+cname.example.com. IN A
+SECTION ANSWER
+cname.example.com. 3600 IN CNAME www.example.com.
+cname.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101821 20181130101821 21485 example.com. KSB4An66g0tVndlXTHPjpRzQmsM6TMvV54THQJmiPqiI9UNTQwIwgEPI zSG5lUZwqORK7h4fTStwAosDl+dKFtPWoiW3yV0XytaJqJBfB5eOr6/X 665Qp876He3ZhVBYfekFVZnO+amzv8oycjngPsSHxpMZ760HNFRSgacy bDc= ;{id = 2854}
+SECTION AUTHORITY
+; already includes the necessary NSECs
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101821 20181130101821 21485 example.com. kvapB5PKSev/ZKLrVqexb3HPFftCrdE7a5fYzzAlSmW85Wzj4b7Pi3pU Jyh6W+9Wo7iTkT9NdBy93RgApoW38CHVh4/FiGJlbIs+cJFgpMfG1kdu Q2j3xn5P4TUlRX9PNtkjDdy13FqpiSMPHNU1ZdLq5oQ/wL2vNSsJ83zq ZZw= ;{id = 2854}
+; wildcard denial
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101821 20181130101821 21485 example.com. W4RWRKbmCTSKQZuIaDybI+dEwB+wKs24C9f5h01XRuhj9OKTEeomaHCN 4AsK+DdsU7Z6QBYedn+rbYjaCjbTQqztc7Qi8fAF/dw9wRG+WMdATnqD 0uJGRsQLzJmzjttKp64Njtgl4eiNuhOwYzsZpDANKwMv1Rlg7P7HVsZU T+g= ;{id = 2854}
+; qname denial
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101821 20181130101821 21485 example.com. WFil25/HtvZtJ3QUa9toox+C+qcJOKJwcZ2ylTOlSJzJrJB99oTKN1ZW XLDIRHPX81TTEp0edigErhyLO+xna1+L96Ze4tN9nP/0+N7gzY3bhzmg sms/ojtjuqKSf0ac1ZAUU3aGSdA/rgBYfeTh/2wMaLcQC1BUBZFsztAs sUg= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101821 20181130101821 21485 example.com. kvapB5PKSev/ZKLrVqexb3HPFftCrdE7a5fYzzAlSmW85Wzj4b7Pi3pU Jyh6W+9Wo7iTkT9NdBy93RgApoW38CHVh4/FiGJlbIs+cJFgpMfG1kdu Q2j3xn5P4TUlRX9PNtkjDdy13FqpiSMPHNU1ZdLq5oQ/wL2vNSsJ83zq ZZw= ;{id = 2854}
+; wildcard denial
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101821 20181130101821 21485 example.com. W4RWRKbmCTSKQZuIaDybI+dEwB+wKs24C9f5h01XRuhj9OKTEeomaHCN 4AsK+DdsU7Z6QBYedn+rbYjaCjbTQqztc7Qi8fAF/dw9wRG+WMdATnqD 0uJGRsQLzJmzjttKp64Njtgl4eiNuhOwYzsZpDANKwMv1Rlg7P7HVsZU T+g= ;{id = 2854}
+; qname denial
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101821 20181130101821 21485 example.com. WFil25/HtvZtJ3QUa9toox+C+qcJOKJwcZ2ylTOlSJzJrJB99oTKN1ZW XLDIRHPX81TTEp0edigErhyLO+xna1+L96Ze4tN9nP/0+N7gzY3bhzmg sms/ojtjuqKSf0ac1ZAUU3aGSdA/rgBYfeTh/2wMaLcQC1BUBZFsztAs sUg= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+cname.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+cname.example.com. IN A
+SECTION ANSWER
+cname.example.com. 3600 IN CNAME www.example.com.
+cname.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101821 20181130101821 21485 example.com. KSB4An66g0tVndlXTHPjpRzQmsM6TMvV54THQJmiPqiI9UNTQwIwgEPI zSG5lUZwqORK7h4fTStwAosDl+dKFtPWoiW3yV0XytaJqJBfB5eOr6/X 665Qp876He3ZhVBYfekFVZnO+amzv8oycjngPsSHxpMZ760HNFRSgacy bDc= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101821 20181130101821 21485 example.com. kvapB5PKSev/ZKLrVqexb3HPFftCrdE7a5fYzzAlSmW85Wzj4b7Pi3pU Jyh6W+9Wo7iTkT9NdBy93RgApoW38CHVh4/FiGJlbIs+cJFgpMfG1kdu Q2j3xn5P4TUlRX9PNtkjDdy13FqpiSMPHNU1ZdLq5oQ/wL2vNSsJ83zq ZZw= ;{id = 2854}
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101821 20181130101821 21485 example.com. W4RWRKbmCTSKQZuIaDybI+dEwB+wKs24C9f5h01XRuhj9OKTEeomaHCN 4AsK+DdsU7Z6QBYedn+rbYjaCjbTQqztc7Qi8fAF/dw9wRG+WMdATnqD 0uJGRsQLzJmzjttKp64Njtgl4eiNuhOwYzsZpDANKwMv1Rlg7P7HVsZU T+g= ;{id = 2854}
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101821 20181130101821 21485 example.com. WFil25/HtvZtJ3QUa9toox+C+qcJOKJwcZ2ylTOlSJzJrJB99oTKN1ZW XLDIRHPX81TTEp0edigErhyLO+xna1+L96Ze4tN9nP/0+N7gzY3bhzmg sms/ojtjuqKSf0ac1ZAUU3aGSdA/rgBYfeTh/2wMaLcQC1BUBZFsztAs sUg= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_cnameqtype.rpl b/tests/deckard/sets/resolver/val_cnameqtype.rpl
new file mode 100644
index 0000000..3723c93
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_cnameqtype.rpl
@@ -0,0 +1,230 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 6497 7 1 E91FB78CB1A0ADB57A05FC8B495EA748B24375AB "
+ trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AwEAAcpXb9Fxep3BvyNndHR3k28yz1zSqgGntKz60tQf8t2jm2l1F3LO 7Oc3FdllY/FS8VACyIZTbU4WiEfoOToHF6KX5mj8n82wJKkZLKx0w52x jrUbASX0sm2rEwwcjAsDkXSIGUkSm5b7SY5KvXpuwTYl7Ql1gxdTgqou vnSCK+99 ;{id = 30899 (zsk), size = 512b}"
+val-override-date: "20181130121824"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with a query for type cname
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN CNAME
+SECTION AUTHORITY
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.net. IN CNAME
+SECTION AUTHORITY
+net. 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION ANSWER
+net. IN NS a.gtld-servers.net.
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN CNAME
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101823 20181130101823 6497 example.com. ky4ZB/3l28EQx3cFbU4lWHNp5GI+Ca9S9z+M6kr9UqOkPk+bJN4VilR0 ng8u9D36mLzYJtWktdnrexcIGyba+c5dVul1yJYBQNxca1+Gdv0ObVb5 hhIAZ9psrKJglkAMTnsrokHgdDryfzII8mlZNWJCQHGPnIJLf583nYxe pks= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101823 20181130101823 6497 example.com. kj86vWDY5SK8oz/F3sbJjU1sVfdRjD90zUGS7xB0TI31UVel6Ww7PB36 nyHddUcTQ3SEJOETsnub6x8ZtOhxd2kRgkORhz84EeN+1bnOQLpnpTXQ wY7yOXIgf1sY1JzWTIhxXUnDftvpn05Y/C3Srfou1uFnv/5V29P1Q0Or GN0= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbosaUoM51nu1Bfb1SBXWBd5RLicFoYgKEoqBVkd0gpyTQV2hwLx wIhKx5m5hYBmy9MU8zT2vTaYsafTNhYABl4gzMjLV4h2gx6P3o0OCcBq Fl6xuYEzbdrbavedO3wSzGNk8tBhmtQW8hbBsbEkFBgZaM06Y4T5D89a Wroa46nh ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101823 20181130101823 6497 example.com. Iompwlf1+hL5mUrLLUTki8/zwt8CDLsLjAMyZfx4ojiTTR9y1uIDuJm+ qgSkS69OOVjaEw9ZaBRTZh7Km4xjLauZsRdBf6jFJeDttkDsASQDHG4T ooMAF/pNYjBK5+4YSJexbfr9KY1ICrBslJUKMFgVOdu5ICLZdon5kOBc wVo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101823 20181130101823 6497 example.com. ky4ZB/3l28EQx3cFbU4lWHNp5GI+Ca9S9z+M6kr9UqOkPk+bJN4VilR0 ng8u9D36mLzYJtWktdnrexcIGyba+c5dVul1yJYBQNxca1+Gdv0ObVb5 hhIAZ9psrKJglkAMTnsrokHgdDryfzII8mlZNWJCQHGPnIJLf583nYxe pks= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101823 20181130101823 6497 example.com. kj86vWDY5SK8oz/F3sbJjU1sVfdRjD90zUGS7xB0TI31UVel6Ww7PB36 nyHddUcTQ3SEJOETsnub6x8ZtOhxd2kRgkORhz84EeN+1bnOQLpnpTXQ wY7yOXIgf1sY1JzWTIhxXUnDftvpn05Y/C3Srfou1uFnv/5V29P1Q0Or GN0= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN CNAME
+SECTION ANSWER
+www.example.com. IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101823 20181130101823 6497 example.com. QFHRboEy5RNC87lRlKaXgWDJFzQXl3GKED1G4xvCRl3BfSK3toI9ADRE ykjnW1XgmQ5YJrP9aQBHDognOrvJ6sMYArRsbH1HSWjyeYgWibhkZvwl JNzCdNhptCjTJw7fP7sc1XMqMO5REBzFmW7lWIgrzwRJhCLLQ1g7D+46 38U= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+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.
+example.net. 3600 IN RRSIG NS 5 2 3600 20181230101823 20181130101823 31500 example.net. akNwK5ythyddy+MMl0/n3DPfIVGM31xj3TCE3xr9N6l0Ue9puoc2ad5U QwNUp0F+7DJABPnx8DKBsctPJSR4dSJ02s7IVAueLWjzUiBTE+NEioEC pfmzBaNqjt0JrdtZgwz5oCxfqovfnHC7sQTtnArlpMcmnTghuHKeWRaj yYQ= ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 5 3 3600 20181230101823 20181130101823 31500 example.net. gDeBSHmtmO4x9o4X7A9YLCAprLak7E79QR//ajPY+Ih2OAx1EKVK8ftJ 2ihAdt4IR80akLJizbGf/iCTRaSkUwYwCZB/nwRaxO0Z9cH1h3HENFSt WmM4GybIHk8Q6uC3Jowirenjfhm4EnR813FMLmrwYcxs5YbyN3kl7tqu PrY= ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.net. IN DNSKEY
+SECTION ANSWER
+example.net. 3600 IN DNSKEY 256 3 5 AwEAAcpXb9Fxep3BvyNndHR3k28yz1zSqgGntKz60tQf8t2jm2l1F3LO 7Oc3FdllY/FS8VACyIZTbU4WiEfoOToHF6KX5mj8n82wJKkZLKx0w52x jrUbASX0sm2rEwwcjAsDkXSIGUkSm5b7SY5KvXpuwTYl7Ql1gxdTgqou vnSCK+99 ;{id = 30899 (zsk), size = 512b}
+example.net. 3600 IN RRSIG DNSKEY 5 2 3600 20181230101823 20181130101823 31500 example.net. p3olaCEfXPEmJR5JS9DrYRbzIrPWAE5VBVPRHCKZ1geQNjCgSTr956oI p64LHodGZRc5dUWA79DYdK1xNtUZIJVpw5CudQGn/c11QJRSdT57A7yZ G7ikneZrkJHMn5+fbJLPeLhxTOKjKRXAHiohG7jEH+2q70KfZCobQ0GX +e4= ;{id = 30899}
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+example.net. 3600 IN RRSIG NS 5 2 3600 20181230101823 20181130101823 31500 example.net. akNwK5ythyddy+MMl0/n3DPfIVGM31xj3TCE3xr9N6l0Ue9puoc2ad5U QwNUp0F+7DJABPnx8DKBsctPJSR4dSJ02s7IVAueLWjzUiBTE+NEioEC pfmzBaNqjt0JrdtZgwz5oCxfqovfnHC7sQTtnArlpMcmnTghuHKeWRaj yYQ= ;{id = 30899}
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.5
+ns.example.net. 3600 IN RRSIG A 5 3 3600 20181230101823 20181130101823 31500 example.net. gDeBSHmtmO4x9o4X7A9YLCAprLak7E79QR//ajPY+Ih2OAx1EKVK8ftJ 2ihAdt4IR80akLJizbGf/iCTRaSkUwYwCZB/nwRaxO0Z9cH1h3HENFSt WmM4GybIHk8Q6uC3Jowirenjfhm4EnR813FMLmrwYcxs5YbyN3kl7tqu PrY= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.net. IN A
+SECTION ANSWER
+www.example.net. IN A 11.12.13.14
+www.example.net. 3600 IN RRSIG A 5 3 3600 20181230101823 20181130101823 31500 example.net. J+nuJ0xEW3wgDh0lO6sVMfcY1NGvM9gtd3dV+nc2wBKmnGfeJfGDDcVq SibPV3NXo1N9vj3Cp8v0oT2e/vGzc20VpeWi7e24tchRL4DLnP8YvFjE P4pEoCv4J0pikYz3L2AdH0PYtpJR1KsweZbeDC3XgpPi/uqcGOLzs4gK JIE= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN CNAME
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN CNAME
+SECTION ANSWER
+www.example.com. IN CNAME www.example.net.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101823 20181130101823 6497 example.com. QFHRboEy5RNC87lRlKaXgWDJFzQXl3GKED1G4xvCRl3BfSK3toI9ADRE ykjnW1XgmQ5YJrP9aQBHDognOrvJ6sMYArRsbH1HSWjyeYgWibhkZvwl JNzCdNhptCjTJw7fP7sc1XMqMO5REBzFmW7lWIgrzwRJhCLLQ1g7D+46 38U= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_deleg_nons.rpl b/tests/deckard/sets/resolver/val_deleg_nons.rpl
new file mode 100644
index 0000000..c589db6
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_deleg_nons.rpl
@@ -0,0 +1,271 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with unsigned delegation with no NS bit in NSEC
+
+; 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 A
+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 qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns3.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.www.example.com. IN A
+SECTION ANSWER
+foo.www.example.com. IN A 1.2.3.4
+; unsigned, no delegation.
+ENTRY_END
+
+; DS query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+; NSEC3 here: 1 0 1 1234
+; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b.
+h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
+h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
+
+;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC
+;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI=
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+; DS query for foo.www.example.com returns the referral without record.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+foo.www.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+mipf0g23547qunto04vboegh9vadsrpo.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpq TXT
+mipf0g23547qunto04vboegh9vadsrpo.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ADc6JrdKuTmIJe4sAjpKZSUZKdHdfhmREk2F5A5cftU9053b0/3ILQM=
+
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+
+
+;www.example.com. IN NS ns3.example.com.
+;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
+;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
+;SECTION ADDITIONAL
+;ns3.example.com. IN A 1.2.3.5
+
+
+; NSEC3 here: 1 0 1 1234
+; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b.
+; *.www.example.com. -> cg2lpgpr8k7ck69h7bqu3od9pkht2o79.
+; foo.www.example.com. -> mipf0g23547qunto04vboegh9vadsrpo.
+
+;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT
+;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE=
+;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. IN NSEC3 1 0 1 1234 cg2lpgpr8k7ck69h7bqu3od9pkht2o89 TXT
+;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ACzxBHMyDB5tTrXijboPSsB0ws1lJe3/B62QNAMcZv7l9DYNDEDKsXY=
+;mipf0g23547qunto04vboegh9vadsrph.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpp TXT
+;mipf0g23547qunto04vboegh9vadsrph.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AG2B7lrIVtBgg+WIt0yNYekGDBKkY7xkKfI0GLQ8q3brGy/+jubxba0=
+
+;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC
+;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI=
+
+;example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+; ns3.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+foo.www.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+foo.www.example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+foo.www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+foo.www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ds_afterprime.rpl b/tests/deckard/sets/resolver/val_ds_afterprime.rpl
new file mode 100644
index 0000000..2a232d5
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ds_afterprime.rpl
@@ -0,0 +1,181 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 15287 7 1 19F0E0DB8795AEC6205262B1E0CBF978874E2179 "
+val-override-date: "20181130121843"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+query-minimization: off
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test DS lookup after key prime is done.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DS
+SECTION AUTHORITY
+com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1251367385 1800 900 604800 86400
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101842 20181130101842 15287 example.com. byFJB2kc/MA/v3BaJzKJduu+yUO8CGmW5P9hJv21Ha5O2pfbWg8ykdc1 XzBuWCis2rvVoVXaurZNjaqc/WGxSHWG1MM16vz28Y3SsE3f0FouMkXe cgfoIb2S2FTF4yttMw9u7fnOCOqqar7i/bxp7y60Ep+oNrpZ5wOSr4Vv 1co= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. B3wtuzeTzVA5dMZPNKhGQtI4DXkirjI4MxsBMC0MYw7LX3hBddYCHTMF DwshRpz19PHU+0neisSXxYo1PScJW46nCjixwf5gPHhKR8up1d4evM+l ciKW0FAGIBkpvrpnoSXlk6FBGvkyNdyrEdBuZxC/SWrLQizndZ+we8LQ cJc= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdi6IgbGvRjV6ufAZtyfKXEV/rzEUm/zOYwcpLnpNkof20KxdX+g Tv0SJpdlbH/cRjnpIyeeKhTDfaHwG+3NXeJ01SR+tFl1sBNZOWDEu8wy htRv7Q/J+ZwzXCg4yBXSAuVzxfdyOTZK/r1HSHXeY1KJ+naBZXEPvkCY 8OqPkNSN ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101842 20181130101842 15287 example.com. IK5CbBIOLacwoEzRk0SFvd4MV6SLh8N0muBFd4uDaZ5nllUfX9umT4iN YlkIdkeXNVGsHzo4u8oxYfg/dL1FAtuJGjRQUijngKuWP5qzj3+niDvB BDDHHrukFLteNs/taAOILuGgyccTpWLXbAyK77QbsMMVAsZH5s9Kqhws XOU= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101842 20181130101842 15287 example.com. byFJB2kc/MA/v3BaJzKJduu+yUO8CGmW5P9hJv21Ha5O2pfbWg8ykdc1 XzBuWCis2rvVoVXaurZNjaqc/WGxSHWG1MM16vz28Y3SsE3f0FouMkXe cgfoIb2S2FTF4yttMw9u7fnOCOqqar7i/bxp7y60Ep+oNrpZ5wOSr4Vv 1co= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. B3wtuzeTzVA5dMZPNKhGQtI4DXkirjI4MxsBMC0MYw7LX3hBddYCHTMF DwshRpz19PHU+0neisSXxYo1PScJW46nCjixwf5gPHhKR8up1d4evM+l ciKW0FAGIBkpvrpnoSXlk6FBGvkyNdyrEdBuZxC/SWrLQizndZ+we8LQ cJc= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. IcYBBoimvXzuLUujq3+nt7mmKK6Qk1bxGi4KV0011efmrvo0voeRNb9G 5ZEPtYilUGYOKUu3PMKcCnXlPYARm4dUChaDKkjG/rCvWumVv6YgZquc YqnrMBOurMoqEeMST42v61RuLUqlQDqSdMTKoTRi4Q5EjHSpqnrzG1a3 8SY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101842 20181130101842 15287 example.com. byFJB2kc/MA/v3BaJzKJduu+yUO8CGmW5P9hJv21Ha5O2pfbWg8ykdc1 XzBuWCis2rvVoVXaurZNjaqc/WGxSHWG1MM16vz28Y3SsE3f0FouMkXe cgfoIb2S2FTF4yttMw9u7fnOCOqqar7i/bxp7y60Ep+oNrpZ5wOSr4Vv 1co= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. B3wtuzeTzVA5dMZPNKhGQtI4DXkirjI4MxsBMC0MYw7LX3hBddYCHTMF DwshRpz19PHU+0neisSXxYo1PScJW46nCjixwf5gPHhKR8up1d4evM+l ciKW0FAGIBkpvrpnoSXlk6FBGvkyNdyrEdBuZxC/SWrLQizndZ+we8LQ cJc= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. IcYBBoimvXzuLUujq3+nt7mmKK6Qk1bxGi4KV0011efmrvo0voeRNb9G 5ZEPtYilUGYOKUu3PMKcCnXlPYARm4dUChaDKkjG/rCvWumVv6YgZquc YqnrMBOurMoqEeMST42v61RuLUqlQDqSdMTKoTRi4Q5EjHSpqnrzG1a3 8SY= ;{id = 2854}
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. 3600 IN RRSIG NS 7 2 3600 20181230101842 20181130101842 15287 example.com. byFJB2kc/MA/v3BaJzKJduu+yUO8CGmW5P9hJv21Ha5O2pfbWg8ykdc1 XzBuWCis2rvVoVXaurZNjaqc/WGxSHWG1MM16vz28Y3SsE3f0FouMkXe cgfoIb2S2FTF4yttMw9u7fnOCOqqar7i/bxp7y60Ep+oNrpZ5wOSr4Vv 1co= ;{id = 2854}
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101842 20181130101842 15287 example.com. B3wtuzeTzVA5dMZPNKhGQtI4DXkirjI4MxsBMC0MYw7LX3hBddYCHTMF DwshRpz19PHU+0neisSXxYo1PScJW46nCjixwf5gPHhKR8up1d4evM+l ciKW0FAGIBkpvrpnoSXlk6FBGvkyNdyrEdBuZxC/SWrLQizndZ+we8LQ cJc= ;{id = 2854}
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+example.com. IN DS
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+example.com. IN DS
+SECTION AUTHORITY
+com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1251367385 1800 900 604800 86400
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ds_cname.rpl b/tests/deckard/sets/resolver/val_ds_cname.rpl
new file mode 100644
index 0000000..ce69795
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ds_cname.rpl
@@ -0,0 +1,204 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 55850 7 1 B3DEDE56E5386B588339D978A1B173B8B10366B8 "
+val-override-date: "20181130121844"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with CNAME response to DS
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+; not legal NOERROR/NODATA response, but leniently accepted (not validated)
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101843 20181130101843 55850 example.com. rSyN+LKU0kF6GBRW/L0R1siq0SrS0s/zOJge//1VXqRit+vtrRFjoHVa EytY4CfTZKj8YKkFnTIvKL30/Uxi2+t4uTtYLCBAnFFINRpjzuXhntiB +QWfkQruu/9NgFSb9Jb4xbSqB8khHxV3vN8lLr3WIFIAHbMWyBYmerm+ g3c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101843 20181130101843 55850 example.com. Mi0XLYyAfzvfbudd7gfWE5aBeY5cmQVIcgoJMeduX5Z9/bWeLepyFvaW ClDqbNz59yms4xxhOKg5xLS/rzTneVk3Y1VtoiZBbr0h6fSkEYoMAk52 lWKFTjEJujKCb6rxeh9lKh7XrKELbJEC90in+0ESILIvnNfltK4aCbKS 3aY= ;{id = 2854}
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101843 20181130101843 55850 example.com. rSyN+LKU0kF6GBRW/L0R1siq0SrS0s/zOJge//1VXqRit+vtrRFjoHVa EytY4CfTZKj8YKkFnTIvKL30/Uxi2+t4uTtYLCBAnFFINRpjzuXhntiB +QWfkQruu/9NgFSb9Jb4xbSqB8khHxV3vN8lLr3WIFIAHbMWyBYmerm+ g3c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101843 20181130101843 55850 example.com. Mi0XLYyAfzvfbudd7gfWE5aBeY5cmQVIcgoJMeduX5Z9/bWeLepyFvaW ClDqbNz59yms4xxhOKg5xLS/rzTneVk3Y1VtoiZBbr0h6fSkEYoMAk52 lWKFTjEJujKCb6rxeh9lKh7XrKELbJEC90in+0ESILIvnNfltK4aCbKS 3aY= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbm150kVuAzpvRlnxNCv10c1j7JIhpap2sCGfPpvMEr8jB6lxYQz GhnnnpD58hcuKwVQpptSKM+AOiyN4ZM72GWSKchxxBL8/9MBLCPY9BI8 I3d447MlB6FKnnJlN30MBUql17gIh8zAvdgGFj6tPzUkQDCHZuMASXLy 8OE2LdtL ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101843 20181130101843 55850 example.com. LAKGmWjHK74ndtynMkRHPUTLrQJSW6me7CFTWTXtlfa1e510cFCA/0XY quFECNj6qzqUNIgsoLOv4Rox29SrvhBHBvbCt98ylWr29DPY6UofvZhC 7g5Ss89GFEzj+RV/ffdqnts1Lxpd2PGzUZIAFWwfx7h1/Jxw89Vl7YFK /3U= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101843 20181130101843 55850 example.com. rSyN+LKU0kF6GBRW/L0R1siq0SrS0s/zOJge//1VXqRit+vtrRFjoHVa EytY4CfTZKj8YKkFnTIvKL30/Uxi2+t4uTtYLCBAnFFINRpjzuXhntiB +QWfkQruu/9NgFSb9Jb4xbSqB8khHxV3vN8lLr3WIFIAHbMWyBYmerm+ g3c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101843 20181130101843 55850 example.com. Mi0XLYyAfzvfbudd7gfWE5aBeY5cmQVIcgoJMeduX5Z9/bWeLepyFvaW ClDqbNz59yms4xxhOKg5xLS/rzTneVk3Y1VtoiZBbr0h6fSkEYoMAk52 lWKFTjEJujKCb6rxeh9lKh7XrKELbJEC90in+0ESILIvnNfltK4aCbKS 3aY= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+; nothing here, not even NSECs
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101843 20181130101843 55850 example.com. rSyN+LKU0kF6GBRW/L0R1siq0SrS0s/zOJge//1VXqRit+vtrRFjoHVa EytY4CfTZKj8YKkFnTIvKL30/Uxi2+t4uTtYLCBAnFFINRpjzuXhntiB +QWfkQruu/9NgFSb9Jb4xbSqB8khHxV3vN8lLr3WIFIAHbMWyBYmerm+ g3c= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+; DS query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN DS
+SECTION ANSWER
+www.example.com. IN CNAME zzz.example.com.
+www.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101843 20181130101843 55850 example.com. T7yHaZwPh18N8a+6811mVm4r9MBcBMWHEnUnpKi6ZYZRrwVzLBJLB6Bz DQxg6oy5qmdWaij595a4U22vV6aX4eIROGa3vUkGE6xaiwyry/YNCDdf fCnNBpAAUcmMdnYTE8pbQi7yrR00xUjC7qYO7kzOSJ0kIhHTINrqzoZd XNw= ;{id = 2854}
+;*.example.com. IN CNAME zzz.example.com.
+;*.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101843 20181130101843 55850 example.com. T7yHaZwPh18N8a+6811mVm4r9MBcBMWHEnUnpKi6ZYZRrwVzLBJLB6Bz DQxg6oy5qmdWaij595a4U22vV6aX4eIROGa3vUkGE6xaiwyry/YNCDdf fCnNBpAAUcmMdnYTE8pbQi7yrR00xUjC7qYO7kzOSJ0kIhHTINrqzoZd XNw= ;{id = 2854}
+
+SECTION AUTHORITY
+*.example.com. IN NSEC zzz.example.com. CNAME RRSIG NSEC
+*.example.com. 3600 IN RRSIG NSEC 7 2 86400 20181230101843 20181130101843 55850 example.com. PMydg/KuumF/r2eVJNxYyi58Ft+wPHRBYFEXyuDHtFel39O/vhvx8cWB oQvX7FhDp3LdODA056gtcpQsgGSX3sTuKdUpDnR4jdJv9XIXRxrYtGa/ MOuS/4+gE67xmEzhZ2Ezyn3IDVPfVfEiUFPqdOHukSiCyqWnjnj2rOgd kUY= ;{id = 2854}
+zzz.example.com. IN NSEC *.zzz.example.com. A RRSIG NSEC
+zzz.example.com. 3600 IN RRSIG NSEC 7 3 86400 20181230101843 20181130101843 55850 example.com. DwFmG+fJOcWCO33ulBLIifA8OHgVQd9hmCU8K4OSH+pI+25U4dSPXwBT blkuyU2/1GFD2OQnyG6EpwFYMnX/JmnNr70J8pd6xtL7EGb2n9DNrJHK 0i0fxbJffVVbn59dCuFsi8unHhOVRknG6nLaEny2S6CisVSRSs3uX7n+ P3A= ;{id = 2854}
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101843 20181130101843 55850 example.com. JrM30NcE8xwejtIaExsewzwtN7A2rfnpn2nVJuYBKkm6xIQSgoxv0Sz2 5SuA1ilGzUr8gmgLJET+s5qSAi3ow9tkll4mcnBrruIhGJsK+3782V1f KJaFHGVWJUbfeIastg6KOImfmH1mTNIoN7g5maNIsF0qx2W05N9/LGpC CaU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+zzz.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+zzz.example.com. IN NSEC *.zzz.example.com. A RRSIG NSEC
+zzz.example.com. 3600 IN RRSIG NSEC 7 3 86400 20181230101843 20181130101843 55850 example.com. DwFmG+fJOcWCO33ulBLIifA8OHgVQd9hmCU8K4OSH+pI+25U4dSPXwBT blkuyU2/1GFD2OQnyG6EpwFYMnX/JmnNr70J8pd6xtL7EGb2n9DNrJHK 0i0fxbJffVVbn59dCuFsi8unHhOVRknG6nLaEny2S6CisVSRSs3uX7n+ P3A= ;{id = 2854}
+example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101843 20181130101843 55850 example.com. JrM30NcE8xwejtIaExsewzwtN7A2rfnpn2nVJuYBKkm6xIQSgoxv0Sz2 5SuA1ilGzUr8gmgLJET+s5qSAi3ow9tkll4mcnBrruIhGJsK+3782V1f KJaFHGVWJUbfeIastg6KOImfmH1mTNIoN7g5maNIsF0qx2W05N9/LGpC CaU= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ds_cnamesub.rpl b/tests/deckard/sets/resolver/val_ds_cnamesub.rpl
new file mode 100644
index 0000000..ffcee53
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ds_cnamesub.rpl
@@ -0,0 +1,277 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 33632 7 1 5497C677E6B860E0BC545C7D559AC3402095D6D1 "
+val-override-date: "20181130121845"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with CNAME response to DS in chain of trust
+; the CNAME is at a nonempty nonterminal name in the parent 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 A
+SECTION AUTHORITY
+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
+net. IN A
+SECTION AUTHORITY
+net. 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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.net. IN A
+SECTION AUTHORITY
+example.net. IN NS ns.example.net.
+SECTION ADDITIONAL
+ns.example.net. IN A 1.2.3.6
+ENTRY_END
+
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+; not legal NOERROR/NODATA response, but leniently accepted (not validated)
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101845 20181130101845 33632 example.com. KltuV+6jsjOXtJMKJapjnppUaOZRfkShElT2nsKnwMK4h2K3h7/BteWG JtuSF43IlDDGgifXDXpfEU+ITQyT4Oqa6ruzVDV8s6oRw1rKlAXMTT5a vmRhjoOw0qUJ5gc46QkLPGfsjTib5x61geF/fx+G/U0+b35W2rqj29jo vPc= ;{id = 2854}
+;example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400
+;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101845 20181130101845 33632 example.com. NcdCcqG4gcDU808aZADHpHjkuo7O2j2t9UVQ9KycVPClncUyqMzxmAPy BjsG3MVr0y/H2Q6GT+IpDwK7L8CvLS2hUzczIDhAY2f2N3KATcfuNbYr 9BKenU0KgSPCunIpPGCFJSMfgaC8L30Uk/ilPSAJfwAsVbzu7qQPbftN T3M= ;{id = 2854}
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101845 20181130101845 33632 example.com. KltuV+6jsjOXtJMKJapjnppUaOZRfkShElT2nsKnwMK4h2K3h7/BteWG JtuSF43IlDDGgifXDXpfEU+ITQyT4Oqa6ruzVDV8s6oRw1rKlAXMTT5a vmRhjoOw0qUJ5gc46QkLPGfsjTib5x61geF/fx+G/U0+b35W2rqj29jo vPc= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101845 20181130101845 33632 example.com. NcdCcqG4gcDU808aZADHpHjkuo7O2j2t9UVQ9KycVPClncUyqMzxmAPy BjsG3MVr0y/H2Q6GT+IpDwK7L8CvLS2hUzczIDhAY2f2N3KATcfuNbYr 9BKenU0KgSPCunIpPGCFJSMfgaC8L30Uk/ilPSAJfwAsVbzu7qQPbftN T3M= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAc9yX6nFxFJ1PsA6b4GsM4jKCqA3cHZn6sbszgw57mXD8g/Amn21 +tYDBzdJwv6SspmXhLO8UPJ8C1+6zoW2CZuKTIp8mjUimWLOaJjl/IlZ 2BAFoSSBsyJSr8619eqQxVH4guLIAO1wzK5lcQSFpiLXh7/hDdpDciCR M8Y9PmZd ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101845 20181130101845 33632 example.com. ioMECLagEkWue617lYuaQl4KgRURblcPcoc/4uhapKgY0ZTYGH42SQ/Z 7ez9ViwMi4IpP6DS8QNOEnaVd8EHjPOMRPvwiPIoUPbqzz/3KlaZgMOg FhhgfLzMPORsvDqPT7mJ2QGsqc4WhUAawSOyhytDCauK2TO50Oi/UpQt FwY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101845 20181130101845 33632 example.com. KltuV+6jsjOXtJMKJapjnppUaOZRfkShElT2nsKnwMK4h2K3h7/BteWG JtuSF43IlDDGgifXDXpfEU+ITQyT4Oqa6ruzVDV8s6oRw1rKlAXMTT5a vmRhjoOw0qUJ5gc46QkLPGfsjTib5x61geF/fx+G/U0+b35W2rqj29jo vPc= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101845 20181130101845 33632 example.com. NcdCcqG4gcDU808aZADHpHjkuo7O2j2t9UVQ9KycVPClncUyqMzxmAPy BjsG3MVr0y/H2Q6GT+IpDwK7L8CvLS2hUzczIDhAY2f2N3KATcfuNbYr 9BKenU0KgSPCunIpPGCFJSMfgaC8L30Uk/ilPSAJfwAsVbzu7qQPbftN T3M= ;{id = 2854}
+ENTRY_END
+
+; response to DS query for a.example.com, a CNAME
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.example.com. IN DS
+SECTION ANSWER
+a.example.com. IN CNAME zzz.example.net.
+a.example.com. 3600 IN RRSIG CNAME 7 3 3600 20181230101845 20181130101845 33632 example.com. aV8SmzDUh1bLt0FEiUKIC7BZKdzTB+TcpraOLn5CSwIFsnG/2itqavJo u2BEYP0Hay1AYeBwhA7/LJaqa4WVZUl02ExlsrNc8qxTFvs+qhNtR9fG vXCB4PrwWlABaD4/T2Uvc98+cFArn6o8JMONZIWzg8yuRkNDo9hxWHEI XR4=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; response to DS query for sub.a.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.a.example.com. IN DS
+SECTION ANSWER
+sub.a.example.com. 3600 IN DS 32886 7 1 05B70AC8C521B130A865EDE411A06135C5BC49E2
+sub.a.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101845 20181130101845 33632 example.com. YX6ThbV357iGXSf8J/D67wCUf6YQWO3cQnrX46Ws6mbtVqDPTryLUM5D h+UHJyQZRb5uI8cc/l9H2JGbhK1GoeI0vpPj+MBVHuDIIwlZIH6KjXAx tp2V8Wrq6Po4Gr3ZQrRCRKdR7kDiUbUzSRSZ1wVBpWFDvHPUQd5Vli2m ntU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; delegation down
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.a.example.com. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+sub.a.example.com. 3600 IN DS 32886 7 1 05B70AC8C521B130A865EDE411A06135C5BC49E2
+sub.a.example.com. 3600 IN RRSIG DS 7 4 3600 20181230101845 20181130101845 33632 example.com. YX6ThbV357iGXSf8J/D67wCUf6YQWO3cQnrX46Ws6mbtVqDPTryLUM5D h+UHJyQZRb5uI8cc/l9H2JGbhK1GoeI0vpPj+MBVHuDIIwlZIH6KjXAx tp2V8Wrq6Po4Gr3ZQrRCRKdR7kDiUbUzSRSZ1wVBpWFDvHPUQd5Vli2m ntU=
+sub.a.example.com. IN NS ns.sub.a.example.com.
+SECTION ADDITIONAL
+ns.sub.a.example.com. IN A 1.2.3.5
+ENTRY_END
+RANGE_END
+
+; ns.sub.a.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.5
+
+; DNSKEY query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.a.example.com. IN DNSKEY
+SECTION ANSWER
+sub.a.example.com. 3600 IN DNSKEY 257 3 7 AwEAAbNmn9l9d8I1+gHbWag6QBE0tXQs7mZL+H3jB8qWaQRa5cYgFAah aQ/93LsJZK1i5Bk6dkmUcVxuKlTwP3nHp1HBoG66A8DdRmUfqWQy1hZ4 oMGcnoqXCy8+8q61JPhtpYQoiHR/Jwy7+RjrVtUr2LCwtO2S8r//YJZF D4R6KdtH ;{id = 57024 (ksk), size = 1024b}
+sub.a.example.com. 3600 IN RRSIG DNSKEY 7 4 3600 20181230101844 20181130101844 32886 sub.a.example.com. k/zVTR2I9Xg8tIksStQ2JJDQuPjA3RFuYUbJ8nyzLtIL+Hpn2Sv4G2zl NuHSWGcuSZPe6fNzBHEg6faRLCgtfHxPLcgt+OSA6KSOj7iUjcaB8ap9 cKgemoj/njtcj/vDj0KoJWI0MHCDu5jAK1ZYsYouB3hTWBX0wFN/Mj2j H34=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.a.example.com. IN A
+SECTION ANSWER
+www.sub.a.example.com. IN A 10.20.30.40
+www.sub.a.example.com. 3600 IN RRSIG A 7 5 3600 20181230101844 20181130101844 32886 sub.a.example.com. Brrsf7sDDtwR/oga9dwwIAAMjQrfVxNdpnrj1N/KNafuCm7/YIEjoLXp ftRwHF7j083djazS2ud2vTckxo1GKXbPIs4/G0ACwu6bCwuL9BimGnhj 0fdLE6WzALExHwVu/HTR0d0JvitdnmwuIZLtJXbAA04jO3wYtZx3Dler YDU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+; ns.example.net.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+zzz.example.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.net. IN SOA root. host. 1 2 3 4 5
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.a.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.a.example.com. IN A
+SECTION ANSWER
+www.sub.a.example.com. 3600 IN A 10.20.30.40
+www.sub.a.example.com. 3600 IN RRSIG A 7 5 3600 20181230101844 20181130101844 32886 sub.a.example.com. Brrsf7sDDtwR/oga9dwwIAAMjQrfVxNdpnrj1N/KNafuCm7/YIEjoLXp ftRwHF7j083djazS2ud2vTckxo1GKXbPIs4/G0ACwu6bCwuL9BimGnhj 0fdLE6WzALExHwVu/HTR0d0JvitdnmwuIZLtJXbAA04jO3wYtZx3Dler YDU=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_faildnskey.rpl b/tests/deckard/sets/resolver/val_faildnskey.rpl
new file mode 100644
index 0000000..7d090c7
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_faildnskey.rpl
@@ -0,0 +1,171 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+ # test that default value of harden-dnssec-stripped is still yes.
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with failed DNSKEY request
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+;REPLY QR AA NOERROR
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+;example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+;SECTION AUTHORITY
+;example.com. IN NS ns.example.com.
+;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+;SECTION ADDITIONAL
+;ns.example.com. IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_mal_wc.rpl b/tests/deckard/sets/resolver/val_mal_wc.rpl
new file mode 100644
index 0000000..f03ced0
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_mal_wc.rpl
@@ -0,0 +1,151 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 16907 7 1 15491CE8EE9AC1D17E48D226C0460219546181CD "
+val-override-date: "20181130121851"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nodata, wildcards and ENT
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+b.example.com. IN DS
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+b.example.com. IN DS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101851 20181130101851 16907 example.com. KXsKhCme80OQl4qekE+q0KvymkhEelk+OdOsajCsGmfG5eeCEkN58gVw 5fBgtR2Ekp15KLsV1elsyVL8i7W5Hp5f2G70/plqSQ+78n3Al5jXONgN oVFSOuf8N179F2uf3k20MpnlxQQ7W/VX6SpuAOejyVpp6il6dm2YwRHH nX4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101851 20181130101851 16907 example.com. KqDPciNi+sv+8MOP2P0C3qWpFCHjw8eu213ztGMvVDZsEvJLz9QRXkgI XuwhZIEUiKaV9C7jG+aMyOc1amX0Uo8kp+UXuL5k43gjSi0PbhO72aTG QSOZV4S1/Pa/ZN/phWItlN18HGWqBQvx26K16AzziwQvVuL7nUmu/KUj MIY= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAef0Gt81KzrbFGbFmk6VeEzLLcRbnKiDjdMBO7R+HsQWCO9YpPGx 20mBEV7ISCLva+LZulf584i30ga7qMeVsarsdh9xCYtyMXd4Ex5nMEXx V9f2Or+FjihPduL2TnAlWpvL8oc1oKVI2RISTT1yf8IYy6X/FpfmMP81 9WBN2Kit ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101851 20181130101851 16907 example.com. RPXAcaVjBdtk/geHTdTg9ZOKREpAdjZAopRE/5Kk9fdFYQWwg0uRxexL PJ11jXjnp9MKOp1FehctyvE/mm1lB/J6+YepHu3tRAzzJ9YfjVxJjUpp Qv/nA/fU55MHWYhdhXwKn7F+PXD8+MFlAqPyFz9mYZEO89lI4P2/Wf4x pv4= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101851 20181130101851 16907 example.com. KXsKhCme80OQl4qekE+q0KvymkhEelk+OdOsajCsGmfG5eeCEkN58gVw 5fBgtR2Ekp15KLsV1elsyVL8i7W5Hp5f2G70/plqSQ+78n3Al5jXONgN oVFSOuf8N179F2uf3k20MpnlxQQ7W/VX6SpuAOejyVpp6il6dm2YwRHH nX4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101851 20181130101851 16907 example.com. KqDPciNi+sv+8MOP2P0C3qWpFCHjw8eu213ztGMvVDZsEvJLz9QRXkgI XuwhZIEUiKaV9C7jG+aMyOc1amX0Uo8kp+UXuL5k43gjSi0PbhO72aTG QSOZV4S1/Pa/ZN/phWItlN18HGWqBQvx26K16AzziwQvVuL7nUmu/KUj MIY= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+b.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 86394 IN SOA NS.IANA.ORG. NSTLD.IANA.ORG. 2007092000 1800 900 604800 86400
+example.com. 86394 IN RRSIG SOA 7 2 86394 20181230101851 20181130101851 16907 example.com. uQjgfvlcxQLPfqetqWjTgKTbDOK3BoqbdmrqudrEl/X/S3OR8uhTQu7P EsrJm7IP7lmKcsbF4LAFjBNRp28G4at8v5cnCpvZfKFDzO3JzCubaVnn 18rSZj9gM1e4CN5ms/aAlr5I2hDhIQnsKmhxQBTrngyTcpGgf/YQuruM RKw= ;{id = 2854}
+
+; note that b.example.com. is an empty nonterminal
+*.example.com. 3600 IN NSEC *.b.example.com. A MX RRSIG NSEC
+*.example.com. 3600 IN RRSIG NSEC 7 2 86400 20181230101851 20181130101851 16907 example.com. 5NyjMTv7p0jvYrfxQzTJXvTlf1Uy2tMSmYKEWZoBq87u6mLNBtRgpKl9 1gpVvT8o+uA2XAznujnFZYgLdE9Swk87KqQQSWkyM81458SuSVwB5hma 9afCrB38FH9D9aOCN1nfqIuoEsQi3Bu3Uvtr+eV7oE97ViROSy/1pyyK g9A= ;{id = 2854}
+
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+b.example.com. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+b.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. 86394 IN SOA NS.IANA.ORG. NSTLD.IANA.ORG. 2007092000 1800 900 604800 86400
+example.com. 86394 IN RRSIG SOA 7 2 86394 20181230101851 20181130101851 16907 example.com. uQjgfvlcxQLPfqetqWjTgKTbDOK3BoqbdmrqudrEl/X/S3OR8uhTQu7P EsrJm7IP7lmKcsbF4LAFjBNRp28G4at8v5cnCpvZfKFDzO3JzCubaVnn 18rSZj9gM1e4CN5ms/aAlr5I2hDhIQnsKmhxQBTrngyTcpGgf/YQuruM RKw= ;{id = 2854}
+*.example.com. 3600 IN NSEC *.b.example.com. A MX RRSIG NSEC
+*.example.com. 3600 IN RRSIG NSEC 7 2 86400 20181230101851 20181130101851 16907 example.com. 5NyjMTv7p0jvYrfxQzTJXvTlf1Uy2tMSmYKEWZoBq87u6mLNBtRgpKl9 1gpVvT8o+uA2XAznujnFZYgLdE9Swk87KqQQSWkyM81458SuSVwB5hma 9afCrB38FH9D9aOCN1nfqIuoEsQi3Bu3Uvtr+eV7oE97ViROSy/1pyyK g9A= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_anotherdomainsignature.rpl b/tests/deckard/sets/resolver/val_minimal_anotherdomainsignature.rpl
new file mode 100644
index 0000000..a1cb63e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_anotherdomainsignature.rpl
@@ -0,0 +1,99 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Signature belongs to another domain.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+x.root-servers.net. IN A
+SECTION ANSWER
+x.root-servers.net. 3600000 IN A 193.0.14.129
+x.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ ; valid signature of k.root-servers.net IN A
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+x.root-servers.net IN A
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+x.root-servers.net IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_anotherrrtypesignature.rpl b/tests/deckard/sets/resolver/val_minimal_anotherrrtypesignature.rpl
new file mode 100644
index 0000000..562987a
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_anotherrrtypesignature.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Signature belongs to another RR type of the domain.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ== ; valid signature of k.root-servers.net IN AAAA
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+k.root-servers.net IN A
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+k.root-servers.net IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddnskeyalgorithm.rpl b/tests/deckard/sets/resolver/val_minimal_baddnskeyalgorithm.rpl
new file mode 100644
index 0000000..089db88
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddnskeyalgorithm.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed DNSKEY algorithm.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 7 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc= ; algorithm changed from 8 to 7
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddnskeyflags.rpl b/tests/deckard/sets/resolver/val_minimal_baddnskeyflags.rpl
new file mode 100644
index 0000000..3f8e48d
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddnskeyflags.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed DNSKEY flags.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 254 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc= ; flags changed from 256 to 254
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddnskeyprotocol.rpl b/tests/deckard/sets/resolver/val_minimal_baddnskeyprotocol.rpl
new file mode 100644
index 0000000..9a6d65b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddnskeyprotocol.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed DNSKEY protocol.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 2 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc= ; protocol changed from 3 to 2
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddsalgorithm.rpl b/tests/deckard/sets/resolver/val_minimal_baddsalgorithm.rpl
new file mode 100644
index 0000000..83fe386
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddsalgorithm.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 7 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F" # algorithm changed from 8 to 7
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed algorithm of trust anchor.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddsdigest.rpl b/tests/deckard/sets/resolver/val_minimal_baddsdigest.rpl
new file mode 100644
index 0000000..e365d21
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddsdigest.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 8 2 A7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F" # digest changed
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed digest of trust anchor.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddsdigesttype.rpl b/tests/deckard/sets/resolver/val_minimal_baddsdigesttype.rpl
new file mode 100644
index 0000000..5f2401e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddsdigesttype.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 8 1 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F" # digest type changed from 2 to 1
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed digest type of trust anchor.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_baddskeytag.rpl b/tests/deckard/sets/resolver/val_minimal_baddskeytag.rpl
new file mode 100644
index 0000000..50ae41a
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_baddskeytag.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49061 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F" # key tag changed from 49060 to 49061
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Chnged key tag of trust anchor.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badpublickey.rpl b/tests/deckard/sets/resolver/val_minimal_badpublickey.rpl
new file mode 100644
index 0000000..dfca431
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badpublickey.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed public key.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 BwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc= ; changed public key
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsigalgorithm.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsigalgorithm.rpl
new file mode 100644
index 0000000..7e562ce
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsigalgorithm.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG algorithm.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 7 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; algorithm changed from 8 to 7
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsigexpiration.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsigexpiration.rpl
new file mode 100644
index 0000000..771c818
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsigexpiration.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG expiration.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093828 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; expiration changed from 20170409093827 to 20170409093828
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsiginception.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsiginception.rpl
new file mode 100644
index 0000000..ad8e739
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsiginception.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG inception.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093828 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; inception changed from 20170310093827 to 20170310093828
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsiglabels.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsiglabels.rpl
new file mode 100644
index 0000000..af15124
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsiglabels.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG labels.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 1 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; labels changed from 0 to 1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsigsignature.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsigsignature.rpl
new file mode 100644
index 0000000..61c5e16
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsigsignature.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG signature.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . ABuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; changed signature
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsigtag.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsigtag.rpl
new file mode 100644
index 0000000..e587c2c
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsigtag.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG tag.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20662 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; tag changed from 20661 to 20662
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_badrrsigttl.rpl b/tests/deckard/sets/resolver/val_minimal_badrrsigttl.rpl
new file mode 100644
index 0000000..ac39109
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_badrrsigttl.rpl
@@ -0,0 +1,88 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Changed RRSIG original TTL.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518401 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ== ; original TTL changed from 518400 to 518401
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_beforeinception.rpl b/tests/deckard/sets/resolver/val_minimal_beforeinception.rpl
new file mode 100644
index 0000000..04820aa
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_beforeinception.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170308000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Date after expiration of signatures.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_expiredsignature.rpl b/tests/deckard/sets/resolver/val_minimal_expiredsignature.rpl
new file mode 100644
index 0000000..b271518
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_expiredsignature.rpl
@@ -0,0 +1,87 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170410000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Date after expiration of signatures.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_minimal_noerror.rpl b/tests/deckard/sets/resolver/val_minimal_noerror.rpl
new file mode 100644
index 0000000..193d3ca
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_minimal_noerror.rpl
@@ -0,0 +1,89 @@
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170401000000"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Right signed zone.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 193.0.14.129
+ ADDRESS 2001:7fd::1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170409093827 20170310093827 49060 . G7s3QiWNgOsl+LoG6OKjdBHPcFyhmCS17GFnaKjfJNdPQaFL5nM/vrXo eUIIdJXAvjj62TY7wTyFlnx3yjK93RVGKEEySpGC/1gkn5AdjVoQszog IxYjKzubizULSaX7SQ3/Ar+uHLxakdS1qgNdFu6hHCl857LJPtmC8SJt iFUmm5HFyARokMrfA88VrFRKEqojcCWajeZMfRtgBipFJZoYgPUCaFlz 8OupNdNUWCbGhnDWrXCWMzeKVXTQVlJf75PXXgtkuBUmr5RSWu7AYr+c wTJ4E4610goRqYxnZ33efKE/MuhKeY66xelPh0sirPrBMR5JAlyjV3k1 qDzhcQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION ANSWER
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+k.root-servers.net. 2592000 IN RRSIG AAAA 8 3 3600000 20170409093827 20170310093827 20661 . qjVXwuxzmoRhdrXyQvKfrrzFxGiYuTTJHxwZPasJ1nVmN48dPyU6wA55 JeqoJv1Jm+XvIL1q0WtX6Zh6KLt6vVjHuMkhmFuIZYkFi/dmsEwFY8C0 ebyXyztQT5+6FOSVTAKacYc40LfBo8FqEn8RYlCu1mkAd8ANvvLrdLWW W03LVOY7JlCzyrKlAlmPmuV8z+e9PxNkUh6KfTEvAReoAAX7wYZkdefg 2d64c7rNWXvYm6LxBX6qeQ39d5WyKc8v+G01DJuDzs2Tx368QoK86vm/ qo9ERdT7koRt+gBZNYv8V4fh2SjaFsy2TJq/tiYcSia9snGDTFj6LWVM 6sBCYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170409093827 20170310093827 20661 . feIXXjskcsyH+ALZu67GVDaPWXjUGTWsTlDwzgJcLBzSuRVY/GVD5Z1Q B4/oUW99rLKB5bNS1MuasZ+nZFV67sBwJk1+SqNB2bAe7G5Tv1sR2Qgi qDAoB37YDVk5JGHfuxByLYbAVG9PrPXT60BN17OYrD/TFPzprye65gk3 7l9kPpAlblcsqdvh5piKrWc7VBcyMhlp56qdASNAl+Lrb+i0DZYyJXh+ b8LV5g5zp9FaVGKe0Gi4+yDXVjcM6VEtuNRAu2+flLoc3ho6qQF1Po4Y wueL72I+yFoUxkIOJvK47eWb+YUBIBK/L8/ORjYoLBRsrbc79wb0I3Zj Xy6O4Q==
+ENTRY_END
+
+; QTYPE == RRSIG is not supported, https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any-04#section-7
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+. IN NS
+ENTRY_END
+
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170409093827 20170310093827 20661 . uBuJpbRh1NYVciSKK0r3SA6NFnqE4s/+CqLfTXu26/HrY5c1aOhQHXZM cCDDjfPGFa7Eh4mqF0i9I+i+bFbYQitI1Heexye599VE19REbVsK4qaU xkArvt9k6HVqd/7BXXUyzLN1N0CScdyuT5tiEI9154SDNVpnC+z8i2u0 9hW8JEk4qqVWX/I1MYQB/UOcFSeDhD1Qku/26opqDuLl/1eaShxhMQ/c rjzOb5ZYzD0x+TUJZMYSOMwAraaFuYTT84oe6QYY+EGctAk1b50nA/5E C3Tm/xGuo9ioVtYhTwoo1XDUVeHmghdILjQZvR4pOSZoRGGP9ovb08Qg OmPXuQ==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_negcache_ds.rpl b/tests/deckard/sets/resolver/val_negcache_ds.rpl
new file mode 100644
index 0000000..7aedd46
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_negcache_ds.rpl
@@ -0,0 +1,215 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 41069 7 1 2003A31BABD184BB6DB61EE19E99D1E5D2438043 "
+val-override-date: "20181130121852"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with negative cache DS response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101851 20181130101851 41069 example.com. nJ/h5Gx/vjvbFWq49FnmgYc4SdelzNqF67pN5NbGXkH80uKPdGAj5Lue 9WQb/mCExxU7LjjIZjjAnAmIKKHyK8xLY27W7eRVR9YkmQVt0XWNN1eL 1QUjURFxIFhzpadH9ympDvgS1B8siYu+vdLR1Guxip4+JgYfYFBInZG/ cPA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101851 20181130101851 41069 example.com. azi1io9bz4KCJ+6AF17yTFwjaGM6mnU9bdR91pD6lrYxMjBPERzBsUIo 5KlAxZD0PBH5/FQviucA33GVAuP3iYc9954yVF7GyjzUy4ZYgQAGb6W8 ddF8aHdi4qV4FJczROo+RDUqmsDV+KAvdGssLN2rN6zL+3yOEbwfKpjc NEk= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdbidAf3mIouRWd2XVH6Z5t+ZGClkU6bv0oAZO8Hmv5PlG8Wve8v q40Pa4F5dtODadwB3ap9Z5ELJGDJDAGCgpiOXy34xtquF0VKCBezCdyA X3fWni7EQIqV79G1T3J4cM6WXvbz6T0lJa42Um/YkjTixBnYbj/4Tsgf Szx/k/XL ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101851 20181130101851 41069 example.com. jI52HJoPTs1of36Q+d9zpdu9B0iaKd+IQtIkmW6VIliOwX0+6O47sHcf mhz8Htny/B16C2nsBnB3yoOM/j27MRLW1RNmb/TqF2QVIsn+5DnP+UMp 7sZ/3BG0Gdjg8QzY7bFGmsalAVk/BjWmVEXTeAlJRaGUsa2gWQk/6lTG nT4= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101851 20181130101851 41069 example.com. nJ/h5Gx/vjvbFWq49FnmgYc4SdelzNqF67pN5NbGXkH80uKPdGAj5Lue 9WQb/mCExxU7LjjIZjjAnAmIKKHyK8xLY27W7eRVR9YkmQVt0XWNN1eL 1QUjURFxIFhzpadH9ympDvgS1B8siYu+vdLR1Guxip4+JgYfYFBInZG/ cPA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101851 20181130101851 41069 example.com. azi1io9bz4KCJ+6AF17yTFwjaGM6mnU9bdR91pD6lrYxMjBPERzBsUIo 5KlAxZD0PBH5/FQviucA33GVAuP3iYc9954yVF7GyjzUy4ZYgQAGb6W8 ddF8aHdi4qV4FJczROo+RDUqmsDV+KAvdGssLN2rN6zL+3yOEbwfKpjc NEk= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101851 20181130101851 41069 example.com. zirafH0rQfSxurfz8wUi/N6vgt5BR6ll2oAb+mFE6PgAU+9R1WharUpV JsfI2StXTg6uD/TMYDU02OxQFu44OaZMb6GUZBr7AUAE0fVsUDJAdOgn QdnNajsOZXi5rq6uEcnMdmyUVmNvtcc+yfG26aC/CiJ1dpXoglxM89TO FOw= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; query for missing DS record.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101851 20181130101851 41069 example.com. sq8e1vA5GgxT0z5+ubqTW8IjWJEvwJ0vlHXALLeSYHng7oVQ6mr+soTr vxov5kAockUaJ/rFJpBkcx0q2o5Z6RSsWl6OPxdURRe2IAQlyyX7xpcV 5RVHPoCL5PvA8HMFL94TigKTRoDIOkWnbVDJ0Ju3GwurpbrXP6E6KjzG Xus= ;{id = 2854}
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101851 20181130101851 41069 example.com. zirafH0rQfSxurfz8wUi/N6vgt5BR6ll2oAb+mFE6PgAU+9R1WharUpV JsfI2StXTg6uD/TMYDU02OxQFu44OaZMb6GUZBr7AUAE0fVsUDJAdOgn QdnNajsOZXi5rq6uEcnMdmyUVmNvtcc+yfG26aC/CiJ1dpXoglxM89TO FOw= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; the downstream validator wants the DS record.
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN DS
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101851 20181130101851 41069 example.com. sq8e1vA5GgxT0z5+ubqTW8IjWJEvwJ0vlHXALLeSYHng7oVQ6mr+soTr vxov5kAockUaJ/rFJpBkcx0q2o5Z6RSsWl6OPxdURRe2IAQlyyX7xpcV 5RVHPoCL5PvA8HMFL94TigKTRoDIOkWnbVDJ0Ju3GwurpbrXP6E6KjzG Xus= ;{id = 2854}
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101851 20181130101851 41069 example.com. zirafH0rQfSxurfz8wUi/N6vgt5BR6ll2oAb+mFE6PgAU+9R1WharUpV JsfI2StXTg6uD/TMYDU02OxQFu44OaZMb6GUZBr7AUAE0fVsUDJAdOgn QdnNajsOZXi5rq6uEcnMdmyUVmNvtcc+yfG26aC/CiJ1dpXoglxM89TO FOw= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_noadwhennodo.rpl b/tests/deckard/sets/resolver/val_noadwhennodo.rpl
new file mode 100644
index 0000000..e8ef634
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_noadwhennodo.rpl
@@ -0,0 +1,151 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 5513 7 1 A82FBB092D154DB2AC65B85480D5D7722589FE65 "
+val-override-date: "20181130100653"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test if AD bit is returned on non-DO query.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230080653 20181130080653 5513 example.com. E31KJFA+CenP19oImp7zKXfMcxyoOmUyPTrE81u3qDB0wu8FgNft/Qs6 FQTG5gWDpg8i2E9BB7CbVKx/Dt5RNa7yehtc4MOEhKOMvvH48p0TdkgO sWrUr+Z5wkzst2Hrb4TN6IEM5QqXXs3GApbFsG0vXGMs1aH9+Yo6KZ7H bMA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230080653 20181130080653 5513 example.com. m42szfJDR/duAI+0VQm2okWxeaVRzSsnWztVF1lHuiZZfljYKFzZEdEp DDSpXbjtq7cobcO/9+ZQhLPrmLhhx2sj96wE06Gd3smqzykaH7PJ5Q63 vkLubkRkJ1X8j+tdykGELk2RUxfzoB5qdf34PY6aIdhX/VVTx8n051cu T+U= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcZSP3HQqzpGyFkoyriJHSRJlS8JDx3TsrnFRhbsM/Wy/gp9ubgz BPum/s/4Plb+wGz1ndpcpuhwqNahL2VGleJgEQrkeIqjj1K4lYvPSmr4 yfTcfD5O/zpzqCxrCIjWEa6/Vg7ldNA05KoV0ptx5rVXhox/Fo3BEGaq i5fVjbDf ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230080653 20181130080653 5513 example.com. fKyryysxkfOMonchYec/4g2y3qtsf6O6ilnBVcBX4f0WAvNtib/eZrTm retDviutAXM2E44rvTpitvBXMOXQ2jz4EV7/m6ZuIkdoOJ3GLk0W08wn 3TPR36VK5160sOxOH9KgWjvrfi4F24qxV30cNqOJYSXUG0nHosuKoEYx Hsg= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230080653 20181130080653 5513 example.com. E31KJFA+CenP19oImp7zKXfMcxyoOmUyPTrE81u3qDB0wu8FgNft/Qs6 FQTG5gWDpg8i2E9BB7CbVKx/Dt5RNa7yehtc4MOEhKOMvvH48p0TdkgO sWrUr+Z5wkzst2Hrb4TN6IEM5QqXXs3GApbFsG0vXGMs1aH9+Yo6KZ7H bMA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230080653 20181130080653 5513 example.com. m42szfJDR/duAI+0VQm2okWxeaVRzSsnWztVF1lHuiZZfljYKFzZEdEp DDSpXbjtq7cobcO/9+ZQhLPrmLhhx2sj96wE06Gd3smqzykaH7PJ5Q63 vkLubkRkJ1X8j+tdykGELk2RUxfzoB5qdf34PY6aIdhX/VVTx8n051cu T+U= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230080653 20181130080653 5513 example.com. S4vtvQL7JD5LDzhFuXU7xlUbr7COF3JxT5XA1kzHJRLPKQEnvTl7+Z2K bgDYOf4TC2Li+W9ptnmodVaidLvNBwiA9d/MPVJ4QQmJK6TlaLuyL0du 079NyGnSiSz5CZvVZ61Vjrt7XgpSyLiJHdq3gR0YAZ6i7ouPu8px7vgW iJQ= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230080653 20181130080653 5513 example.com. E31KJFA+CenP19oImp7zKXfMcxyoOmUyPTrE81u3qDB0wu8FgNft/Qs6 FQTG5gWDpg8i2E9BB7CbVKx/Dt5RNa7yehtc4MOEhKOMvvH48p0TdkgO sWrUr+Z5wkzst2Hrb4TN6IEM5QqXXs3GApbFsG0vXGMs1aH9+Yo6KZ7H bMA= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230080653 20181130080653 5513 example.com. m42szfJDR/duAI+0VQm2okWxeaVRzSsnWztVF1lHuiZZfljYKFzZEdEp DDSpXbjtq7cobcO/9+ZQhLPrmLhhx2sj96wE06Gd3smqzykaH7PJ5Q63 vkLubkRkJ1X8j+tdykGELk2RUxfzoB5qdf34PY6aIdhX/VVTx8n051cu T+U= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; it is validated, but no AD bit, because no AD was requested.
+; (this is a copy of val_positive.rpl).
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nodata_hasdata.rpl b/tests/deckard/sets/resolver/val_nodata_hasdata.rpl
new file mode 100644
index 0000000..178dfea
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nodata_hasdata.rpl
@@ -0,0 +1,163 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 56837 7 1 FBEED5DCAEAE367243C36AEB8251D00C0088872A "
+val-override-date: "20181130121856"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nodata response, that proves the 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101855 20181130101855 56837 example.com. y/lP3Ognxh+WgcwtSqo0bLUWeko1sjpCXylRLERxsTSyVSK5L8yenuB2 94iqM8fVlk7SpDg1BiuNuAPsinDMgjR8726ECJMMgSxXohiZgQSUfwQi NYxDmTq9qN/JfCrJUsdYpH387vSkjGuvvNic9k70FzDhPfI4YAjf4ZbJ E0c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101855 20181130101855 56837 example.com. AtisROBfgsg6OEetN69p9eEAQSKwovhdbOv3lZ8dq4cHryLDO4q4O2aF +h3cSpLpOO6wti94eqTbpB6HZ7eIEYqHEQKSYEGL59HuVf4N0nyTp8lN 3UAZT7DtsmDdt0NyUExh1tuHvFwYvtX3vCyvJs3F1MGCTySSK6wALmHm TLs= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdIzTUQVujDsSlkC61+pWGNqk3O6YIoP6XbaGwwKTUHx7yXf95gb 93UNAJFLt/G6ORySmAYfW/l3EYvKMX4x2YnaQeq+xXUguPq4nMMxfwyd xYubOaRd5DgETj1BEug2OV/z5PbaSuWiCqxQCJ4x9wuA04388n6r+/WR dz9uPVyl ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101855 20181130101855 56837 example.com. SsiDl8A1jtsqhA0v/wL5Hes0qRR8//xhIMPrQuBHJVSTRg5dq4EJYjIF 3rtJ+YwlLW/bfDg19sXLj/67/resY106RtI7zFdoQFoWXCkui9o+ZPJF UM+FHgjnFt4OOwNpQpJuhXeUGj6NDIgpsJhYDH8BaESNGcb0eN7bfYaH d/E= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101855 20181130101855 56837 example.com. y/lP3Ognxh+WgcwtSqo0bLUWeko1sjpCXylRLERxsTSyVSK5L8yenuB2 94iqM8fVlk7SpDg1BiuNuAPsinDMgjR8726ECJMMgSxXohiZgQSUfwQi NYxDmTq9qN/JfCrJUsdYpH387vSkjGuvvNic9k70FzDhPfI4YAjf4ZbJ E0c= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101855 20181130101855 56837 example.com. AtisROBfgsg6OEetN69p9eEAQSKwovhdbOv3lZ8dq4cHryLDO4q4O2aF +h3cSpLpOO6wti94eqTbpB6HZ7eIEYqHEQKSYEGL59HuVf4N0nyTp8lN 3UAZT7DtsmDdt0NyUExh1tuHvFwYvtX3vCyvJs3F1MGCTySSK6wALmHm TLs= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+; SOA record is missing in reply.
+; Denies A, note this is the end of the NSEC chain.
+www.example.com. IN NSEC example.com. A RRSIG NSEC
+www.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101855 20181130101855 56837 example.com. NgtD5aVHLUHE1yGKHrarb7A1P5sqfwdgUjxBCEn8BwX7FW9h9QiVZs9+ jCVF7hT+wPs2PRqy5T/a5OjwZZJRtabxN6b3d6J7FSppTWTxP/8sjAf6 1c1TRf7aq4alJ8gAk/p9Yk8AsylIw15kMWjnOeiFCCKKYRHzfJi7wnAR efI= ;{id = 2854}
+; Denies wildcard
+example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY
+example.com. 3600 IN RRSIG NSEC 7 2 3600 20181230101855 20181130101855 56837 example.com. nIcNEt/oTPiVa0mopVp5BXGVnCxn3hmv233yJ0oQCRkpZV0PKVCp6p+S GyMuh+osAYNT+duVa3zs8o6pyrZjQLAZJMEeOMBoAQP33iNu4axkYGio IkW/wdabOdBAFGgtApcjUh8rk9FCNAu0Rp+knqhq9BHV89aRROqGzdkd kp0= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nodata_zonecut.rpl b/tests/deckard/sets/resolver/val_nodata_zonecut.rpl
new file mode 100644
index 0000000..132ccf8
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nodata_zonecut.rpl
@@ -0,0 +1,161 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 7508 7 1 74F83028EFB9ADE1737F8D4ABC38B6B24B820FEA "
+val-override-date: "20181130121859"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nodata response from wrong side of zonecut
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101859 20181130101859 7508 example.com. LtglVhv8M0yIXb/0El6Zuq5YlKzOiI4ELiK9UE7MgTr2taXCWzC1tng6 a5UqZXWwrxd0a8vaVy6ZcAPQkY6HeZ/IAO9ej3L+EzKyLlEJxnYXkNXb InMHUcUk99jZ1edOvaVPtaDqWdm8iuGcm5mHHpTopf7lG9L6SwdPxX6h 9DE= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101859 20181130101859 7508 example.com. yQB0cOEETYV1iE6sDl3zwJX+aqZFyzomqn0Y+KLfMgBmKZmwQWx5tA0w 3KTT3EmuW0X1TAY0gK4NiJ9DAIs0Lx8CYKEtDXa8bIQ/pelMIwZFAI7c Xj2dapGiAJXK5GDakoIeSna26Uoxebuji1ON1DbWbGno7Nl+SrGDvwsX WRY= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAeKwMBC0t6W4iXUPMRDrAn6oLaKcQQxzs7kU6eSabnPSrKiK1866 PzscrkXkkPIGNW1DXMexV+b39NavDoXzAaG3sCsQToq8ZVA/VKz6BQ5h Qy8CzzJ/fbg7eQmujS1bh0TATkKEtgVYmlfooSWniQ9wAaId/jLbeF6q C6g1nuWt ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101859 20181130101859 7508 example.com. yDhUfBwaWgV/QKLUEQ8B7ZeE/81qSJoo0mFD2zs/0PJnQey/Bi2vNZDv 7W3nIkzHtNRC3D9brV1YXi+NbfCID7nNyU90/4Js1VQAbGzxGuv9dlvx GjHfniS8UIdu8R3iqV2URi1Ux/YMFfEv2VfUInOh6hfB9nwhDKetsbAs kwc= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101859 20181130101859 7508 example.com. LtglVhv8M0yIXb/0El6Zuq5YlKzOiI4ELiK9UE7MgTr2taXCWzC1tng6 a5UqZXWwrxd0a8vaVy6ZcAPQkY6HeZ/IAO9ej3L+EzKyLlEJxnYXkNXb InMHUcUk99jZ1edOvaVPtaDqWdm8iuGcm5mHHpTopf7lG9L6SwdPxX6h 9DE= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101859 20181130101859 7508 example.com. yQB0cOEETYV1iE6sDl3zwJX+aqZFyzomqn0Y+KLfMgBmKZmwQWx5tA0w 3KTT3EmuW0X1TAY0gK4NiJ9DAIs0Lx8CYKEtDXa8bIQ/pelMIwZFAI7c Xj2dapGiAJXK5GDakoIeSna26Uoxebuji1ON1DbWbGno7Nl+SrGDvwsX WRY= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+; SOA record is missing in reply.
+; Denies A, note this is the end of the NSEC chain.
+; from wrong side of zone-cut
+www.example.com. 3600 IN NSEC example.com. NS DS RRSIG NSEC
+www.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101859 20181130101859 7508 example.com. pZVPW2nRsyzqbXJ0ulwP3mS+F6s2IT87uIdfZXAYvKc4mxfVN4fVIV4d 38i2/19vWBf0JbMumZTDunzpL5+8T4ydH6AVv2UYcQh154JHi1q3Ec4G 0VTQa5bl8+fvS3rY5jmn/Pj6nqNWkYdnZPEelzzz0cLHJLdfI279a7n0 T00= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nodatawc_badce.rpl b/tests/deckard/sets/resolver/val_nodatawc_badce.rpl
new file mode 100644
index 0000000..101b6f2
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nodatawc_badce.rpl
@@ -0,0 +1,163 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 65510 7 1 562BB481B567CC7A69CA48A9020450D3EA52B6BC "
+val-override-date: "20181130121857"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with wildcard nodata, bad closest encloser
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101857 20181130101857 65510 example.com. zBeDPiE4zoUW4DnyrOXKvEKUaouz2xpD9UGCkQ2iDeNl+2ASPv9fyxY9 ChpOOcgOsM6PEonEwm013L0oPK19WOAduuZw+9IgPFFxXlo5Sq80vdtM OEKqhvy4dId/aeF+hWcFm1ug9+4f56eBP0MyeohXpm46b0qaK7756B6i pyg= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101857 20181130101857 65510 example.com. sQPchlz34VJeeRFowgrOAWcfNGuSXSzeuH2/wZ/1qFdYF6m8uf8Xl/Vy ThP1axfBvk1pKItnZZR3bQd0gnCInnmNUt70vXg/w1AjrULNiMxqs0Mj fBPhFk3/9oK+KogQfLYS0SPESU+C3raPG8MnDe0uJ6sd5SDDp3w57qan J+Y= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdUDKuLOwzbmS7/7hQIK5FyLAu5XnovMNiBRfF8u8+W7RfQ+KutQ FlDcF2GSvLzi/oN70crUU45XslCGF5hHiTPu3x9tMpO75tvzZxvo8Zvm 6cTUqa+/94vco9THeTxy6LtY93Ay5h1Y6sqfUtTBUbU1b/O18EgM1XBu Z61vzdFn ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101857 20181130101857 65510 example.com. OGov/2XXr24GVeXbdT4WcHDiAV5mKmBFYlNWjwE+FOOI7LdL0DPg1CFD AnyW5Fadn9DCkDh+zLMeKQIVSFG4vkKzjqjIOxCxninPkpSA1S6caW5q i7Xlxtbqc9U3ZZB0A9uCWqYeVL1B+dRvm+rgOEvklA4FoW5QyCpL5U83 vL8= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101857 20181130101857 65510 example.com. zBeDPiE4zoUW4DnyrOXKvEKUaouz2xpD9UGCkQ2iDeNl+2ASPv9fyxY9 ChpOOcgOsM6PEonEwm013L0oPK19WOAduuZw+9IgPFFxXlo5Sq80vdtM OEKqhvy4dId/aeF+hWcFm1ug9+4f56eBP0MyeohXpm46b0qaK7756B6i pyg= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101857 20181130101857 65510 example.com. sQPchlz34VJeeRFowgrOAWcfNGuSXSzeuH2/wZ/1qFdYF6m8uf8Xl/Vy ThP1axfBvk1pKItnZZR3bQd0gnCInnmNUt70vXg/w1AjrULNiMxqs0Mj fBPhFk3/9oK+KogQfLYS0SPESU+C3raPG8MnDe0uJ6sd5SDDp3w57qan J+Y= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+; SOA record is missing in reply.
+; wildcard is *.com,
+*.com. IN NSEC com. RRSIG NSEC
+*.com. 3600 IN RRSIG NSEC 7 1 3600 20181230101857 20181130101857 65510 example.com. VkoFvmky3udLkzvZPQ7Kgb8wgWKtyHJlL4j4aWmgxeGM3jgJn+LF21yZ EA4EnrlxbPwAjyNSjpPFEGfn9b/nFnxIELvaw4JEmVAC11fJcS6LOyjP W0TAtZfaugzN1N5IoTEKC5Jd5h3oBLj98jYDnUeCJ1Rs44bku85Xlwwq Vsw= ;{id = 2854}
+; this NSEC denies original query name from a different zone
+ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC
+ns.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101857 20181130101857 65510 example.com. IhNXLScxp0p14+47J2kp4g3Q4SziflqJaBn9cjIvjOO4pYlw6ZCd6bKK foP9Ye6IUriidmrAP45C50mqx3uIJsS5S+tuIk/gPFr8qcDbynLWUQj7 U7x3XQdztNTxqwAMse/84UGxPg5aCCAqrySFJ0qTz2mo0dihI5xgEpRi 70Q= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nokeyprime.rpl b/tests/deckard/sets/resolver/val_nokeyprime.rpl
new file mode 100644
index 0000000..25143e3
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nokeyprime.rpl
@@ -0,0 +1,164 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with failed key prime, no keys.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+; barely valid nodata for AAAA
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007101500 28800 7200 604800 18000
+SECTION ADDITIONAL
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b1_nameerror.rpl b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror.rpl
new file mode 100644
index 0000000..a043d52
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror.rpl
@@ -0,0 +1,161 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off ; RFC 5155 section B.1 does not contain information necessary to cover query-minimization
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.1 name error.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that covers the "next closer" name (c.x.w.example)
+;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh
+
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+;; NSEC3 RR that matches the closest encloser (x.w.example)
+;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995
+
+b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+
+;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example)
+;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m
+
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.c.x.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+; no AD flag due to optout, RFC5155 9.2
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.c.x.w.example. IN A
+ENTRY_END
+
+;cached answer
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_noce.rpl b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_noce.rpl
new file mode 100644
index 0000000..857fae5
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_noce.rpl
@@ -0,0 +1,145 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.1 name error without ce NSEC3.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that covers the "next closer" name (c.x.w.example)
+;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh
+
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+;; NSEC3 RR that matches the closest encloser (x.w.example)
+;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995
+
+; b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+; b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+
+;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example)
+;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m
+
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.c.x.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nonc.rpl b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nonc.rpl
new file mode 100644
index 0000000..ae208a3
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nonc.rpl
@@ -0,0 +1,147 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm 3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.1 name error without nc NSEC3.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89ep O6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8 Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf 3bH+QsCtg== )
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd V I2LmKusbZsT0Q== )
+
+;; NSEC3 RR that covers the "next closer" name (c.x.w.example)
+;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh
+
+;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi 47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRx K9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+;; NSEC3 RR that matches the closest encloser (x.w.example)
+;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995
+
+b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUi wtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+
+;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example)
+;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m
+
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH +z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.c.x.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nowc.rpl b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nowc.rpl
new file mode 100644
index 0000000..62ec31c
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b1_nameerror_nowc.rpl
@@ -0,0 +1,152 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.1 name error without wc NSEC3.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NXDOMAIN
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that covers the "next closer" name (c.x.w.example)
+;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh
+
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+;; NSEC3 RR that matches the closest encloser (x.w.example)
+;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995
+
+b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+
+;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example)
+;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m
+
+
+;35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+;35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.c.x.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;do not compare authority
+;MATCH all
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+a.c.x.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+; example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+; example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+; b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG )
+; b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== )
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b21_nodataent.rpl b/tests/deckard/sets/resolver/val_nsec3_b21_nodataent.rpl
new file mode 100644
index 0000000..4165c10
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b21_nodataent.rpl
@@ -0,0 +1,116 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.2.1 no data empty nonterminal.
+
+; 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+y.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR matches the QNAME and shows that the A type bit is not set.
+ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h )
+ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+y.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+y.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h )
+ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== )
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b21_nodataent_wr.rpl b/tests/deckard/sets/resolver/val_nsec3_b21_nodataent_wr.rpl
new file mode 100644
index 0000000..632d56d
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b21_nodataent_wr.rpl
@@ -0,0 +1,136 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.2.1 no data empty nonterminal, wrong rr.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+y.w.example. IN A
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR matches the QNAME and shows that the A type bit is not set.
+;ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h )
+;ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== )
+
+; instead the wrong NSEC3 rr is included
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+y.w.example. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+y.w.example. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_nsec3_b2_nodata.rpl b/tests/deckard/sets/resolver/val_nsec3_b2_nodata.rpl
new file mode 100644
index 0000000..d475d21
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b2_nodata.rpl
@@ -0,0 +1,117 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator NSEC3 B.2 no 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns1.example. IN MX
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR matches the QNAME and shows that the MX type bit is not set.
+2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG )
+2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns1.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+ns1.example. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG )
+2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== )
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b2_nodata_nons.rpl b/tests/deckard/sets/resolver/val_nsec3_b2_nodata_nons.rpl
new file mode 100644
index 0000000..b10ee1e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b2_nodata_nons.rpl
@@ -0,0 +1,142 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator NSEC3 B.2 no data, without NSEC3.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+; response to DS query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns1.example. IN DS
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns1.example. IN MX
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR matches the QNAME and shows that the MX type bit is not set.
+;2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG )
+;2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns1.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+ns1.example. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b3_optout.rpl b/tests/deckard/sets/resolver/val_nsec3_b3_optout.rpl
new file mode 100644
index 0000000..46dba06
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b3_optout.rpl
@@ -0,0 +1,206 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.3 referral to optout unsigned 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR DO NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+c.example. IN DS
+SECTION AUTHORITY
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+ENTRY_END
+
+RANGE_END
+
+; ns1.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+; ns2.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b3_optout_negcache.rpl b/tests/deckard/sets/resolver/val_nsec3_b3_optout_negcache.rpl
new file mode 100644
index 0000000..0352419
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b3_optout_negcache.rpl
@@ -0,0 +1,209 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.3 referral optout with negative cache.
+
+; 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+
+ENTRY_END
+
+
+; DS must be gotten from neg cache
+; ENTRY_BEGIN
+; MATCH opcode qtype qname
+; ADJUST copy_id
+; REPLY QR AA DO NOERROR
+; SECTION QUESTION
+; c.example. IN DS
+; SECTION AUTHORITY
+; ;; NSEC3 RR that covers the "next closer" name (c.example)
+; ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+;
+; ;; NSEC3 RR that matches the closest encloser (example)
+; ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+; ENTRY_END
+
+RANGE_END
+
+; ns1.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+; ns2.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b3_optout_noce.rpl b/tests/deckard/sets/resolver/val_nsec3_b3_optout_noce.rpl
new file mode 100644
index 0000000..d6be2cb
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b3_optout_noce.rpl
@@ -0,0 +1,255 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator NSEC3 B.3 optout unsigned, without ce.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+c.example. IN DS
+SECTION AUTHORITY
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+c.example. IN MX
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+
+ENTRY_END
+RANGE_END
+
+; ns1.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns1.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns2.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+; ns2.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns1.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns2.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b3_optout_nonc.rpl b/tests/deckard/sets/resolver/val_nsec3_b3_optout_nonc.rpl
new file mode 100644
index 0000000..43b0987
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b3_optout_nonc.rpl
@@ -0,0 +1,256 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator NSEC3 B.3 optout unsigned, without nc.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+c.example. IN DS
+SECTION AUTHORITY
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+;35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+;35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+c.example. IN MX
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+
+;; NSEC3 RR that covers the "next closer" name (c.example)
+;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck
+; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG )
+; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== )
+
+;; NSEC3 RR that matches the closest encloser (example)
+;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG )
+0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== )
+
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+
+ENTRY_END
+
+RANGE_END
+
+; ns1.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.7
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns1.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns2.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+; ns2.c.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns1.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns2.c.example. IN AAAA
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+c.example. IN NS
+SECTION ANSWER
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+mc.c.example. IN MX
+SECTION ANSWER
+mc.c.example. IN MX 50 mx.c.example.
+SECTION AUTHORITY
+c.example. NS ns1.c.example.
+c.example. NS ns2.c.example.
+SECTION ADDITIONAL
+ns1.c.example. A 192.0.2.7
+ns2.c.example. A 192.0.2.8
+ENTRY_END
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+mc.c.example. IN MX
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b4_wild.rpl b/tests/deckard/sets/resolver/val_nsec3_b4_wild.rpl
new file mode 100644
index 0000000..97e6e25
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b4_wild.rpl
@@ -0,0 +1,174 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.4 wildcard expansion.
+
+; 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN MX
+SECTION ANSWER
+a.z.w.example. MX 1 ai.example.
+a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== )
+SECTION AUTHORITY
+;; NSEC3 RR that covers the "next closer" name (z.w.example)
+;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+
+SECTION ADDITIONAL
+ai.example. A 192.0.2.9
+ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== )
+ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9
+ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== )
+ENTRY_END
+
+; catch glue queries
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN A
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN AAAA
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.z.w.example. IN MX
+ENTRY_END
+
+; recursion happens here.
+; answer has no AD since NSEC3 has optout
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN MX
+SECTION ANSWER
+a.z.w.example. MX 1 ai.example.
+a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== )
+; SECTION AUTHORITY
+; q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+; q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+; SECTION ADDITIONAL
+; ai.example. A 192.0.2.9
+; ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== )
+; ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9
+; ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== )
+ENTRY_END
+
+; check for cached answer
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.z.w.example. IN MX
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN MX
+SECTION ANSWER
+a.z.w.example. MX 1 ai.example.
+a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== )
+; SECTION AUTHORITY
+; q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+; q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+; SECTION ADDITIONAL
+; ai.example. A 192.0.2.9
+; ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== )
+; ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9
+; ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== )
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata.rpl b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata.rpl
new file mode 100644
index 0000000..ca0242a
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata.rpl
@@ -0,0 +1,155 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata.
+
+; 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
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that matches the closest encloser (w.example)
+;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi )
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== )
+
+;; NSEC3 RR that covers the "next closer" name (z.w.example)
+;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+
+;; NSEC3 RR that matches a wildcard at the closest encloser.
+;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG )
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+; catch glue queries
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN A
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN AAAA
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.z.w.example. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+; AD is missed due to optout
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi )
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG )
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_noce.rpl b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_noce.rpl
new file mode 100644
index 0000000..fdcfd63
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_noce.rpl
@@ -0,0 +1,165 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without ce.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that matches the closest encloser (w.example)
+;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h
+;k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi )
+;k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== )
+
+;; NSEC3 RR that covers the "next closer" name (z.w.example)
+;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+
+;; NSEC3 RR that matches a wildcard at the closest encloser.
+;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG )
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+; catch glue queries
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN A
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN AAAA
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.z.w.example. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nonc.rpl b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nonc.rpl
new file mode 100644
index 0000000..5a2418d
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nonc.rpl
@@ -0,0 +1,165 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without nc.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that matches the closest encloser (w.example)
+;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi )
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== )
+
+;; NSEC3 RR that covers the "next closer" name (z.w.example)
+;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03
+;q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+;q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+
+;; NSEC3 RR that matches a wildcard at the closest encloser.
+;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG )
+r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+; catch glue queries
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN A
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN AAAA
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.z.w.example. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+;MATCH all
+;do not compare authority
+MATCH opcode qname flags rcode question answer additional
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nowc.rpl b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nowc.rpl
new file mode 100644
index 0000000..c79569a
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_b5_wcnodata_nowc.rpl
@@ -0,0 +1,165 @@
+; config options
+;server:
+ trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
+ val-override-date: "20120420235959"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without wc.
+
+; 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
+example. IN A
+SECTION AUTHORITY
+example. IN NS ns1.example.
+; leave out to make unbound take ns1
+;example. IN NS ns2.example.
+SECTION ADDITIONAL
+ns1.example. IN A 192.0.2.1
+; leave out to make unbound take ns1
+;ns2.example. IN A 192.0.2.2
+ENTRY_END
+RANGE_END
+
+; ns1.example.
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+ns1.example. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR REFUSED
+SECTION QUESTION
+example. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example. IN DNSKEY
+SECTION ANSWER
+example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= )
+example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )
+example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== )
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 )
+example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== )
+
+;; NSEC3 RR that matches the closest encloser (w.example)
+;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi )
+k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== )
+
+;; NSEC3 RR that covers the "next closer" name (z.w.example)
+;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG )
+q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== )
+
+;; NSEC3 RR that matches a wildcard at the closest encloser.
+;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en
+;r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG )
+;r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== )
+
+SECTION ADDITIONAL
+ENTRY_END
+
+; catch glue queries
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN A
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+ns2.example. IN AAAA
+SECTION ANSWER
+; nothing to make sure the ns1 server is used for queries.
+ENTRY_END
+
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+a.z.w.example. IN AAAA
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+; insecure! not bogus! (due to optout)
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+a.z.w.example. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example. 3600 IN SOA ns1.example. bugs.x.w.example. 1 3600 300 3600000 3600
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_cnametocnamewctoposwc.rpl b/tests/deckard/sets/resolver/val_nsec3_cnametocnamewctoposwc.rpl
new file mode 100644
index 0000000..3fb25d7
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_cnametocnamewctoposwc.rpl
@@ -0,0 +1,242 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b"
+ val-override-date: "20121116123249"
+; target-fetch-policy: "0 0 0 0 0"
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with a regular cname to wildcard cname to wildcard response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+start.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+start.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. 120 IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 8 AwEAAdWzfjQD2bfQuoQGNYuS0ByosBxiTkoKcy9kMoWOQ/jx9rvTRhHImWxTxFtIyZOoRgn6E6mE71e5Y1q1nuyH544Em+4rNRMMW4bzecQmMmPk+B97MqW9aW6e4BwiCTt52IGfL++5GORYcaITw9UOlQLYH1oHHUNUC6ebHENofLTj ;{id = 64050 (zsk), size = 1024b}
+example.com. 3600 IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b ;{id = 46426 (ksk), size = 1024b}
+example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20121126123249 20121029123249 46426 example.com. pisNb/A40XDEiMpcYtxc+yO6osISyfpqz+0UZ61pd70+TLXMF197zr9SqOVJHyRI6G2lSnFggxYrZDpxLbxOW0RY/KfjD3xlI14M/2DieJ1NdlQuYFGgTwxcoINUJ/wRd4YUxkF4JS0D4NBdQ0yQYR0KqDr84oyhnULEHX6WB7s=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+start.example.com. IN A
+SECTION ANSWER
+start.example.com. 3600 IN CNAME x.y.z.wc.example.com.
+start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. LHpx5n++Z0Jgjjalac+e7wdYSbfurqSDpLRAOI1PybTJkwrMvgDKfp0ycT4HwsLVy7spumZ/Ahg/5II9pai7jCiqv1Iyh6fx19ZVeClTFMOLotCK8xMHACYJIY39BhTwD2D3r9BxbK+RopUlXypwV02yzdY2xEnPCBJVDUn5d0g=
+x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com.
+x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ=
+x.y.z.end.example.com. 3600 IN A 1.2.3.5
+x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo=
+SECTION AUTHORITY
+; H(z.wc.example.com.) = isn85psesctb6afn2q105mv966tqqepi.
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg=
+; H(z.end.example.com.) = a62608t4becqb6233m87ar7a3648rj3b.
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ=
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+x.y.z.wc.example.com. IN A
+SECTION ANSWER
+x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com.
+x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ=
+x.y.z.end.example.com. 3600 IN A 1.2.3.5
+x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo=
+SECTION AUTHORITY
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg=
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ=
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+x.y.z.end.example.com. IN A
+SECTION ANSWER
+x.y.z.end.example.com. 3600 IN A 1.2.3.5
+x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo=
+SECTION AUTHORITY
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ=
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk=
+ENTRY_END
+RANGE_END
+
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+start.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+start.example.com. IN A
+SECTION ANSWER
+start.example.com. 3600 IN CNAME x.y.z.wc.example.com.
+start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. LHpx5n++Z0Jgjjalac+e7wdYSbfurqSDpLRAOI1PybTJkwrMvgDKfp0ycT4HwsLVy7spumZ/Ahg/5II9pai7jCiqv1Iyh6fx19ZVeClTFMOLotCK8xMHACYJIY39BhTwD2D3r9BxbK+RopUlXypwV02yzdY2xEnPCBJVDUn5d0g=
+x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com.
+x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ=
+x.y.z.end.example.com. 3600 IN A 1.2.3.5
+x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo=
+SECTION AUTHORITY
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg=
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ=
+;example.com. 3600 IN NS ns.example.com.
+;example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk=
+ENTRY_END
+
+; check for cached answer
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+start.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode qname flags rcode question answer authority
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+start.example.com. IN A
+SECTION ANSWER
+start.example.com. 3600 IN CNAME x.y.z.wc.example.com.
+start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. LHpx5n++Z0Jgjjalac+e7wdYSbfurqSDpLRAOI1PybTJkwrMvgDKfp0ycT4HwsLVy7spumZ/Ahg/5II9pai7jCiqv1Iyh6fx19ZVeClTFMOLotCK8xMHACYJIY39BhTwD2D3r9BxbK+RopUlXypwV02yzdY2xEnPCBJVDUn5d0g=
+x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com.
+x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ=
+x.y.z.end.example.com. 3600 IN A 1.2.3.5
+x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo=
+SECTION AUTHORITY
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG
+isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg=
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG
+a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ=
+;example.com. 3600 IN NS ns.example.com.
+;example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U=
+SECTION ADDITIONAL
+;ns.example.com. 3600 IN A 1.2.3.4
+;ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk=
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_entnodata_optout_badopt.rpl b/tests/deckard/sets/resolver/val_nsec3_entnodata_optout_badopt.rpl
new file mode 100644
index 0000000..559e383
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_entnodata_optout_badopt.rpl
@@ -0,0 +1,199 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with NSEC3 response for NODATA ENT with optout.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854}
+
+; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ent.example.com. IN DS
+SECTION AUTHORITY
+; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg.
+; OPTOUT
+b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG
+b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78=
+
+; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag.
+; the span does not have OPTOUT
+2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag
+2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AAaGjBrmbElksOWsOAU0vdNwbRKsbsQgOwhFkONaynSk9M+2QpJQ6+k=
+ENTRY_END
+
+; refer to server one down
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+ent.example.com. IN A
+SECTION AUTHORITY
+; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg.
+; OPTOUT
+b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG
+b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78=
+
+; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag.
+; the span does not have OPTOUT
+2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag
+2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AAaGjBrmbElksOWsOAU0vdNwbRKsbsQgOwhFkONaynSk9M+2QpJQ6+k=
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ent.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+ent.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_nods_badsig.rpl b/tests/deckard/sets/resolver/val_nsec3_nods_badsig.rpl
new file mode 100644
index 0000000..28cc7cb
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_nods_badsig.rpl
@@ -0,0 +1,238 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with NSEC3 with no DS referral with bad signature.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854}
+
+; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854}
+
+ENTRY_END
+
+; refer to server one down
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+; proof that there is no DS here.
+;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854}
+; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG
+; bad signature:
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20010926135752 20010829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854}
+;8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.10
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+; proof that there is no DS here.
+;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854}
+; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG
+; bad signature
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20010926135752 20010829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854}
+;8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR REFUSED
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+ENTRY_END
+
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_nods_soa.rpl b/tests/deckard/sets/resolver/val_nsec3_nods_soa.rpl
new file mode 100644
index 0000000..7086177
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_nods_soa.rpl
@@ -0,0 +1,254 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with NSEC3 with no DS referral abuse of apex.
+; abusing subzone apex NSEC3.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854}
+
+; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG
+s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+; proof that there is no DS here.
+;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854}
+; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS SOA DNSKEY RRSIG
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC4CFQCeKcyw76yvOvfa2+qtxv8bKcEyJwIVAJBeIGST4Y8Tk8YkQI0suee3Bxb1 ;{id = 2854}
+ENTRY_END
+
+; refer to server one down
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+; proof that there is no DS here.
+;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854}
+; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS SOA DNSKEY RRSIG
+8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC4CFQCeKcyw76yvOvfa2+qtxv8bKcEyJwIVAJBeIGST4Y8Tk8YkQI0suee3Bxb1 ;{id = 2854}
+
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.10
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.sub.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR REFUSED
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854}
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_noopt_ref.rpl b/tests/deckard/sets/resolver/val_nsec3_noopt_ref.rpl
new file mode 100644
index 0000000..37e67ee
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_noopt_ref.rpl
@@ -0,0 +1,230 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160308103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN NSEC3 referral to unsigned subzone, no optout.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA SERVFAIL
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+; sub.example.com. -> po0bgjsa0o6vivtr1pvp9ra8s54qpnsb.
+PO0BGJSA0O6VIVTR1PVP9RA8S54QPNSB.example.com. 18000 IN NSEC3 1 0 10 A7AD1394BEB94E45 CO0J7N2E081RL10GCBQ31EDR3OE33LNC NS
+PO0BGJSA0O6VIVTR1PVP9RA8S54QPNSB.example.com. 18000 IN RRSIG NSEC3 10 3 18000 20251231235959 20160308093040 2843 example.com. WepNJEmwXlC107N7E4G0qpUYBVLjLGcYSqJtFFyWU0n8wS9Mw6eH4IZY esAjOdkezqjwpDQny/z9GuTMtpKdIZvzEa8mHn9I/Bv6Gq2U9Yc5w0z8 jqRMi/0Rvy4IAAQoHZOntfcfx4ZRVd/55VeQaJevM2DQLaP6Z4e/rhPs cRs=
+ENTRY_END
+
+; refer to server one down
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+; no DS here.
+; sub.example.com. 3600 IN DS 38364 7 1 66DC14443014B2727261B50B447170DE18CF43A9
+; sub.example.com. 3600 IN DS 38364 7 2 719A6680950A624D2C71A67981A7AF884C23E3C21074FF1CF8FB7EFE 20C52F97
+; sub.example.com. 3600 IN RRSIG DS 10 3 3600 20251231235959 20160308101119 2843 example.com. nAH1Nc1yq6EfzKLq48mLOEo2ocQrxkDFVAYIl+7ZMQJ1ZXHSmwePVH+m MAxdJ8xMl9BV/EcScn3vgSG+GfKfpl6txCS59Hxc30k27x6ac/6vL+ll YS99nEZMkc9JpBk3gziLj6hH8qv0G84264lNWAP2XGv1jO/AYrXL6wti Lxg=
+; sub.example.com. -> po0bgjsa0o6vivtr1pvp9ra8s54qpnsb.
+PO0BGJSA0O6VIVTR1PVP9RA8S54QPNSB.example.com. 18000 IN NSEC3 1 0 10 A7AD1394BEB94E45 CO0J7N2E081RL10GCBQ31EDR3OE33LNC NS
+PO0BGJSA0O6VIVTR1PVP9RA8S54QPNSB.example.com. 18000 IN RRSIG NSEC3 10 3 18000 20251231235959 20160308093040 2843 example.com. WepNJEmwXlC107N7E4G0qpUYBVLjLGcYSqJtFFyWU0n8wS9Mw6eH4IZY esAjOdkezqjwpDQny/z9GuTMtpKdIZvzEa8mHn9I/Bv6Gq2U9Yc5w0z8 jqRMi/0Rvy4IAAQoHZOntfcfx4ZRVd/55VeQaJevM2DQLaP6Z4e/rhPs cRs=
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.10
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.sub.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 7 AwEAAfXXu2eDy9QsjLuHgEMWmG03TVauwmITCq520ANujsTZlPKyQKJe xyrYm61e0RuQJb5dB5JnE0O3YYJOpnrl8keieAqVt1efnNtcn8V1em48 et146ZYFAUb/PMdTOgd2XJnhVEWD3VsZbWNMCxP1KcJTATAaLDVCY//E sc9K3CvGUizNcSoTK2rGS73A6GqmvVNnGir6AQIZifkvb6PKzF/hVpS8 cgvKF/UP8hu+0Glbq1YYTFrXMUBzKUH+X19lRvk3eLHurSvGjDEM3ZO6 tp1QdpzIRPzYKENG+qs07dhgCZyb4zqwEycmL9/Vot0ByTGbeHvHN93P PrLxcM5zlVk=
+sub.example.com. 3600 IN DNSKEY 257 3 7 AwEAAfTD+gzZ2g7c9VoOUR2ekQiPNEyqcyl0MZ4sD3bleU8D8hQdDgAI 1G38raY3xmNea8yLCQYF0x00QbmKtzMjpZqKfsCFZDX6lBV5dP8IwJ0D F6L4hjO819IInf6upH9tfQNnueflWyKzfg2zitV+ILZ4YtZViyCKqayw CSPE8OkFlszZyCESzhrXqoPdJ0oHdZCG4lOlRIgZfrMLC4yTI56iiwFc UsKy7BhNPW+hcc4r+0WB9BCpsiei/FjPMcyeMrx1W+s/xgW7/55Nq+dM PUn9v24uCptZUupn/7CRgMGM5DmWe94QIswAQjH2mXNfOgVPOiceLYzU mcNoKudvSUu1hbzJbVHA4UNWDm2vvsdsEzrOEzqO0ZVczLoZzWU4WpLf IlKm481OKkzAP9Y5F4iTTSIrbVcAuEW/iz5zfqWirgGniiTCszAie8lH u1EPBgGnfotqhq9IbNA6aKNUreJPLvJnds7J/aQmiSdm15pAq71B26X5 BmoZVhbNmh6MHXkq99EIt0yRMEOfPLRN7euza8Idd4mA+E8jpdgtYdJD LC7f2SoQxaN4RMr5MC/Z1ENQgLMYRkd87pEQycAlNAoWMPJMuoDNdwhV 15F8+pvkvfu5cm9FoEWvgS+onibUM9EC9L9EDdfDdW1Hf1QfUinVoMf/ Szf1urkPVNl0nNYF
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308100552 27527 sub.example.com. yUIM3oBl8hkj8/NkHw79wpS0EHWTNA+tW8qDv3IhzpRXWQ78QjRvcLt/ PkoUpaVXydM4xwf61oy0C9nNhakiaTw99icmqbIRfOL4ZQAIEtyzKrP4 Dww/ySI8YJx5ebbEALueAOTQQG4VHk3hEfLlFgUOje01y8usi2QjiX84 uSLfW3DtHODNPWuumTBKrysWC8rs2jiXuDTcViP6IGZnZ1X4E9F8m3J6 gv7kOgqUJp9PRuwSQUuWBk2drl8psZzWuk99g/dnN1SY8B3iBc2DE4/S CHUYrHfdp5YjuKsSg8HTmPS83aks/TeKAogRZ5bEUyxO5VHMnywZUZtl YLuyJg==
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308100552 38364 sub.example.com. ewivalJKy9ahD0p0ca871A3rM302OafX1qYe6K9CjBTvFFWl3JR+tEIY idHyVBwANAS4W2LxP2jrweQ3POL9+I/a3EvadWYnaVGrSHuQr42yPL44 jPO1SBkbTKCTHTlNDgllIaOiszkjZNwE9vTiKxz+5s1kVXnGHPGQfNts LVhFgWZmcZ9AlDbieAOjS2F/P7YWp3NG8lLR3v+JWaD1S+TgClwAFWAl kEOBQ0xltRQ7MFZ92cWudJ24FnYlBEpy51XmfYx3ExmCXpGF2vKYoLGR 76CvsC5anrsaYY1znfACrdt2tYvkEE+TwYuO6/Rm1Ay+whI5wzFWpWf2 xTysJEDcx6TK5rm9PpAiPcdbahhEZPyIm8SIbHSXs9X70wqNpZwtrez5 46F2lefZZ6z9q9+o9hicTXGgPz/nITQ693nbphAl/B713kXVhgeBIcX+ ZqjFnXYQBwliU6ae22hWsFl3l+lN0S7o0w2uzMZiChA0VP3H7LKSO1e2 G17Z1bfVfMZoM2hhLOJuWozLorPJR81DrIAO1JpIKGSxP6clBIE6lhjk hvRjQAmxt/rLsebhVNpXNAEkWwxM4OatK5d5zv2HlvL9QA8Nm4NlZ9Fu pKqoRKijUr1ny4O4nwb3aQVxwCP2+MHuH7XQOtpEFxWeoDPFbu9WIunb dONPnl9ZB8Y=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308100552 27527 sub.example.com. h6RhBN/xWlVYrQVt0TNbFd2/6bvQx9oAYJFyKvzZZbcEbd2giEud1gcW B05TZDwK5p36GcyoGdA6DB9kEGFNqH44OqTsUqtOmqysFw2nsAHXGBId UetoOxT1JOvJlqd7qwC1cBhDmlRB+1u83PBCJyjb2nJ4HwEDSAf/5SRN DQJQmGTGD4FIb9ixHOH2Y3f6U2YaDz35RpJSko2j65erEcOH65dXsAiU OkKNh7g3esbQCGNnY85RyhCPGSFJ4MxLsIa+ZqTY9tvtKL0mDSrqd/51 bhNcKa2Dl99cDOwH3kXFqO+L+DdTXU5WbRxRe74SFzoum/lnyQhcrKN5 029iOA==
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 1.2.3.123
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_optout_ad.rpl b/tests/deckard/sets/resolver/val_nsec3_optout_ad.rpl
new file mode 100644
index 0000000..6e1ba90
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_optout_ad.rpl
@@ -0,0 +1,361 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. DS 57024 7 1 46d134be319b2cc910b9938f1cb25dc41abb27bf"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+ query-minimization: off
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with optout NSEC3 response that gets no AD.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20070926134150 20070829134150 57024 example.com. fIE3H2v3wAm3GPajsdgJn+A8R4Cp7dMXf1PSUQ8BfklzMBMJjpc0oM/S7u/HVLYQs1jx8CMdw2TZEpIPfo6Rl0TekDqNtVk6IBw1H+zxDFwf3v7UdOjm8s6FfoEJcZ5yEFV/Lps82NzHCR9uqprhv6ddQdAeVNA5QHis1c5Y1P0= ;{id = 57024}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. b0iX5vuTqngB5F0ORFrFLx8sAeTHGJVcPpD34iNFY71ZoFnHrHfAMWC3RAWz+nQ1NmH1oDdA8NTYN/aQQNzwEz4VmVYA2PANBSiwSY3q3gp9PWZU6CfRNf2dU/210H0y35FroQpADszmwC+Hlbcvll+bQj3fSyT2W/69kRVssj4= ;{id = 57024}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 257 3 7 AwEAAbvre/wK/WVeoj0SiwVkTD+NefvHPru9YIqLWY0m+0E5NYOpJZdc+PGQQYRzFNOlugVZtFirmv5Lmz7GNiASXtG/IFi//SlE30DxEKQOjt2F6qSZTZ1nZ5XOIMGTwWyp4OoI0egk5JavC5mQbyXqcj82ywt6F5Z3CmnThVl6MtOv ;{id = 57024 (ksk), size = 1024b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20070926134150 20070829134150 57024 example.com. lqOo8W7UffLZIKBoIJg8OAPkmCWptnstiLIg1bAtzuEZDZFr2KNZGv+5k6hbRJKYnZRLReY4v8G9Eg0GCC/44gLm8BZlnh/4jLOjMH9MKusFV/jNqz/HABITYn1pBwvVak7lzqN+bmL0KMyWf1MzPWilx4fM9YWinsQFILVLPL0= ;{id = 57024}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20070926134150 20070829134150 57024 example.com. fIE3H2v3wAm3GPajsdgJn+A8R4Cp7dMXf1PSUQ8BfklzMBMJjpc0oM/S7u/HVLYQs1jx8CMdw2TZEpIPfo6Rl0TekDqNtVk6IBw1H+zxDFwf3v7UdOjm8s6FfoEJcZ5yEFV/Lps82NzHCR9uqprhv6ddQdAeVNA5QHis1c5Y1P0= ;{id = 57024}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. b0iX5vuTqngB5F0ORFrFLx8sAeTHGJVcPpD34iNFY71ZoFnHrHfAMWC3RAWz+nQ1NmH1oDdA8NTYN/aQQNzwEz4VmVYA2PANBSiwSY3q3gp9PWZU6CfRNf2dU/210H0y35FroQpADszmwC+Hlbcvll+bQj3fSyT2W/69kRVssj4= ;{id = 57024}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+
+; optout
+; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk.
+; sub.example.com. -> kg19n32806c832kijdnglq8p9m2r5mdj.
+; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub.
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG
+
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+
+; optout
+; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk.
+; sub.example.com. -> kg19n32806c832kijdnglq8p9m2r5mdj.
+; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub.
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG
+
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NXDOMAIN
+SECTION QUESTION
+rub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+
+; optout
+; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk.
+; rub.example.com. -> c2bqk3tb4foaenfbp1v0pdk6mor3r7vo.
+; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub.
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. NSEC3 1 1 0 - f2bqk3tb4foaenfbp1v0pdk6mor3r7vo NS RRSIG
+
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jk6EYU9qTrmNeeKuQRG7iKyfNJnBt45MToPVpAQ+LoGDC3muy4bkWeKspj68cN9E5wNijfmm1eFK3khSSEnM50mfJbpiwlbKgL0VZz33Zn+Wu8b7sTtdDwDH7MUBLRwHeb7W+NtQIEXPLs4Z3BXHzAXy5ZpSjQ3PJZn6zBx4/dw= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+; wildcard expansion
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.wild.example.com. IN A
+SECTION ANSWER
+; *.wild.example.com. IN A 77.88.99.0
+a.wild.example.com. IN A 77.88.99.0
+a.wild.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. GWV6cQprrpAsaYla5z7N9tppdb+X0ZjOsiWBuBueSACHU8CzsYPMbwKUZlTNbQ4mSVRRDa0rM1niYoZF9oqyAfbn5HBLi62TRjrBLHfvatDgSiZCa4mauUfzUS+U7FfUXikNIigG0aN0xdpJ//urmecjNSKg2aW4M0DYsm7keMI= ;{id = 57024}
+SECTION AUTHORITY
+; a.wild.example.com -> ad1535hlgg914unuuaei9jfh4ofr44uo. covered by optout
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024}
+; for wild.example.com the closest encloser
+; wild.example.com -> 8aeigskl5tmraedgji7v1lqbmqs8qv7u.
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.wild.example.com. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+; wildcard no data
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+; wild.example.com -> 8aeigskl5tmraedgji7v1lqbmqs8qv7u.
+; *.wild.example.com. -> nvec78au1hpuma9eebeji5n06eq33gbk.
+; the NSEC3 for the wildcard *.wild.example.com. , with optout, A RRSIG
+nvec78au1hpuma9eebeji5n06eq33gbk.example.com. IN NSEC3 1 1 0 - ovec78au1hpuma9eebeji5n06eq33gbk A RRSIG
+nvec78au1hpuma9eebeji5n06eq33gbk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jE+b5p+stQumm+tLZdaBT+KBpwYI7wRXijRHWcqiUp2SY1uV7HxBdW8aedVTqpFe8kYbMUgI3pCOAitmiI9R6SJg3q7022QOb9y+0/xSmIDqxATVPTJbkzVBInfWrulRtn7o3HmOyoIc9/w7NnNxFYpwtFL08jTBRr8XRTWDM7Q= ;{id = 57024}
+; NSEC3 for the closest encloser, wild.example.com. (an empty nonterminal)
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024}
+; a.wild.example.com -> ad1535hlgg914unuuaei9jfh4ofr44uo. covered by optout
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024}
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN MX
+ENTRY_END
+
+; recursion happens here.
+; no AD flag on this because an optout NSEC3 is used.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+sub.example.com. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN DS
+ENTRY_END
+
+; recursion happens here.
+; no AD flag here because of RFC5155 9.2 section.
+; even though we are sure there is no DS, this is what the RFC says.
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG
+jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+rub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+; no AD flag here because of RFC5155 9.2 section.
+; also for NXDOMAIN
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NXDOMAIN
+SECTION QUESTION
+rub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM
+onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024}
+22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. NSEC3 1 1 0 - f2bqk3tb4foaenfbp1v0pdk6mor3r7vo NS RRSIG
+22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jk6EYU9qTrmNeeKuQRG7iKyfNJnBt45MToPVpAQ+LoGDC3muy4bkWeKspj68cN9E5wNijfmm1eFK3khSSEnM50mfJbpiwlbKgL0VZz33Zn+Wu8b7sTtdDwDH7MUBLRwHeb7W+NtQIEXPLs4Z3BXHzAXy5ZpSjQ3PJZn6zBx4/dw= ;{id = 57024}
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.wild.example.com. IN A
+ENTRY_END
+
+; query is a wildcard expansion, covered by optout.
+; hence it is without AD flag (even though we are sure this wildcard exists,
+; we are not sure that there is no delegation covered by the optout span
+; with the name a.wild.example.com).
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.wild.example.com. IN A
+SECTION ANSWER
+a.wild.example.com. IN A 77.88.99.0
+a.wild.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. GWV6cQprrpAsaYla5z7N9tppdb+X0ZjOsiWBuBueSACHU8CzsYPMbwKUZlTNbQ4mSVRRDa0rM1niYoZF9oqyAfbn5HBLi62TRjrBLHfvatDgSiZCa4mauUfzUS+U7FfUXikNIigG0aN0xdpJ//urmecjNSKg2aW4M0DYsm7keMI= ;{id = 57024}
+SECTION AUTHORITY
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024}
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024}
+ENTRY_END
+
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.wild.example.com. IN MX
+ENTRY_END
+
+; nodata wildcard expansion, we are sure that the wildcard does not have
+; the data that is requested, but there an optout flag set on the wildcard
+; expansion denial, thus we are not sure of a.wild.example.com delegation
+; under the optout.
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+a.wild.example.com. IN MX
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400
+example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024}
+nvec78au1hpuma9eebeji5n06eq33gbk.example.com. IN NSEC3 1 1 0 - ovec78au1hpuma9eebeji5n06eq33gbk A RRSIG
+nvec78au1hpuma9eebeji5n06eq33gbk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jE+b5p+stQumm+tLZdaBT+KBpwYI7wRXijRHWcqiUp2SY1uV7HxBdW8aedVTqpFe8kYbMUgI3pCOAitmiI9R6SJg3q7022QOb9y+0/xSmIDqxATVPTJbkzVBInfWrulRtn7o3HmOyoIc9/w7NnNxFYpwtFL08jTBRr8XRTWDM7Q= ;{id = 57024}
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u
+8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024}
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG
+ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nsec3_optout_ns_ad.rpl b/tests/deckard/sets/resolver/val_nsec3_optout_ns_ad.rpl
new file mode 100644
index 0000000..f364d17
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_optout_ns_ad.rpl
@@ -0,0 +1,203 @@
+; config options
+ stub-addr: 193.0.14.129
+ trust-anchor: ". IN DS 49060 8 2 E7B1EB56D7D5791B3D45630FEAA9C823DB84B385ACEEAC5F44DD08885C36700F"
+ val-override-date: "20170807130000"
+ query-minimization: off
+ harden-glue: off
+CONFIG_END
+
+SCENARIO_BEGIN Test not setting AD bit for answer which contains proof of nonexistence of NS record using NSEC3 with opt-out
+
+RANGE_BEGIN 1 2
+ ADDRESS 193.0.14.129 ;k.root-servers.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+. IN SOA
+SECTION ANSWER
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS k.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170901125744 20170802125744 20661 . VDSzCYw6B8u9cLz5BJuzDtRfmc/iGmD3Vei9TPthggi2lwE4HJ6uxYPt HRuczjHOYJcBzJSL1vh/myUHZXysGiGtEASbKZyWnk0uGf//68sPyQLX +QbhvrjHHP17HOsH8ZaCQUvGD2q7yhTtiGlLPRRxUUA7TQ4e7HRMfzo7 R2g/U3mbzfvJctGrng08r2VPdFndE7H7deef9YJjQ32vJSaDzp0qVtwA q0RO6xfMcUHvAzxFVWkWqUkhbXoBv08xz9O182g2a7lCJlxKD1NbbJ9Y Ob4PFtvK9bL8PUlS3DK4GMsZ8XpTLX2lEUedulX4Jn0fHz5pYk2TEMF6 YuJAWA==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600000 IN DNSKEY 256 3 8 AwEAAe1oA46eOLNris1CtS0qM5TdMESK6i4hpalqa6JDv57eOUkaOeje ZW1tIFUokmaK7kuKEFEosddA89CYM8rt2RbC+sfKalbHAWOus0tXZyAL efb2sW95QRzyG6LNul0jQFn9eYWBUHrVe5Wqd0zrFCbTQLUhELSfrlkI UBpO/xKaGinRHX2JjyOnle4aPZY3bEVa/+KyY2ZU6UC4SBo3aHXanP26 ok91rOTmpTWp64ybsMdCXOU8deyuQFQf6q8DhIDmJrkymhX1MXWQQlE0 fAYIYf8/t9OCwucg8oEg4FPU8Gb4Zm/l6PgO4HFkFjBT6iGFCQt3qXe2 Qe3alUWoATc=
+. 3600000 IN DNSKEY 257 3 8 AwEAAb8sZgVVa02muJ+/+SVhJAvz2EWKGEGquhPbQXuF6ALBYoF4KWTO bZVF8sIVTGoaX5+UWkwwHthg7RwS1DALT/AJymYeHhUwA04gLsfCZ/cv BjmRy5RozeSJ1uxAhoCYHCT2hQBZ0cH0n8roXFXI2Y+6708pO1IBkTPT 9MpAGfezTtGYOortbSn+vqT/Zu8jOpNwkleXON4rlZRBZPd4JUMGL9Y5 N/j6+ClYeM+eFQTKXrLi1oC+0yK1sG5OlqrBDhAhBnz+IhfZz4TOkqJ9 Li2BVMatHBeB9GQHtu0FZuC3J0EQgiZxvq1RgkefFJAiB+5uVRN8U7up 5mLDxSgmT0M=
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170901125744 20170802125744 20661 . Oq/hUNG3VoToA2eT4gd32ALxOCXcR8TQwr+vSXEe6/hReGQdANdbyhFU stwNldw61ZD61MBUORY4YEmlpOsOAEpFB9pw2Me41GHdbtLCwcr5RTD4 6e/qBAdthoglLG53jObrp0nBJclLgoWfm4Rmn3DPIKcMoch/W5MmdWGj 7bC4xChMBWDYLPaqYm5PWgpMdHl60Sq9H/dkkWBvRuqPrN2ATBCoHjUE 6UGZM60AZPRuhqHogqvSiNEEEweqN7KK60dQy65dIMFh0iUCaw2/HDB5 NS30lMqxdJY6xAX1uNMIf6UhdFYFBqHClRUqJcOA7IqskkKel6ZC8Rpg 3qruFg==
+. 2592000 IN RRSIG DNSKEY 8 0 3600000 20170901125744 20170802125744 49060 . eYrzIaVlmMtByHu35+Fu1yUlRkfwZLEPQXspIq7dZzL06H8gBz11/FBE YAvpgYrACeLmEuj3NrWp+2odPrWo23usyvbDiUC1U242trYa4F5qUBKt JtXiHVwMhu+Xg4D5JAXU27itt0XHIKyOAZx6ifuZUvYTvfEtgPm+2Bal uenCi7/ZsBLpOOvB+Wjr+xpxMJILIABvfdgPWCCRh5JiYdhhldJCTA6J MQ5yUlf57OvFOQdnUP6xz+FjTAJWPO2rlc47sRaucKr1i/cQzLaqT2ui +zlunVo7lFq2zNZPRz7zRktO1iDp2Bz7rX+o4DTFVk2gxbcF2x3VAckM +dIgWw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR RD AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+SECTION ANSWER
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NXDOMAIN
+SECTION QUESTION
+li. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+ca5qlot3gsobijfasusg7dvc5kdtgp4e. 86400 IN NSEC3 1 1 10 AE83CC9CD22A4A92 QVMFNLQ9AOEGUQEMOCFD5HGN8L8VAPHO NS SOA RRSIG DNSKEY NSEC3PARAM
+ca5qlot3gsobijfasusg7dvc5kdtgp4e. 86400 IN RRSIG NSEC3 8 1 86400 20170901125744 20170802125744 20661 . TLye07FnnjtPSZ0pUMJ4OToH9evHpuj7Yb6ktj1W1bDLqxYcmbTc1jZu IWe4wn/pLz5/78sigR+KKkP6L/Ki0ZVG8fcmR546Jp4o0+fGVkAqbRyc /kckl4QsHqR4UiMrIDhc/MQHnaje/bNrGka+7pQOnvmRyUo0jSHuVfFI LdKMZpk5seTZKI0k/WgmrDYuFii4HqT8+RB9/uoFVPlSSI/rYJ2G4Wgt t81732pO5Kqcwp7DFKvkkj7yU84zlDXtT7RuF21OCACAUseiCX/GOTGf 8OvZp8Rdfs1wT5LjjWl5Gb23Arr9o4soGsyEbXeaoyw7OVYZzXlEko1l yBm5+g==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+net. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+22n8oi3qtiud0dier2bbl2ktforlp60c. 86400 IN NSEC3 1 1 10 AE83CC9CD22A4A92 8HBQQS31TETVRFABEIIF3K7LHPOL93GD
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+22n8oi3qtiud0dier2bbl2ktforlp60c. 86400 IN RRSIG NSEC3 8 1 86400 20170901125744 20170802125744 20661 . K4bXakkrwj5gxNs4JzI/vEjHAKIyT5uYmh56g1pN8r/fOpiarYqtCAue 9oRIK7uk9p3R75n/HYZGfZnF8sfxPKOdTmFDhHtdNbQsqzAz1AOzk1bD 6US62xZQHApINFCHSLJzBch2V3o4/Vb2k5aQQp2mGe5HQzTvCn9JKgRY eRgfJbnN3acVtjT46ggIp7wqQAWNKNakaV2+ad9TgyoOO9/64IDF9Z4a oehlzT+iMHzDk9noOlf67Qvmx79x1pvUCRVA57VQpw0mNnDQCvVQ2Avq IJGiM4SQxyGyeSFqJpLTzboCl8uLy6DaSaeJvtAYIRj3x2kDrW9NfUL3 EQHBOg==
+
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+root-servers.net. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+22n8oi3qtiud0dier2bbl2ktforlp60c. 86400 IN NSEC3 1 1 10 AE83CC9CD22A4A92 8HBQQS31TETVRFABEIIF3K7LHPOL93GD
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+22n8oi3qtiud0dier2bbl2ktforlp60c. 86400 IN RRSIG NSEC3 8 1 86400 20170901125744 20170802125744 20661 . K4bXakkrwj5gxNs4JzI/vEjHAKIyT5uYmh56g1pN8r/fOpiarYqtCAue 9oRIK7uk9p3R75n/HYZGfZnF8sfxPKOdTmFDhHtdNbQsqzAz1AOzk1bD 6US62xZQHApINFCHSLJzBch2V3o4/Vb2k5aQQp2mGe5HQzTvCn9JKgRY eRgfJbnN3acVtjT46ggIp7wqQAWNKNakaV2+ad9TgyoOO9/64IDF9Z4a oehlzT+iMHzDk9noOlf67Qvmx79x1pvUCRVA57VQpw0mNnDQCvVQ2Avq IJGiM4SQxyGyeSFqJpLTzboCl8uLy6DaSaeJvtAYIRj3x2kDrW9NfUL3 EQHBOg==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+ns.net. IN A
+SECTION ANSWER
+ns.net. 600 IN A 1.1.1.1
+ns.net. 600 IN RRSIG A 8 2 600 20170901125744 20170802125744 20661 . Z0VIqlE9FUERy2IRsAQ5Nv8JYhr4Mn6kz29NyAaxVQqokEf3pF760PyA UEpSoBENsnWU+x/2XDSkdlyyJQbUpwZhLDAdXgLQUCg+E+1CFFj1A9Zg zCf0oZ6PsCKyTrHCshyHDQNe+iIWO8Qn3qwoAeytIc3ztSQTkP2s8Tys ZoG/+5dqaCICPOoiVVh7usl7WC8SZn4hVRnU64w+Wxziy3anROZ/pUq9 9DI+7+zb2vEteA0sM151akjAtekFiRuqzjgnBpUiH6j4hgGkoH5NCvkD HD37jMZg4D9jmE7O7X3puAuson2DURvjuoHtZRsLRypglRDmlaRThoff l0BmAw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+k.root-servers.net. IN A
+SECTION ANSWER
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 2592000 IN RRSIG A 8 3 3600000 20170901125744 20170802125744 20661 . s+A2gmeRqZMgJZsuv7hn8qeHk/DIpoH1ZC5resAX7yhZwCxcQM+mNJ7E Jy7qC9PYBrta7rdeNuDKYuHJBlFZECaV/HZ7+f3SBPEiW9DYUI3SnNOR qyBaJGvuTjoQTWU4FVGe2T/ybroq6HzSx0xKSSHyMQeQFxk9wI86npjF cWm19ddCCwJ2uOrJspZwN8jidDbR//G8ntolmU2RzLKDqInLLqoBs1VF SE5Dqzx9eg4boKmUM3IQIJkVQppyGuMSIDNTh1IbPxZrtMgsh3+o9rds ZcIe5A8TRumEaRrXyJiTXQ25kZkZ0ilPyxWrjFRhjfHFcNX+aFpvwhtH cU6BSw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NXDOMAIN
+SECTION QUESTION
+k.root-servers.net. IN AAAA
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+c27sd6l4gd20p5e9ttq5br5a4q7scnf7. 86400 IN NSEC3 1 1 10 AE83CC9CD22A4A92 CA5QLOT3GSOBIJFASUSG7DVC5KDTGP4E A RRSIG
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+c27sd6l4gd20p5e9ttq5br5a4q7scnf7. 86400 IN RRSIG NSEC3 8 1 86400 20170901125744 20170802125744 20661 . NN5tdEbFFwesLYRPUETJb3VNm+90RDAG2OmIvAIheZ8aD3rHp+n3WpWm xoQKDjYBLN49jLBz6zutZVdk5xJ4xfeuyKpckwn3L/sz0ej7XTTZrlpP yvatidBHR7MAwqUiGBLWOLtU2xt+DpIp5GLDLVlQs/pE/kfO/0WF7xZB 8Cf9QFl+eGSAOcsKK5aS0evT4PCM/YMpdzVcUhbS13apzEtyroAghpoy gOx6rNc3svzYYpRpt7Is9qlAY+d7EiFUCv0hnx7MwqkGuRqZFonA4dzt D5ds/+VwPvbo5o1TPQ74ZrToiD9Lkv/x/+qRYR3z1iKaXrUWEh5kLTpb UzSJ8A==
+
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA AD NOERROR
+SECTION QUESTION
+. IN NSEC3PARAM
+SECTION ANSWER
+. 0 IN NSEC3PARAM 1 0 10 AE83CC9CD22A4A92
+. 0 IN RRSIG NSEC3PARAM 8 0 0 20170901125744 20170802125744 20661 . A11gI2rfHcW4SLbUVRCc2sg9wtgzICywN1hQNTyI2Un880S7PKiVzjEW woCBfSK/t1hMTtGOxSnkSGT7OILY200HZo3fJ9xEhXoeamdrtV2Ht7y2 GIO+MQ9B6y95y/N6PGNTDQIY7LC4D6JNeiSDg1j6joEiQ2LV4vwmYGQt Dl6N+Qx6S2ZSCiXCL4Gg1wvSGQK4DyDGDjYQd9KHsFnHjL6sqwHS5G09 s0JHvigAuYR0sG9/mqb0t+JyKXazpUS/MeaMYIIQnmQqDh37IZSDEPy9 IMbNd8x6El+DtCjC5TQGfDE1iCBr8NTxgkIM5zGLxl5pLzo5H4Z5QYZ2 TUy7DA==
+
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 1 2
+ ADDRESS 1.1.1.1 ;ns.net
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA NOERROR
+SECTION QUESTION
+li. IN SOA
+SECTION ANSWER
+li. 86400 IN SOA ns.net. hostmaster.example.com. 1234 1800 900 604800 86400
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA NOERROR
+SECTION QUESTION
+li. IN NS
+SECTION ANSWER
+li. IN NS ns.net
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD AA NOERROR
+SECTION QUESTION
+ns.net. IN A
+SECTION ANSWER
+ns.net. 86400 IN A 1.1.1.1
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD AD DO
+SECTION QUESTION
+li. IN NS
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NXDOMAIN ; AD flag is not set
+SECTION QUESTION
+li. IN NS
+SECTION ANSWER
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017030902 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170901125744 20170802125744 20661 . uhdJY+sNwlQSb8TtF3WffXadfjNp3/XguyeJ7FKF1Rxr7WPG2asG70U+ Ltj1GFZkpcS+75ifMTJ7Ykc082KSRyh1pmMKQSiY9lPdiOX6muq+kBdX h6jkwI+FrCcrBDzhrH6A4XMcTlNj3lBxrUI7lsQyw2I/nwzsTEiTI+1/ mK5zQKA/pnMepKr4CUSS78f/tT955wm3slms5laQSfxqrakPCSwkRtlM xrXPJnjc34MLVpiItgzuQqCrCb+Rak2QNAVkNKfkvBMxJDmRXoz5BTTQ 4huaJWeOFyvIomZwBseFBDSyS5QYCEfMLo0+R/xc/KjzfVuYG8J0dClM kjnMEw==
+ca5qlot3gsobijfasusg7dvc5kdtgp4e. 86400 IN NSEC3 1 1 10 AE83CC9CD22A4A92 QVMFNLQ9AOEGUQEMOCFD5HGN8L8VAPHO NS SOA RRSIG DNSKEY NSEC3PARAM
+ca5qlot3gsobijfasusg7dvc5kdtgp4e. 86400 IN RRSIG NSEC3 8 1 86400 20170901125744 20170802125744 20661 . TLye07FnnjtPSZ0pUMJ4OToH9evHpuj7Yb6ktj1W1bDLqxYcmbTc1jZu IWe4wn/pLz5/78sigR+KKkP6L/Ki0ZVG8fcmR546Jp4o0+fGVkAqbRyc /kckl4QsHqR4UiMrIDhc/MQHnaje/bNrGka+7pQOnvmRyUo0jSHuVfFI LdKMZpk5seTZKI0k/WgmrDYuFii4HqT8+RB9/uoFVPlSSI/rYJ2G4Wgt t81732pO5Kqcwp7DFKvkkj7yU84zlDXtT7RuF21OCACAUseiCX/GOTGf 8OvZp8Rdfs1wT5LjjWl5Gb23Arr9o4soGsyEbXeaoyw7OVYZzXlEko1l yBm5+g==
+ENTRY_END
+
+SCENARIO_END \ No newline at end of file
diff --git a/tests/deckard/sets/resolver/val_nsec3_optout_unsec_cache.rpl b/tests/deckard/sets/resolver/val_nsec3_optout_unsec_cache.rpl
new file mode 100644
index 0000000..6e2df9b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nsec3_optout_unsec_cache.rpl
@@ -0,0 +1,254 @@
+; config options
+ trust-anchor: ". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
+ val-override-date: "20160220000000"
+ stub-addr: 202.12.27.33 # M.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator NSEC3 B.3 referral to optout unsigned zone, cache timeout.
+
+; K.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 202.12.27.33
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20160227170000 20160217160000 54549 . Qtgnr2k192gjdx3bLZgzkvqoEhTE4LXfFcPtrGPKawn/78LX6M4LuCZh rSXYMJERXVDQcQbX88EYh8kN3ALgLKpGdyu8HJ6B0vZiDc8yMbn2TuA0 RDqEPTp5om1LbQ0nEWa5XnrTi1fJTNzhT6eBJlcmkJ1/jMfmPG9J4dKJ x/Q=
+SECTION ADDITIONAL
+M.ROOT-SERVERS.NET. IN A 202.12.27.33
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR RD RA AD
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 13943 IN DNSKEY 256 3 8 AwEAAbr/RV0stAWYbmKOldjShp4AOQGOyY3ATI1NUpP4X1qBs6lsXpc+1ABgv6zkg02IktjZrHnmD0HsElu3wqXMrT5KL1W7Spmg0Pou9WZ8QttdTKXwrVXrASsaGI2z/pLBSnK8EdzqUrTVxY4TEGZtxV519isM06CCMihxTn5cfFBF
+. 13943 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 13943 IN RRSIG DNSKEY 8 0 172800 20160224235959 20160210000000 19036 . Y2Ktm7gpEXcFg02ZlPNaRhO+GUPSvB2z8tsqe199vO9Rx7tIT/8F2A6OBjiyR6GqPGcPKaXADAt+QjmV174123QJ6UDrk2cPiGPXfEleDlJVtBV5oAVaBedeZxqnmw9WpVCIV6cY5wZbO8mYltA5oZMg8XInokVm6qGPA4wo2Miai5st/KhY+2Ke29StiXeVDdQ4p3e25dE4z1QW3ISxJ0zqvkTMHgQZZiP7IlfXKlCyyrd/Ddrxd22GWY53/oy9/Bry4K8naAw4m5+Q5tEf2zvtiAoaIbi2cM3Lf8AzQU25I6zaERJeQXhyA8cqn4WrbsAANn128Q+9Aibyiol9xg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+net. 172800 IN NS a.gtld-servers.net.
+net. 86400 IN DS 35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D8BD973EE
+net. 86400 IN RRSIG DS 8 1 86400 20160228050000 20160218040000 54549 . HXdj4gjShkf/LpyxcxthJyRJE/YAB+NHsbwkfoMJvcdJa6u6J0H4K55BSB5UdR6vFGtY5NHl8tnEQIUeHOrxqMzDoMLofs05So9CdphNhsOdR25sCXLAIAL6l9KfI0+oEFXrCNA2GpU1S6SjNmk0NPzslYBSjAVY8RkTNDJGwqE=
+SECTION ADDITIONAL
+a.gtld-servers.net. IN A 192.5.6.30
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+net. IN DNSKEY
+SECTION ANSWER
+net. 86400 IN DNSKEY 257 3 8 AQOYBnzqWXIEj6mlgXg4LWC0HP2n8eK8XqgHlmJ/69iuIHsa1TrHDG6TcOra/pyeGKwH0nKZhTmXSuUFGh9BCNiwVDuyyb6OBGy2Nte9Kr8NwWg4q+zhSoOf4D+gC9dEzg0yFdwT0DKEvmNPt0K4jbQDS4Yimb+uPKuF6yieWWrPYYCrv8C9KC8JMze2uT6NuWBfsl2fDUoV4l65qMww06D7n+p7RbdwWkAZ0fA63mXVXBZF6kpDtsYD7SUB9jhhfLQE/r85bvg3FaSs5Wi2BaqN06SzGWI1DHu7axthIOeHwg00zxlhTpoYCH0ldoQz+S65zWYi/fRJiyLSBb6JZOvn
+net. 86400 IN DNSKEY 256 3 8 AQPAQAy1b2gx5xTywO8c6kI7OGIMt8yhN1iAemwNkd67cv8CAqNuDi0M3uOIrsVofliQFwp5HgNeIHFWbf8KxUlueZ6Wol2LTe/LnK9QKrczPSHr+q+lEH0cCoe8Cwmuc9y3GwkxqFWGHPCsHLZyVMuvdr3cenc0fvk1dDL7Rg7AlQ==
+net. 86400 IN RRSIG DNSKEY 8 1 86400 20160301173857 20160215173357 35886 net. BHm4lkpvTReitAK4JpVCLStI+JBswb9OEEmdKCCiiGe8zt3aVb6A+b2YCaJcWSA/RRrzASaOWvW7Lb5gyqxV/quEdLgB+xrMlnVUUQclLsF4EvdPMRzm+i8fVK//uo3IPDp/uyzVwR8dRpbPuJud1Mhttt0JZTNg0KqJZQEbq0odNdVWGln6PrvXd8f7L4VUaEJQI5H2SiUD8Iz56+EGmV9a6KIEJDKC0tiwPd1gQChaa5JcJBE9z1baSDX3H1f/tprOz/2H2kr0SDAL4Pztik5uer3bETQtmUK0s9Bq16AKSb3Fjs31LF/7bVwWyOVzIZJlfGk19w7c0seBr7f4gA==SECTION AUTHORITY
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sample.net. 172800 IN NS ns.sample.net.
+a1rt98bs5qgc9nfi51s9hci47uljg6jh.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+a1rt98bs5qgc9nfi51s9hci47uljg6jh.net. 86400 IN RRSIG NSEC3 8 2 86400 20160224061807 20160217050807 51128 net. N9aNNHsSDLSSXMHpw1Bo200V2dqtDc68f4JyCg4ZFCvIKSs5lNeiptWrdfbluQJmdhJK9gz6t3ITbFsnnJjLqwihBiiFbwd1FPctuMK3bGUpZfGXem+3zu4mGKzozQ8nr8KjDUX6fYoLri2vOuCv82a7vbp8RF/6QU6MqvsT4Qw=
+55j4p0id76bnr9pf6341vkh0aga83vi2.net. 86400 IN NSEC3 1 1 0 - 55JHR77O5IJ0MSJFOSIA68OGIQIN5N15 NS DS RRSIG
+55j4p0id76bnr9pf6341vkh0aga83vi2.net. 86400 IN RRSIG NSEC3 8 2 86400 20160223061458 20160216050458 51128 net. QGDWMjAF7ziCridkheQEMH42INj+mHGnPuor/UvkNr2nZz1DDSewqG6/6uQR9FFSzRXINCZT6fdwhoIyTfxfLlNNXxABSqauTFXJ4ZXaBvDh0kwPwFBYOGSeKFukNLDiBhiUVLeMa1Va0M3H7ehWcOn1jsH301KTwu+6F5n6b/Q=
+SECTION ADDITIONAL
+ns.sample.net. 172800 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sample.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+a1rt98bs5qgc9nfi51s9hci47uljg6jh.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+a1rt98bs5qgc9nfi51s9hci47uljg6jh.net. 86400 IN RRSIG NSEC3 8 2 86400 20160224061807 20160217050807 51128 net. N9aNNHsSDLSSXMHpw1Bo200V2dqtDc68f4JyCg4ZFCvIKSs5lNeiptWrdfbluQJmdhJK9gz6t3ITbFsnnJjLqwihBiiFbwd1FPctuMK3bGUpZfGXem+3zu4mGKzozQ8nr8KjDUX6fYoLri2vOuCv82a7vbp8RF/6QU6MqvsT4Qw=
+net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1455877597 1800 900 604800 86400
+net. 900 IN RRSIG SOA 8 1 900 20160226102637 20160219091637 51128 net. TDZlVntb/Dun6Ng0o5eeaXhJw+3HqEcoAEjwrd+xs1D1/+JlhIoP/bnrpcW0pkDxBf8Byg+Jx6J+y7jfPiEboL6aWzSZhX+bqgLGlKlU4oHf3ahUtuyEHxBZ0m/pPDGZQGW35U/9iZ3a1Ga1aPR4zsxoXfQLwwRpDfr3lGKGCrw=
+55j4p0id76bnr9pf6341vkh0aga83vi2.net. 86400 IN NSEC3 1 1 0 - 55JHR77O5IJ0MSJFOSIA68OGIQIN5N15 NS DS RRSIG
+55j4p0id76bnr9pf6341vkh0aga83vi2.net. 86400 IN RRSIG NSEC3 8 2 86400 20160223061458 20160216050458 51128 net. QGDWMjAF7ziCridkheQEMH42INj+mHGnPuor/UvkNr2nZz1DDSewqG6/6uQR9FFSzRXINCZT6fdwhoIyTfxfLlNNXxABSqauTFXJ4ZXaBvDh0kwPwFBYOGSeKFukNLDiBhiUVLeMa1Va0M3H7ehWcOn1jsH301KTwu+6F5n6b/Q=
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 100
+ ADDRESS 192.0.2.1
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+b.sample.net. 6000 IN NS ns.b.sample.net
+SECTION ADDITIONAL
+ns.b.sample.net 6000 IN A 192.0.2.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+b.sample.net. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+sample.net. 180 IN SOA internal.sample.net. hostmaster.sample.com. 1455875127 90000 90000 90000 180
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 10 10
+ ADDRESS 192.0.2.2
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. 20 IN A 192.0.2.3
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+;; must not be fetched due to cache
+RANGE_BEGIN 30 30
+ ADDRESS 192.0.2.2
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. 20 IN A 192.0.2.4
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 50 50
+ ADDRESS 192.0.2.2
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. 20 IN A 192.0.2.5
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.b.sample.net. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer additional authority
+REPLY QR RD RA
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. IN A 192.0.2.3
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+;; cache hit
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.b.sample.net. IN A
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer additional authority
+REPLY QR RD RA
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. IN A 192.0.2.3
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 45 TIME_PASSES ELAPSE 25
+
+STEP 50 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+a.b.sample.net. IN A
+ENTRY_END
+
+STEP 60 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer additional authority
+REPLY QR RD RA
+SECTION QUESTION
+a.b.sample.net. IN A
+SECTION ANSWER
+a.b.sample.net. IN A 192.0.2.5
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nx.rpl b/tests/deckard/sets/resolver/val_nx.rpl
new file mode 100644
index 0000000..4162ffc
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nx.rpl
@@ -0,0 +1,154 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2423 7 1 EA4E6A7A91013E6852DE309CC3CB764A4D09361A "
+val-override-date: "20181130121906"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nxdomain response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101906 20181130101906 2423 example.com. jO3CKvk4qwSCUloEXF+oavs3JC3qE0RZZpYvlitBH6SBQXn7hUDkxJha DfeLHeqKGg+hexpwxAqQZ4yHtqJbyUKVrT5S+VulRJhM99iJeG86Tc23 2z+QjyNSjtvorngs6uRCavwDbazenVLaJtnUkduMQcLIUKEQKCT4bc7z x/s= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101906 20181130101906 2423 example.com. iR4Bz61Q80rARS0h/K5W2YcrJPz9Ng7Ho+s1WxWpMnJdvGKHziITbME6 RhWgUlNZr2iu+mUvNEbU/C9Oim97BuAvTHD2RoL94ztOM4JbvsxXA4x3 REaw97F+pRGWwHU2vkm51bhldjBkSzDVMcLUNZUCChaP3QwMy6+BS3UF se4= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbtGXI8lGuiA26SCDh5c8/EkJP83aCerq4k9SGznAo4HuBlpvGLN 4m8hM0sdFIcTQLoBPyTYJi98VoXN5JcFaChlMERdnP5BSJubfPaqMYqJ EEh3knoelJrwddlgft9gC8J6n126ylu9ZYhZtadGaBshLOKHsfPDyfMn t2oJO0bV ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101906 20181130101906 2423 example.com. G+PLIk1lfmNAvY64DUKXrsRP/EKyEyQC0Zma86KvQREH+IzAOYhcFF1W eLs0ZAAbbiUspz2xj8H2UNkWI2/1nPSHCYfKZuCfkqRONb/HaBhwS7AT gs0Jw/XmFSdVKZ4rgZqA8fRLiugZKIIhp96vu2begq8g6Z8hCkmSUyUP cyM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101906 20181130101906 2423 example.com. jO3CKvk4qwSCUloEXF+oavs3JC3qE0RZZpYvlitBH6SBQXn7hUDkxJha DfeLHeqKGg+hexpwxAqQZ4yHtqJbyUKVrT5S+VulRJhM99iJeG86Tc23 2z+QjyNSjtvorngs6uRCavwDbazenVLaJtnUkduMQcLIUKEQKCT4bc7z x/s= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101906 20181130101906 2423 example.com. iR4Bz61Q80rARS0h/K5W2YcrJPz9Ng7Ho+s1WxWpMnJdvGKHziITbME6 RhWgUlNZr2iu+mUvNEbU/C9Oim97BuAvTHD2RoL94ztOM4JbvsxXA4x3 REaw97F+pRGWwHU2vkm51bhldjBkSzDVMcLUNZUCChaP3QwMy6+BS3UF se4= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101906 20181130101906 2423 example.com. nvDfwhtBRatdQHu2tyCfoaE2HkgAXCm97CZOOx8Bg36MUblQDgwm55mP gaJQKsXxU9fOG9Nd7wkXZEYPvhnKFcUxtrFhHog9ouZtEsuS0w+E9cJX HqrI9L8m7URlQ7FZBaUjqlJGJNFgQbwZzfOvWDzSSzgBqj8emafNwOBg eQ4= ;{id = 2854}
+; wildcard denial
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101906 20181130101906 2423 example.com. dabtLPYkmc3k6LXDJbp1LEi76vYrIBSvZnCl+CQeN4mNCwyu6gFotv8V GyRfSCNsA8LfCpLo3eD+3AzjzT9ZOHdGuRQriOZYPGPS4LiiU2RzzbBc crgeoPk6l+O5trLXDoZA9nxKze4Ef5lYRfw8hxDlimvkned/k2JyMfBz 8OM= ;{id = 2854}
+; qname denial
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101906 20181130101906 2423 example.com. jmkDgBxYtJJx9FuanN3mhTiTQ0ETrhY28v02vyYRw2mgFG80YNsLTq57 tw7pYxb9XBLQpZN1P+1y419pwLVNKiYMONyvjqJbvaiSxzS0xGOrhDpb kEaensygo2GvoyEnO8J7BGRhhJCxVsqC8SCeMZijkWTrNQMGazgCc2Ra n5k= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101906 20181130101906 2423 example.com. nvDfwhtBRatdQHu2tyCfoaE2HkgAXCm97CZOOx8Bg36MUblQDgwm55mP gaJQKsXxU9fOG9Nd7wkXZEYPvhnKFcUxtrFhHog9ouZtEsuS0w+E9cJX HqrI9L8m7URlQ7FZBaUjqlJGJNFgQbwZzfOvWDzSSzgBqj8emafNwOBg eQ4= ;{id = 2854}
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101906 20181130101906 2423 example.com. dabtLPYkmc3k6LXDJbp1LEi76vYrIBSvZnCl+CQeN4mNCwyu6gFotv8V GyRfSCNsA8LfCpLo3eD+3AzjzT9ZOHdGuRQriOZYPGPS4LiiU2RzzbBc crgeoPk6l+O5trLXDoZA9nxKze4Ef5lYRfw8hxDlimvkned/k2JyMfBz 8OM= ;{id = 2854}
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101906 20181130101906 2423 example.com. jmkDgBxYtJJx9FuanN3mhTiTQ0ETrhY28v02vyYRw2mgFG80YNsLTq57 tw7pYxb9XBLQpZN1P+1y419pwLVNKiYMONyvjqJbvaiSxzS0xGOrhDpb kEaensygo2GvoyEnO8J7BGRhhJCxVsqC8SCeMZijkWTrNQMGazgCc2Ra n5k= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nx_nodeny.rpl b/tests/deckard/sets/resolver/val_nx_nodeny.rpl
new file mode 100644
index 0000000..5cc20f2
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nx_nodeny.rpl
@@ -0,0 +1,164 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 46865 7 1 E6C7351C70AA8F888DACB2C1875AD1945CB22C39 "
+val-override-date: "20181130121902"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nxdomain response missing qname denial
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101902 20181130101902 46865 example.com. k6TtlPvoChJFxi4exzlziiPGCdzNU7I0y5Z1cwfskP0Hc6nGbOEw5pVP TXK15AVJ+kIjeqcUbgFRu8/DPolJbWT+yHfuYE2OhjCqxJCt+vVDrMl0 maBTa7UwJeMkR76DqzjSbPsEpRSSXKvzjtlavk/TYbv/sz6yHsVhhYW8 Wu4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101902 20181130101902 46865 example.com. WMO3vMt0WSaOXvL28iNxMK7xr7DgQLejluyrB3VrK7E8Dg3rhWxFZyJ4 ARxGCJEALLugWvH7kPBw9D2vzZh+qHBQ4X7OnHmUOPdwLQUrWfHQ535o /IEnrLWGQKbQUo5+yw+Un0RaovPvkxc6h/Qrpzz67Urx3m7XQoXITO+5 FIM= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcJUKdcSvbPNRyNs/8EtvSsu/QIVXYkAxNxhqFi2TqHG0jWCoRy4 PdX0xSd3ve4PRx0jAi/FK8oWtThJevGGmM5aM+X/ZjFBAImSEo6gP9dB G7oGlou76JfwtSC2l3GHM+WOM/D/mc0I3mmd59AOzzpTnbeLL9EQqUWS nxSsYu4L ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101902 20181130101902 46865 example.com. ZZmEktIT3fcwMOhV3G8cKabicLmqykXtEdZXGVAuCn5Di/zq/5y8l3rZ uhrolnlmPf1Zp9myG7HF/oDmbxyEEw9Vo//YMQGnQp/U7149m0kIpHbz /Os2z5qmxtfyIBIB3tfeQ9ixlBjzn/vCElQTUB83a24tWq+yhtgHIFjr L2k= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101902 20181130101902 46865 example.com. k6TtlPvoChJFxi4exzlziiPGCdzNU7I0y5Z1cwfskP0Hc6nGbOEw5pVP TXK15AVJ+kIjeqcUbgFRu8/DPolJbWT+yHfuYE2OhjCqxJCt+vVDrMl0 maBTa7UwJeMkR76DqzjSbPsEpRSSXKvzjtlavk/TYbv/sz6yHsVhhYW8 Wu4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101902 20181130101902 46865 example.com. WMO3vMt0WSaOXvL28iNxMK7xr7DgQLejluyrB3VrK7E8Dg3rhWxFZyJ4 ARxGCJEALLugWvH7kPBw9D2vzZh+qHBQ4X7OnHmUOPdwLQUrWfHQ535o /IEnrLWGQKbQUo5+yw+Un0RaovPvkxc6h/Qrpzz67Urx3m7XQoXITO+5 FIM= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101902 20181130101902 46865 example.com. KNiFDTdPOEF0+bhorTXrxLGvim8tHyRaVMXfLxP8CVVzWfnoHjVoy7Jo R/l9tVx1wkdQqtOzzBmbbhMMQSylKDii17zWStZFSoA99M1DhT11y47W gjYNT9TXe28IqWEMu/yNr+T0xyWHLRwuDUKiKMxMpPBdEcmMrBghVlcB 2tg= ;{id = 2854}
+; wildcard denial
+example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+example.com. 3600 IN RRSIG NSEC 7 2 18000 20181230101902 20181130101902 46865 example.com. EuaPkCgzpVTILpSBd4X9JMmXLaLFG3zKrXxCqUC/kZbVPgkZSA+4tDt2 Y48mmb8gicjCpe4pszczA0i/CeL+BE0ucdI1iV8GJdR7cBv5e9rG2c36 +F5oQ03pj+FQBbtKJ347XBVkxA/hy6pOFUppsXzV37MeT+VzoMLdCeir JQA= ;{id = 2854}
+; qname denial
+;wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+;wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_nx_nowc.rpl b/tests/deckard/sets/resolver/val_nx_nowc.rpl
new file mode 100644
index 0000000..90a812b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_nx_nowc.rpl
@@ -0,0 +1,164 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 22469 7 1 9A6B45A912CC69BF1BBAE8E890A6351643B58FB9 "
+val-override-date: "20181130121903"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with nxdomain response missing wildcard denial
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN A
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA REFUSED
+SECTION QUESTION
+ns.example.com. IN AAAA
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101903 20181130101903 22469 example.com. AG9VohvKoHDb5Gg+uauHsyBo4TbM8Fc2jS6uNXykvzCnDBaz8Pv4jVgv X5Heqh0V1owcg4pEc4ntAfjAJPObpaR4nVrsR8WOozv1NKiXTixc7gIX NHC1VSo4mT1F/m9GhtyKjKAiZ+b2qE4DqwFfyq6+SC88zMEJtxBBHDF6 SYk= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101903 20181130101903 22469 example.com. AZ+ObbOQ6F/mliTCsbEaqwodaInWAUN0iYp0doBdKv1SaiBbmtJnnD48 Jpm1sJtGOR9H9n4xjQ7oOdL1p56eBqyn3pOV1bc+xLIDnOa4OqtufYqW rkcuT/odtTvd76YGe+Qtw9m7+Rh8i+qnTHPm8Hv/C28mdswEAoyVYvvG LqI= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcvGZqYpdUE7YjWyWyH4xuqH8Ano6gh3qy/zez5uKDL69HDXO7Cc I4tw3FNDtqGbTF0pR1WLQZG9h6VFIHL8IoLpiwvQz9Qc66gtY3RGxa3B OBDhIO3g4QSbGgxnopzko/PgBBhrva4Z/VtjyBZbTak4+oNKcyjDZbuk 5IK9i3wH ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101903 20181130101903 22469 example.com. xaPftZOaUQQuhq5aRlI24hX/reFOtX60Nvb8fZw0FE+bliPrsyQuwFia Rt6u8IT+URHRQJ7h+Vku8XYVdKBmufPVuVqZ7nsCtYAW5sj0OTTUK+y1 U3qH1vm2V+L/pUKPrlC1GtIk/SQzm+sLAsQzUzP8J5jU378IvEOOIDWW qXA= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101903 20181130101903 22469 example.com. AG9VohvKoHDb5Gg+uauHsyBo4TbM8Fc2jS6uNXykvzCnDBaz8Pv4jVgv X5Heqh0V1owcg4pEc4ntAfjAJPObpaR4nVrsR8WOozv1NKiXTixc7gIX NHC1VSo4mT1F/m9GhtyKjKAiZ+b2qE4DqwFfyq6+SC88zMEJtxBBHDF6 SYk= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101903 20181130101903 22469 example.com. AZ+ObbOQ6F/mliTCsbEaqwodaInWAUN0iYp0doBdKv1SaiBbmtJnnD48 Jpm1sJtGOR9H9n4xjQ7oOdL1p56eBqyn3pOV1bc+xLIDnOa4OqtufYqW rkcuT/odtTvd76YGe+Qtw9m7+Rh8i+qnTHPm8Hv/C28mdswEAoyVYvvG LqI= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NXDOMAIN
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101903 20181130101903 22469 example.com. r1Wz8XdHbfNhO+pR75oSYz7/WB6z/YtcKOYE0SP03AYnS7sUbiEXMBxV VxgpMjfSGi55EMQQwdWIapvveRk847U5/8wAz076VCjJ0pPWOd8IC2d/ iRjjRmWZF/+7Pl+VTCGr6TXf4ioUU9UfKPOXAFOFNW/R+yTreT0KPnOW As0= ;{id = 2854}
+; wildcard denial
+;example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG
+;example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854}
+; qname denial
+wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG
+wab.example.com. 3600 IN RRSIG NSEC 7 3 18000 20181230101903 20181130101903 22469 example.com. gelBI3JNXZKxtv9CIzlZbHUz1lTb3cN62Kvz/UOjv9+KxPfEG0TFUrQE jSRNdGL2v42x7RMYTzyf+aGmKT8esdgJ+mXcyfsqw4gUfvdQwoc9RVB9 qz24F84u8VGmXrclzHHpn1LBO+mzkz7S4LF1QNhqbvLP3eltC6IfzCPv /xw= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_pos_truncns.rpl b/tests/deckard/sets/resolver/val_pos_truncns.rpl
new file mode 100644
index 0000000..3ef16ff
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_pos_truncns.rpl
@@ -0,0 +1,150 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 8912 7 1 D78A09971CE199BEF5C312E4ABAB6D80BB05A2C3 "
+val-override-date: "20181130121910"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with badly truncated positive response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101910 20181130101910 8912 example.com. irQCG3d04884eHBfTSrzbc9DK5otN8Nx5P90cwT89btFCHG6r1RzpCmT sm4tW+KoIunBREWkhCDx2y6zDmoWyERWan0fBXaIfgbYol+qehDuynR8 ZlVXbrUr7Aou4eCHiyi/4r3zGX8jy4Ujk5fJk6TS8P4/L9fP0ZSNyMYk dEU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101910 20181130101910 8912 example.com. lrvd15HZ6FBa6JE9Me8tjyHvJ2Tgk2Dv/QkeFNOtBNC0RFEuZtRcXFTg +YaQIN1uQ3MGNscJc6vGcMewZTi0bAWfOnizrffhoTnf0eeBA+DMn+JX tGTVBtFKSS+qpF8Hg9iQj49AoM/ciNkwFdXzDqgNbI93+Z0qYRKJ2P0A bFI= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAa5f2vT9N+xcqZex8uKEC7ZMlGN5i+m7TqRu0xtp61GCGe6i83WF gFkmJ9FMHiv22mKJv2YvKgs7MM6peBDuBL/Qjdf17ENba3wT90koD/zM 0XoE61m1oGskzdt04rUTM+T7oTbYekFVILn00V7ZQKUzJTDAbW70fm/9 U5RZM6KT ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101910 20181130101910 8912 example.com. dRH3WVzuN5/hZ07WHCbn6ZMmNONBFfv3oP5BgHQDR8+gRmuwAIPMmHjZ XbKcB8/m6IjClkTEe4zKCBr5Fm3aqYR4pOq29igUVWnd8FbnDIa73vEH JnG+x9h2XgcfAA/5sL1ldv+5maNUDrbNuIa9niGUlYvgXhxrLqCEUJOp C3E= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101910 20181130101910 8912 example.com. irQCG3d04884eHBfTSrzbc9DK5otN8Nx5P90cwT89btFCHG6r1RzpCmT sm4tW+KoIunBREWkhCDx2y6zDmoWyERWan0fBXaIfgbYol+qehDuynR8 ZlVXbrUr7Aou4eCHiyi/4r3zGX8jy4Ujk5fJk6TS8P4/L9fP0ZSNyMYk dEU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101910 20181130101910 8912 example.com. lrvd15HZ6FBa6JE9Me8tjyHvJ2Tgk2Dv/QkeFNOtBNC0RFEuZtRcXFTg +YaQIN1uQ3MGNscJc6vGcMewZTi0bAWfOnizrffhoTnf0eeBA+DMn+JX tGTVBtFKSS+qpF8Hg9iQj49AoM/ciNkwFdXzDqgNbI93+Z0qYRKJ2P0A bFI= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+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
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101910 20181130101910 8912 example.com. TDZElBJgT6bazaVj6uIGz2lqvth/j9xNwgWPGtweEUMTTjYvnolL63h8 P47D6vwKxGgxQSJ84U9PpjtsyqzmLxdK+9KEz7iWfzOtUO1pdSOoCrmI a68mCi3GgAJ0raEIWmzE1rPAv+plDIYluJgzy3bCula9vdI1bdN4x/vS Bsk= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+
+; Truncated, no signature for NS record.
+;;;example.com. 3600 IN RRSIG NS 7 2 3600 20181230101910 20181130101910 8912 example.com. irQCG3d04884eHBfTSrzbc9DK5otN8Nx5P90cwT89btFCHG6r1RzpCmT sm4tW+KoIunBREWkhCDx2y6zDmoWyERWan0fBXaIfgbYol+qehDuynR8 ZlVXbrUr7Aou4eCHiyi/4r3zGX8jy4Ujk5fJk6TS8P4/L9fP0ZSNyMYk dEU= ;{id = 2854}
+;;;SECTION ADDITIONAL
+;;;ns.example.com. IN A 1.2.3.4
+;;;ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101910 20181130101910 8912 example.com. TDZElBJgT6bazaVj6uIGz2lqvth/j9xNwgWPGtweEUMTTjYvnolL63h8 P47D6vwKxGgxQSJ84U9PpjtsyqzmLxdK+9KEz7iWfzOtUO1pdSOoCrmI a68mCi3GgAJ0raEIWmzE1rPAv+plDIYluJgzy3bCula9vdI1bdN4x/vS Bsk= ;{id = 2854}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_positive_nosigs.rpl b/tests/deckard/sets/resolver/val_positive_nosigs.rpl
new file mode 100644
index 0000000..18e7820
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_positive_nosigs.rpl
@@ -0,0 +1,182 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with positive response, signatures removed.
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN A
+SECTION ANSWER
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+; barely valid nodata for AAAA
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response to DS query for subzone
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN DS
+SECTION ANSWER
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AD NOERROR
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+www.example.com. IN A 10.20.30.40
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+www.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_qds_oneanc.rpl b/tests/deckard/sets/resolver/val_qds_oneanc.rpl
new file mode 100644
index 0000000..b5454ab
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_qds_oneanc.rpl
@@ -0,0 +1,222 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 34694 7 1 6051ACF3BE1C7E91C09614E6237A3B6AEF997EEA "
+val-override-date: "20181130121911"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with DS query and one 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101911 20181130101911 34694 example.com. u92Oy+hcQjhnkA7+giV6gJlDovDUmmUrhwN3ayf9/de3EFymsGWns3rW uVBy9p9MiGuq5Gh1eBGYgBLsuxYjVQfiF3iqoXldc1La7VjmR+5YzTw0 CnTiabybAXUnEOLlyonnbCeNhN9cvn6nYLN87yPSRuzGeB2T3aFXgkUk p20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101911 20181130101911 34694 example.com. a/cISMkpWJgOLQuAmo05DxcjxUwsets7jV2y+rYMkFn+KZh7pjUDRTvd 52pCzgWlDJPVKrBcNRUQn8D1xVwp+MO/4MjonQRuhGORwdsbuqfMD55+ zeAgEJGGi7ygt5/kFr2gioZejqj1A236IXbLfFiLTmlHtV1Y2A/mvWsP cTA= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdoXMIS/blyIEUB9xHus+B60jFsJiPvHgIhOgFTmLHqwZ5mhFxug q/O9k/iKhf/3HttKed9lvZwJ9XUPzDqJFAXz5nS1oRsGBGtUMwoF/nM3 kU7Ko4oy9Gtjb1/iFuEhTkjGyom9e5m/pA9BW5eX37knNlbHSOpRlcWP zYH213gz ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101911 20181130101911 34694 example.com. HE6kf6hmJBAaDvfG9I5ZhGq7ICr5byQcYDmtEcMQwzMHPjV6bFX6G5dO ttXbxCbFh6XvznDXnsboTXSuX8YGIqtVt0IY7FsyfbF8fKmbKWCfivrb Z1Z5CG6ToA0vCx1sHMF17oa3P8moVPejicDJqOVkz9XzS9zHJxmJIWx2 8fM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101911 20181130101911 34694 example.com. u92Oy+hcQjhnkA7+giV6gJlDovDUmmUrhwN3ayf9/de3EFymsGWns3rW uVBy9p9MiGuq5Gh1eBGYgBLsuxYjVQfiF3iqoXldc1La7VjmR+5YzTw0 CnTiabybAXUnEOLlyonnbCeNhN9cvn6nYLN87yPSRuzGeB2T3aFXgkUk p20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101911 20181130101911 34694 example.com. a/cISMkpWJgOLQuAmo05DxcjxUwsets7jV2y+rYMkFn+KZh7pjUDRTvd 52pCzgWlDJPVKrBcNRUQn8D1xVwp+MO/4MjonQRuhGORwdsbuqfMD55+ zeAgEJGGi7ygt5/kFr2gioZejqj1A236IXbLfFiLTmlHtV1Y2A/mvWsP cTA= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 36540 5 1 040C7E6D3E183A894CDECC56F6A33086409692F2
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101911 20181130101911 34694 example.com. t8Ktq66BvanAwL00D3hzwIIJQXJ6NzsTBzi0Um8bESfFdxlN2WIjSVd5 hfNruVRDEsTCDlOd2r6cG3Q003NGDn7ulOUR8RLL29a4Tj9YkIJnizEw WrMUhdUU9CqbxZSq8aAKO8tIoI56NfK8FqYObZKR4aqXHOBPf0QkvPKr i+E= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 36540 5 1 040C7E6D3E183A894CDECC56F6A33086409692F2
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101911 20181130101911 34694 example.com. t8Ktq66BvanAwL00D3hzwIIJQXJ6NzsTBzi0Um8bESfFdxlN2WIjSVd5 hfNruVRDEsTCDlOd2r6cG3Q003NGDn7ulOUR8RLL29a4Tj9YkIJnizEw WrMUhdUU9CqbxZSq8aAKO8tIoI56NfK8FqYObZKR4aqXHOBPf0QkvPKr i+E= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to DS query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 36540 5 1 040C7E6D3E183A894CDECC56F6A33086409692F2
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101911 20181130101911 34694 example.com. t8Ktq66BvanAwL00D3hzwIIJQXJ6NzsTBzi0Um8bESfFdxlN2WIjSVd5 hfNruVRDEsTCDlOd2r6cG3Q003NGDn7ulOUR8RLL29a4Tj9YkIJnizEw WrMUhdUU9CqbxZSq8aAKO8tIoI56NfK8FqYObZKR4aqXHOBPf0QkvPKr i+E= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101911 20181130101911 34694 example.com. u92Oy+hcQjhnkA7+giV6gJlDovDUmmUrhwN3ayf9/de3EFymsGWns3rW uVBy9p9MiGuq5Gh1eBGYgBLsuxYjVQfiF3iqoXldc1La7VjmR+5YzTw0 CnTiabybAXUnEOLlyonnbCeNhN9cvn6nYLN87yPSRuzGeB2T3aFXgkUk p20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101911 20181130101911 34694 example.com. a/cISMkpWJgOLQuAmo05DxcjxUwsets7jV2y+rYMkFn+KZh7pjUDRTvd 52pCzgWlDJPVKrBcNRUQn8D1xVwp+MO/4MjonQRuhGORwdsbuqfMD55+ zeAgEJGGi7ygt5/kFr2gioZejqj1A236IXbLfFiLTmlHtV1Y2A/mvWsP cTA= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 36540 5 1 040C7E6D3E183A894CDECC56F6A33086409692F2
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAba60cKYqTClLVdFbBubhTqnnfJ3Kkbyd96JlGBAMHJ5IQ9fONnF KQYGtOZ8FkF9HBOHoz+WCqlG8mRHuuqkZ/6zei6/DP70JHUcP/cbT6NY RwDqUvAvDXr4tZPKD5yjJKCLqOI+TQo48RlGNVZjZpL5BgiEnM/lguxP DNQri8tP ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101911 20181130101911 36540 sub.example.com. fRAswfvVrez7A0MBgmusYZSOFMIhSobJlEC620/y9SrnBHc2eiWsQOFa AGaqkdprGNopP6Nzsjoz6CCzIFrTmPKizi22Df8CkSBYXdFObWbvAopQ JkFmDH82DwGjEHOu/HhhFN7IPHRXrmDltecCWSIvWD/hjyqEfi0hm0CR 27A= ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101911 20181130101911 36540 sub.example.com. J3ttMFY5LNe6C2X8qpji9Fbn9ms5iUR06VyB4mySCThZqmfaTstShe/k c/Es1nTXgH7ThbnZSE+3bCGfjBD8qu10Nmd5Q0oy8oetwQXIKtEwTETL ces7EjOQLm0XozSe4V0pQlUX5DzxSZhQYx0mTfOCvSqFeZ07Cqzk0lpj ouI= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101911 20181130101911 36540 sub.example.com. mXWfA0N8BIwMdmqIVmmyGc9qvW22Nlo2MChpvC/dwwzXYp9ZX51QUagG D6LzinILleQa3Jz4tb8Z7x/oU57Tz4j1erUvXhnqxLdM66rRi2xk+v8C zkHk3f9GgcjOtrEBy09dIJuppg0mAsBWO8oVwR5BYpGO0KGBUqcvffJt Vv0= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101911 20181130101911 36540 sub.example.com. LLCuevrbnFrzvF80jykui0rHv9Xsi7RF/qVbp6CP+xD6ywWLsUk7Uy9O p6pcq1B0/i0eWImGJT9TiFr1xlNyhtFRnM6KJveih2a/8KtFzJ/ZGgoD OwMNpGqKv+bMcJQEE5Iv4x00ReN49CxSTFm6JM8JKtpR6+WM2ydRns2R CIY= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 36540 5 1 040C7E6D3E183A894CDECC56F6A33086409692F2
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101911 20181130101911 34694 example.com. t8Ktq66BvanAwL00D3hzwIIJQXJ6NzsTBzi0Um8bESfFdxlN2WIjSVd5 hfNruVRDEsTCDlOd2r6cG3Q003NGDn7ulOUR8RLL29a4Tj9YkIJnizEw WrMUhdUU9CqbxZSq8aAKO8tIoI56NfK8FqYObZKR4aqXHOBPf0QkvPKr i+E= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101911 20181130101911 34694 example.com. u92Oy+hcQjhnkA7+giV6gJlDovDUmmUrhwN3ayf9/de3EFymsGWns3rW uVBy9p9MiGuq5Gh1eBGYgBLsuxYjVQfiF3iqoXldc1La7VjmR+5YzTw0 CnTiabybAXUnEOLlyonnbCeNhN9cvn6nYLN87yPSRuzGeB2T3aFXgkUk p20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101911 20181130101911 34694 example.com. a/cISMkpWJgOLQuAmo05DxcjxUwsets7jV2y+rYMkFn+KZh7pjUDRTvd 52pCzgWlDJPVKrBcNRUQn8D1xVwp+MO/4MjonQRuhGORwdsbuqfMD55+ zeAgEJGGi7ygt5/kFr2gioZejqj1A236IXbLfFiLTmlHtV1Y2A/mvWsP cTA= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_qds_twoanc.rpl b/tests/deckard/sets/resolver/val_qds_twoanc.rpl
new file mode 100644
index 0000000..e21c349
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_qds_twoanc.rpl
@@ -0,0 +1,223 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 56744 7 1 0B6FC412DE574014C6231DF6C97C2A370903297A "
+ trust-anchor: "sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B "
+val-override-date: "20181130121913"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with DS query and two anchors
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101913 20181130101913 56744 example.com. PbI0TTbOc1OZsplLREnmRXl3zYbj4CMIk7LgavRNp9+diDWksiR1nxWo szKMYfwjN6dxlwowAgL+frC6esvLvbV5BeDhR+emsf4ayKO6OSrCHJUK 5af7jtKkrLYuVCn3Ad1RZxlecv9IIJc6cjUg5FMm3+Riuq/PrekrDZqz Si0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101913 20181130101913 56744 example.com. KgRA0DGIjVXsmx+oLWqWNrDhoTI4doL+wm1+BufgJkfcm8LstWnCre+M sY6rV9o+DM5RvtPj+5pwhrgAMJqaLgMTrEXCWsbFvEQU1jLhYpLRNJ5L 69AMOtfVUquxrdviPcXjzR8VbB+KvH5Vg1NlsuNlxtMbqS3Lex10LKlU NA0= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbKuypu/H/0cr6HwVXfbaS+Xu3Rx5bq0Sfi/lfJP+36jPL2u478E NMk9VBPqVV40r5Y/RZWUZ7YvtbQzWuFSU2jqNUtjamyfzX8AF+tUDf4C FLFUQ0sCx+/cK1t0h4+TQkYOrlR0Xkqw4+bsr0ThsxtL7ypJh2D2Ny0V YtNkob4Z ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101913 20181130101913 56744 example.com. lZJ7diaUg1AHnAljugMYZkZFKhOm/Op363Ott+kXuSPWKFPzXbD/Ezyh g8lpGPjwhxrf3mJgqLiPCkRYsnn5E+ebeCvjwB2OgKuxS09mD7NNUYF+ eYakSNa9zztYavw82dwBVT9frvLqqQg0gyeRc1W0eq7cnyy1pK4lpapl 1eA= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101913 20181130101913 56744 example.com. PbI0TTbOc1OZsplLREnmRXl3zYbj4CMIk7LgavRNp9+diDWksiR1nxWo szKMYfwjN6dxlwowAgL+frC6esvLvbV5BeDhR+emsf4ayKO6OSrCHJUK 5af7jtKkrLYuVCn3Ad1RZxlecv9IIJc6cjUg5FMm3+Riuq/PrekrDZqz Si0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101913 20181130101913 56744 example.com. KgRA0DGIjVXsmx+oLWqWNrDhoTI4doL+wm1+BufgJkfcm8LstWnCre+M sY6rV9o+DM5RvtPj+5pwhrgAMJqaLgMTrEXCWsbFvEQU1jLhYpLRNJ5L 69AMOtfVUquxrdviPcXjzR8VbB+KvH5Vg1NlsuNlxtMbqS3Lex10LKlU NA0= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101913 20181130101913 56744 example.com. G/ri3P6noC+ftYdFA35MrhZv0D/gHUISBYSuLVBir2+Bt9JukeVhqd9i zdjSXCIrxUdJUaPwSSEyLHvVOXJpR8SdtjnHR97YcxM69RSoinBpvBc4 Ey1ahaG1pOH12ipqVIwkJRIlh9C08sdyFTDALw4MwHVd8P+K+oSTEpO/ 0V4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101913 20181130101913 56744 example.com. G/ri3P6noC+ftYdFA35MrhZv0D/gHUISBYSuLVBir2+Bt9JukeVhqd9i zdjSXCIrxUdJUaPwSSEyLHvVOXJpR8SdtjnHR97YcxM69RSoinBpvBc4 Ey1ahaG1pOH12ipqVIwkJRIlh9C08sdyFTDALw4MwHVd8P+K+oSTEpO/ 0V4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to DS query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101913 20181130101913 56744 example.com. G/ri3P6noC+ftYdFA35MrhZv0D/gHUISBYSuLVBir2+Bt9JukeVhqd9i zdjSXCIrxUdJUaPwSSEyLHvVOXJpR8SdtjnHR97YcxM69RSoinBpvBc4 Ey1ahaG1pOH12ipqVIwkJRIlh9C08sdyFTDALw4MwHVd8P+K+oSTEpO/ 0V4= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101913 20181130101913 56744 example.com. PbI0TTbOc1OZsplLREnmRXl3zYbj4CMIk7LgavRNp9+diDWksiR1nxWo szKMYfwjN6dxlwowAgL+frC6esvLvbV5BeDhR+emsf4ayKO6OSrCHJUK 5af7jtKkrLYuVCn3Ad1RZxlecv9IIJc6cjUg5FMm3+Riuq/PrekrDZqz Si0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101913 20181130101913 56744 example.com. KgRA0DGIjVXsmx+oLWqWNrDhoTI4doL+wm1+BufgJkfcm8LstWnCre+M sY6rV9o+DM5RvtPj+5pwhrgAMJqaLgMTrEXCWsbFvEQU1jLhYpLRNJ5L 69AMOtfVUquxrdviPcXjzR8VbB+KvH5Vg1NlsuNlxtMbqS3Lex10LKlU NA0= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAaVxPE0OCr9YJP75+8+TRRBbeizDX1Hc5HP92FgPdh3kglwHm7c0 2LCApXpaKOZrz8ZVAgZDMHarw1N1ADD0u4Ie9OFflkNqFc7dkNENQcqA dKFioClHFAnaUbEtphlduco7etDaoR4QPCas3YOWcRrA75z0XlYXVrf6 mqRwVqFT ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101912 20181130101912 42960 sub.example.com. iho097OZdVbSYY9CuLXsn5C6Sq5laVdU717ueVcTomb9i6aLern28/SL 1AzZbTtAkMfidyM3F9mmwfe80Mm4i+sjGfgrZXV/L8m42sdTfCPZNdCs eAP4jpr+Q8CdxdHzABFthLxFuzA0ZdtiwD3Zq3a4XBVuJQn4XH0+SxL4 Eek= ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101912 20181130101912 42960 sub.example.com. AxXFbEMc9iDGhK8EiQMuDUgpk4heb/P71IlEVQHdQM+XVgZDdLgp7iyP CTH/v0vGjPZsmyJJBjoRNl+m6IinLEF/lf6TJ7Rcir2BCoMvPRojZs7X f9M23LTRLQWaFqIk5N2gt9noR5j997VXK/E/GQ64sit8X2F/LQ+x/1Gq MEw= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101912 20181130101912 42960 sub.example.com. EAtvAOPXd+lgKXYbMzvKC1ahxQtIw15k35+6kgcR/vU7xGLqHkpU0fu0 pG1cFvhDNuxA3E16TNt8dgnNL6GIJI+OE1VgXy9wj1C+9H3ERXcl46xq 9mGG9M4YDMD/TdZMta1ZkR6aiuLeaEAXe9XF5ZfFsEABdrLhB3Diup4G w74= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101912 20181130101912 42960 sub.example.com. U4Z/wPmkVfsoxVnjWpY3nzOOq/w7lUvP+CCbVPQpIWML628yTOTbgIBs Uf/iYRarxaZEF5LwJ0lJ0gHmiw4xpEv1B1Lk0UWLiOmQP0auWUKpTufM L6y3HLeav2yuAi7klfeD/8boTzNxr2GEAcgQ4OlrrcGHkNGnzFwWY9a1 Tis= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 42960 5 1 C430C3DFF8F700A924DB9F0EB1589D47E804631B
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101913 20181130101913 56744 example.com. G/ri3P6noC+ftYdFA35MrhZv0D/gHUISBYSuLVBir2+Bt9JukeVhqd9i zdjSXCIrxUdJUaPwSSEyLHvVOXJpR8SdtjnHR97YcxM69RSoinBpvBc4 Ey1ahaG1pOH12ipqVIwkJRIlh9C08sdyFTDALw4MwHVd8P+K+oSTEpO/ 0V4= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101913 20181130101913 56744 example.com. PbI0TTbOc1OZsplLREnmRXl3zYbj4CMIk7LgavRNp9+diDWksiR1nxWo szKMYfwjN6dxlwowAgL+frC6esvLvbV5BeDhR+emsf4ayKO6OSrCHJUK 5af7jtKkrLYuVCn3Ad1RZxlecv9IIJc6cjUg5FMm3+Riuq/PrekrDZqz Si0= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101913 20181130101913 56744 example.com. KgRA0DGIjVXsmx+oLWqWNrDhoTI4doL+wm1+BufgJkfcm8LstWnCre+M sY6rV9o+DM5RvtPj+5pwhrgAMJqaLgMTrEXCWsbFvEQU1jLhYpLRNJ5L 69AMOtfVUquxrdviPcXjzR8VbB+KvH5Vg1NlsuNlxtMbqS3Lex10LKlU NA0= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_referral_nods.rpl b/tests/deckard/sets/resolver/val_referral_nods.rpl
new file mode 100644
index 0000000..fcb5ee5
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_referral_nods.rpl
@@ -0,0 +1,205 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. IN DS 438 10 2 33F8133EB48EDB093839E985600EB7B7009EB5AC312D11CCA9007F6B 71D94D7B"
+ val-override-date: "20160309103040"
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+ query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Referral without DS.
+
+; 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 A
+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
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN NS
+SECTION ANSWER
+example.com. 3600 IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 438 example.com. MNa4O8/p0DQiRYjWaq7wxo5AYNHyQ7Ts6Awh3qXTr4nm6xm9pVuqOXsX CJlxHRIYZyZfbp3iQGxuUGq9Ks+/4MocFz1O4f+LNLOjVK0mjrnuJUnP Bj3+CLv0RSYmdtvClSu9I2GOTYIa3c29TTQNHjnVSe7ZdPjjsQkn1rW1 gtU=
+example.com. 3600 IN RRSIG NS 10 2 3600 20251231235959 20160308093040 2843 example.com. boNVuXxyhW+Gmiu+4ip1QQvIGqFNVsFfg1v+ywgc4+37ieQ5t+qJsHVm fJITRZrJxYQ6T/MkZKhpxLCemgFeKU6syWwoCfypnGino2G1urvqThna WTImSPhY/QsOj1ALy51d9Q+Mb5vt69XJt6SQvtNf6imepIFOT6CPSfjx BJ4=
+SECTION ADDITIONAL
+ns.example.com. 3600 IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 438 example.com. QKgtWex7PxeyCWG2pVw6kQNxWGr8u8hxtD8Zbc5Khu6q4cMFhoiBY9aA KaJCMnxn9GbSBtaCXARk6DKPfNGVZWeqVSap0uVqmlYJGNP1EGaNBRWJ FTYCHc6HCdtvEsuuhd+VX0YCBLfCt53+zdC3bYQH0U5PxduPkUMmdBvH F+k=
+ns.example.com. 3600 IN RRSIG A 10 3 3600 20251231235959 20160308093040 2843 example.com. VSq+DkxJYr9Z+uh3KgpyPNwtuim4WVXnTdhRW7HX90CP5tyOVjDDTehA UmCxB8iFjUFE3hlwDx0Y71g+8Oso1t0JGkvDtWf5RDx1w+4K/1pQ2JMG lZTh7juaGJzXtltxqBoY67z1FBp9MI59O0hkABtz1CElj9LrhDr9wQa4 OUo=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+sub.example.com. 3600 IN DS 38364 7 1 66DC14443014B2727261B50B447170DE18CF43A9
+sub.example.com. 3600 IN DS 38364 7 2 719A6680950A624D2C71A67981A7AF884C23E3C21074FF1CF8FB7EFE 20C52F97
+sub.example.com. 3600 IN RRSIG DS 10 3 3600 20251231235959 20160308093040 438 example.com. mu/x2yR8nFrwOnnfN7dMQ2e2MAAuZigua0wakXaPT0j4pe5AjQhriZXU pWLk5z77ck8Kswt+O23v1sUxmq1bUsIc2kw6N02UyiHnPoxmcu0rg0Kc ustfA++YT5/L+fpq5PRm3kKfHLo81WdZ/VJoaafH/kXHnZTcP62ZoteQ sqw=
+sub.example.com. 3600 IN RRSIG DS 10 3 3600 20251231235959 20160308093040 2843 example.com. ZLx28ZpzPpaafVH3hqV9h6AZJH7Zn0ELOfFxodogJfWue86xjuWhzpBV O9jCOqyURitiBgKNYazghmciNw4wzANbz+hhtc4rIPsfOr/8Vn3pjyev yScX227d16hXKBNKTrAeKNvM8fVPT0E7cG3CY0mzVp3SVqrr+6hl+dgb gXU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 10 AwEAAcOHC7D2ZcG5M6MK5If/60+vvBM67BC8qUx04f6Kcvhx9GBMIMYz 87m6m2P5WKafW5AN1K9jY37m2fU/TdACQNzqu4wyVsOQefke/v2fgswg NgneP/C7cpyBVuK+8BUHjrorfLORClD3mbQMQldaaO2h6+OArAGHlFNI oFsuCjyR
+example.com. 3600 IN DNSKEY 257 3 10 AwEAAc4VCSEu1C1lAxuZMC8tSyissZNXC2lgS3zNvAvFdLtAsSbhB1cj dLCtTWUv1Ki/T+iWn10iemLQJ0S6z8wK+a7maC3ELZP1qoSFln+FiAsZ xYK72/XDEYMMp01F0gxgzZ2alWx3WKm2mELXf/ezEx+7X2ZNbwum5TKt FxtvotmT
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 438 example.com. cas8JKwtLUIItwOgrDrDG9pSkqiYw3r+8vyvt962kjHFBNG0D7AeegaO GMSWRziqA4L8xdgP750rLR5CRFQ9oPQlr/RWnsebGdJ3Yohwwa04HE6n OvR+o0u0oqNQ+P5KinxVKSv0Ru+BVMPHRDfIXN/FD5p9+nvIrnjXQlI3 vvM=
+example.com. 3600 IN RRSIG DNSKEY 10 2 3600 20251231235959 20160308093040 2843 example.com. uDLTMMTvJCcetKr6THEJ8Rn0gMLPFZTbOGJBZyZ2E5F9KkPSS01Nm6/P e+j0R3ObYXodqnZIY19fzXJKS2dJktoXkqNLBW/SpWTlFzpfHKCvTbJS VLrJ/lrEunE5cgSAqBrbAAuJrFpX/gaavqokElnUv1Mki2agTH1dTZyn X8M=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. 3600 IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. 3600 IN A 1.2.3.10
+ENTRY_END
+RANGE_END
+
+; sub.ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.10
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 7 AwEAAfXXu2eDy9QsjLuHgEMWmG03TVauwmITCq520ANujsTZlPKyQKJe xyrYm61e0RuQJb5dB5JnE0O3YYJOpnrl8keieAqVt1efnNtcn8V1em48 et146ZYFAUb/PMdTOgd2XJnhVEWD3VsZbWNMCxP1KcJTATAaLDVCY//E sc9K3CvGUizNcSoTK2rGS73A6GqmvVNnGir6AQIZifkvb6PKzF/hVpS8 cgvKF/UP8hu+0Glbq1YYTFrXMUBzKUH+X19lRvk3eLHurSvGjDEM3ZO6 tp1QdpzIRPzYKENG+qs07dhgCZyb4zqwEycmL9/Vot0ByTGbeHvHN93P PrLxcM5zlVk=
+sub.example.com. 3600 IN DNSKEY 257 3 7 AwEAAfTD+gzZ2g7c9VoOUR2ekQiPNEyqcyl0MZ4sD3bleU8D8hQdDgAI 1G38raY3xmNea8yLCQYF0x00QbmKtzMjpZqKfsCFZDX6lBV5dP8IwJ0D F6L4hjO819IInf6upH9tfQNnueflWyKzfg2zitV+ILZ4YtZViyCKqayw CSPE8OkFlszZyCESzhrXqoPdJ0oHdZCG4lOlRIgZfrMLC4yTI56iiwFc UsKy7BhNPW+hcc4r+0WB9BCpsiei/FjPMcyeMrx1W+s/xgW7/55Nq+dM PUn9v24uCptZUupn/7CRgMGM5DmWe94QIswAQjH2mXNfOgVPOiceLYzU mcNoKudvSUu1hbzJbVHA4UNWDm2vvsdsEzrOEzqO0ZVczLoZzWU4WpLf IlKm481OKkzAP9Y5F4iTTSIrbVcAuEW/iz5zfqWirgGniiTCszAie8lH u1EPBgGnfotqhq9IbNA6aKNUreJPLvJnds7J/aQmiSdm15pAq71B26X5 BmoZVhbNmh6MHXkq99EIt0yRMEOfPLRN7euza8Idd4mA+E8jpdgtYdJD LC7f2SoQxaN4RMr5MC/Z1ENQgLMYRkd87pEQycAlNAoWMPJMuoDNdwhV 15F8+pvkvfu5cm9FoEWvgS+onibUM9EC9L9EDdfDdW1Hf1QfUinVoMf/ Szf1urkPVNl0nNYF
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308093040 27527 sub.example.com. CzB+UmU98ArL/HRIOMyHV87PPYoH3G/KKdJlbjtNZAaHG+K6Lad0pKW5 wZR3By1AMlIN9ta8374q+nCEtY+ryM7yBFpzSTmBqrf7ZhkxWh2OSnrI CllC3CsSeltsOq/AEQZwJLQG/gQiCqqQnJY4mneKhcg0Bzc0hpe8c1Dq C5eaHKqt7BaVRO1Ix6OKqEqjHzwd5HpKd2pzU91HyfvHsWrOnKyIwHJP nyOcuHESKN97YLey9Onw0eXjUYdbG5GM12OV1qawShOthcm7XUQiJ0Xl V7y0pNekCxXZdQQI/XhVj8XyLa5pLy8PaOLqypbMBg19J5diLUZYAt/f Dj/EzQ==
+sub.example.com. 3600 IN RRSIG DNSKEY 7 3 3600 20251231235959 20160308093040 38364 sub.example.com. xzyO85eLRwVsg9VI4RnXnjrwf0/TCMub7UcOr7TWWhwt9iR8KFSenx17 EVG1OlgEzRrdZLQWJBPlNBR5aLpsNlzUj+cnCpdG6NtUjcdqRJxb+64Y RktG5Hz35AV7Iegs3L6tFdE4J2moGCDC0y8Rm9wyL+mCUNylpnXUOo8D NDpd7VcYKoieGWxLd8OK5aCYUlB2ziL9yIMOZR+sGEPZWR6ABXDbUF6S ddj7lbZ7y+GHp2XpjDvpmbRSrznNmopzn71O59sCiog8obnGif02EXEn 3L2a8eGx3tMhCZZAPaqJrocTIAmye0vLt0xT22WFPxmcButV1UYZd00m KwJaKgUB450wdub4aAXVvtTx7Us++6zRepZ3VtXARDT+qGzBUkISEuSM FbLHlqqdQeLTcfdu7azEfyCWudoDTbXejFQjFtWkSo6SwEV8sC64rMV6 AFytMBvksBD0tjGrWvPkdDxWa43SQja8BiTlKugtM7zJgqBH9pi1MN4o asc3hyBHBKEiX8ilK7GBTqFph8tdRxawWsaK273pATBLeQfHM2jKcg5p ULhSLxYDvJ+TgYKJkFyFd4C78HffgrashJvrxNsK1QQk05bpTGk9j6ja fzzyB6mDhWGLux1/i++akwTOKsWmFnNe6MXKTN1gnEw4pny3m7zBmh0x gFkbfEo1aDU=
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; cached answer
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 1.2.3.123
+www.sub.example.com. 3600 IN RRSIG A 7 4 3600 20251231235959 20160308093040 27527 sub.example.com. QiGpNqXdMQWFYzXMk0FhqEJuzAYijUHOywSUS/hgDxoxBRXBam/tfb3d 1Yqv4+ZVI06ZzOvC2YHRCULjBqjzsQbxxqzPtkfBWbAP/urRFsuwo1zx OSbW9xSUYmHbHicRLFxijvZhuJXX/11tja4dj9ZOeYF/HdWP3r38H4WT /8w3vKr7h2StmL2fY43LxqQm23voNiqJ1dsXLtjyoeIqH40jdMqeLKB+ PJ9p4d3HzOg7uIhLSQYi9slUBWQ10a4uxEBEXmeCI5gLQPot8ijBxF2t TsIOMMPieGC5Zlt9YeT6fsdM6HiUDrfCGbuf9TdlmQqNwRcd8orW58HV SgGalg==
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_root_ds.rpl b/tests/deckard/sets/resolver/val_root_ds.rpl
new file mode 100644
index 0000000..e8aff25
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_root_ds.rpl
@@ -0,0 +1,86 @@
+stub-addr: 198.41.0.4 # a.root-servers.net
+trust-anchor: . 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5
+val-override-date: 20180410000000
+CONFIG_END
+
+SCENARIO_BEGIN query . DS
+; FIX ME: unbound queries way too much, so not providing all those answers
+; pdns test hangs, I don't know why
+
+RANGE_BEGIN 0 10
+ ADDRESS 198.41.0.4
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. DS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018040900 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180422050000 20180409040000 39570 . oV+H+628tDLFEEoxgZNbRDA4Die3VEdejO7iMSHLEYyX8oFwhqoWF2gp XsRlpEnrt07gRfabkPW3DSzhl8syZ+1m6pQ0JDLLBAGODuEYMOYLcJ4n b4Z4WbKwtaL7beRhLf6aLvh51Ozv8qpmV9ZAC7OmlqUt/1h5V1j0/Apq Df3DijQrXs1SVzMWRsKm3kvutfA7a1CPzMs8RK29ujtlZqm0dIEfresJ VtzN2cx1kzvppNF0pNFXzFwh+emZe/eiV4ZyJp4Fm0UrsLnGqLqoQqkE 63panwTQ7nA8VqbrMxj4DGZGgsVcQudzmPfdUYlXCbG6hLO5yyGNFn2C lehfcQ==
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180422050000 20180409040000 39570 . z4xVID27wqu5mcYobS0nFvR5gHsud2HuGKxpvx6gVcyoDMa2vFBTTEqM q2eAATusuN+VSFSgQcoyE8Z7QMVYWkm/nC1LenL4rHLhABRtuo77RwmU R9R5/xkSNoTm7ZL420FWGG3TKrSCDnpEkkloBvtVJsJ4YCg6YuM0hPd2 2P5+teSUH1Py2ODGCVNgTFiUeK6ZVkIbnvL9VfC/g7v4nGLPuDUNsMmr aJ4mgnpqZJZJr2EYKTzxtzKnadXgLEDnwUSczY7yc8ZYU9+6VIu6Hlvm lttaDagf+xwT3BaultN3xOQfQ9BG+dqTuMyA4ZwuirjKN9s7uzqUF+y0 Pl6huw==
+ENTRY_END
+
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. DNSKEY
+SECTION ANSWER
+. 172800 IN DNSKEY 256 3 8 AwEAAdU4aKlDgEpXWWpH5aXHJZI1Vm9Cm42mGAsqkz3akFctS6zsZHC3pNNMug99fKa7OW+tRHIwZEc//mX8Jt6bcw5bPgRHG6u2eT8vUpbXDPVs1ICGR6FhlwFWEOyxbIIiDfd7Eq6eALk5RNcauyE+/ZP+VdrhWZDeEWZRrPBLjByBWTHl+v/f+xvTJ3Stcq2tEqnzS2CCOr6RTJepprYhu+5Yl6aRZmEVBK27WCW1Zrk1LekJvJXfcyKSKk19C5M5JWX58px6nB1IS0pMs6aCIK2yaQQVNUEg9XyQzBSv/rMxVNNy3VAqOjvh+OASpLMm4GECbSSe8jtjwG0I78sfMZc=
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 172800 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU=
+. 172800 IN DNSKEY 256 3 8 AwEAAaDJd0KOMYGCEF0/cftC2hrFtz5GSn1HOiaxEp053AfbxQ3pT8BEtahPiUkCo1Qx4PECJ23YwaFhfWWjapr6AFxhD8klfZGp95ickoRlm91ZzXX/mcfn9vlUpZK2M8qjljNMzZJSopFY+cxRvib2Irb6YeP2a0vppaLnvR4BeOyEkQolLqvVHW7UqDFiP/CM15BWBsAIdbyo8L1h3OeP63TaYIrWttjGBILeZinSaJ39amiVs8t00RjTaKVo3vY2k6dje1Rh1ELqjNj8+cKA8iWC3VU7ApkyuGDy631RDILa6wCgcBVCzfFfOthQILxQra88tNWzCVoryQ89f1WjBJc=
+. 172800 IN RRSIG DNSKEY 8 0 172800 20180422000000 20180401000000 19036 . D+U+adJuahA0uubWyJxBronfunX2Bqe6GnttiCzzxby6V5bX51IX8lcMCUHt7e6peQhSWcoKGJvsncX0gYj2PaZjUvZjwn2f08NmoV99kUJlitP6rdyk0tWu8PnYfF/6pahezkbq8Wwl0jVndl6jQ3cAskuM0UDWmpQCxAnhoQPkJjibZVp/FpYG0hJeApC8wfOAWh215pbACNwPCA4N0dj5F6KOPERViDEV8/qq7yBMebB+rp3BKT2415pIcp/CGN3cdJIpbCCiLjK786fjNeqxlXziIjFxiFaqw3Jk1cJqMhnluxF7iA2bOH315jjkj4VcDaBJDCIKrcdLv/9b5g==
+ENTRY_END
+
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD AD DO
+SECTION QUESTION
+. DS
+ENTRY_END
+
+STEP 11 CHECK_ANSWER ; unchanged from the authoritative answer
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer authority additional
+SECTION QUESTION
+. DS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018040900 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180422050000 20180409040000 39570 . oV+H+628tDLFEEoxgZNbRDA4Die3VEdejO7iMSHLEYyX8oFwhqoWF2gp XsRlpEnrt07gRfabkPW3DSzhl8syZ+1m6pQ0JDLLBAGODuEYMOYLcJ4n b4Z4WbKwtaL7beRhLf6aLvh51Ozv8qpmV9ZAC7OmlqUt/1h5V1j0/Apq Df3DijQrXs1SVzMWRsKm3kvutfA7a1CPzMs8RK29ujtlZqm0dIEfresJ VtzN2cx1kzvppNF0pNFXzFwh+emZe/eiV4ZyJp4Fm0UrsLnGqLqoQqkE 63panwTQ7nA8VqbrMxj4DGZGgsVcQudzmPfdUYlXCbG6hLO5yyGNFn2C lehfcQ==
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180422050000 20180409040000 39570 . z4xVID27wqu5mcYobS0nFvR5gHsud2HuGKxpvx6gVcyoDMa2vFBTTEqM q2eAATusuN+VSFSgQcoyE8Z7QMVYWkm/nC1LenL4rHLhABRtuo77RwmU R9R5/xkSNoTm7ZL420FWGG3TKrSCDnpEkkloBvtVJsJ4YCg6YuM0hPd2 2P5+teSUH1Py2ODGCVNgTFiUeK6ZVkIbnvL9VfC/g7v4nGLPuDUNsMmr aJ4mgnpqZJZJr2EYKTzxtzKnadXgLEDnwUSczY7yc8ZYU9+6VIu6Hlvm lttaDagf+xwT3BaultN3xOQfQ9BG+dqTuMyA4ZwuirjKN9s7uzqUF+y0 Pl6huw==
+ENTRY_END
+
+; from cache: exactly the same again, but now authoritatives do not reply
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD AD DO
+SECTION QUESTION
+. DS
+ENTRY_END
+
+STEP 21 CHECK_ANSWER ; unchanged from the authoritative answer
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer authority additional
+SECTION QUESTION
+. DS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018040900 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180422050000 20180409040000 39570 . oV+H+628tDLFEEoxgZNbRDA4Die3VEdejO7iMSHLEYyX8oFwhqoWF2gp XsRlpEnrt07gRfabkPW3DSzhl8syZ+1m6pQ0JDLLBAGODuEYMOYLcJ4n b4Z4WbKwtaL7beRhLf6aLvh51Ozv8qpmV9ZAC7OmlqUt/1h5V1j0/Apq Df3DijQrXs1SVzMWRsKm3kvutfA7a1CPzMs8RK29ujtlZqm0dIEfresJ VtzN2cx1kzvppNF0pNFXzFwh+emZe/eiV4ZyJp4Fm0UrsLnGqLqoQqkE 63panwTQ7nA8VqbrMxj4DGZGgsVcQudzmPfdUYlXCbG6hLO5yyGNFn2C lehfcQ==
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180422050000 20180409040000 39570 . z4xVID27wqu5mcYobS0nFvR5gHsud2HuGKxpvx6gVcyoDMa2vFBTTEqM q2eAATusuN+VSFSgQcoyE8Z7QMVYWkm/nC1LenL4rHLhABRtuo77RwmU R9R5/xkSNoTm7ZL420FWGG3TKrSCDnpEkkloBvtVJsJ4YCg6YuM0hPd2 2P5+teSUH1Py2ODGCVNgTFiUeK6ZVkIbnvL9VfC/g7v4nGLPuDUNsMmr aJ4mgnpqZJZJr2EYKTzxtzKnadXgLEDnwUSczY7yc8ZYU9+6VIu6Hlvm lttaDagf+xwT3BaultN3xOQfQ9BG+dqTuMyA4ZwuirjKN9s7uzqUF+y0 Pl6huw==
+ENTRY_END
+
+SCENARIO_END
+
diff --git a/tests/deckard/sets/resolver/val_rrsig.rpl b/tests/deckard/sets/resolver/val_rrsig.rpl
new file mode 100644
index 0000000..64d8fe4
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_rrsig.rpl
@@ -0,0 +1,169 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 23027 7 1 3B2616A3B46D23EA5E4D709C5D157000779D66A1 "
+val-override-date: "20181130121918"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with qtype RRSIG response
+
+; 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
+example.com. IN A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101918 20181130101918 23027 example.com. NL1XpsE+Edp+/XshOxsDvyADfCIu99Un1DSLAYU9kmVa+6GZMgIQchPl lRcC3YboPLAGp05RP24XBk/GB6pwlLCjg8BgxdJ6nwAXSUwHYTHFs/vk BMyGIbMgYp9PlB80GHSVUV9NK5A2QpIVnLLxuWXz+T3x8+HDAVa4X6mo n3M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. VW19ITdySwfn5/PP9dW5rzbKtvFs3F1LpMXcMLgPYriNM2t3xsGQZa+T qRlUERcaUPrmgLtMQJgClTg/Pd9wdn9TZmAt6gtd9PDfWe2n3r4SugCR BxJ9QHaYCCSpNOrir5CyblUpefP48VP+glDm0H3+rlSjjbG2K9bgHsKT 0iM= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAa+ON9qDV53VRATmSZhoARXGtxj0nRF6zg1/erJ9mRNlDZL7bJ/Q oDmfqIRdsTCuXSjLXsNAPVxVZI4YvSWWoe8xVTNa3S2z3PiCZIyGNnD/ d6L42/RxhBureNqf6iRD4smn2BPlf4mk3QHVAAcOvNrVITJExTcxqM7H VK/4eLgP ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101918 20181130101918 23027 example.com. K8QveHt1/E6aSUv2Xo0nPaFi9ehOrn5iQCLyo+TNdgqr6qaJTfqbXulF E05EHUacTzuWlaSlyR1AULB6IHi4/HEpRySPudVayZe6qASjeGI6v7D7 9nuJih5K/9kEBYU645291R06DhI1B5PcqlfLcKiwO2Bpax+n1Rc8v23k 600= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101918 20181130101918 23027 example.com. NL1XpsE+Edp+/XshOxsDvyADfCIu99Un1DSLAYU9kmVa+6GZMgIQchPl lRcC3YboPLAGp05RP24XBk/GB6pwlLCjg8BgxdJ6nwAXSUwHYTHFs/vk BMyGIbMgYp9PlB80GHSVUV9NK5A2QpIVnLLxuWXz+T3x8+HDAVa4X6mo n3M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. VW19ITdySwfn5/PP9dW5rzbKtvFs3F1LpMXcMLgPYriNM2t3xsGQZa+T qRlUERcaUPrmgLtMQJgClTg/Pd9wdn9TZmAt6gtd9PDfWe2n3r4SugCR BxJ9QHaYCCSpNOrir5CyblUpefP48VP+glDm0H3+rlSjjbG2K9bgHsKT 0iM= ;{id = 2854}
+ENTRY_END
+
+; response to query for A
+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
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. VW19ITdySwfn5/PP9dW5rzbKtvFs3F1LpMXcMLgPYriNM2t3xsGQZa+T qRlUERcaUPrmgLtMQJgClTg/Pd9wdn9TZmAt6gtd9PDfWe2n3r4SugCR BxJ9QHaYCCSpNOrir5CyblUpefP48VP+glDm0H3+rlSjjbG2K9bgHsKT 0iM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101918 20181130101918 23027 example.com. NL1XpsE+Edp+/XshOxsDvyADfCIu99Un1DSLAYU9kmVa+6GZMgIQchPl lRcC3YboPLAGp05RP24XBk/GB6pwlLCjg8BgxdJ6nwAXSUwHYTHFs/vk BMyGIbMgYp9PlB80GHSVUV9NK5A2QpIVnLLxuWXz+T3x8+HDAVa4X6mo n3M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. AudSERijN/0vKfjRw0R0ER2ogfWxZlSQeRKnZSrqS0NXALQjkl0AosJO sMMdZZ3j3JOVqlrDTRFUtHgYl7BKgsy0srbE7RDsgFTjMmGAcgTZE6i1 lv+At+P93kZJemNpIypOTs0AlU8IoU/p+VnmQ8MIQ+lCxNIOQFTLRR3S Cn0= ;{id = 2854}
+ENTRY_END
+
+; RRSIG query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.example.com. IN RRSIG
+SECTION ANSWER
+;www.example.com. IN A 10.20.30.40
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. AudSERijN/0vKfjRw0R0ER2ogfWxZlSQeRKnZSrqS0NXALQjkl0AosJO sMMdZZ3j3JOVqlrDTRFUtHgYl7BKgsy0srbE7RDsgFTjMmGAcgTZE6i1 lv+At+P93kZJemNpIypOTs0AlU8IoU/p+VnmQ8MIQ+lCxNIOQFTLRR3S Cn0= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101918 20181130101918 23027 example.com. NL1XpsE+Edp+/XshOxsDvyADfCIu99Un1DSLAYU9kmVa+6GZMgIQchPl lRcC3YboPLAGp05RP24XBk/GB6pwlLCjg8BgxdJ6nwAXSUwHYTHFs/vk BMyGIbMgYp9PlB80GHSVUV9NK5A2QpIVnLLxuWXz+T3x8+HDAVa4X6mo n3M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. VW19ITdySwfn5/PP9dW5rzbKtvFs3F1LpMXcMLgPYriNM2t3xsGQZa+T qRlUERcaUPrmgLtMQJgClTg/Pd9wdn9TZmAt6gtd9PDfWe2n3r4SugCR BxJ9QHaYCCSpNOrir5CyblUpefP48VP+glDm0H3+rlSjjbG2K9bgHsKT 0iM= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.example.com. IN RRSIG
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.example.com. IN RRSIG
+SECTION ANSWER
+www.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. AudSERijN/0vKfjRw0R0ER2ogfWxZlSQeRKnZSrqS0NXALQjkl0AosJO sMMdZZ3j3JOVqlrDTRFUtHgYl7BKgsy0srbE7RDsgFTjMmGAcgTZE6i1 lv+At+P93kZJemNpIypOTs0AlU8IoU/p+VnmQ8MIQ+lCxNIOQFTLRR3S Cn0= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101918 20181130101918 23027 example.com. NL1XpsE+Edp+/XshOxsDvyADfCIu99Un1DSLAYU9kmVa+6GZMgIQchPl lRcC3YboPLAGp05RP24XBk/GB6pwlLCjg8BgxdJ6nwAXSUwHYTHFs/vk BMyGIbMgYp9PlB80GHSVUV9NK5A2QpIVnLLxuWXz+T3x8+HDAVa4X6mo n3M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101918 20181130101918 23027 example.com. VW19ITdySwfn5/PP9dW5rzbKtvFs3F1LpMXcMLgPYriNM2t3xsGQZa+T qRlUERcaUPrmgLtMQJgClTg/Pd9wdn9TZmAt6gtd9PDfWe2n3r4SugCR BxJ9QHaYCCSpNOrir5CyblUpefP48VP+glDm0H3+rlSjjbG2K9bgHsKT 0iM= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_secds.rpl b/tests/deckard/sets/resolver/val_secds.rpl
new file mode 100644
index 0000000..1776de8
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_secds.rpl
@@ -0,0 +1,213 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 50354 7 1 4BAD1572F3C729F6F04749D8B19E00D8356E3871 "
+val-override-date: "20181130121919"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with secure delegation
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101919 20181130101919 50354 example.com. t69qTSQb8vTWf/DKSpTtvWAACIa9sKDKmOILmY73STpsvjo036t1sBXV iJGBtb6P0dC/gUeAXZdZYgTC2vsTJLSjOtzc8lUTVgswvn2QDSaY8eU2 5UwgGbqZF5cOW87a/NQV1pFZSWi9eFo8IBvbCP+mio6wKvFNqQH7Ja8T aNw= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101919 20181130101919 50354 example.com. Jo9iWIAFOGFQlSzoyXWSRmuZvftlr6NyyI2wFnYVa94mivyRbJViL3G9 vPbhSuP7lkD1DzFbH2nztu6LBqavrVCQCGsEixo6f5eUhywptl/hLTLp 8shS5iWfGvZKXobH9n9ryJIQfwPoVHhEfx5FpOKR+A7ORQOgsQb9TaGv EX8= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcQBfewjdxsAmqiSCuk/SB/CrZSA3C4DvikJfW9pVEqRbEwe05Ii UmGaajAfF7RtC5GD1Lq7T0wVpIJLl7VwX2oCB+jvBIjGPfQ9yvyrfEdM r/hIQlFoEuPqAOwzxJUiOyJOh6utSEwRSnWLoqd8xsxnUJWC6Q7jLgs1 VF4YEnJ7 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101919 20181130101919 50354 example.com. a2fVpjpw/Bf7coByItHRN6tUhnrSLsvAxGyYz4YyNlRJeW2erOgYvwSQ 5JYRwQQaUrtMD1AnBE9B0Fdey5gIi/9xl5LPBqYbfTR9yxcWJoUwmwBs 2JDx6dwzIr5DItXgSNjKd0x0A2cEjFO25XR6R+ukvFZfIBaZW4d41vjw AFM= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101919 20181130101919 50354 example.com. t69qTSQb8vTWf/DKSpTtvWAACIa9sKDKmOILmY73STpsvjo036t1sBXV iJGBtb6P0dC/gUeAXZdZYgTC2vsTJLSjOtzc8lUTVgswvn2QDSaY8eU2 5UwgGbqZF5cOW87a/NQV1pFZSWi9eFo8IBvbCP+mio6wKvFNqQH7Ja8T aNw= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101919 20181130101919 50354 example.com. Jo9iWIAFOGFQlSzoyXWSRmuZvftlr6NyyI2wFnYVa94mivyRbJViL3G9 vPbhSuP7lkD1DzFbH2nztu6LBqavrVCQCGsEixo6f5eUhywptl/hLTLp 8shS5iWfGvZKXobH9n9ryJIQfwPoVHhEfx5FpOKR+A7ORQOgsQb9TaGv EX8= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 58437 5 1 CA63FDB4AD33BB461138E76EC4DC94DBE0F038A8
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101919 20181130101919 50354 example.com. g46bxGtNNjp5Zw4L06Yfz/GHWoZbuhlTYMjy/pwREOo1ns3YwF13EK7y juBEsnzR9t+38koZNRgQ1GGI2cAhBxt95xakkvop64zqvdQ9oLqUdapp LfbuPSruLmNUdv6iePkjBuBiSa0XDMaKzfj+gMaIti/43W2wGFDpD+5Z x88= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 58437 5 1 CA63FDB4AD33BB461138E76EC4DC94DBE0F038A8
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20181230101919 20181130101919 50354 example.com. g46bxGtNNjp5Zw4L06Yfz/GHWoZbuhlTYMjy/pwREOo1ns3YwF13EK7y juBEsnzR9t+38koZNRgQ1GGI2cAhBxt95xakkvop64zqvdQ9oLqUdapp LfbuPSruLmNUdv6iePkjBuBiSa0XDMaKzfj+gMaIti/43W2wGFDpD+5Z x88= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101919 20181130101919 58437 sub.example.com. ItcLJAYgLspxtEVeL8fZEb8j1TC6Y92edHMA2/wXO7xiQ+hz7RHJvp2x z3KAAhFX9TJgcrBbWKfpnZ51+IOTgpDLJvZMCsAmHJNmVdITbzzQc5O5 AA2mz0j5Gu9HoMFYZjgHAxRB+YJEYzqMOFAdp4kDhKyVXsqQkiZ/P2BD 41I= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101919 20181130101919 58437 sub.example.com. Al3EkHOo8/SiRqHaHxOA/d2KWRRUaTRklYFlh32mjW20m1oY6G+UpuuZ P6JoNxb7MuME2hd097u8voJlpOtPn90vlTrPgl8QfYroicHWhAepHkT1 bRdwOqVnkUtw4B3uAkz/kkSgOmKsmqvcSRMIqULTIVeSXBPHE0331hcF uGc= ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 58437 5 1 CA63FDB4AD33BB461138E76EC4DC94DBE0F038A8
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAcidUcbaG85xnWPvZBRbP2yb8hg06PeLTFOpZT2GUMRx3EaOanGC G+qffFqMx2427wBoHXXWTlN97aR1H/GBjnH65BQhXC0LFnamFpIA+5kg x8Q6qJP72mGfx0lSnvzSsdnwGJ2DYcSV44fQ/edMxW0YlQH2rkNGlzrr KBMCv3ip ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20181230101919 20181130101919 58437 sub.example.com. nhsKPftsVfsu1hx+zqQ2oCx+NEVzuyIHLAgylBnIGG/alPdfne8qUzPB f3KNGTwuCGfIhUBL7TveVAm5WcPfFi7BDW0uhHqFyJJoJvMLBuiLmCL5 tB13KS2f/HaowRAFuua7g/1e4SjJ0FXfU+/xuP0wrMsI5GI9QKZJr+Bq yi8= ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20181230101919 20181130101919 58437 sub.example.com. ItcLJAYgLspxtEVeL8fZEb8j1TC6Y92edHMA2/wXO7xiQ+hz7RHJvp2x z3KAAhFX9TJgcrBbWKfpnZ51+IOTgpDLJvZMCsAmHJNmVdITbzzQc5O5 AA2mz0j5Gu9HoMFYZjgHAxRB+YJEYzqMOFAdp4kDhKyVXsqQkiZ/P2BD 41I= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101919 20181130101919 58437 sub.example.com. Al3EkHOo8/SiRqHaHxOA/d2KWRRUaTRklYFlh32mjW20m1oY6G+UpuuZ P6JoNxb7MuME2hd097u8voJlpOtPn90vlTrPgl8QfYroicHWhAepHkT1 bRdwOqVnkUtw4B3uAkz/kkSgOmKsmqvcSRMIqULTIVeSXBPHE0331hcF uGc= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101919 20181130101919 58437 sub.example.com. gXjsKvu10zuDSjsMrDT3GN2tjkVbC4xrGjvY3VUL2+RuNI0iAdNUngTv LcHvFpS8jdgQ8AKRNXjL+I7buQmnmfA335Atlzk9plgFxjv313fn7ri6 s4mhBy6+Kyjf8v/wd3cnO9myXxSGAtp7sUcYI3D4CJaWiu8JQ4GgnE+P fuA= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20181230101919 20181130101919 58437 sub.example.com. gXjsKvu10zuDSjsMrDT3GN2tjkVbC4xrGjvY3VUL2+RuNI0iAdNUngTv LcHvFpS8jdgQ8AKRNXjL+I7buQmnmfA335Atlzk9plgFxjv313fn7ri6 s4mhBy6+Kyjf8v/wd3cnO9myXxSGAtp7sUcYI3D4CJaWiu8JQ4GgnE+P fuA= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_secds_nosig.rpl b/tests/deckard/sets/resolver/val_secds_nosig.rpl
new file mode 100644
index 0000000..e6d44ab
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_secds_nosig.rpl
@@ -0,0 +1,233 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b"
+ val-override-date: "20070916134226"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+CONFIG_END
+
+;test from testbound
+
+SCENARIO_BEGIN Test validator with no signatures after secure delegation
+
+; 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 A
+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 A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; barely valid nodata for AAAA
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3
+sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899}
+ENTRY_END
+
+; barely valid nodata for AAAA
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN AAAA
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899}
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.sub.example.com. IN A
+SECTION ANSWER
+ns.sub.example.com. IN A 1.2.3.6
+;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}
+;sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+;www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO SERVFAIL
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel.rpl b/tests/deckard/sets/resolver/val_ta_sentinel.rpl
new file mode 100644
index 0000000..2739010
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel.rpl
@@ -0,0 +1,586 @@
+stub-addr: 2001:503:ba3e::2:30
+trust-anchor: . IN DS 48409 8 2 3D63A0C25BCE86621DE63636F11B35B908EFE8E9381E0E3E9DEFD89EA952C27D
+trust-anchor: example. IN DS 4759 8 2 3384CAE149834F17054DD9150E8C33D3979C4092F5C1B8D35E17A3C36A83810F
+val-override-date: 20180601000000
+query-minimization: off
+harden-glue: off
+CONFIG_END
+
+SCENARIO_BEGIN draft-ietf-dnsop-kskroll-sentinel-14 section 2
+
+
+RANGE_BEGIN 1 1000
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 198.41.0.4
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN SOA
+SECTION ANSWER
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 1814400 IN DNSKEY 257 3 8 AwEAAcliJP8Jh/RjL3c8eaUj8dzVdEksENKubqVA5FdrDJ2rC0O/bGG/ MVZt+WacE1o1mRVwTT/TrhhZUAzZ+qOcpB+IWxURsR4vVqVwakHMny7D 2aLXKoVXwTo/VhAQtHDw5G9bxGgwybPUtd5Vz6EIenUsmNYZ+Spde4l8 vpw7UISVL6q0C1mwHMN18P/1yfHmbkS19b6B1S9Y2aputccF1lso3yiF Ig7UNqqD4PNxSo4jByDnajQSP3qg/LSJSOnzBIumb8wc6svxgugy/pxr BFKgGGk4/JdJCKufdfU5jFX4fJ3HM37G/RccrtGhIf2Z1utoOyaILoa9 wT3O1WaYG/U=
+. 1814400 IN RRSIG DNSKEY 8 0 1814400 20180629135151 20180530135151 48409 . HRj68PBD0cR2p1njZcMUBecR5DiBbueyhIX1oqc9K9Rig5i+ONuozacm 3F4kg9DhUYb/1W6+PSp9YLyrJtCZOFLqkTjPiOAyiE6zVAE/U5O5LRZ/ FjqRQoWuA1cFZtrLokaWmW9GS5Kb2+PUCJY5NRz27JFSvaRRkoHIFf4o mA6eQsuWt28Itx0VGPL9+mR+2B+IcnmN+DZb7mxoRknOh0WyNop4eiep oSZcCihYHOdesCtmrxoMkwGEHZpu8a6GN7jaeNXXNUulwQYfzUZJZQo1 Zr9cN7kzIZ5tAs9ffnPRcWVO61MQTxUtuGbipFpba6RhGmML8oO4JkOJ Itp6tg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS rootns.
+. 518400 IN RRSIG NS 8 0 518400 20180629135151 20180530135151 48409 . ZBLk+sK9ky+YBmzceXbBqEUyBc6nWfAtF6vCK/6cCfL1AxBYOoxdwE/G m0oRAl5WHRrreDSM2t79jcyyUZyyOcee2j/mLPjLdJPQr0Dw9KY+843L o4VSWV0L9adSzgXgvQF/p4yW2zNbHia7doA9GTDjkQFj2+7HgdJdGk8S I2GCx822fqzMCdS3XerIZ4EMz8Lt1sWaexdCgi0sCn9SvqzNHTaIXirW /apL0ohiBNp23LGa7+/7UvNrv+Y/gHpKk2bUytnS7soOocd9XpTekBY7 jlRlmnHTAdn9b9Zj2PHn72v1RYIywP33Qb9ze7i2v7s12uUR3lJt9sd/ WVeuXQ==
+SECTION ADDITIONAL
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+rootns. 86400 IN NSEC root-key-sentinel-is-ta-00000.test. A AAAA RRSIG NSEC
+rootns. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . noqU9JO9z5QXcedzsm7E6RZ5aIIocIH/jSedo6Zy+GImRTeHpc0le399 DUOsqGlcagx7EWRerScB+xmpL7DxKl0FFyeG0ORvPjJ6IyCFTecWjaKW YVurQnzALW+LhfsPSTxBMnnRhxT5Qrw4dtO0gx7fWyssKUnsMcBdmESs tALFNSfJpiV7so9cK2ssHsC+jkM0AQoemSKJrTesxm8FP1BGT27tz/vx yWIlOUGc8/gBgHo4hoXH1oyCrw9KU9kczRqw4CoCGJtZ2/k15BfmbPlC kLrvLibEmp6OYPVWfJRG79uDHhT+Tul07j26WmA+A7IWXSye8W51WbdH 7gJTKQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN A
+SECTION ANSWER
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN AAAA
+SECTION ANSWER
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . qWJh+EE/O2w382vLo53ci9i1O/rAzJUUnZPmLF+GCwmLLhDl6tlI3y5A cALqIHkK1vrXzD+mED78YpILzZ73izRFieY6DxMtAXViqH9U8KSy6KWp tAWUASDe1gj9DGdDeiKdTAIo/2qk1PiGdZNc2E9vQLIUTJNfwV8aZGIt PTgl/efGEIMGGFQW5RPbDZpcJLQ11/RUi9FHQyseZRwkCa8EiEfgvPJ2 /rwiCPUcM6BdYzKoZ53cAHBbeKkvgAOpQ88qDvtE12aF9F8anxdHd0Ru 2DlmrPPthn7/faXSBbBECIbnjNlWTiyF7r274SQKFCrT0rJx5N9c31n4 ZSIocg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . J4gFrZRSHHDfMoA2zO22H6A55/893OnGO7h3H9znJGZtp7DxT2vxiGJw InBx5/zPubH87rqTa4AkK2GZuDEqVEDU/fjWOjGQOx16V0oeoHi5/R2R sPTzFnb+NvQnQZCRolMHD2keakdzB8b7dfEV80CrRh7uDsiO8aqhSdiV BFJLXFt5qFd+evKw2SG7l9FNMDzukUSAcFIJepM99X7qjQnKsLuzDjyF 4zhgMolAzAwIQzEi4B+G6IQknx5HsvmpNgkbBFjns+Q7ZYutNecPfiYU vaMpSXb5pztCVLbZQEymIXPgsnzdihlMbzh22TZapLbrDBUVEc2yr/QC Tz/CQA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . tl+oiYdq+UDlh6snkobPI/jQbrPM2tESEyDNIec7wCRvCEo6CLd+oMOA H4P7idKJ1Mey0eMl++YI29Vz2KVAIL0Hiamt32VDXyR5QYVVzNQquH5B /P4PDeoSadK1M+VThnSPT685+CLCbAZfu0Hi7+NulEeQLleBMtSGy0pF eG50H7fecNjqmQ2O/3jKRfD8l86+jba3B2FmpPvsxXgR7Ig5jC/XSpSY 0UMXyntDJz7QOSuhh4GcdNEeUqGVTurqnFjgRmZwReVZqeQzCS8Q+eQn cq23FtXxcAqJCFKN68yoorWmlZhZl0DPm4Zpup28wwlIapO+SGwScD0q KyHZYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . N1vrpd062YN/PGLOmdAdgPOc2iPPBadtv+DlqoCJ8OUEtFH605m7AUlX HDV99dpT7j6I/N+Sp6pDMRIRl+rB/tFXNfQFoB7UliAsKQ9UuKxH/uyc /sZWxPmYb+4Xi1AKmkzvp7M3Babq7hTGG/PnngN3386Qd0MXiw11Tdl9 +HIan1Jz2jMrHuR2NZDILZOW10wYogYD3/DAx6bVaJMjDbIky5ikK2H/ 4QajIhtjuux4GfsFc7KjGzT1/Hqa9LqdsLetvQmKF4yGNjizOgnrHlbF GoICQ1KihXF3IGYcBUyIoMcmhAjz6D0/jQz/Blwx3zvEUj2Hf7Xj+haO ShdguQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . UYk1xmrw2A7ojKSTpwuF90WXsXOfNbRI8pi9tDPLmqr0OMn29AW051vG TyLd7L3ogsaoUEDiY2vYyvyZI3kPL9fSRDYgOIk7Cq3hp7k6wMM3IXS6 iIlYnjtvUFGDaE69EpUjwII22lSWaqOo0dCFnacJYWDfShdZcv7yssWG 9nZpki6aiBAjhYXY8tdMnpDJzq9O3zXPQR8xtuFW4S0aVdrHuSPRq935 DWXThocHxOza6OQp/ZkbemkoqAYjTlu0tyITwZsTknxgK1mtM+ArRmhS eykqVs3mmAGIWMN3qIW8SXKVRHI9PPjka0j6+KK+bfmeck0bI2Wu1f3C cnk+nQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . NLK3/UMZZ+39KgwbFFoS6qR2QTEULMxDhlWpK1is+AU3CjUn1RNPRJaq m1MnfJdEq3+FFwVDkpmDGh8lQfTBn192oWlo2goHXZXwuoFN49FPHZ+l u42NWMDKtmS6r9JemJR68jH0jy/AsTMdvAbeodg06cbY6F5Q80EtAdkZ iOZPnqPenfxI+U8C2KgBNas7izGbQZF3FxHi7GZz+wrCGBcjcYX9pcD9 /rf1plZYudefFbxG+P97WfMScDD5vt0dUxz3Yt6YUC48jlyo9WYZDLC5 3qOuqah5oXS1lCGJDm+Kta4koVnm6W4pbCzT9XISwRWZ81rp0NbTrhHb Teu7Pw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . iYK8FfKFt+aD2Mh+hvFxyE0lCs/jHMT8EWlhPGuiPekHkYnbTaRbGJhT sCeL3Cg1MHrtGr8BXSq1RMyKnn6Y0/bhF1nEjk1gB+vAFHUwWe0yX32U H7E139q68ZyrcUkpV+KkY+ltMSKAjBtGRkYZ9sJhFvll7YCD2HtAMPud KEWpTZS2D0fLATDzAJzJF/2qGMvRUIn0sk5+3HqVh7R3stbl4aSEw5Zp swJoSCs1DN5eaLh6Ovas51uDAa4t6Ove6owR/gR9isqdZCbilAaJ6497 xg4r/KsCu6eG7GAAw5XGh8rkpC5YbsCBlXB565Zk5oY4yBgBUiG/iXGC wyLyJA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . QNF7LtVeew75AhniJ7S0ncsmrHWHCnRcU0H3uyCipyL20kHlpc1NOIUY md7BB02MXm+XOpJF/l/uc9v/C0iuAgOpFVp5kVjtp+gTu2mgceXstFuP 3tNmrL2pSRIWaN8+koS0MlAZCrH9+J9RSFrm5twtD7bIvGT0FVvy/RrR pRWPy9hbqjH6O5DFMdksdVTPLEYFXevAHGKvRa5beRXkrL9ANfVzvPYl q2RaO1aMX6+Cy7AquJpU7DUSReEUBr1f7mYVdd/6sjzoXrd893c+2Fc+ WFLVuWER3eTSrLAQ3b3Etz0lqM3MLrEXwjQFl2mw046nlh21T+u2Ds5s s1/b8g==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . cGVwlSItiMGEOKkCWRLUn2od/cBvOlSwj8qxCppe4O1FRyTGgEFNV2nf 2zUkhL/agQhXI3qEjFOkq2b1l+4dM3BwDOF7IGhS3yXV3JGnIcwOC7si EMjRZGIvcEenjfugpIwkwkhTZdgIFoyCUr+g6YxA3iL6L77dftAmIkAV 6gvyarwgeYs0Wi+eEGfrZp2MxJjHDXKF+NfCy/fJnYx2n8SRpXya/Uu+ DJ+S4FQDTDyjDhN/+Tvcsb++sjvNfA4ZDwx5gpgNkRF0xsLHMoxCQagH gJBBziP0cq7l2fy5FVMpGNvdkkiYYG8to/2FF/65GhV+RuNcotD91zyW aeSxWw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . YYqLZKzjD13hpj345YTNMYYEh3US2BY7DqK9YbNIZi4T0/0jAEFPamKW WcX0nPm5N5S+1VqKIdo/brqvOTaxsq7HnPxVfomg3wyaKNvwqxb2MUpa pYl25ORa7yOm3gwVZJ3NBjh65dLXzGn8t8b047ym7Fnz6JAJHUyM4/SH hZhvXYBX+i3Lojq7HDIReqAtH7zzWdKzKLCTNqAhuqfvEI3edVynpth2 SCMNDVaAUlzVfBLEAkHNp26mLSgcarc3vrb2khdDS13Kv0Ev4rj0w0v1 z0DnVs95Yl2XlnShzNTaW5w1F8f81oBbq2Ly2POxERr5cOCNSGIWMi+q XAt7bQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . mHz8sEjHOt+UrLPdGr3s+dake/eRQ6QmushFbLex2e6epkvmriVQwdWa QqG4h75UmjNnOlAwpHJA3oRyKxLJKmVgJIAQzhFc6sHLwEVl+kVyxGfu Q17Md+52E/d+mLMHohKRXljTaghp2uLHX8oDtBP+B2HhIDJK+uhfK63A MZ4k1L4jBGCvEGVMO7BhrpHV9zbY21MOb6EIp/F35jB+ftW7gilKxxBK t+Qt1pwtJcDGVC2xZST6fZ2yaR+U+YhOJ7t9j6WVVTWyFSa1CG3lzyRW PNduZeKYTYwox2uqqUxh+Nmzd1oZt7geIw8CGTYS0B++nVUdNJXJnP51 +evqJQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . SjAFtdUPy+YU4sZnst5GNNYxjzWhBOVqUAfGIUv3uBo5qZW9ePecUJ8G ZkNUkdT7m+cHd0c1ssOBOT7snjwc3Sy3zD22b6/q3N8VowhDQDPkoDlB vt9raR7eXu273cEBDZTQ9P4Ya2Meu32Aftwa6VMQmXMl+qWXhYqffEt6 bJuoohnCVqOZihqgnoT+sRiDl49RgLb+GnZNbFk5EP9LXOrWcdxczKso tY384WCrniRmg4L6NM5DjnBtUVT+Qs6fhWGqQv23fPiLV8lt4i34aIf2 jAQkIE6KD4aNLlehct7eqFo1aeaiZumqEd9/GoqSat/RE7Qsh6hiRkfA /J7MLg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-04759.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-04759.test. 1 IN A 192.0.2.33
+root-key-sentinel-is-ta-04759.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . B3RxvVwGi4W0SJPOexXga1Bm4nDiL4u/ITn30YXMPg8yOVOFWQ2axvG/ HdMFU6VSzm5GGIh0e+KR9Jzcvyt2yC3081SrclIkque3LJM1Ar5wa3GO 2M1EC3TuKs+L0WjLXfUTGie7n3mYfoiT+QBfZ4v60JQaD4U+UetZ5Ocn 2rXvuC0Rk9LI+j1Us7u2somZy/swl0Luvg4e+bueHRpTAgKf4nLHFZ8A HEAK0Vy3FG0N4q/oPWx1i9hVNxEaJQIwVcW01KDbP2sqFUNUm3bpT8aH fKRK4hy7MKkDsLrkpcbVbhI4vq8D1GKMtiUjU2kRjQ4VEMzXzXHhPcUi jMf7qw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-04759.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-04759.test. 1 IN A 192.0.2.33
+root-key-sentinel-not-ta-04759.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . sUfM6dehUU9p1QnVX9QIT3K2kvKoU9qGTMNKdVz84AdJJMGnqMbosBpE LusmcZtwcGNjU8jcFdal/t03b+z0jk5BoEG0lzgFGNSp1S1sDGHYTcrv hAHmWpN4a0BEV/ZIOuu1ZJ8s0vRajnAB75jpSGsRdPmCTG/TKeAUJoF+ gua4lLlHnDlLnIVXThL3THqWqoTwg7Ch12piwrklZXNHbSsgcKwwG4SB 8OGY13ewXpH90EYkAFgmLIsavY7Ddhu8ZcFiE5nh6JQrwi7rsAtsr3cx x2rJrMTSEGP1F103YLzxyI4sTiIOGLaxQ7rGuASLGDQW5Cy0mKGgUAXI B0e7NA==
+ENTRY_END
+RANGE_END
+
+; sentinel does not affect qtypes different than A/AAAA
+; +AD
+STEP 111 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+ENTRY_END
+
+STEP 112 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. IN TXT "it works"
+ENTRY_END
+
+STEP 121 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+ENTRY_END
+
+STEP 122 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN TXT "it works"
+ENTRY_END
+
+; RD only
+STEP 131 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 132 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. IN TXT "it works"
+ENTRY_END
+
+STEP 141 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 142 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN TXT "it works"
+ENTRY_END
+
+; +CD
+STEP 143 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 144 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA CD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN TXT "it works"
+ENTRY_END
+
+; +CD+DO
+STEP 145 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 146 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA CD DO NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN TXT "it works"
+root-key-sentinel-not-ta-00000.test. IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . SjAFtdUPy+YU4sZnst5GNNYxjzWhBOVq UAfGIUv3uBo5qZW9ePecUJ8GZkNUkdT7 m+cHd0c1ssOBOT7snjwc3Sy3zD22b6/q 3N8VowhDQDPkoDlBvt9raR7eXu273cEB DZTQ9P4Ya2Meu32Aftwa6VMQmXMl+qWX hYqffEt6bJuoohnCVqOZihqgnoT+sRiD l49RgLb+GnZNbFk5EP9LXOrWcdxczKso tY384WCrniRmg4L6NM5DjnBtUVT+Qs6f hWGqQv23fPiLV8lt4i34aIf2jAQkIE6K D4aNLlehct7eqFo1aeaiZumqEd9/GoqS at/RE7Qsh6hiRkfA/J7MLg==
+ENTRY_END
+
+
+; keyid 48409 is trusted
+; is-ta hit for keyid 48409 -> NOERROR
+; +AD
+STEP 211 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+ENTRY_END
+
+STEP 212 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN A 192.0.2.1
+ENTRY_END
+
+; RD only
+STEP 221 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 222 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+
+; not-ta miss for keyid 48409 -> SERVFAIL
+; +AD
+STEP 311 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+ENTRY_END
+
+STEP 312 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA SERVFAIL
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+ENTRY_END
+
+; query without AD must SERVFAIL as well
+STEP 321 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 322 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA SERVFAIL
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+ENTRY_END
+
+; +CD must disable sentinel logic
+STEP 323 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 324 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA CD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN AAAA 2001:db8::
+ENTRY_END
+
+; +CD+DO must disable sentinel logic as well
+STEP 325 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 326 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA CD DO NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN AAAA 2001:db8::
+root-key-sentinel-not-ta-48409.test. IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . UYk1xmrw2A7ojKSTpwuF90WXsXOfNbRI 8pi9tDPLmqr0OMn29AW051vGTyLd7L3o gsaoUEDiY2vYyvyZI3kPL9fSRDYgOIk7 Cq3hp7k6wMM3IXS6iIlYnjtvUFGDaE69 EpUjwII22lSWaqOo0dCFnacJYWDfShdZ cv7yssWG9nZpki6aiBAjhYXY8tdMnpDJ zq9O3zXPQR8xtuFW4S0aVdrHuSPRq935 DWXThocHxOza6OQp/ZkbemkoqAYjTlu0 tyITwZsTknxgK1mtM+ArRmhSeykqVs3m mAGIWMN3qIW8SXKVRHI9PPjka0j6+KK+ bfmeck0bI2Wu1f3Ccnk+nQ==
+ENTRY_END
+
+
+; keyid 0x0000 is not trusted
+; is-ta miss for keyid 0x0000 -> SERVFAIL
+; +AD
+STEP 411 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN A
+ENTRY_END
+
+STEP 412 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA SERVFAIL
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN A
+ENTRY_END
+
+STEP 422 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+ENTRY_END
+
+STEP 423 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA SERVFAIL
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+ENTRY_END
+
+; +CD must disable sentinel logic
+STEP 424 QUERY
+ENTRY_BEGIN
+REPLY RD CD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+ENTRY_END
+
+STEP 425 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA CD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. IN AAAA 2001:db8::
+ENTRY_END
+
+
+; not-ta hit for keyid 0x0000 -> NOERROR
+STEP 511 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN A
+ENTRY_END
+
+STEP 512 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN A 192.0.2.1
+ENTRY_END
+
+STEP 521 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN AAAA
+ENTRY_END
+
+STEP 522 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN AAAA 2001:db8::
+ENTRY_END
+
+
+; TA for non-root domains are interpreted correctly
+; not-ta ignores existing non-root TA keyid 04759 -> NOERROR
+STEP 611 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-04759.test. IN A
+ENTRY_END
+
+STEP 612 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA AD NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-04759.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-04759.test. 1 IN A 192.0.2.33
+ENTRY_END
+
+; is-ta ignores existing non-root TA keyid 04759 -> SERVFAIL
+STEP 621 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-04759.test. IN A
+ENTRY_END
+
+STEP 622 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA SERVFAIL
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-04759.test. IN A
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.key b/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.key
new file mode 100644
index 0000000..c3e520e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.key
@@ -0,0 +1,5 @@
+; This is a key-signing key, keyid 48409, for .
+; Created: 20180118150418 (Thu Jan 18 16:04:18 2018)
+; Publish: 20170711000000 (Tue Jul 11 02:00:00 2017)
+; Activate: 20171011000000 (Wed Oct 11 02:00:00 2017)
+. 1814400 IN DNSKEY 257 3 8 AwEAAcliJP8Jh/RjL3c8eaUj8dzVdEksENKubqVA5FdrDJ2rC0O/bGG/ MVZt+WacE1o1mRVwTT/TrhhZUAzZ+qOcpB+IWxURsR4vVqVwakHMny7D 2aLXKoVXwTo/VhAQtHDw5G9bxGgwybPUtd5Vz6EIenUsmNYZ+Spde4l8 vpw7UISVL6q0C1mwHMN18P/1yfHmbkS19b6B1S9Y2aputccF1lso3yiF Ig7UNqqD4PNxSo4jByDnajQSP3qg/LSJSOnzBIumb8wc6svxgugy/pxr BFKgGGk4/JdJCKufdfU5jFX4fJ3HM37G/RccrtGhIf2Z1utoOyaILoa9 wT3O1WaYG/U=
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.private b/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.private
new file mode 100644
index 0000000..bb7de05
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel/K.+008+48409.private
@@ -0,0 +1,13 @@
+Private-key-format: v1.3
+Algorithm: 8 (RSASHA256)
+Modulus: yWIk/wmH9GMvdzx5pSPx3NV0SSwQ0q5upUDkV2sMnasLQ79sYb8xVm35ZpwTWjWZFXBNP9OuGFlQDNn6o5ykH4hbFRGxHi9WpXBqQcyfLsPZotcqhVfBOj9WEBC0cPDkb1vEaDDJs9S13lXPoQh6dSyY1hn5Kl17iXy+nDtQhJUvqrQLWbAcw3Xw//XJ8eZuRLX1voHVL1jZqm61xwXWWyjfKIUiDtQ2qoPg83FKjiMHIOdqNBI/eqD8tIlI6fMEi6ZvzBzqy/GC6DL+nGsEUqAYaTj8l0kIq5919TmMVfh8ncczfsb9Fxyu0aEh/ZnW62g7Joguhr3BPc7VZpgb9Q==
+PublicExponent: AQAB
+PrivateExponent: xnCKqjF3Ia92/1S9Pahc1VIVA2GDtkciSn7WQvn+dYMtV3XSU8N114gIwT68pyC3l3OQ+3sYS2/+vJszKnPZGiVgMzO6x1a4V8+dNPdwSEG/PIIvqTOe+UmeAbikRcJqJv1TXaPtreHF0K/YKANVwA7RD/CKIV/6srEUlpiwL+OcHJFhXIubr5Gru6tNbZGQooblQ7w5x0+01WUti6C3SkO6VROvAE10qmwQ7sRb3scIerkZzOFhO8WimJvyfwPo78RCNBmmCm89uW/yvKw4mgnarg6EwZ7wXgqu7C1ZyY6ailFJB17GTJ+y8xiVUC0HB18WAdBXttceqWpxHW9GZQ==
+Prime1: /El9AUtn4x2DthqwK9GHAHAlCbpKtm8RVRYjRae6Dr3CWDPGqGj0LJSslW8g3SnyNDwXT9Et2kbvR2FsDz5lghgjnCnI0F16VpTYbstfNN6YOBP+50JyZyOvH11C1Phn5HChcmWIvoR+GJkflV7WN03s6IG0aAUg0h9ksubh00c=
+Prime2: zFjfXFwH5vWn2Yn8VA2YPP7qteE0wWXCpbobyQrmRTn95DOEHmrX57V0Pd957OKptYpTQSTMFjdFNVp6NSi6CfZp+8sYpwwK9aI4uCEgNnLLzgz4xmCLs27hnZeDw62vuG/TMBiGwv4+7QpEKLeJ5ZzAessEL/ShEAz84o/SHOM=
+Exponent1: aoouPAm4CXVBVfnXQ+nr9Qdm3MDLJFerHh+HLbczH16LX+wdjKkl1F3EtCaF3mAEZIKr5Y0UrAUgryg5FgbnnxTKlPwgTb3sF/wrmj5QKmeGKMho8Qhif6PWJIyh2IY+eX4G7+Ro5uvUxFaFu/KczCYgUd/Ua8kenx2azOIro6k=
+Exponent2: n8PwRj6x8vInnF5UyMakOzQ2/6Km43oTGA2NAb8i0AcKKOvaJQn16fQlgOaDZiDE/Om8M9d4NPpbgt5NY9iGs5lTvYhJqvkwbGG7pMJJdCiGjX/41OjQ8KYFgXffjhLyqunLHPRgEH5FZoC7T3ZIOxw2JQsrJ+9EKc9tvBkj9m8=
+Coefficient: gNp/tXrqbPKEBmvHV744gOuZxH0D2tMKMu8U/gF0IUjbTQqmaLuLgo9wXVHWo8GpEKbUOB9fbOcoptZlNE1TEF//44IcZH3yJM1JvU3nHW24gIi0xI3B4rQrZej2XpeuFxd44S3LTkeHmZjZB3dnCcgH0CqRTrONMRvW7RqB0bw=
+Created: 20180118150418
+Publish: 20170711000000
+Activate: 20171011000000
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel/root.db b/tests/deckard/sets/resolver/val_ta_sentinel/root.db
new file mode 100644
index 0000000..a6c62f7
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel/root.db
@@ -0,0 +1,61 @@
+; File written on Wed May 30 16:51:51 2018
+; dnssec_signzone version 9.12.0
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+. 518400 IN NS rootns.
+. 518400 IN RRSIG NS 8 0 518400 20180629135151 20180530135151 48409 . ZBLk+sK9ky+YBmzceXbBqEUyBc6nWfAtF6vCK/6cCfL1AxBYOoxdwE/G m0oRAl5WHRrreDSM2t79jcyyUZyyOcee2j/mLPjLdJPQr0Dw9KY+843L o4VSWV0L9adSzgXgvQF/p4yW2zNbHia7doA9GTDjkQFj2+7HgdJdGk8S I2GCx822fqzMCdS3XerIZ4EMz8Lt1sWaexdCgi0sCn9SvqzNHTaIXirW /apL0ohiBNp23LGa7+/7UvNrv+Y/gHpKk2bUytnS7soOocd9XpTekBY7 jlRlmnHTAdn9b9Zj2PHn72v1RYIywP33Qb9ze7i2v7s12uUR3lJt9sd/ WVeuXQ==
+. 86400 IN NSEC rootns. NS SOA RRSIG NSEC DNSKEY
+. 86400 IN RRSIG NSEC 8 0 86400 20180629135151 20180530135151 48409 . J2mHopzSRvmwst3TVDwMS2wG9XDMcJhk9lYMEifgss/Zo+SR8qL8Z8TS zB89UtHAGH+58INk3DnT7tacOKZtbwNx6LFcGO/QXHHN6DwI1rghuGD9 94mQy57Rl5guKesB76HLBBrn0f+elE6lCLYNa0Unqe9XVWHYrcqAmi1K yi1nQgT1DCmmzAg0Yfq5NSkaq4AHO1b8wzkuvl4WoVS8sKpW5K+GtAK0 ox8OwaClFq6QqjXMawcftEnl3aJawS0ftz1ZBolR3889kFpC/xrvTN29 tkUjYNRNjvIYwvinznKjumL2YsMyYWmn/7FCq3NJEAHljxsRCDCW+vl0 oCG2SQ==
+. 1814400 IN DNSKEY 257 3 8 AwEAAcliJP8Jh/RjL3c8eaUj8dzVdEksENKubqVA5FdrDJ2rC0O/bGG/ MVZt+WacE1o1mRVwTT/TrhhZUAzZ+qOcpB+IWxURsR4vVqVwakHMny7D 2aLXKoVXwTo/VhAQtHDw5G9bxGgwybPUtd5Vz6EIenUsmNYZ+Spde4l8 vpw7UISVL6q0C1mwHMN18P/1yfHmbkS19b6B1S9Y2aputccF1lso3yiF Ig7UNqqD4PNxSo4jByDnajQSP3qg/LSJSOnzBIumb8wc6svxgugy/pxr BFKgGGk4/JdJCKufdfU5jFX4fJ3HM37G/RccrtGhIf2Z1utoOyaILoa9 wT3O1WaYG/U=
+. 1814400 IN RRSIG DNSKEY 8 0 1814400 20180629135151 20180530135151 48409 . HRj68PBD0cR2p1njZcMUBecR5DiBbueyhIX1oqc9K9Rig5i+ONuozacm 3F4kg9DhUYb/1W6+PSp9YLyrJtCZOFLqkTjPiOAyiE6zVAE/U5O5LRZ/ FjqRQoWuA1cFZtrLokaWmW9GS5Kb2+PUCJY5NRz27JFSvaRRkoHIFf4o mA6eQsuWt28Itx0VGPL9+mR+2B+IcnmN+DZb7mxoRknOh0WyNop4eiep oSZcCihYHOdesCtmrxoMkwGEHZpu8a6GN7jaeNXXNUulwQYfzUZJZQo1 Zr9cN7kzIZ5tAs9ffnPRcWVO61MQTxUtuGbipFpba6RhGmML8oO4JkOJ Itp6tg==
+root-key-sentinel-is-ta-04759.test. 1 IN A 192.0.2.33
+root-key-sentinel-is-ta-04759.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . B3RxvVwGi4W0SJPOexXga1Bm4nDiL4u/ITn30YXMPg8yOVOFWQ2axvG/ HdMFU6VSzm5GGIh0e+KR9Jzcvyt2yC3081SrclIkque3LJM1Ar5wa3GO 2M1EC3TuKs+L0WjLXfUTGie7n3mYfoiT+QBfZ4v60JQaD4U+UetZ5Ocn 2rXvuC0Rk9LI+j1Us7u2somZy/swl0Luvg4e+bueHRpTAgKf4nLHFZ8A HEAK0Vy3FG0N4q/oPWx1i9hVNxEaJQIwVcW01KDbP2sqFUNUm3bpT8aH fKRK4hy7MKkDsLrkpcbVbhI4vq8D1GKMtiUjU2kRjQ4VEMzXzXHhPcUi jMf7qw==
+root-key-sentinel-is-ta-04759.test. 86400 IN NSEC root-key-sentinel-is-ta-48409.test. A RRSIG NSEC
+root-key-sentinel-is-ta-04759.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . lEBshzTtCWvgkCFB8vyIBnnOoHj2BNxUnGs/zSfDD+pdHuaXQ+cO8Gjb DDt+9ZvzHK+Ijt2sqnC6NuNtjACc6XSiPCGM6zoKOlqrnje5tZoA3OUf 0AYxjSRM1U/IzGv2QEsRv3CRQkddPIeXufzrj/d3PL0kHwD9A0kSSiiW Ch5OBhhLPshzfQTQ3nU1TXDPdzsncpvkDtQLgTS0LQDKh0mp92yNlrpT HqMIPyUXr8e8FbtWQ4Y8fJ+IGxbjt6Ek7oKmL6mowE6B6UWwsy3d4S8c i5fZQSfJhRu7Vq5Kyq8CZLLQw1fZ7/QHacjjUTVaVdnq6ze3J9gdJlnj IdoiIg==
+root-key-sentinel-not-ta-04759.test. 1 IN A 192.0.2.33
+root-key-sentinel-not-ta-04759.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . sUfM6dehUU9p1QnVX9QIT3K2kvKoU9qGTMNKdVz84AdJJMGnqMbosBpE LusmcZtwcGNjU8jcFdal/t03b+z0jk5BoEG0lzgFGNSp1S1sDGHYTcrv hAHmWpN4a0BEV/ZIOuu1ZJ8s0vRajnAB75jpSGsRdPmCTG/TKeAUJoF+ gua4lLlHnDlLnIVXThL3THqWqoTwg7Ch12piwrklZXNHbSsgcKwwG4SB 8OGY13ewXpH90EYkAFgmLIsavY7Ddhu8ZcFiE5nh6JQrwi7rsAtsr3cx x2rJrMTSEGP1F103YLzxyI4sTiIOGLaxQ7rGuASLGDQW5Cy0mKGgUAXI B0e7NA==
+root-key-sentinel-not-ta-04759.test. 86400 IN NSEC root-key-sentinel-not-ta-48409.test. A RRSIG NSEC
+root-key-sentinel-not-ta-04759.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . eMKKf4Itgkz3mxMsl+gz4xUO1xMchTU4INlJkMG4WkgDpINFhu08RrkI AGDuZnsKZwedqCyXmm/pqiAr/IuurIF5XZSL7tocYmtEV1p/unpeKzt/ wzb34Ktm2Sv5Wu/ZgGatg4ddocjhUzVS0QX3DL9qIFCs8U+VJj7wSC6q 1qcSwksYtUmeG3io3UkBuNTqnqpqZRUieBA9XMftpCbdOES/8WdxPI53 59zFBp5TnwJ7y9Wu9ccZv8tI1QBtqz0UdLYMG09QdhoL6rzZUVRZyRpi FFrp4fdEL6perdYZd0awa2nVNCrr9jEwMSxnm5oVbFUY6Tu+M4pdG5d7 JjXUTg==
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+rootns. 86400 IN NSEC root-key-sentinel-is-ta-00000.test. A AAAA RRSIG NSEC
+rootns. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . noqU9JO9z5QXcedzsm7E6RZ5aIIocIH/jSedo6Zy+GImRTeHpc0le399 DUOsqGlcagx7EWRerScB+xmpL7DxKl0FFyeG0ORvPjJ6IyCFTecWjaKW YVurQnzALW+LhfsPSTxBMnnRhxT5Qrw4dtO0gx7fWyssKUnsMcBdmESs tALFNSfJpiV7so9cK2ssHsC+jkM0AQoemSKJrTesxm8FP1BGT27tz/vx yWIlOUGc8/gBgHo4hoXH1oyCrw9KU9kczRqw4CoCGJtZ2/k15BfmbPlC kLrvLibEmp6OYPVWfJRG79uDHhT+Tul07j26WmA+A7IWXSye8W51WbdH 7gJTKQ==
+root-key-sentinel-not-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . YYqLZKzjD13hpj345YTNMYYEh3US2BY7DqK9YbNIZi4T0/0jAEFPamKW WcX0nPm5N5S+1VqKIdo/brqvOTaxsq7HnPxVfomg3wyaKNvwqxb2MUpa pYl25ORa7yOm3gwVZJ3NBjh65dLXzGn8t8b047ym7Fnz6JAJHUyM4/SH hZhvXYBX+i3Lojq7HDIReqAtH7zzWdKzKLCTNqAhuqfvEI3edVynpth2 SCMNDVaAUlzVfBLEAkHNp26mLSgcarc3vrb2khdDS13Kv0Ev4rj0w0v1 z0DnVs95Yl2XlnShzNTaW5w1F8f81oBbq2Ly2POxERr5cOCNSGIWMi+q XAt7bQ==
+root-key-sentinel-not-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . SjAFtdUPy+YU4sZnst5GNNYxjzWhBOVqUAfGIUv3uBo5qZW9ePecUJ8G ZkNUkdT7m+cHd0c1ssOBOT7snjwc3Sy3zD22b6/q3N8VowhDQDPkoDlB vt9raR7eXu273cEBDZTQ9P4Ya2Meu32Aftwa6VMQmXMl+qWXhYqffEt6 bJuoohnCVqOZihqgnoT+sRiDl49RgLb+GnZNbFk5EP9LXOrWcdxczKso tY384WCrniRmg4L6NM5DjnBtUVT+Qs6fhWGqQv23fPiLV8lt4i34aIf2 jAQkIE6KD4aNLlehct7eqFo1aeaiZumqEd9/GoqSat/RE7Qsh6hiRkfA /J7MLg==
+root-key-sentinel-not-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . mHz8sEjHOt+UrLPdGr3s+dake/eRQ6QmushFbLex2e6epkvmriVQwdWa QqG4h75UmjNnOlAwpHJA3oRyKxLJKmVgJIAQzhFc6sHLwEVl+kVyxGfu Q17Md+52E/d+mLMHohKRXljTaghp2uLHX8oDtBP+B2HhIDJK+uhfK63A MZ4k1L4jBGCvEGVMO7BhrpHV9zbY21MOb6EIp/F35jB+ftW7gilKxxBK t+Qt1pwtJcDGVC2xZST6fZ2yaR+U+YhOJ7t9j6WVVTWyFSa1CG3lzyRW PNduZeKYTYwox2uqqUxh+Nmzd1oZt7geIw8CGTYS0B++nVUdNJXJnP51 +evqJQ==
+root-key-sentinel-not-ta-00000.test. 86400 IN NSEC root-key-sentinel-not-ta-04759.test. A TXT AAAA RRSIG NSEC
+root-key-sentinel-not-ta-00000.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . Q7l+lP5MRbXUCszYfJ/x2VUT3C9D3ei8W8/3i/EPoc81J6e35Ny3tbQ9 HH8nzN0Y/4kDtrPjlq42bhwf1J0UZLh2z/Zf1s2/9CSQ/qSUAaD9RY4I eRqHA2As1zjKH9scPDYfKOvvia66xRY5lwT7eH95TbE9Kl+Weerh9Zlq kr4jgofO7DT6UCL+DMAyJZV2qfvdgtYLbs2A4nEWPOriqXdHhsGgnWzr FLZCm4BnY7epaVzzkuC9GnZ3cygZUSc0ArmoIR4dRoQYnq3eYvFrxQ/c No6Yj3coRJGH8nFNmENh1bSuoJCEpcS7jVNd0THMnyRjoly+HYn0nD5V K6Zj2w==
+root-key-sentinel-is-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . qWJh+EE/O2w382vLo53ci9i1O/rAzJUUnZPmLF+GCwmLLhDl6tlI3y5A cALqIHkK1vrXzD+mED78YpILzZ73izRFieY6DxMtAXViqH9U8KSy6KWp tAWUASDe1gj9DGdDeiKdTAIo/2qk1PiGdZNc2E9vQLIUTJNfwV8aZGIt PTgl/efGEIMGGFQW5RPbDZpcJLQ11/RUi9FHQyseZRwkCa8EiEfgvPJ2 /rwiCPUcM6BdYzKoZ53cAHBbeKkvgAOpQ88qDvtE12aF9F8anxdHd0Ru 2DlmrPPthn7/faXSBbBECIbnjNlWTiyF7r274SQKFCrT0rJx5N9c31n4 ZSIocg==
+root-key-sentinel-is-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . tl+oiYdq+UDlh6snkobPI/jQbrPM2tESEyDNIec7wCRvCEo6CLd+oMOA H4P7idKJ1Mey0eMl++YI29Vz2KVAIL0Hiamt32VDXyR5QYVVzNQquH5B /P4PDeoSadK1M+VThnSPT685+CLCbAZfu0Hi7+NulEeQLleBMtSGy0pF eG50H7fecNjqmQ2O/3jKRfD8l86+jba3B2FmpPvsxXgR7Ig5jC/XSpSY 0UMXyntDJz7QOSuhh4GcdNEeUqGVTurqnFjgRmZwReVZqeQzCS8Q+eQn cq23FtXxcAqJCFKN68yoorWmlZhZl0DPm4Zpup28wwlIapO+SGwScD0q KyHZYQ==
+root-key-sentinel-is-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . J4gFrZRSHHDfMoA2zO22H6A55/893OnGO7h3H9znJGZtp7DxT2vxiGJw InBx5/zPubH87rqTa4AkK2GZuDEqVEDU/fjWOjGQOx16V0oeoHi5/R2R sPTzFnb+NvQnQZCRolMHD2keakdzB8b7dfEV80CrRh7uDsiO8aqhSdiV BFJLXFt5qFd+evKw2SG7l9FNMDzukUSAcFIJepM99X7qjQnKsLuzDjyF 4zhgMolAzAwIQzEi4B+G6IQknx5HsvmpNgkbBFjns+Q7ZYutNecPfiYU vaMpSXb5pztCVLbZQEymIXPgsnzdihlMbzh22TZapLbrDBUVEc2yr/QC Tz/CQA==
+root-key-sentinel-is-ta-48409.test. 86400 IN NSEC root-key-sentinel-not-ta-00000.test. A TXT AAAA RRSIG NSEC
+root-key-sentinel-is-ta-48409.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . EDUa6WBV7AoZTNu/kCroCc7ENrSU/v98WlcNy6ZAJk6e46LuBCWQwkKf EKGnJOlUh2Qoq2M24sVkRnWzaOn42IeKI3IlM8LeYVJL6nFpuImotkV4 VGQsiK//Uc1sLXBsj6x1N3xycKG+5bONyv8GSCS5MvzDwtsn0leUnyby 1G9ZKl7DX58GhBDfft++rp3EyALMasUbON4Jl2+7nzgpCfJUrdzogO0N krpqVZoNUybFomcDAQkDpgTeH5I8X0llSZkNWtpHbkwldCO4r+srq3EJ 2nf3GboKky3wMyWF0pg5XAqAYHoPq0Sz+fCog06+87ZsJBIJ0m58INHs ggiBvg==
+root-key-sentinel-is-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . iYK8FfKFt+aD2Mh+hvFxyE0lCs/jHMT8EWlhPGuiPekHkYnbTaRbGJhT sCeL3Cg1MHrtGr8BXSq1RMyKnn6Y0/bhF1nEjk1gB+vAFHUwWe0yX32U H7E139q68ZyrcUkpV+KkY+ltMSKAjBtGRkYZ9sJhFvll7YCD2HtAMPud KEWpTZS2D0fLATDzAJzJF/2qGMvRUIn0sk5+3HqVh7R3stbl4aSEw5Zp swJoSCs1DN5eaLh6Ovas51uDAa4t6Ove6owR/gR9isqdZCbilAaJ6497 xg4r/KsCu6eG7GAAw5XGh8rkpC5YbsCBlXB565Zk5oY4yBgBUiG/iXGC wyLyJA==
+root-key-sentinel-is-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . cGVwlSItiMGEOKkCWRLUn2od/cBvOlSwj8qxCppe4O1FRyTGgEFNV2nf 2zUkhL/agQhXI3qEjFOkq2b1l+4dM3BwDOF7IGhS3yXV3JGnIcwOC7si EMjRZGIvcEenjfugpIwkwkhTZdgIFoyCUr+g6YxA3iL6L77dftAmIkAV 6gvyarwgeYs0Wi+eEGfrZp2MxJjHDXKF+NfCy/fJnYx2n8SRpXya/Uu+ DJ+S4FQDTDyjDhN/+Tvcsb++sjvNfA4ZDwx5gpgNkRF0xsLHMoxCQagH gJBBziP0cq7l2fy5FVMpGNvdkkiYYG8to/2FF/65GhV+RuNcotD91zyW aeSxWw==
+root-key-sentinel-is-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . QNF7LtVeew75AhniJ7S0ncsmrHWHCnRcU0H3uyCipyL20kHlpc1NOIUY md7BB02MXm+XOpJF/l/uc9v/C0iuAgOpFVp5kVjtp+gTu2mgceXstFuP 3tNmrL2pSRIWaN8+koS0MlAZCrH9+J9RSFrm5twtD7bIvGT0FVvy/RrR pRWPy9hbqjH6O5DFMdksdVTPLEYFXevAHGKvRa5beRXkrL9ANfVzvPYl q2RaO1aMX6+Cy7AquJpU7DUSReEUBr1f7mYVdd/6sjzoXrd893c+2Fc+ WFLVuWER3eTSrLAQ3b3Etz0lqM3MLrEXwjQFl2mw046nlh21T+u2Ds5s s1/b8g==
+root-key-sentinel-is-ta-00000.test. 86400 IN NSEC root-key-sentinel-is-ta-04759.test. A TXT AAAA RRSIG NSEC
+root-key-sentinel-is-ta-00000.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . GS5Rur2pdMmvGTJZ6WnDO6RzF1MRF34M5VBvUaBIYn2XqVt7toHL4P8i 7ZXqgiWPLsR/dma4MMphXGZac624kOoCHq2hc0q7ja/8FVbBwaGGIlFN v1XHkv490pjAc+NUtcxnhm+jnT8Wb7/wv5wG1Zd3hblP4opCpANOvoC0 MqyOe8vEW1lcw5KEcE0yKAksarVgAZmmXwkQ4caC9yIG/WC9gJ3fQ70Q Dio74WRERLDS3ShLfRkc0vXr5aUGBuy0mqV4OG3ioRj2jvafxgH6Ov9h g4GYL/aJycGIJZGeXGMR0OGalz+pe8WfzNtSWEuE4l22fPnM6Ne0RfaU 5K4CkQ==
+unsigned. 86400 IN NS rootns.
+unsigned. 86400 IN NSEC . NS RRSIG NSEC
+unsigned. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . Di6tfHcpredaWGazWKUX26zYKQ+Yw34BCO2vtqufvcAZJN6PhyXct+Px cvfPN5WxTWlcXVbj6xJKYTOe/ItgV4TM1G2SzGrzTB4qs8ybSvECT59h FUUXTM5ZeXqQVIKKuhVJlmWYSneOiuQG0w6wWr/xE+sD+LE5xQ+hnWrp Z3YAbCmFdtCTwDVt8DkN3i30zExEWc/CnQj9gFYWIBPQ22OB1sfjbZSe 85ucMhUjTas7pZki7b716ZhokApLSf5mVjktjHVT+lPpivs/L2KaQKAe 2yKi05bInFJ+FHU29YoZ3zkBTd2+MeKOh9/1O+9O+hCA+yzLiSLG06Xa 1F7Pcg==
+; resign=20180629135151
+root-key-sentinel-not-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . N1vrpd062YN/PGLOmdAdgPOc2iPPBadtv+DlqoCJ8OUEtFH605m7AUlX HDV99dpT7j6I/N+Sp6pDMRIRl+rB/tFXNfQFoB7UliAsKQ9UuKxH/uyc /sZWxPmYb+4Xi1AKmkzvp7M3Babq7hTGG/PnngN3386Qd0MXiw11Tdl9 +HIan1Jz2jMrHuR2NZDILZOW10wYogYD3/DAx6bVaJMjDbIky5ikK2H/ 4QajIhtjuux4GfsFc7KjGzT1/Hqa9LqdsLetvQmKF4yGNjizOgnrHlbF GoICQ1KihXF3IGYcBUyIoMcmhAjz6D0/jQz/Blwx3zvEUj2Hf7Xj+haO ShdguQ==
+root-key-sentinel-not-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . NLK3/UMZZ+39KgwbFFoS6qR2QTEULMxDhlWpK1is+AU3CjUn1RNPRJaq m1MnfJdEq3+FFwVDkpmDGh8lQfTBn192oWlo2goHXZXwuoFN49FPHZ+l u42NWMDKtmS6r9JemJR68jH0jy/AsTMdvAbeodg06cbY6F5Q80EtAdkZ iOZPnqPenfxI+U8C2KgBNas7izGbQZF3FxHi7GZz+wrCGBcjcYX9pcD9 /rf1plZYudefFbxG+P97WfMScDD5vt0dUxz3Yt6YUC48jlyo9WYZDLC5 3qOuqah5oXS1lCGJDm+Kta4koVnm6W4pbCzT9XISwRWZ81rp0NbTrhHb Teu7Pw==
+root-key-sentinel-not-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . UYk1xmrw2A7ojKSTpwuF90WXsXOfNbRI8pi9tDPLmqr0OMn29AW051vG TyLd7L3ogsaoUEDiY2vYyvyZI3kPL9fSRDYgOIk7Cq3hp7k6wMM3IXS6 iIlYnjtvUFGDaE69EpUjwII22lSWaqOo0dCFnacJYWDfShdZcv7yssWG 9nZpki6aiBAjhYXY8tdMnpDJzq9O3zXPQR8xtuFW4S0aVdrHuSPRq935 DWXThocHxOza6OQp/ZkbemkoqAYjTlu0tyITwZsTknxgK1mtM+ArRmhS eykqVs3mmAGIWMN3qIW8SXKVRHI9PPjka0j6+KK+bfmeck0bI2Wu1f3C cnk+nQ==
+root-key-sentinel-not-ta-48409.test. 86400 IN NSEC unsigned. A TXT AAAA RRSIG NSEC
+root-key-sentinel-not-ta-48409.test. 86400 IN RRSIG NSEC 8 2 86400 20180629135151 20180530135151 48409 . DKB8iFwqz4u0QaAe/0ppPv3AzvvNVQGAfCnxfbdKkYGCjFZMtuNMef1u YsJLyY5MSS5AiNr+gAJpRrBnYnobGe4ibL2hG/HV41282p7PMu2BiCiE EZw2sTLeMjEyq+yVk5fciL/1/SwNr+fYKj9sTuzUC7L8LIndRoufuEvJ zi7PhWN6NUlWLr4X5o63a2TZqxCtS61/VUkVScfRfNKHs70SF89rXMYQ uaaUSSERcUwGBf1x1qpA7HL/8v4IwbWcLBXv44mTUIaJYvqqwCPbWJHm 5rX0J1UUYObJjj4RrPL1fxW5rZ5XNdtkKfteJLiDvNzBozX11HyTBq6E WtpJSQ==
+; resign=20180629135151
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel_insecure.rpl b/tests/deckard/sets/resolver/val_ta_sentinel_insecure.rpl
new file mode 100644
index 0000000..f22583c
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel_insecure.rpl
@@ -0,0 +1,376 @@
+stub-addr: 2001:503:ba3e::2:30
+trust-anchor: . IN DS 48409 8 2 3D63A0C25BCE86621DE63636F11B35B908EFE8E9381E0E3E9DEFD89EA952C27D
+val-override-date: 20180601000000
+; avoid the mess with one server for both "." and "unsigned."
+query-minimization: on
+CONFIG_END
+
+SCENARIO_BEGIN draft-ietf-dnsop-kskroll-sentinel-12 section 2 where root key matches but test domain is insecure
+
+
+RANGE_BEGIN 1 1000
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 198.41.0.4
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN SOA
+SECTION ANSWER
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 1814400 IN DNSKEY 257 3 8 AwEAAcliJP8Jh/RjL3c8eaUj8dzVdEksENKubqVA5FdrDJ2rC0O/bGG/ MVZt+WacE1o1mRVwTT/TrhhZUAzZ+qOcpB+IWxURsR4vVqVwakHMny7D 2aLXKoVXwTo/VhAQtHDw5G9bxGgwybPUtd5Vz6EIenUsmNYZ+Spde4l8 vpw7UISVL6q0C1mwHMN18P/1yfHmbkS19b6B1S9Y2aputccF1lso3yiF Ig7UNqqD4PNxSo4jByDnajQSP3qg/LSJSOnzBIumb8wc6svxgugy/pxr BFKgGGk4/JdJCKufdfU5jFX4fJ3HM37G/RccrtGhIf2Z1utoOyaILoa9 wT3O1WaYG/U=
+. 1814400 IN RRSIG DNSKEY 8 0 1814400 20180629135151 20180530135151 48409 . HRj68PBD0cR2p1njZcMUBecR5DiBbueyhIX1oqc9K9Rig5i+ONuozacm 3F4kg9DhUYb/1W6+PSp9YLyrJtCZOFLqkTjPiOAyiE6zVAE/U5O5LRZ/ FjqRQoWuA1cFZtrLokaWmW9GS5Kb2+PUCJY5NRz27JFSvaRRkoHIFf4o mA6eQsuWt28Itx0VGPL9+mR+2B+IcnmN+DZb7mxoRknOh0WyNop4eiep oSZcCihYHOdesCtmrxoMkwGEHZpu8a6GN7jaeNXXNUulwQYfzUZJZQo1 Zr9cN7kzIZ5tAs9ffnPRcWVO61MQTxUtuGbipFpba6RhGmML8oO4JkOJ Itp6tg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS rootns.
+. 518400 IN RRSIG NS 8 0 518400 20180629135151 20180530135151 48409 . ZBLk+sK9ky+YBmzceXbBqEUyBc6nWfAtF6vCK/6cCfL1AxBYOoxdwE/G m0oRAl5WHRrreDSM2t79jcyyUZyyOcee2j/mLPjLdJPQr0Dw9KY+843L o4VSWV0L9adSzgXgvQF/p4yW2zNbHia7doA9GTDjkQFj2+7HgdJdGk8S I2GCx822fqzMCdS3XerIZ4EMz8Lt1sWaexdCgi0sCn9SvqzNHTaIXirW /apL0ohiBNp23LGa7+/7UvNrv+Y/gHpKk2bUytnS7soOocd9XpTekBY7 jlRlmnHTAdn9b9Zj2PHn72v1RYIywP33Qb9ze7i2v7s12uUR3lJt9sd/ WVeuXQ==
+SECTION ADDITIONAL
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+rootns. 86400 IN NSEC root-key-sentinel-is-ta-00000.test. A AAAA RRSIG NSEC
+rootns. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . noqU9JO9z5QXcedzsm7E6RZ5aIIocIH/jSedo6Zy+GImRTeHpc0le399 DUOsqGlcagx7EWRerScB+xmpL7DxKl0FFyeG0ORvPjJ6IyCFTecWjaKW YVurQnzALW+LhfsPSTxBMnnRhxT5Qrw4dtO0gx7fWyssKUnsMcBdmESs tALFNSfJpiV7so9cK2ssHsC+jkM0AQoemSKJrTesxm8FP1BGT27tz/vx yWIlOUGc8/gBgHo4hoXH1oyCrw9KU9kczRqw4CoCGJtZ2/k15BfmbPlC kLrvLibEmp6OYPVWfJRG79uDHhT+Tul07j26WmA+A7IWXSye8W51WbdH 7gJTKQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN A
+SECTION ANSWER
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN AAAA
+SECTION ANSWER
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+; The delegation here is slightly hacky
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+unsigned. IN NS
+SECTION ANSWER
+unsigned. 86400 IN NS rootns.
+SECTION AUTHORITY
+unsigned. 86400 IN NSEC . NS RRSIG NSEC
+unsigned. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . Di6tfHcpredaWGazWKUX26zYKQ+Yw34BCO2vtqufvcAZJN6PhyXct+Px cvfPN5WxTWlcXVbj6xJKYTOe/ItgV4TM1G2SzGrzTB4qs8ybSvECT59h FUUXTM5ZeXqQVIKKuhVJlmWYSneOiuQG0w6wWr/xE+sD+LE5xQ+hnWrp Z3YAbCmFdtCTwDVt8DkN3i30zExEWc/CnQj9gFYWIBPQ22OB1sfjbZSe 85ucMhUjTas7pZki7b716ZhokApLSf5mVjktjHVT+lPpivs/L2KaQKAe 2yKi05bInFJ+FHU29YoZ3zkBTd2+MeKOh9/1O+9O+hCA+yzLiSLG06Xa 1F7Pcg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+unsigned. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+unsigned. 86400 IN NSEC . NS RRSIG NSEC
+unsigned. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . Di6tfHcpredaWGazWKUX26zYKQ+Yw34BCO2vtqufvcAZJN6PhyXct+Px cvfPN5WxTWlcXVbj6xJKYTOe/ItgV4TM1G2SzGrzTB4qs8ybSvECT59h FUUXTM5ZeXqQVIKKuhVJlmWYSneOiuQG0w6wWr/xE+sD+LE5xQ+hnWrp Z3YAbCmFdtCTwDVt8DkN3i30zExEWc/CnQj9gFYWIBPQ22OB1sfjbZSe 85ucMhUjTas7pZki7b716ZhokApLSf5mVjktjHVT+lPpivs/L2KaQKAe 2yKi05bInFJ+FHU29YoZ3zkBTd2+MeKOh9/1O+9O+hCA+yzLiSLG06Xa 1F7Pcg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. 1 IN TXT "it works"
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. 1 IN TXT "it works"
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.unsigned. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.unsigned. 1 IN TXT "it works"
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.unsigned. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.unsigned. 1 IN TXT "it works"
+ENTRY_END
+
+RANGE_END
+
+
+; sentinel does not affect qtypes different than A/AAAA
+STEP 111 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN TXT
+ENTRY_END
+
+STEP 112 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. IN TXT "it works"
+ENTRY_END
+
+STEP 121 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN TXT
+ENTRY_END
+
+STEP 122 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. IN TXT "it works"
+ENTRY_END
+
+STEP 131 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.unsigned. IN TXT
+ENTRY_END
+
+STEP 132 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.unsigned. IN TXT "it works"
+ENTRY_END
+
+STEP 141 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.unsigned. IN TXT
+ENTRY_END
+
+STEP 142 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.unsigned. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.unsigned. IN TXT "it works"
+ENTRY_END
+
+; _is-ta does not affect queries when we do not have TA for root
+STEP 211 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN A
+ENTRY_END
+
+STEP 212 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+STEP 221 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN AAAA
+ENTRY_END
+
+STEP 222 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.unsigned. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+; _not-ta does not affect queries when we do not have TA for root
+STEP 311 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN A
+ENTRY_END
+
+STEP 312 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. 1 IN A 192.0.2.1
+ENTRY_END
+
+STEP 322 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN AAAA
+ENTRY_END
+
+STEP 323 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.unsigned. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.unsigned. IN AAAA 2001:db8::
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_ta_sentinel_nokey.rpl b/tests/deckard/sets/resolver/val_ta_sentinel_nokey.rpl
new file mode 100644
index 0000000..6485991
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_ta_sentinel_nokey.rpl
@@ -0,0 +1,361 @@
+stub-addr: 2001:503:ba3e::2:30
+; no trust-anchor for the root domain
+val-override-date: 20180601000000
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN draft-ietf-dnsop-kskroll-sentinel-12 section 2 with no root TA
+
+
+RANGE_BEGIN 1 1000
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 198.41.0.4
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN SOA
+SECTION ANSWER
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 1814400 IN DNSKEY 257 3 8 AwEAAcliJP8Jh/RjL3c8eaUj8dzVdEksENKubqVA5FdrDJ2rC0O/bGG/ MVZt+WacE1o1mRVwTT/TrhhZUAzZ+qOcpB+IWxURsR4vVqVwakHMny7D 2aLXKoVXwTo/VhAQtHDw5G9bxGgwybPUtd5Vz6EIenUsmNYZ+Spde4l8 vpw7UISVL6q0C1mwHMN18P/1yfHmbkS19b6B1S9Y2aputccF1lso3yiF Ig7UNqqD4PNxSo4jByDnajQSP3qg/LSJSOnzBIumb8wc6svxgugy/pxr BFKgGGk4/JdJCKufdfU5jFX4fJ3HM37G/RccrtGhIf2Z1utoOyaILoa9 wT3O1WaYG/U=
+. 1814400 IN RRSIG DNSKEY 8 0 1814400 20180629135151 20180530135151 48409 . HRj68PBD0cR2p1njZcMUBecR5DiBbueyhIX1oqc9K9Rig5i+ONuozacm 3F4kg9DhUYb/1W6+PSp9YLyrJtCZOFLqkTjPiOAyiE6zVAE/U5O5LRZ/ FjqRQoWuA1cFZtrLokaWmW9GS5Kb2+PUCJY5NRz27JFSvaRRkoHIFf4o mA6eQsuWt28Itx0VGPL9+mR+2B+IcnmN+DZb7mxoRknOh0WyNop4eiep oSZcCihYHOdesCtmrxoMkwGEHZpu8a6GN7jaeNXXNUulwQYfzUZJZQo1 Zr9cN7kzIZ5tAs9ffnPRcWVO61MQTxUtuGbipFpba6RhGmML8oO4JkOJ Itp6tg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS rootns.
+. 518400 IN RRSIG NS 8 0 518400 20180629135151 20180530135151 48409 . ZBLk+sK9ky+YBmzceXbBqEUyBc6nWfAtF6vCK/6cCfL1AxBYOoxdwE/G m0oRAl5WHRrreDSM2t79jcyyUZyyOcee2j/mLPjLdJPQr0Dw9KY+843L o4VSWV0L9adSzgXgvQF/p4yW2zNbHia7doA9GTDjkQFj2+7HgdJdGk8S I2GCx822fqzMCdS3XerIZ4EMz8Lt1sWaexdCgi0sCn9SvqzNHTaIXirW /apL0ohiBNp23LGa7+/7UvNrv+Y/gHpKk2bUytnS7soOocd9XpTekBY7 jlRlmnHTAdn9b9Zj2PHn72v1RYIywP33Qb9ze7i2v7s12uUR3lJt9sd/ WVeuXQ==
+SECTION ADDITIONAL
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN NS
+SECTION AUTHORITY
+. 86400 IN SOA rootns. you.test. 2017071101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20180629135151 20180530135151 48409 . vb9XrP5h9Ojhqbs1Rbdiwxvje/TVFafSZlLf372zpYdtSBI6f7x++GYI WNiUG8EFtchEmL8KNsrWbujpa8tXeWXtatW92kG1qZAnOA40Zw1DjnI8 ZI7volYyq/TMmufKcoNAXU2knAmpZhHDZ+TBOc5HK6TwKeQaRQ6hPwxB JKOjXw2mVjQFP5lck2m2LU9a7iubYRvncRDHmqfjJ9XsSfWi1AU2fmk/ ei/bhKnFMWVH2PXtQlsbxRS8+8SaEL6f4rQC1JqwQ8E03SAZdK7oJKOf GRRFOfYOx7JucTwiV18LAa/j0owSMvuPwYjGnk6BY7e4LTMK2vPgJ3yY lqLmTw==
+rootns. 86400 IN NSEC root-key-sentinel-is-ta-00000.test. A AAAA RRSIG NSEC
+rootns. 86400 IN RRSIG NSEC 8 1 86400 20180629135151 20180530135151 48409 . noqU9JO9z5QXcedzsm7E6RZ5aIIocIH/jSedo6Zy+GImRTeHpc0le399 DUOsqGlcagx7EWRerScB+xmpL7DxKl0FFyeG0ORvPjJ6IyCFTecWjaKW YVurQnzALW+LhfsPSTxBMnnRhxT5Qrw4dtO0gx7fWyssKUnsMcBdmESs tALFNSfJpiV7so9cK2ssHsC+jkM0AQoemSKJrTesxm8FP1BGT27tz/vx yWIlOUGc8/gBgHo4hoXH1oyCrw9KU9kczRqw4CoCGJtZ2/k15BfmbPlC kLrvLibEmp6OYPVWfJRG79uDHhT+Tul07j26WmA+A7IWXSye8W51WbdH 7gJTKQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN A
+SECTION ANSWER
+rootns. 518400 IN A 198.41.0.4
+rootns. 518400 IN RRSIG A 8 1 518400 20180629135151 20180530135151 48409 . QtR9Z2uVwFVlLy5xQzMVmhqdzZw5cSFbq3xOzhr42gkoD9BYfNyTuhz9 57Sc7kvyJalBHaq3OKoYvE+4anjR8bXk20nGvVjzRdiiqavK41yUpbxC xvo5fWUMj5Bg860AcApn4OOLdFjyKOjJX7ro7QvFdA/adt9WEwhQ3AJ9 PN+SHqtx35F49OUbgiNUEbShJ2VyjOL5bt41LZgffkjim+VB2OtO1hDG CqrKyUlbZ0vxGJhtVflt1Jj3atArHfHz4cuFJHLtSu9PK9piYlSQ54XH vPk0YZ2iKK9sNrVF50Vb7NmLFBCVPn/op0Kmr+u6QVREP6uWayoPtqab /NKvwQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rootns. IN AAAA
+SECTION ANSWER
+rootns. 518400 IN AAAA 2001:503:ba3e::2:30
+rootns. 518400 IN RRSIG AAAA 8 1 518400 20180629135151 20180530135151 48409 . bs+zTG/nH7uQrgW5qfY5p25uXNoPOsH94K/xNVSLm9h1165/AMekPPd8 KVPnCfyZLPhO+/XyZ5fDUd/2iMCT5m/HyjXR0+j92r6f9ePfAJVQX6U0 DJUa882LgYK7k4usmIIWpi66bpGDC1tlJF3WQ4G12Hc/cUmFTMDBTcM8 6CPPDoT00JZQL8u/66GwNYkWw4mmbiq9UAz03R7A983dUx2GLCAmXoGR Lr3hI3btZa5x+GdJhw5t6Mqi58tXSZfUmT7kpCw+K0H/RscQaVDaOLc6 kzBeVn/Lip60ZSd84kiNWKuSA56TfUbpk7VJclY8UI34COHQqNtD+lev wJ1WgQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . qWJh+EE/O2w382vLo53ci9i1O/rAzJUUnZPmLF+GCwmLLhDl6tlI3y5A cALqIHkK1vrXzD+mED78YpILzZ73izRFieY6DxMtAXViqH9U8KSy6KWp tAWUASDe1gj9DGdDeiKdTAIo/2qk1PiGdZNc2E9vQLIUTJNfwV8aZGIt PTgl/efGEIMGGFQW5RPbDZpcJLQ11/RUi9FHQyseZRwkCa8EiEfgvPJ2 /rwiCPUcM6BdYzKoZ53cAHBbeKkvgAOpQ88qDvtE12aF9F8anxdHd0Ru 2DlmrPPthn7/faXSBbBECIbnjNlWTiyF7r274SQKFCrT0rJx5N9c31n4 ZSIocg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . J4gFrZRSHHDfMoA2zO22H6A55/893OnGO7h3H9znJGZtp7DxT2vxiGJw InBx5/zPubH87rqTa4AkK2GZuDEqVEDU/fjWOjGQOx16V0oeoHi5/R2R sPTzFnb+NvQnQZCRolMHD2keakdzB8b7dfEV80CrRh7uDsiO8aqhSdiV BFJLXFt5qFd+evKw2SG7l9FNMDzukUSAcFIJepM99X7qjQnKsLuzDjyF 4zhgMolAzAwIQzEi4B+G6IQknx5HsvmpNgkbBFjns+Q7ZYutNecPfiYU vaMpSXb5pztCVLbZQEymIXPgsnzdihlMbzh22TZapLbrDBUVEc2yr/QC Tz/CQA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . tl+oiYdq+UDlh6snkobPI/jQbrPM2tESEyDNIec7wCRvCEo6CLd+oMOA H4P7idKJ1Mey0eMl++YI29Vz2KVAIL0Hiamt32VDXyR5QYVVzNQquH5B /P4PDeoSadK1M+VThnSPT685+CLCbAZfu0Hi7+NulEeQLleBMtSGy0pF eG50H7fecNjqmQ2O/3jKRfD8l86+jba3B2FmpPvsxXgR7Ig5jC/XSpSY 0UMXyntDJz7QOSuhh4GcdNEeUqGVTurqnFjgRmZwReVZqeQzCS8Q+eQn cq23FtXxcAqJCFKN68yoorWmlZhZl0DPm4Zpup28wwlIapO+SGwScD0q KyHZYQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . N1vrpd062YN/PGLOmdAdgPOc2iPPBadtv+DlqoCJ8OUEtFH605m7AUlX HDV99dpT7j6I/N+Sp6pDMRIRl+rB/tFXNfQFoB7UliAsKQ9UuKxH/uyc /sZWxPmYb+4Xi1AKmkzvp7M3Babq7hTGG/PnngN3386Qd0MXiw11Tdl9 +HIan1Jz2jMrHuR2NZDILZOW10wYogYD3/DAx6bVaJMjDbIky5ikK2H/ 4QajIhtjuux4GfsFc7KjGzT1/Hqa9LqdsLetvQmKF4yGNjizOgnrHlbF GoICQ1KihXF3IGYcBUyIoMcmhAjz6D0/jQz/Blwx3zvEUj2Hf7Xj+haO ShdguQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . UYk1xmrw2A7ojKSTpwuF90WXsXOfNbRI8pi9tDPLmqr0OMn29AW051vG TyLd7L3ogsaoUEDiY2vYyvyZI3kPL9fSRDYgOIk7Cq3hp7k6wMM3IXS6 iIlYnjtvUFGDaE69EpUjwII22lSWaqOo0dCFnacJYWDfShdZcv7yssWG 9nZpki6aiBAjhYXY8tdMnpDJzq9O3zXPQR8xtuFW4S0aVdrHuSPRq935 DWXThocHxOza6OQp/ZkbemkoqAYjTlu0tyITwZsTknxgK1mtM+ArRmhS eykqVs3mmAGIWMN3qIW8SXKVRHI9PPjka0j6+KK+bfmeck0bI2Wu1f3C cnk+nQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-48409.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . NLK3/UMZZ+39KgwbFFoS6qR2QTEULMxDhlWpK1is+AU3CjUn1RNPRJaq m1MnfJdEq3+FFwVDkpmDGh8lQfTBn192oWlo2goHXZXwuoFN49FPHZ+l u42NWMDKtmS6r9JemJR68jH0jy/AsTMdvAbeodg06cbY6F5Q80EtAdkZ iOZPnqPenfxI+U8C2KgBNas7izGbQZF3FxHi7GZz+wrCGBcjcYX9pcD9 /rf1plZYudefFbxG+P97WfMScDD5vt0dUxz3Yt6YUC48jlyo9WYZDLC5 3qOuqah5oXS1lCGJDm+Kta4koVnm6W4pbCzT9XISwRWZ81rp0NbTrhHb Teu7Pw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . iYK8FfKFt+aD2Mh+hvFxyE0lCs/jHMT8EWlhPGuiPekHkYnbTaRbGJhT sCeL3Cg1MHrtGr8BXSq1RMyKnn6Y0/bhF1nEjk1gB+vAFHUwWe0yX32U H7E139q68ZyrcUkpV+KkY+ltMSKAjBtGRkYZ9sJhFvll7YCD2HtAMPud KEWpTZS2D0fLATDzAJzJF/2qGMvRUIn0sk5+3HqVh7R3stbl4aSEw5Zp swJoSCs1DN5eaLh6Ovas51uDAa4t6Ove6owR/gR9isqdZCbilAaJ6497 xg4r/KsCu6eG7GAAw5XGh8rkpC5YbsCBlXB565Zk5oY4yBgBUiG/iXGC wyLyJA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . QNF7LtVeew75AhniJ7S0ncsmrHWHCnRcU0H3uyCipyL20kHlpc1NOIUY md7BB02MXm+XOpJF/l/uc9v/C0iuAgOpFVp5kVjtp+gTu2mgceXstFuP 3tNmrL2pSRIWaN8+koS0MlAZCrH9+J9RSFrm5twtD7bIvGT0FVvy/RrR pRWPy9hbqjH6O5DFMdksdVTPLEYFXevAHGKvRa5beRXkrL9ANfVzvPYl q2RaO1aMX6+Cy7AquJpU7DUSReEUBr1f7mYVdd/6sjzoXrd893c+2Fc+ WFLVuWER3eTSrLAQ3b3Etz0lqM3MLrEXwjQFl2mw046nlh21T+u2Ds5s s1/b8g==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-is-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . cGVwlSItiMGEOKkCWRLUn2od/cBvOlSwj8qxCppe4O1FRyTGgEFNV2nf 2zUkhL/agQhXI3qEjFOkq2b1l+4dM3BwDOF7IGhS3yXV3JGnIcwOC7si EMjRZGIvcEenjfugpIwkwkhTZdgIFoyCUr+g6YxA3iL6L77dftAmIkAV 6gvyarwgeYs0Wi+eEGfrZp2MxJjHDXKF+NfCy/fJnYx2n8SRpXya/Uu+ DJ+S4FQDTDyjDhN/+Tvcsb++sjvNfA4ZDwx5gpgNkRF0xsLHMoxCQagH gJBBziP0cq7l2fy5FVMpGNvdkkiYYG8to/2FF/65GhV+RuNcotD91zyW aeSxWw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN A 192.0.2.1
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG A 8 2 1 20180629135151 20180530135151 48409 . YYqLZKzjD13hpj345YTNMYYEh3US2BY7DqK9YbNIZi4T0/0jAEFPamKW WcX0nPm5N5S+1VqKIdo/brqvOTaxsq7HnPxVfomg3wyaKNvwqxb2MUpa pYl25ORa7yOm3gwVZJ3NBjh65dLXzGn8t8b047ym7Fnz6JAJHUyM4/SH hZhvXYBX+i3Lojq7HDIReqAtH7zzWdKzKLCTNqAhuqfvEI3edVynpth2 SCMNDVaAUlzVfBLEAkHNp26mLSgcarc3vrb2khdDS13Kv0Ev4rj0w0v1 z0DnVs95Yl2XlnShzNTaW5w1F8f81oBbq2Ly2POxERr5cOCNSGIWMi+q XAt7bQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN AAAA 2001:db8::
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG AAAA 8 2 1 20180629135151 20180530135151 48409 . mHz8sEjHOt+UrLPdGr3s+dake/eRQ6QmushFbLex2e6epkvmriVQwdWa QqG4h75UmjNnOlAwpHJA3oRyKxLJKmVgJIAQzhFc6sHLwEVl+kVyxGfu Q17Md+52E/d+mLMHohKRXljTaghp2uLHX8oDtBP+B2HhIDJK+uhfK63A MZ4k1L4jBGCvEGVMO7BhrpHV9zbY21MOb6EIp/F35jB+ftW7gilKxxBK t+Qt1pwtJcDGVC2xZST6fZ2yaR+U+YhOJ7t9j6WVVTWyFSa1CG3lzyRW PNduZeKYTYwox2uqqUxh+Nmzd1oZt7geIw8CGTYS0B++nVUdNJXJnP51 +evqJQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode question
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. 1 IN TXT "it works"
+root-key-sentinel-not-ta-00000.test. 1 IN RRSIG TXT 8 2 1 20180629135151 20180530135151 48409 . SjAFtdUPy+YU4sZnst5GNNYxjzWhBOVqUAfGIUv3uBo5qZW9ePecUJ8G ZkNUkdT7m+cHd0c1ssOBOT7snjwc3Sy3zD22b6/q3N8VowhDQDPkoDlB vt9raR7eXu273cEBDZTQ9P4Ya2Meu32Aftwa6VMQmXMl+qWXhYqffEt6 bJuoohnCVqOZihqgnoT+sRiDl49RgLb+GnZNbFk5EP9LXOrWcdxczKso tY384WCrniRmg4L6NM5DjnBtUVT+Qs6fhWGqQv23fPiLV8lt4i34aIf2 jAQkIE6KD4aNLlehct7eqFo1aeaiZumqEd9/GoqSat/RE7Qsh6hiRkfA /J7MLg==
+ENTRY_END
+
+RANGE_END
+
+
+; sentinel does not affect qtypes different than A/AAAA
+STEP 111 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+ENTRY_END
+
+STEP 112 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. IN TXT "it works"
+ENTRY_END
+
+STEP 121 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+ENTRY_END
+
+STEP 122 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN TXT "it works"
+ENTRY_END
+
+STEP 131 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 132 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-is-ta-00000.test. IN TXT "it works"
+ENTRY_END
+
+STEP 141 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+ENTRY_END
+
+STEP 142 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-00000.test. IN TXT
+SECTION ANSWER
+root-key-sentinel-not-ta-00000.test. IN TXT "it works"
+ENTRY_END
+
+; _is-ta does not affect queries when we do not have TA for root
+STEP 211 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+ENTRY_END
+
+STEP 212 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN A 192.0.2.1
+ENTRY_END
+
+STEP 221 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 222 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-is-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-is-ta-48409.test. 1 IN AAAA 2001:db8::
+ENTRY_END
+
+; _not-ta does not affect queries when we do not have TA for root
+STEP 311 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+ENTRY_END
+
+STEP 312 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN A
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN A 192.0.2.1
+ENTRY_END
+
+STEP 322 QUERY
+ENTRY_BEGIN
+REPLY RD AD
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+ENTRY_END
+
+STEP 323 CHECK_ANSWER
+ENTRY_BEGIN
+REPLY QR RD RA NOERROR
+MATCH opcode rcode flags question answer
+SECTION QUESTION
+root-key-sentinel-not-ta-48409.test. IN AAAA
+SECTION ANSWER
+root-key-sentinel-not-ta-48409.test. IN AAAA 2001:db8::
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_unalgo_ds.rpl b/tests/deckard/sets/resolver/val_unalgo_ds.rpl
new file mode 100644
index 0000000..919c856
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unalgo_ds.rpl
@@ -0,0 +1,202 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 20009 7 1 9222285F81978C50F77DA894956E77BDCAD281F0 "
+val-override-date: "20181220170056"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with unknown algorithm delegation
+; DS has unknown algo only.
+; so subzone has to be treated as unsigned.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20190119150056 20181220150056 20009 example.com. j8376QAQiddoeX7srgtEIo61o+HTctzVFwJUtWPWHJpk20oez5HaGKHE HrOhk4MZQ5fAmtr6a83yEX4hGPvEQJCjUZBBHRHTwC50sxEPFumdV28j +jW5avFhIgkIX9uuiPbYkrh/1l6rhHtPLX8Q8OqkFMkIhFGVYfaxFIvg 4bU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20190119150056 20181220150056 20009 example.com. eHFRaqW2U4dTQhLc0CIB/JuUpoNdThLzMvXxEfIQkMdKGbxrv93q90lq xFoohvm+ODFtE6rK9ABOXwK3FycPc0sSzaXX2waNGmXOSTAMCjHj9MKv ATThTPhSpTS72qCwa6dlfno/SALheLCPX0NE/jxRAwM4fyaysqXwIPcs U0k= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbqb9jXzpXYl+9sTJ88ra4EHRrDxFcprKz3cu26/yY+3Vhq4oDSr VngEkZI3m9rMasBoGa85mHByLvt16crazzLNwGpC6dbUSz37tL+F2Wra 1N+o+yy56BRL8tteLFKGTMyzq3NCkTbXuNrdE//rkByNrKUZz/VeTK8Y z3CkMyNd ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20190119150056 20181220150056 20009 example.com. gDHM55rE/2AqgKnmvpQZTWNEWWvx+41mnBB2pH/n3SyKFre73eswv0n8 0HeJU6A3CIDj3LQxdCmz8nf4tUt1oTfBMejROM1NgdRdGWdZeojVzXH2 /bszvyFV+whX3qryw+5UL6/lo0aF8V6vsTepBeIs7GCvdEZqzKBzyRP8 42E= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20190119150056 20181220150056 20009 example.com. j8376QAQiddoeX7srgtEIo61o+HTctzVFwJUtWPWHJpk20oez5HaGKHE HrOhk4MZQ5fAmtr6a83yEX4hGPvEQJCjUZBBHRHTwC50sxEPFumdV28j +jW5avFhIgkIX9uuiPbYkrh/1l6rhHtPLX8Q8OqkFMkIhFGVYfaxFIvg 4bU= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20190119150056 20181220150056 20009 example.com. eHFRaqW2U4dTQhLc0CIB/JuUpoNdThLzMvXxEfIQkMdKGbxrv93q90lq xFoohvm+ODFtE6rK9ABOXwK3FycPc0sSzaXX2waNGmXOSTAMCjHj9MKv ATThTPhSpTS72qCwa6dlfno/SALheLCPX0NE/jxRAwM4fyaysqXwIPcs U0k= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+; algorithm 208 is unknown.
+sub.example.com. 3600 IN DS 31953 208 1 84464F35C846F53CB48251175EB351BDAAD48953
+sub.example.com. 3600 IN RRSIG DS 7 3 3600 20190119150756 20181220150756 20009 example.com. PPiE0aTaIWVV9JjoDRiliQjvyuFiehO3APeMjOMW4z/++rtLGnr66Uf7 M+0411UEndgx4/vuBqMqz6eXeivkgeKVxgoBz51OF2blNKM8JGOcgoOM mB5vjQ07DpNtVSQltDWffvLM8Meifj5shgY1m7dbiS1FHKreaQoT90nz a14= ;{id = 2854}
+;sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3
+;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20190119150056 20181220150056 31953 sub.example.com. pnikDTPPngQdMmFi4RZKDEmmaTdobIYTvop2Tw8LPD2kI9LLr2IkNHn9 dP/CqTrW7Lay0824cMBJ4sHbkN2hm3cP9PPWe+5mnnuPSgPgBd4n2vpQ /RE2sxskWiwoEjIjg9+5AaipctC5Gt2jeHpqv9nA+5TA9Cyw7yUdcWzM u7E= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20190119150056 20181220150056 31953 sub.example.com. KAWpoyn0rmTzd/NMNUuEf3J0LP6vP5rmm+6TuuFjfapVssIHsQ5jCcE8 L5n/qr4nn21HVqFJgjcdmnSqWlI5kICBeQacvOA7zHyGuxI3vaf+k0m+ SdxzpBYAdWFZpTCbfd7REgVJPk3WXR4aTVO92s/JMO8xmMKSq/CjmGBd IMQ= ;{id = 30899}
+ENTRY_END
+
+; response to DNSKEY priming query
+; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DNSKEY
+SECTION ANSWER
+sub.example.com. 3600 IN DNSKEY 256 3 5 AwEAAa346cld5d0e37nm5x0ic42TOBDBlSl9VhlwforF/dQCQoZmp7Ak gG3b9RVJwUQvNvtS1y9jl1IGrXbrt0HcDOKRHKYyONkk12ZVcZzxS9dC FZAe7IX6Id1N8RwEVYaJFHCiEAmL6HcpSLP2B8cfa7ey5zeZD+Wz/yXo a9MCT6WR ;{id = 30899 (zsk), size = 512b}
+sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20190119150056 20181220150056 31953 sub.example.com. mk+IKcijVYZ/Qp1oC7u4fLzj/fVh/yt93cdRXHr8mtrg0YbbStdJKKWr f6dEAYLXmUa6V1tFwNn/w2vg9RM2qRK+4TylxYLfVVTpOFAhg93mqgX8 rKMlTJ97MqYy0KspIXobrQaS/fap9229cMNeQyJXMfdhNrj8HU/U3fIX dAs= ;{id = 30899}
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. 3600 IN RRSIG NS 5 3 3600 20190119150056 20181220150056 31953 sub.example.com. pnikDTPPngQdMmFi4RZKDEmmaTdobIYTvop2Tw8LPD2kI9LLr2IkNHn9 dP/CqTrW7Lay0824cMBJ4sHbkN2hm3cP9PPWe+5mnnuPSgPgBd4n2vpQ /RE2sxskWiwoEjIjg9+5AaipctC5Gt2jeHpqv9nA+5TA9Cyw7yUdcWzM u7E= ;{id = 30899}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20190119150056 20181220150056 31953 sub.example.com. KAWpoyn0rmTzd/NMNUuEf3J0LP6vP5rmm+6TuuFjfapVssIHsQ5jCcE8 L5n/qr4nn21HVqFJgjcdmnSqWlI5kICBeQacvOA7zHyGuxI3vaf+k0m+ SdxzpBYAdWFZpTCbfd7REgVJPk3WXR4aTVO92s/JMO8xmMKSq/CjmGBd IMQ= ;{id = 30899}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20190119150056 20181220150056 31953 sub.example.com. XjoXosfFOUyNzvNKM/CjiepBA9fmdkpMWF3nP7rlQyb91nZsNbxqreEB U7YepFJlAyWAK7ODbkH9LxPd+dXKAnR/1NUTPi43GzSt1W/g5YbBOrFf BqVEV6FGsLu8fX/qNQfFnzTbLk6brw7IlN6SlEkxUnTZyHqwtTY+s2Cm Iww= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20190119150056 20181220150056 31953 sub.example.com. XjoXosfFOUyNzvNKM/CjiepBA9fmdkpMWF3nP7rlQyb91nZsNbxqreEB U7YepFJlAyWAK7ODbkH9LxPd+dXKAnR/1NUTPi43GzSt1W/g5YbBOrFf BqVEV6FGsLu8fX/qNQfFnzTbLk6brw7IlN6SlEkxUnTZyHqwtTY+s2Cm Iww= ;{id = 30899}
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure.rpl b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure.rpl
new file mode 100644
index 0000000..b206290
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure.rpl
@@ -0,0 +1,161 @@
+stub-addr: 198.41.0.4
+trust-anchor: . IN DS 17002 8 2 775F52082C6A93154F15799C7BC9A47C0DA27C9828BA1EBAEAE5C1F685E69839
+query-minimization: no
+val-override-date: 20170801000000
+CONFIG_END
+
+SCENARIO_BEGIN Test DNSSEC with unknown algorithm
+
+
+RANGE_BEGIN 10 40
+ ADDRESS 198.41.0.4
+ ADDRESS 2001:503:ba3e::2:30
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 86400 IN DNSKEY 257 3 8 AwEAAaw5/EVELuakk5srRepPzmDsF0doS/HpE9QBEn0xqRteeRFENh74 WZjO7Zc8QeH0uKDeVXLhG0akgbjnwlAu3P225pZN4ovq0ep3MRU3Wm5t nvsD43D7QH3UdYe6I04aH+8TtAUBDiiKX5IQq6qcYIPk+xXzd3kk4kmQ wV7OnAeZBqHA2ezViSL2p+h14oZ+zvFSd2ohFN3T5RJIlCfT0mNVa+Xh V2dORjR9/gTd9WPdZj/mmLlpw4tf0HBnCRVjryvAeXgy33WZMChLVwmi Ve3FGKBgkYYjxyBVpgFvIgLPmpJiC28XSleNzfYIAU+3ntti+zCIcI7y eKYmT8mQFB0=
+. 86400 IN RRSIG DNSKEY 8 0 86400 20170815084229 20170716084229 17002 . XwUIQY7CBOvvjWiFDjH8fDY3csUTyDiixrgXPCvrK5bY5Z4HKEyPhe0p msVdtFG8h8//L3F8VG7DRJIm737aUUoDknXBvK/MdxdYMzKc2aaW8I8O yznz6Y4H91qVuUD7kxli+VUXIWfB6a/X6CdZFL+EfXo0SF1DVPMJvGLl 5FCJ+QRRknyZV16J5bhcMz42H8McKdNMABrHuK+rROhkhcwY0jH2sQFi 6LH4raijw06aR4ABtGXqo8N/L0+7kyakYR9ToBFng3yQhfncumzSARzK jL+bLKC+7kKu/fX+kmKRxOsrrUBEmQrZpuWuBoyDHWRoYTluvH8KqWcl r1WTFw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS rootns.
+. 518400 IN RRSIG NS 8 0 518400 20170815084229 20170716084229 17002 . UcQ6SwMvSPPp5R75aY11RLKpbcoJMZIByS8FSkYRhi7wav6kJufiwi3+ +CcM3waQiNMadXsqJxY7brykJkuoTjqz+/n7jV2/F63t9Ntx7k2VPVE+ pqN19bu+24Vq6AQfkBDWwP8fzIxtUIP8Yn/UUTsTA9eV7Bgtk462Fhxc hdac3D3jleit1mnpbdep3F0EmtDb50jWDUDpQzYU0N6X1ApbOV1cNdpY v2Bx4w5rR+qmSyRwHWlTcsnbVeoplIs3hxcorhIv7EGt0wAIBAKCPV+/ ecp3il7/oYpHqfIhRvzCuLkVjIdJYC1gfBSbp9/uSVVqgu9euS7yGnTy AWNamQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+rootns. IN A
+SECTION ANSWER
+rootns. 1 IN A 198.41.0.4
+rootns. 1 IN RRSIG A 8 1 1 20170815084229 20170716084229 17002 . XEdMJ2jS5yOY8hecBZDv2oPpmzFucfW08OPlXdoIvtRVyGI7gWXdnYYC ic2pO/w1cKX4NjzeE8wEiYztz2X6hECh7lEz6gf+sb1j4Z1rjdc/Wbue qwucEOs9LJ+P+6DUeBr0jVYR9Pr55IitDVyvx+aa8jlmTDJO+CUNhBMe cLErM2vWRJ3bYbS6N6o3lV2quGjDimpIfg2esa47A2sTRB4zsnlqH3dQ 6iFlUrIRyfgMxFxf9A/WbLwrp9aFOg069HmKdAAN49ITz2lMwIxb6gYO S2KJM9GSaYOGVfyVf0TvGmBYs5sD2bwyFwEBrVH7Z+I8PgGVpXRO+jtw FICQJg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+rootns. IN AAAA
+SECTION ANSWER
+rootns. 1 IN AAAA 2001:503:ba3e::2:30
+rootns. 1 IN RRSIG AAAA 8 1 1 20170815084229 20170716084229 17002 . gT1s+QQ6wubnvZkmYYO6nARX6wCjq8PATMqmXhlVqQXRZcayHq9FcnHA xBA+ZPpvbJXJSmiyDwNw09g/5mvuo1v9ZMzWoRh+qnGJ/rplD/sukDmw 4xNvTi+LV/MdGg7fid/wVpycYXZTy/+6eeE3obWrgi7i6OMdzDQlm0/u sifQt8M3aFi8gQvSIZ8cJ6Yo69hZ/X1Kh27ce5H0eOOoj/TxcI4UISEw OrJDAYzNLYHQivLzj/UJePKS3xLrHpagsAYt6JQlCYJJWubXyutOkshj rY1EwVrNJ3wgLdFwBToCymtto9HO+X4oZJIT17KwJpQ3OAwZvcBQM0gs w7hvtw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test. IN SOA
+SECTION ANSWER
+test. 86400 IN SOA rootns. you.test. 2017071100 1800 900 604800 86400
+test. 86400 IN RRSIG SOA 253 1 86400 20170815084229 20170716084229 12062 test. UNUSABLE==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test. IN DS
+SECTION ANSWER
+test. 1 IN DS 12062 253 2 E18BD6A9E00A75C0FE17CFBB300AF4A34C1F3F1CCADDF56646007565 8396477A
+test. 1 IN RRSIG DS 8 1 1 20170815084229 20170716084229 17002 . KIbj4XGbPWamI8atPM2x5EzAQu2KC+raKS5AYBuX+blxyOrIYtVhSc1Z poauPhDbofYNAMu9KqZmQkNjaOW9i5Z9NmGXQgTmC5l0TfGC4mc3a21E 3ykuQlVqVfOIkEvA+1boA19mGYw0IQ6MAP6NazDNvsOepCTAxyh0U5Va CvoD3QQMwSHImvhUwbC3Lao2kOIuIHVF1zge4SK+m9eBg6LCqtcD8nJJ gHIdO7r/o+d9miXjjfztRR0ZTaJGz4tZKXgOLJYxDcgjxLXF6unSB68e 1jsa+BncWwyvvkP75VZ9EvCpBgfCGdwg0eujFaRwa3PE1/nPqUaCgael 1qzbXQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test. IN DNSKEY
+SECTION ANSWER
+test. 86400 IN DNSKEY 257 3 253 UNUSABLE==
+test. 86400 IN RRSIG DNSKEY 253 0 86400 20170815084229 20170716084229 12062 test. UNUSABLE==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test2. IN SOA
+SECTION ANSWER
+test2. 86400 IN SOA rootns. you.test2. 2017071100 1800 900 604800 86400
+test2. 86400 IN RRSIG SOA 255 1 86400 20170815084229 20170716084229 12062 test2. UNUSABLE==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test2. IN DS
+SECTION ANSWER
+test2. 1 IN DS 12062 8 255 E18BD6A9E00A75C0FE17CFBB300AF4A34C1F3F1CCADDF56646007565 8396477A
+test2. 1 IN RRSIG DS 8 1 1 20170816080814 20170717080814 17002 . QKmpsz0Q+9n9GiVdyLosxo9gxNRWDR9RrZho5iYW+8TMkW/T4o5ifkjc 79BQkz48hEjrtKF4qvzWjSnM2YMnSGO63pjngjXSPw6zIoBuEihM9Tf/ SAvJfBFdf3m3XYfF5lleC1GbJfSxCLy8KTepS2JhZo6fvNQ+TfPOOBQT eWAVPaxd2VzbuHMz8mkF8QaNLZJhuaJ7EFx6UzcoDpBL5Lv7uPqtm/Nk ovfmu/NxOkbWsrijiB3YwcP5b/V9Qfgkt27P9o8PFx/u3NzSmirRrvm9 C0apwznU+h2xBQ8hy3VlDxkGeS4IA7cH6o7EeLmuIV7MqLsWmAfhNd6J uuVQ4Q==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+test2. IN DNSKEY
+SECTION ANSWER
+test2. 86400 IN DNSKEY 257 3 255 UNUSABLE==
+test2. 86400 IN RRSIG DNSKEY 255 0 86400 20170815084229 20170716084229 12062 test2. UNUSABLE==
+ENTRY_END
+
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test. IN SOA
+ENTRY_END
+
+STEP 20 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test. IN SOA
+SECTION ANSWER
+test. 86400 IN SOA rootns. you.test. 2017071100 1800 900 604800 86400
+ENTRY_END
+
+STEP 30 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test2. IN SOA
+ENTRY_END
+
+STEP 40 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test2. IN SOA
+SECTION ANSWER
+test2. 86400 IN SOA rootns. you.test2. 2017071100 1800 900 604800 86400
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.key b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.key
new file mode 100644
index 0000000..83fa74f
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.key
@@ -0,0 +1,5 @@
+; This is a key-signing key, keyid 17002, for .
+; Created: 20170716090354 (Sun Jul 16 11:03:54 2017)
+; Publish: 20170716090354 (Sun Jul 16 11:03:54 2017)
+; Activate: 20170716090354 (Sun Jul 16 11:03:54 2017)
+. IN DNSKEY 257 3 8 AwEAAaw5/EVELuakk5srRepPzmDsF0doS/HpE9QBEn0xqRteeRFENh74 WZjO7Zc8QeH0uKDeVXLhG0akgbjnwlAu3P225pZN4ovq0ep3MRU3Wm5t nvsD43D7QH3UdYe6I04aH+8TtAUBDiiKX5IQq6qcYIPk+xXzd3kk4kmQ wV7OnAeZBqHA2ezViSL2p+h14oZ+zvFSd2ohFN3T5RJIlCfT0mNVa+Xh V2dORjR9/gTd9WPdZj/mmLlpw4tf0HBnCRVjryvAeXgy33WZMChLVwmi Ve3FGKBgkYYjxyBVpgFvIgLPmpJiC28XSleNzfYIAU+3ntti+zCIcI7y eKYmT8mQFB0=
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.private b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.private
new file mode 100644
index 0000000..c68d3b0
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/K.+008+17002.private
@@ -0,0 +1,13 @@
+Private-key-format: v1.3
+Algorithm: 8 (RSASHA256)
+Modulus: rDn8RUQu5qSTmytF6k/OYOwXR2hL8ekT1AESfTGpG155EUQ2HvhZmM7tlzxB4fS4oN5VcuEbRqSBuOfCUC7c/bbmlk3ii+rR6ncxFTdabm2e+wPjcPtAfdR1h7ojThof7xO0BQEOKIpfkhCrqpxgg+T7FfN3eSTiSZDBXs6cB5kGocDZ7NWJIvan6HXihn7O8VJ3aiEU3dPlEkiUJ9PSY1Vr5eFXZ05GNH3+BN31Y91mP+aYuWnDi1/QcGcJFWOvK8B5eDLfdZkwKEtXCaJV7cUYoGCRhiPHIFWmAW8iAs+akmILbxdKV43N9ggBT7ee22L7MIhwjvJ4piZPyZAUHQ==
+PublicExponent: AQAB
+PrivateExponent: F2eB2r/bR8iRroKA68iQmSc8Op33xBYSdbr3kj/PZUK/XRNR7398XYGxU94Cbfxdoq7UGdpxZHYykrgb9d2IdooGZ+KJqM3uXNh5uRJenacT9bSfkdjy+KaImjs3VQPD1y9sRUnRbLzxI95UFclObF4PqPn/AF18ytZ7ELEvDvEJifyxT80VDKx27LWEUrI2xbNMS+BKF4K/RAXWbbuv60oTuBsi+txKehVw+rFNTum6omFJlYVOIXg+kXp3XH4XfXNze6in85ju4V2EbJ/uRjfQPShQFCpboQN1t+W5K9gXQGtD+OqPQGLI1fAb6iUNjKnt+mG7O9XqjMLoUyq2wQ==
+Prime1: 3Tz87rRCofb+IBdD5c3rZwSxDXGTYyaT0tWxBAXMvN2DkvvC+H2pRR784opawatfDhthm/eyNbI1qFYPmufAEge+73md2RnXAb2SWlFDuYLQsRNiyX0CUwjyeZrsgNkXMfyEY3HZcEKYnGqcRXqzdGRjLTukFVFMeeHOtywRg3k=
+Prime2: x0mQ8im68tlfY/ezTvtro3xaEd0Oh1oX696B/dW8allStZxeUz4PUjDQaXzcilnWFgbbc8s8E7f7iB44l4sEe94Saf+c6X3TAw+0n8GAC0DBSIk9GV6MGiN8gVSlqtVnmsJKTL+ZBm+7fyJrDE9TZRyyzs9cHiRgpudeZ/ojKMU=
+Exponent1: XRqZZus9T2PeNisUS9WIx2XWDM5LNGK7uvJq+EJokuK1yFljB6f6YDhWPA/1eaNg8VLclQJ8YNSKeDkfgBUfY3cXBzirEP4q2XSp7pBca+l9YcfCvwB4xfDx+fMUrHSvqj2WiTMUSoX8K3dCJIsqkkTc5+A9gSshf/ljQPqutCE=
+Exponent2: A071WQ/YSq/RJZe3IliKMOyfkixZUWXtf7zx64Tg2+MfvGQcLMWa+4JT82xfPOzA4Ry8B/AXzzv+sQPPbLSiHmxRYfEcacPs/OAF36EWvxkUHGAq44DuUoDEUGFXXr6sOaWAFkYYBENWmYW4wTuP5t3TGhvXK6ju8dZletRsQQE=
+Coefficient: hQUsEUXSZVHOlJM2Hwkkk01K0Ns4z/KOOl4EKz9UK2rt4hC7ZC48Phg40sIk81NIrChNytXkHR7VYTT4DMWX9iz8J4mgKqV8xiaYHV+ggqdW54QLg1/kRe//kn2vT3NYRakFcC1nB3fdvc2BqTZPvIIUF+CZITvy+L2oQQWiqc8=
+Created: 20170716090354
+Publish: 20170716090354
+Activate: 20170716090354
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/root_unknown_ds_algo_and_digest.db b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/root_unknown_ds_algo_and_digest.db
new file mode 100644
index 0000000..8ec23cf
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/root_unknown_ds_algo_and_digest.db
@@ -0,0 +1,11 @@
+. 86400 IN SOA rootns. you.test. 2017071100 1800 900 604800 86400
+
+. 518400 IN NS rootns.
+test. 518400 IN NS rootns.
+test2. 518400 IN NS rootns.
+
+rootns. 1 IN A 198.41.0.4
+rootns. 1 IN AAAA 2001:503:ba3e::2:30
+
+test. IN DS 12062 253 2 E18BD6A9E00A75C0FE17CFBB300AF4A34C1F3F1CCADDF566460075658396477A
+test2. IN DS 12062 8 255 E18BD6A9E00A75C0FE17CFBB300AF4A34C1F3F1CCADDF566460075658396477A
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test.db b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test.db
new file mode 100644
index 0000000..d35184e
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test.db
@@ -0,0 +1,5 @@
+test. 86400 IN SOA rootns. you.test. 2017071100 1800 900 604800 86400
+
+test. 518400 IN NS rootns.
+
+test. 86000 IN DNSKEY 257 3 253 aGVsbG93b3JsZAo=
diff --git a/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test2.db b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test2.db
new file mode 100644
index 0000000..872f988
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unknown_algorithm_insecure/test2.db
@@ -0,0 +1,5 @@
+test2. 86400 IN SOA rootns. you.test2. 2017071100 1800 900 604800 86400
+
+test2. 518400 IN NS rootns.
+
+test2. 86000 IN DNSKEY 257 3 253 aGVsbG93b3JsZAo=
diff --git a/tests/deckard/sets/resolver/val_unsecds.rpl b/tests/deckard/sets/resolver/val_unsecds.rpl
new file mode 100644
index 0000000..f530c42
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unsecds.rpl
@@ -0,0 +1,193 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 63707 7 1 26D2BF1DF3D9D9FAE39BD1CD501F9FADD2BE9B54 "
+val-override-date: "20181130121927"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with insecure delegation
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101927 20181130101927 63707 example.com. sVrUoXjVsHFV9WiQzbSaRmib8MyTFeaTwaQfDblAGpOULYd0MMHnkFmm 7WFrpyOhoAsYA5D56fKFZaahzsPjEB9xKhnaYROCUAu0rSTy7WTrUlo7 sBj+S5KEDag2UuAr+BlBaH2lzTAUJ639aMRuxbYL1J3Iz3Ik1Ek+jOu2 cN4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101927 20181130101927 63707 example.com. XIyIWLbcpJNlJ5VtaCxDp39vTXZrBgOG2+0RSBMJVcAxhTfUXRwOHGq8 7Gv3c1QAw8kecxmV+c18momoPV+xOscFAlodGzPVbHeiOHpUsTCWyplt VF0RsyYmztV6NIpX0URekh2PIDFlyN+BwFk6LB9gtwzv9UyXxn0ToEKa J1A= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcryZrR8pLOukbTLkfJG6fnZueJ0wg2t4JhAyBhsO3dx6c13dMzm DkiJ7ta5aPBXveWIR0Y616V8a6K9OZgrA828IHU6ExqjLnsLomUuWoLh bCoED1Ie4hgsH/J8lJIpBmEK1WzDZM9GY4IVkM3lZugt9gOys2IkQRXp 0Xa2jWE7 ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101927 20181130101927 63707 example.com. eHCaXqQmpmMxKbjEG3OvplZHpUGoY9+jVoJ201VIr8pA6nrOrdysoWos X/vDpyVukA7jOoswubGh2fsSnQj8wEHRxXN6dSA/TdyPy8jbeai5mg5l 2bg8LZpzHN6tV3YdJ0ck6VBiQp8F69shBgyV9YtoFrnE2jH19f1mmFWV Ggw= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101927 20181130101927 63707 example.com. sVrUoXjVsHFV9WiQzbSaRmib8MyTFeaTwaQfDblAGpOULYd0MMHnkFmm 7WFrpyOhoAsYA5D56fKFZaahzsPjEB9xKhnaYROCUAu0rSTy7WTrUlo7 sBj+S5KEDag2UuAr+BlBaH2lzTAUJ639aMRuxbYL1J3Iz3Ik1Ek+jOu2 cN4= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101927 20181130101927 63707 example.com. XIyIWLbcpJNlJ5VtaCxDp39vTXZrBgOG2+0RSBMJVcAxhTfUXRwOHGq8 7Gv3c1QAw8kecxmV+c18momoPV+xOscFAlodGzPVbHeiOHpUsTCWyplt VF0RsyYmztV6NIpX0URekh2PIDFlyN+BwFk6LB9gtwzv9UyXxn0ToEKa J1A= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101927 20181130101927 63707 example.com. SUVC+aUQJUyJX+4pSpD813Y7uPy34DpRN8y0FzmaLnGKvwaKQ4DiQY6J 8LtDFFZ8ExHVUa6xzHpGwX+KixZCj/dCUBZVv8HCkSpMLmtakC7XIFyD ojKIkxJoCbzG77r8JXgv3QyvvItgbpkjZkNClWyGd1HOgMhsnBg6oHcs w8M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; query for missing DS record.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101927 20181130101927 63707 example.com. W8OD1Z8xF+OfFDDD/F55RcMJvGduXXavFTlFCxM9H0Tis8rKgtil55eh B6ArRrLAik1NM7zE2oUMdZRx3fkCdIIuii96ceqhApbohZ0R4m8dQWr+ JGKCFXOsoNVYeyxg6Ohg/em5Hh3zdeHk7p+6XcXwv7Hncx033LH9TNr5 A58= ;{id = 2854}
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101927 20181130101927 63707 example.com. SUVC+aUQJUyJX+4pSpD813Y7uPy34DpRN8y0FzmaLnGKvwaKQ4DiQY6J 8LtDFFZ8ExHVUa6xzHpGwX+KixZCj/dCUBZVv8HCkSpMLmtakC7XIFyD ojKIkxJoCbzG77r8JXgv3QyvvItgbpkjZkNClWyGd1HOgMhsnBg6oHcs w8M= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_unsecds_negcache.rpl b/tests/deckard/sets/resolver/val_unsecds_negcache.rpl
new file mode 100644
index 0000000..28cd6d4
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unsecds_negcache.rpl
@@ -0,0 +1,194 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 21095 7 1 1A16E6CECEBF9305C5AB107B5BD5993BFF8716C5 "
+val-override-date: "20181130121925"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with insecure delegation and DS negative cache
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101925 20181130101925 21095 example.com. W2tTjoEHLswOuMEbbkRAUV3yacfvMGWiVk4Dow+tF1+yeVDGmhk+5+Pm XNJJ4KJQ3caIWjoQicEj4yUIwb7bRA4awFGbC4NoXMlx7c1rWSZ/HRf3 Iw2BuBFP+74GS/c+HMDQAL3qfkJXKToGYJq/5IfUxOYwOnus8ia9ecAB K5A= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101925 20181130101925 21095 example.com. EyF7Iiq36OLwYxp4sMaecCI/sAFrfDIg75XepCMwr8yVW+LdST0dVA9j 6tls8QaEDg5raQhtJB2RtTHe2NmvAt2pPOH+bil5zpri4FO9fAZA7B4q I9UgzxyG+eej+Ee7TgBBsw7I72kPZuv2FCGuoTqXmVNIpr5vDJ/V/q3M lkk= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAcE4pogrNoVZ7QNbp63zNoH6uzv+Ohz66upXmXfe9xFEYEYjmqI8 QEYCkuY+s7YgfoukU+XIigoE7dl8FgVyFH2rm3j76raYT+hJzKQJt4T1 B6oiSO8SR6V2fghmbxE8+L3uWjsE2n3LzzKRNM4x9nYpqLbAVLjgWCh2 4NcAXnbn ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101925 20181130101925 21095 example.com. SWWwowWn1/R2gXg4oUXL5K/71YtgYj2Q8pj10DRLGW5ZDomkbvVw9jin FaHbMgRAB+1WoY+lsbHdF3gwtva8w9QulAdn+stJeCypIS3tR0oDFIqC rR5DbiduTrS0qE/AfITERWDYtXVmQwqV4FG3L0W6j7ak4/Hj7rZjlx/a juE= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101925 20181130101925 21095 example.com. W2tTjoEHLswOuMEbbkRAUV3yacfvMGWiVk4Dow+tF1+yeVDGmhk+5+Pm XNJJ4KJQ3caIWjoQicEj4yUIwb7bRA4awFGbC4NoXMlx7c1rWSZ/HRf3 Iw2BuBFP+74GS/c+HMDQAL3qfkJXKToGYJq/5IfUxOYwOnus8ia9ecAB K5A= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101925 20181130101925 21095 example.com. EyF7Iiq36OLwYxp4sMaecCI/sAFrfDIg75XepCMwr8yVW+LdST0dVA9j 6tls8QaEDg5raQhtJB2RtTHe2NmvAt2pPOH+bil5zpri4FO9fAZA7B4q I9UgzxyG+eej+Ee7TgBBsw7I72kPZuv2FCGuoTqXmVNIpr5vDJ/V/q3M lkk= ;{id = 2854}
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101925 20181130101925 21095 example.com. Xkw2D18bwT1N9/584gwEPiMmUYjJgWCBqax8HIhvCHF2bSdSwAk1ZXDN muy7gkLTTkCb+J9pfkcwsr7j0HqNb8h3FJoF+vfgT3vSMx6V7kATkSVa wR/pllcYDoCq99/Y0fMdHAbGLE5fhoRCqv/6GkMic6rSIjI3RfcQ1y2p D7U= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; query for missing DS record.
+; get it from the negative cache instead!
+;ENTRY_BEGIN
+;MATCH opcode qtype qname
+;ADJUST copy_id
+;REPLY QR NOERROR
+;SECTION QUESTION
+;sub.example.com. IN DS
+;SECTION ANSWER
+;SECTION AUTHORITY
+;example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854}
+;sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+;sub.example.com. 3600 IN RRSIG NSEC 7 3 3600 20181230101925 20181130101925 21095 example.com. Xkw2D18bwT1N9/584gwEPiMmUYjJgWCBqax8HIhvCHF2bSdSwAk1ZXDN muy7gkLTTkCb+J9pfkcwsr7j0HqNb8h3FJoF+vfgT3vSMx6V7kATkSVa wR/pllcYDoCq99/Y0fMdHAbGLE5fhoRCqv/6GkMic6rSIjI3RfcQ1y2p D7U= ;{id = 2854}
+;SECTION ADDITIONAL
+;ns.sub.example.com. IN A 1.2.3.6
+;ENTRY_END
+
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.sub.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. 3600 IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_unsecds_qtypeds.rpl b/tests/deckard/sets/resolver/val_unsecds_qtypeds.rpl
new file mode 100644
index 0000000..6e99715
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_unsecds_qtypeds.rpl
@@ -0,0 +1,209 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 47879 7 1 E0A42C63E663B5FD45A89D4B10AE2B8CC68A73EA "
+val-override-date: "20181130121926"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with insecure delegation and qtype DS.
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101926 20181130101926 47879 example.com. MMAsjQBG4R8DD0lll4nK7IGv0olKacqEXSPobc4VH51ci+C0k0lxzlew IF/euSnmhV/AF2Y3cypNO8eC/ngpkXFEBMKGKo48t5zDBZcdRBu200oF ZSeX9bJuEwTJ98rtzIBIeD5TRNsC3ZMRjaT4pcngTgdWnslhxvl4gAp8 UOs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101926 20181130101926 47879 example.com. oUK4kGg2QKG7XtIvfRlMOqLrdJyvcZGSAFZf5Trczn20xF8JA7s7X38J ZmgZyKPm7nY5i4BSYj2qhld+T0taOrw2dTeRpSa0z1/DNXnz2F97SWhd zkFS8g+idBtP/GbaLt/oNc5fndSzTUsmMYWBi843ub+60ghiLF1ZG1L+ qrU= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAdf/3DGUDLH9AyZf8VTjS4W83QqnKvcEIPyy5JlxuG63Oytmc82s Xo+Tzf35mIKWzfzEDlaTUuKf16eaGN3IYB5kehh4tKqP1gXWWMmegFzg NhfXOR0utxgJHXdTY/wdBUrKEIuYemZYU7s5DXKx4GGqDeRTmgkUQpO6 V3FtN3Cv ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101926 20181130101926 47879 example.com. zJ7IPV9PSF7xqbZnQeiKzoo/ziklv1wvSqKnV7a/aojdAGfSNv0fRCro lcfn5lwiGeLN9UR71MNc4ynZgxxH2pSzoogU0ic40nye25oe1hR4QlBb 6hNBkuZn7LU6/+ovxfZVYsYEO7HvXhkNoRnb72amPAr+IMItifjSf+0l +Ec= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101926 20181130101926 47879 example.com. MMAsjQBG4R8DD0lll4nK7IGv0olKacqEXSPobc4VH51ci+C0k0lxzlew IF/euSnmhV/AF2Y3cypNO8eC/ngpkXFEBMKGKo48t5zDBZcdRBu200oF ZSeX9bJuEwTJ98rtzIBIeD5TRNsC3ZMRjaT4pcngTgdWnslhxvl4gAp8 UOs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101926 20181130101926 47879 example.com. oUK4kGg2QKG7XtIvfRlMOqLrdJyvcZGSAFZf5Trczn20xF8JA7s7X38J ZmgZyKPm7nY5i4BSYj2qhld+T0taOrw2dTeRpSa0z1/DNXnz2F97SWhd zkFS8g+idBtP/GbaLt/oNc5fndSzTUsmMYWBi843ub+60ghiLF1ZG1L+ qrU= ;{id = 2854}
+ENTRY_END
+
+; query for missing DS record.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101926 20181130101926 47879 example.com. FhZjZ1FHaz3TuZFJWoN/eBI3XaY9ZLPjMUKdJ4jSZmGs/OzyU9Dcg6yA QwyeqZ1bN0O+eLDfJc8SpNhEne/Yx9xlll2ITSpdExjHHx3m+/f7ZOOV W2wZDHFlj7r906znxzf4oZCVxsnnsHh/4E1ciPBumeFU8vcL1KTo8WL3 kSA= ;{id = 2854}
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101926 20181130101926 47879 example.com. pKjqniTOtDqZtoB79vxB4i7utCRwgXq5Hys2ZNhFd4fLNEnbDppX6dQ1 L2DslNkxCChV4l2Y7dCw1Zo8zhxLiaOCjz28TJR8yRIqTVKZqPs/Ui34 ZsO3uUAF4ZC4eV3lO7pvSeXS5ZJiSVbUQ+zAO4eSHrcaRvt4RPlfzTj3 y20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response for delegation to sub.example.com.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN A
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN NS ns.sub.example.com.
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101926 20181130101926 47879 example.com. pKjqniTOtDqZtoB79vxB4i7utCRwgXq5Hys2ZNhFd4fLNEnbDppX6dQ1 L2DslNkxCChV4l2Y7dCw1Zo8zhxLiaOCjz28TJR8yRIqTVKZqPs/Ui34 ZsO3uUAF4ZC4eV3lO7pvSeXS5ZJiSVbUQ+zAO4eSHrcaRvt4RPlfzTj3 y20= ;{id = 2854}
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+
+RANGE_END
+
+; ns.sub.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.6
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+sub.example.com. IN NS
+SECTION ANSWER
+sub.example.com. IN NS ns.sub.example.com.
+SECTION ADDITIONAL
+ns.sub.example.com. IN A 1.2.3.6
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+www.sub.example.com. IN A
+SECTION ANSWER
+www.sub.example.com. IN A 11.11.11.11
+SECTION AUTHORITY
+SECTION ADDITIONAL
+ENTRY_END
+
+; query for missing DS record. on wrong side of zone cut.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+sub.example.com. IN SOA ns.sub.example.com. h.sub.example.com. 2007090504 1800 1800 2419200 7200
+ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+sub.example.com. IN DS
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+sub.example.com. IN DS
+SECTION ANSWER
+SECTION AUTHORITY
+example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200
+example.com. 3600 IN RRSIG SOA 7 2 3600 20181230101926 20181130101926 47879 example.com. FhZjZ1FHaz3TuZFJWoN/eBI3XaY9ZLPjMUKdJ4jSZmGs/OzyU9Dcg6yA QwyeqZ1bN0O+eLDfJc8SpNhEne/Yx9xlll2ITSpdExjHHx3m+/f7ZOOV W2wZDHFlj7r906znxzf4oZCVxsnnsHh/4E1ciPBumeFU8vcL1KTo8WL3 kSA= ;{id = 2854}
+sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC
+sub.example.com. 3600 IN RRSIG NSEC 7 3 7200 20181230101926 20181130101926 47879 example.com. pKjqniTOtDqZtoB79vxB4i7utCRwgXq5Hys2ZNhFd4fLNEnbDppX6dQ1 L2DslNkxCChV4l2Y7dCw1Zo8zhxLiaOCjz28TJR8yRIqTVKZqPs/Ui34 ZsO3uUAF4ZC4eV3lO7pvSeXS5ZJiSVbUQ+zAO4eSHrcaRvt4RPlfzTj3 y20= ;{id = 2854}
+SECTION ADDITIONAL
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_wild_pos.rpl b/tests/deckard/sets/resolver/val_wild_pos.rpl
new file mode 100644
index 0000000..cef2d8b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos.rpl
@@ -0,0 +1,161 @@
+; config options
+; The island of trust is at example.com
+;server:
+ trust-anchor: "example.com. 3600 IN DS 38075 7 1 58C0ECEB4566D0E38241313B4A8CD853A42FB511 "
+val-override-date: "20181130121928"
+; target-fetch-policy: "0 0 0 0 0"
+; fake-sha1: yes
+
+;stub-zone:
+; name: "."
+ stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
+query-minimization: off
+CONFIG_END
+
+SCENARIO_BEGIN Test validator with direct wildcard positive response
+
+; 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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+*.example.com. IN A
+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 qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+*.example.com. IN A
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+ns.example.com. IN AAAA
+SECTION ANSWER
+ENTRY_END
+RANGE_END
+
+; ns.example.com.
+RANGE_BEGIN 0 100
+ ADDRESS 1.2.3.4
+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.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101928 20181130101928 38075 example.com. VLjbRTUiJ9qkucaMzZrX8yOwPmvBGeu2yv97i60m+eb8rn/9aXHCft8S 1oD4UTjZzNQCKcWr8nnPKFUSdf78Wnjrt3aVBFbCUYKsdz6Ru94O+kWf VUgCWLdL5vrWHgBp22KyFMNmT5jl+u6pBCYfeUR6DQNgMcB/Xk6TIp6P 3xs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101928 20181130101928 38075 example.com. EcQ0T61tBc0Wv3hnZhRO2rf8gvyX3ERzKQy/f7c881D+30gj/7f5t1G2 mNNgeORipwMdxXtimHy3aE2zPycWlYO0ixp4UTztDcePRLPKOmyF4JRZ svMiaBK65fuuBjiG8Ul5QkgBJldObCcFIYo1GjX9L6o3I3zdU3O3DsbP 1ts= ;{id = 2854}
+ENTRY_END
+
+; response to DNSKEY priming query
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+example.com. IN DNSKEY
+SECTION ANSWER
+example.com. 3600 IN DNSKEY 256 3 7 AwEAAbunHwPamENL1sKnlaDimJmh7EubUP/2CelBZJ7H7PMSCz7GPt3u B5rJP7aOogioqA0yJZubiEJESzfwEsg5f14lWESGzMz8mFfe5pGryUjk tG/n43vmCkTPdyUTeSKW9RWyQAPv0PHMi0rMfe5sXs1eeAo23i7c4BAX /MKh/k5r ;{id = 2854 (zsk), size = 1688b}
+example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20181230101928 20181130101928 38075 example.com. XSdpLw0K9ZLwZXI6/pD58YqfUWHxVr2l1EZ5uKhL2Oa+BLalYhlvJYtx SKRcD6Bc5K526HaJ08kv54j2kxeyUtjNXJf1qcC0xup4lQ3s8gjFx+OS NVhCQoEwSWIbOieL2cfDepEMYOOnxtP4WD6I6C3gIBTMluI/UwEOnRlK lIs= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101928 20181130101928 38075 example.com. VLjbRTUiJ9qkucaMzZrX8yOwPmvBGeu2yv97i60m+eb8rn/9aXHCft8S 1oD4UTjZzNQCKcWr8nnPKFUSdf78Wnjrt3aVBFbCUYKsdz6Ru94O+kWf VUgCWLdL5vrWHgBp22KyFMNmT5jl+u6pBCYfeUR6DQNgMcB/Xk6TIp6P 3xs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101928 20181130101928 38075 example.com. EcQ0T61tBc0Wv3hnZhRO2rf8gvyX3ERzKQy/f7c881D+30gj/7f5t1G2 mNNgeORipwMdxXtimHy3aE2zPycWlYO0ixp4UTztDcePRLPKOmyF4JRZ svMiaBK65fuuBjiG8Ul5QkgBJldObCcFIYo1GjX9L6o3I3zdU3O3DsbP 1ts= ;{id = 2854}
+ENTRY_END
+
+; response to query of interest
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR NOERROR
+SECTION QUESTION
+*.example.com. IN A
+SECTION ANSWER
+*.example.com. IN A 10.20.30.40
+*.example.com. 3600 IN RRSIG A 7 2 3600 20181230101928 20181130101928 38075 example.com. RkzaVAFptvrjbFcVTye2cG720T9sstFdEh6rfTb4kDDi36GlKsrWa2hZ XtXLGYf2VisO/ronIOFTN+OpqHEN4zcsft3gRAWN+v2irAWDPD4WRVKh 1DNdJMKi2fDq2A39oe15ZwyjTc+owev5RONrMZBoUdgVb0lzhri2LNgF dgY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101928 20181130101928 38075 example.com. VLjbRTUiJ9qkucaMzZrX8yOwPmvBGeu2yv97i60m+eb8rn/9aXHCft8S 1oD4UTjZzNQCKcWr8nnPKFUSdf78Wnjrt3aVBFbCUYKsdz6Ru94O+kWf VUgCWLdL5vrWHgBp22KyFMNmT5jl+u6pBCYfeUR6DQNgMcB/Xk6TIp6P 3xs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101928 20181130101928 38075 example.com. EcQ0T61tBc0Wv3hnZhRO2rf8gvyX3ERzKQy/f7c881D+30gj/7f5t1G2 mNNgeORipwMdxXtimHy3aE2zPycWlYO0ixp4UTztDcePRLPKOmyF4JRZ svMiaBK65fuuBjiG8Ul5QkgBJldObCcFIYo1GjX9L6o3I3zdU3O3DsbP 1ts= ;{id = 2854}
+ENTRY_END
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+*.example.com. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH opcode rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+*.example.com. IN A
+SECTION ANSWER
+*.example.com. IN A 10.20.30.40
+*.example.com. 3600 IN RRSIG A 7 2 3600 20181230101928 20181130101928 38075 example.com. RkzaVAFptvrjbFcVTye2cG720T9sstFdEh6rfTb4kDDi36GlKsrWa2hZ XtXLGYf2VisO/ronIOFTN+OpqHEN4zcsft3gRAWN+v2irAWDPD4WRVKh 1DNdJMKi2fDq2A39oe15ZwyjTc+owev5RONrMZBoUdgVb0lzhri2LNgF dgY= ;{id = 2854}
+SECTION AUTHORITY
+example.com. IN NS ns.example.com.
+example.com. 3600 IN RRSIG NS 7 2 3600 20181230101928 20181130101928 38075 example.com. VLjbRTUiJ9qkucaMzZrX8yOwPmvBGeu2yv97i60m+eb8rn/9aXHCft8S 1oD4UTjZzNQCKcWr8nnPKFUSdf78Wnjrt3aVBFbCUYKsdz6Ru94O+kWf VUgCWLdL5vrWHgBp22KyFMNmT5jl+u6pBCYfeUR6DQNgMcB/Xk6TIp6P 3xs= ;{id = 2854}
+SECTION ADDITIONAL
+ns.example.com. IN A 1.2.3.4
+ns.example.com. 3600 IN RRSIG A 7 3 3600 20181230101928 20181130101928 38075 example.com. EcQ0T61tBc0Wv3hnZhRO2rf8gvyX3ERzKQy/f7c881D+30gj/7f5t1G2 mNNgeORipwMdxXtimHy3aE2zPycWlYO0ixp4UTztDcePRLPKOmyF4JRZ svMiaBK65fuuBjiG8Ul5QkgBJldObCcFIYo1GjX9L6o3I3zdU3O3DsbP 1ts= ;{id = 2854}
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi.rpl b/tests/deckard/sets/resolver/val_wild_pos_multi.rpl
new file mode 100644
index 0000000..b08e3e2
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi.rpl
@@ -0,0 +1,239 @@
+; config options
+;server:
+ trust-anchor: ". IN DS 41524 8 2 5175938255D97A88F9D16A5A46ED3AE373441DF5058C1666D953005D A6BD57F3"
+ val-override-date: "20170501000000"
+
+;stub-zone:
+; name: "."
+ stub-addr: 10.1.1.1 # ns.
+CONFIG_END
+
+SCENARIO_BEGIN Test validation of wildcard responses with multiple synthesized RRs.
+
+; ns.
+RANGE_BEGIN 0 1000
+ ADDRESS 10.1.1.1
+ ADDRESS 10.2.2.2
+ ADDRESS 10.3.3.3
+ ADDRESS ::1
+ ADDRESS ::2
+ ADDRESS ::3
+
+ENTRY_BEGIN
+MATCH opcode qtype
+ADJUST copy_id copy_query
+REPLY QR AA REFUSED
+SECTION QUESTION
+. IN RRSIG
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 3600 IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
+. 3600 IN RRSIG DNSKEY 8 0 3600 20170519062759 20170419062759 41524 . GldXJTOYlVu202Dfdn6n6+ueu59rULnFZqpGSWO1b5TWhY0Z58f8JLNq OeGS1R2OxUZHEy6MQGgiBUEbBXxUx5fZh0UI0K9D7FfwIA9A5hmHC86g Ds3YQuGM0XfHT1aVeGPnjbcIGkRvTtD2P8vc12WT0bm56xLzNu33pat8 PB7/60S5KY1quSqw0HksIEo/Brblql6DPVYRUxZE2+xObOehUhc2W1n5 v+/pEzpRJ22CJ17Bvc4Mf8sBGgFqxFzmBcgf4Ae0UG3Fz8GIjwcN80cm dYK9cuaCIKn+m/lk3/tXlNJigNxdYB0N6vr6bBhfHOuv8VhEr+0iKM2G sG0ugg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 3600 IN NS ns.
+. 3600 IN RRSIG NS 8 0 3600 20170519062759 20170419062759 41524 . VmrJp+587qjS63rXgtCzIDyja2l8Hp09GB9iUNR33C/P5nkCn3hjsu+u 67c++Ck6/jgKvn9pRW3JdhOaxTeJRZBsYUKq3JtDuHVuV9WaNvDfCJhI /wFMrNTIR1UK9GxHgAWvZ2nBjKNV/nX4w+OB8eDKeT1AGgvoF182pCI0 VX9pbYd2gsMiZsymm5KRuicFxCMxvAa0jmkg9Pua1vQ2kraVjQP/qND4 gEXZaOmGfmm1UUrXlXdnJYrf6j/0zXaVjZdK6TvNh1kEpzXfDX4GLCDa 3dwy7O/h+IRHl7d+X8d1iojdvyJ2qzPkZ9EI7hlEPc7VY2pqNCtC/2WZ c0bf5w==
+SECTION ADDITIONAL
+ns. 3600 IN A 10.1.1.1
+ns. 3600 IN A 10.2.2.2
+ns. 3600 IN A 10.3.3.3
+ns. 3600 IN RRSIG A 8 0 3600 20170519062759 20170419062759 41524 . UtmUBa+ubwWz1BlKcbg/jUhYYPj2qowEjr2IgVMeMopTgESE7Ssg2XMU YY4q2drAXsR/t1uNDIjhDaCXmsyK5yINavxgmPhypt1dnIyXf8+Lfmoi RTP1JKRvsFssQgJMrfCge82oTDYqfmav0NddGNNx829MC5+M/8JtygZU kOczXuwAKclUsFKophlmh3bn3hC6fzBWvRh59j5Voy2oYOw4yHtgDlEN qWQY1BPKYR2FKQG+sVPRhBufWN3uLK2sN8hviaE8gUluwaVx8ekjnr9t twA1h54DRYlJVU2ARCo+xN+hTQG/kt0Rqcr72Vq0LdTxpy+sERQ72tM5 fVvl9Q==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 10.1.1.1
+ns. 3600 IN A 10.2.2.2
+ns. 3600 IN A 10.3.3.3
+ns. 3600 IN RRSIG A 8 0 3600 20170519062759 20170419062759 41524 . UtmUBa+ubwWz1BlKcbg/jUhYYPj2qowEjr2IgVMeMopTgESE7Ssg2XMU YY4q2drAXsR/t1uNDIjhDaCXmsyK5yINavxgmPhypt1dnIyXf8+Lfmoi RTP1JKRvsFssQgJMrfCge82oTDYqfmav0NddGNNx829MC5+M/8JtygZU kOczXuwAKclUsFKophlmh3bn3hC6fzBWvRh59j5Voy2oYOw4yHtgDlEN qWQY1BPKYR2FKQG+sVPRhBufWN3uLK2sN8hviaE8gUluwaVx8ekjnr9t twA1h54DRYlJVU2ARCo+xN+hTQG/kt0Rqcr72Vq0LdTxpy+sERQ72tM5 fVvl9Q==
+SECTION AUTHORITY
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION ANSWER
+ns. 3600 IN AAAA ::1
+ns. 3600 IN AAAA ::2
+ns. 3600 IN AAAA ::3
+ns. 3600 IN RRSIG AAAA 8 0 3600 20170519141813 20170419141813 41524 . q256A5GuT3+3jMaDXhh7Z2w/lPYNxtSLamf4TPcAuIDm41Fnj4M1OU63 ViuoBM2GNP512YZxL9wjkTXVjbQJ3nfIT4D7vRdtNpcA48lceYRslBOP qxuFLxRNbW+a1iLA28IiouecsmJIpfLNfCR9OAMKnuFbdkDHNDYEVyKt TRDuqANfj9s8tEH5SLwoycAtLxP5nBVPqOCgNJAg7j+qNXcA/I+dhqBf xy9eMNmhMbDN09x0+k63vJcdhsgj1sxAqvnq973r+uM7T1WDBjcn71CS fDP3kplHxM4vGpmDvJ5MkStLQ/+kqGNVb9qUl65gBidsA3SYqkZ3KtxT Br/61w==
+SECTION AUTHORITY
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns. IN TXT
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+. 3600 IN RRSIG SOA 8 0 3600 20170519141813 20170419141813 41524 . iuxo0/dNl+zFK1i7CnGR0ssx39IkWTkqXWOcbm8ZrN/vnV2lt7tkRctV 4MmoCiIFfTd4R+jWorVlV0eu1FVmm8cvEAPJzZKk79hvS7DrL5cvwlDA OXSS8J2ram3h+eJH2FCHkSKPkqJUlpXPsQbnfVFf4bFTYi5rXE+Nkpij qhACwhHb8HZNay1/L/njW2DvnY40rgoArxKoJyw0lDgYWd2YYsqHjDGp Ditdeam33tEdWmn8N2oSOXOaRZ3MjDL0PL0uOanJ2wiLFs33MlGo/Y1q ncGgLBSiLFEOhpYgPP3CRu7QZxjQjinwq+tRRhwaqyfPPliHO22NblwL 7tp8qg==
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+RANGE_END
+
+; recursion happens here, we expect NODATA
+STEP 101 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns. IN TXT
+ENTRY_END
+
+STEP 102 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns. IN TXT
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+ENTRY_END
+
+; recursion happens here, we expect positive answer
+STEP 110 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns. IN A
+ENTRY_END
+
+STEP 111 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 10.1.1.1
+ns. 3600 IN A 10.2.2.2
+ns. 3600 IN A 10.3.3.3
+ENTRY_END
+
+; recursion happens here, we expect positive answer
+STEP 120 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+ns. IN AAAA
+ENTRY_END
+
+STEP 121 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION ANSWER
+ns. 3600 IN AAAA ::1
+ns. 3600 IN AAAA ::2
+ns. 3600 IN AAAA ::3
+ENTRY_END
+
+
+
+; retry with DNSSEC enabled
+
+; recursion happens here, we expect NODATA wildcard proof
+STEP 131 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns. IN TXT
+ENTRY_END
+
+STEP 132 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+ns. IN TXT
+SECTION AUTHORITY
+. 0 IN SOA . . 0 0 0 0 0
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+. 3600 IN RRSIG SOA 8 0 3600 20170519141813 20170419141813 41524 . iuxo0/dNl+zFK1i7CnGR0ssx39IkWTkqXWOcbm8ZrN/vnV2lt7tkRctV 4MmoCiIFfTd4R+jWorVlV0eu1FVmm8cvEAPJzZKk79hvS7DrL5cvwlDA OXSS8J2ram3h+eJH2FCHkSKPkqJUlpXPsQbnfVFf4bFTYi5rXE+Nkpij qhACwhHb8HZNay1/L/njW2DvnY40rgoArxKoJyw0lDgYWd2YYsqHjDGp Ditdeam33tEdWmn8N2oSOXOaRZ3MjDL0PL0uOanJ2wiLFs33MlGo/Y1q ncGgLBSiLFEOhpYgPP3CRu7QZxjQjinwq+tRRhwaqyfPPliHO22NblwL 7tp8qg==
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+STEP 210 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns. IN A
+ENTRY_END
+
+STEP 211 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+ns. IN A
+SECTION ANSWER
+ns. 3600 IN A 10.1.1.1
+ns. 3600 IN A 10.2.2.2
+ns. 3600 IN A 10.3.3.3
+ns. 3600 IN RRSIG A 8 0 3600 20170519062759 20170419062759 41524 . UtmUBa+ubwWz1BlKcbg/jUhYYPj2qowEjr2IgVMeMopTgESE7Ssg2XMU YY4q2drAXsR/t1uNDIjhDaCXmsyK5yINavxgmPhypt1dnIyXf8+Lfmoi RTP1JKRvsFssQgJMrfCge82oTDYqfmav0NddGNNx829MC5+M/8JtygZU kOczXuwAKclUsFKophlmh3bn3hC6fzBWvRh59j5Voy2oYOw4yHtgDlEN qWQY1BPKYR2FKQG+sVPRhBufWN3uLK2sN8hviaE8gUluwaVx8ekjnr9t twA1h54DRYlJVU2ARCo+xN+hTQG/kt0Rqcr72Vq0LdTxpy+sERQ72tM5 fVvl9Q==
+SECTION AUTHORITY
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+STEP 220 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+ns. IN AAAA
+ENTRY_END
+
+STEP 221 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+ADJUST copy_id
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+ns. IN AAAA
+SECTION ANSWER
+ns. 3600 IN AAAA ::1
+ns. 3600 IN AAAA ::2
+ns. 3600 IN AAAA ::3
+ns. 3600 IN RRSIG AAAA 8 0 3600 20170519141813 20170419141813 41524 . q256A5GuT3+3jMaDXhh7Z2w/lPYNxtSLamf4TPcAuIDm41Fnj4M1OU63 ViuoBM2GNP512YZxL9wjkTXVjbQJ3nfIT4D7vRdtNpcA48lceYRslBOP qxuFLxRNbW+a1iLA28IiouecsmJIpfLNfCR9OAMKnuFbdkDHNDYEVyKt TRDuqANfj9s8tEH5SLwoycAtLxP5nBVPqOCgNJAg7j+qNXcA/I+dhqBf xy9eMNmhMbDN09x0+k63vJcdhsgj1sxAqvnq973r+uM7T1WDBjcn71CS fDP3kplHxM4vGpmDvJ5MkStLQ/+kqGNVb9qUl65gBidsA3SYqkZ3KtxT Br/61w==
+SECTION AUTHORITY
+*. 0 IN NSEC . A AAAA RRSIG NSEC
+*. 0 IN RRSIG NSEC 8 0 0 20170519141813 20170419141813 41524 . FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXviOPAoK/FYucZPqPxLAGs C1bQQ82YlPy1SU1HMbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtKl6YO 6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61YkvCf6p/sqxOAuWKqSkHIlyJ VUNETyfYKlp5x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S25eTAgsDb 8R0FCb5ks+AcvWZZyNTbwvstaz92EqSOCCWkGSDF3gp2Pv5SI+3xUeTy c/NuJ+f366C5w0MsaW+9oXo2zy/aOFULzwFtdH8ZizqzwwNdGS1sqvuw 1UaqkA==
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.key b/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.key
new file mode 100644
index 0000000..1511e45
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.key
@@ -0,0 +1,5 @@
+; This is a key-signing key, keyid 41524, for .
+; Created: 20170319134901 (Sun Mar 19 14:49:01 2017)
+; Publish: 20170319134901 (Sun Mar 19 14:49:01 2017)
+; Activate: 20170319134901 (Sun Mar 19 14:49:01 2017)
+. IN DNSKEY 257 3 8 AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0JoeOUlWHZ3eeWXZKxQJak QIXyGi8xsuANzu/YStLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1eczh 69YqGUAPZkreZ3z2DpWzBN4lgPR/w0OvTada3D42uV2bzuSK/nXMiMpZ vP1vZ1ykNRmbksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1ddVwSK7qIJ 02jo95YJUSZDPUUQlczIsFsa7Zxn6gQZl+iaRuDY6nLxxStYYlcqZhVA G5U8Dx4IznQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+TTUAa3hD597f onH+s/OfdCE=
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.private b/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.private
new file mode 100644
index 0000000..2811b2b
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi/K.+008+41524.private
@@ -0,0 +1,13 @@
+Private-key-format: v1.3
+Algorithm: 8 (RSASHA256)
+Modulus: uDK9hDZWV9/+Kem/g1kuUiTb6XWwvQmh45SVYdnd55ZdkrFAlqRAhfIaLzGy4A3O79hK0unfVJ9T8WPimJRyKoD5Tvgui3VL+Nwzv/V5zOHr1ioZQA9mSt5nfPYOlbME3iWA9H/DQ69Np1rcPja5XZvO5Ir+dcyIylm8/W9nXKQ1GZuSxPMD4eet59GLbK4xJSowdu19t8XCpVNDV11XBIruognTaOj3lglRJkM9RRCVzMiwWxrtnGfqBBmX6JpG4NjqcvHFK1hiVypmFUAblTwPHgjOdDQWQQmn1Fe2/mua0KVxCm50KXWATQYL9b5NNQBreEPn3t+icf6z8590IQ==
+PublicExponent: AQAB
+PrivateExponent: HEH8fPnxCQ4d6cQoUzgtOQDak9gwQu/lXAqBWD+aIVsaA9UZeYK9O09G4RKYxHKZ2oWuBOlID61ZrWCLdKjhUs/yb0D3swFNpGHztnEsPFg0W+idcwxpvvabnboJxsFt776FJ/0psYqFOTVhMFIo4clzVfBU1TGJkrFtotuiWb28eZ85pFJiQUR+agbWjstXaXMmXeSRPYAueBD/bo6u5DqDagH1fzNxhKUxC9nhpeoIj1AtH4bJuO0v4oxq6yrcGEn6Jus5wku9goLCJqykfRikYwQzyUCP/AQMVC++qiQJ89A66psa0F2lcmps5/2skBEM9QB5Vv12jbIw6j6TeQ==
+Prime1: 6AkeSU4ZcvsxDem0IJLhC4zYEpCN+ZAr/757pkv6oIfQv2PhJmXQ1bmiCsYD/uoRDUFNtNGOFjIlmnGHKIefvCSHlZRxCDDzDAvZ6IthkMQEzDcSQkZIpprCt7QMl1Kz2gjEs84+DNxozB54UbEYG908PrF7CF7ix3RHHEDcX6M=
+Prime2: yzjUYzFjM52Q5cwtMHL8gHnacpzQSUidYLZF+xA4dYjc0pjSRMo87sfp2r6wdm3ZOcfOy0SZl4LvO0Kcrz/VB2v0yiBqanDcM3SBg6n7lz/l5Xaoj5rw9JmYj981nJe8vcerZvJl8MLT00uikr1gqoABxKIvHyt7kYcYB2qqSWs=
+Exponent1: Sjzgm8OJEOidQT5Miz9zESb22rm1MuuVqDVhiks03LeXaiSinI5mynqiBaBlFuH8oqkKG5gQRbm1njxEags6aA+n8YuUvnIq0OfZyDUP+ik8/7l+9gVWqTdKpUvN23xyXof/pyeNYsACJ4x4Imrus7uM0uIl4v+4vufM+JUn7NE=
+Exponent2: HUmqakVC27x4lnWviYz40Pc+wUfSSM17SOXb/gvfZyj7UiqOGzXeRDdxf4H94oOAS/B84BSZ4hkPq0W1WRhk9jXbyImVbJOpWI0Q4U3NIYYm9sP8FP4qfcXpE8sCafgAToWJMUP75w/dAVWkL2u1k7zxBEqvadmVbGrAzsjTk9M=
+Coefficient: ms+SW3tNI975ejCbI1vIB31uUqVfvVvxv7eWtzJEdyxBVQKb0aQnXaTMdXiESNc+H5HMau3lbDOw5IcQkp79fKdxLt3SjMYPdnQmBWg7StY3fV1FJcPEEJeFQjWXxioY8rdvMUTMk1FfjxlllBkCyMWuIE4cbRTNdcq76ozM60g=
+Created: 20170319134901
+Publish: 20170319134901
+Activate: 20170319134901
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi/dsset-. b/tests/deckard/sets/resolver/val_wild_pos_multi/dsset-.
new file mode 100644
index 0000000..6c9d3b7
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi/dsset-.
@@ -0,0 +1,2 @@
+. IN DS 41524 8 1 C042815790A1423F03578E561C4DC09BF9BEC5C0
+. IN DS 41524 8 2 5175938255D97A88F9D16A5A46ED3AE373441DF5058C1666D953005D A6BD57F3
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone b/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone
new file mode 100644
index 0000000..b69eb42
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone
@@ -0,0 +1,10 @@
+. 3600 IN SOA . . 0 0 0 0 0
+. 3600 IN NS ns.
+
+*. 3600 IN A 10.1.1.1
+*. 3600 IN A 10.2.2.2
+*. 3600 IN A 10.3.3.3
+
+*. 3600 IN AAAA ::1
+*. 3600 IN AAAA ::2
+*. 3600 IN AAAA ::3
diff --git a/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone.signed b/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone.signed
new file mode 100644
index 0000000..ddb5864
--- /dev/null
+++ b/tests/deckard/sets/resolver/val_wild_pos_multi/root.zone.signed
@@ -0,0 +1,114 @@
+; File written on Wed Apr 19 17:18:13 2017
+; dnssec_signzone version 9.10.4-P6-RedHat-9.10.4-4.P6.fc25
+. 3600 IN SOA . . (
+ 0 ; serial
+ 0 ; refresh (0 seconds)
+ 0 ; retry (0 seconds)
+ 0 ; expire (0 seconds)
+ 0 ; minimum (0 seconds)
+ )
+ 3600 RRSIG SOA 8 0 3600 (
+ 20170519141813 20170419141813 41524 .
+ iuxo0/dNl+zFK1i7CnGR0ssx39IkWTkqXWOc
+ bm8ZrN/vnV2lt7tkRctV4MmoCiIFfTd4R+jW
+ orVlV0eu1FVmm8cvEAPJzZKk79hvS7DrL5cv
+ wlDAOXSS8J2ram3h+eJH2FCHkSKPkqJUlpXP
+ sQbnfVFf4bFTYi5rXE+NkpijqhACwhHb8HZN
+ ay1/L/njW2DvnY40rgoArxKoJyw0lDgYWd2Y
+ YsqHjDGpDitdeam33tEdWmn8N2oSOXOaRZ3M
+ jDL0PL0uOanJ2wiLFs33MlGo/Y1qncGgLBSi
+ LFEOhpYgPP3CRu7QZxjQjinwq+tRRhwaqyfP
+ PliHO22NblwL7tp8qg== )
+ 3600 NS ns.
+ 3600 RRSIG NS 8 0 3600 (
+ 20170519141813 20170419141813 41524 .
+ mta7nYjyM8qecNDgcuzyosmO6pwXQOJxb+oX
+ hF8yElB1FiVWwPhsxnrGlME3PhCRj9+tvE8B
+ MTW0Js42DtJ5GvD/FJ2RBYFTwXrydffIQafR
+ No3Gxsz0bX8+aIEVzIrTIXe8bMWk5bs9E1Yu
+ c6OKgqteAzfrXi5my8cfro5Bjc5m/Qo/tWbX
+ auPCv/M2N5a9oey1z13msZSpR+/XfCGH0v1e
+ rIZje/A/5PFXXTIVzKsIzazErd9OnbEI6280
+ S56ctV7SbjoDgHyM7XuyVYWzkdhN/evOwu0l
+ YuObCxtgkUR56Ba5Ii3Su4bp0+JNGf/N3yLh
+ gVF7DjoWkfvnlNIXoQ== )
+ 0 NSEC *. NS SOA RRSIG NSEC DNSKEY
+ 0 RRSIG NSEC 8 0 0 (
+ 20170519141813 20170419141813 41524 .
+ qLniiG3AKNGlsOwSCzlPrk08E6beDttOa5Aj
+ phfR90H2mt8uSqxlQD/5oWJVGqDrjAnOvjVO
+ WXDxH+zsWAWI+01ZcAxvd59+7e66qAwRqKmC
+ c/H2m4/2KzbHHZd7kZ1NAPX+dVtwuc7qM0jG
+ mc89GogQaxmRv2em1iA8h0PLCM7Vk4B/bDo3
+ xRMTtdjmUM6DYIeyAQfLxoAAIsXCoAIvXYWt
+ CQDugjWMrHvNMdMjEYzLU+RO7NHnlDKgaXzk
+ IckYe0TL0+FrP65a2lVfOkcUzTjRV6jajWeY
+ LjoaiWu+6IO5Zpm+XnTeIz496xX1RhsSKGuB
+ /NAIdfkWvJ7MGsd4/Q== )
+ 3600 DNSKEY 257 3 8 (
+ AwEAAbgyvYQ2Vlff/inpv4NZLlIk2+l1sL0J
+ oeOUlWHZ3eeWXZKxQJakQIXyGi8xsuANzu/Y
+ StLp31SfU/Fj4piUciqA+U74Lot1S/jcM7/1
+ eczh69YqGUAPZkreZ3z2DpWzBN4lgPR/w0Ov
+ Tada3D42uV2bzuSK/nXMiMpZvP1vZ1ykNRmb
+ ksTzA+HnrefRi2yuMSUqMHbtfbfFwqVTQ1dd
+ VwSK7qIJ02jo95YJUSZDPUUQlczIsFsa7Zxn
+ 6gQZl+iaRuDY6nLxxStYYlcqZhVAG5U8Dx4I
+ znQ0FkEJp9RXtv5rmtClcQpudCl1gE0GC/W+
+ TTUAa3hD597fonH+s/OfdCE=
+ ) ; KSK; alg = RSASHA256 ; key id = 41524
+ 3600 RRSIG DNSKEY 8 0 3600 (
+ 20170519141813 20170419141813 41524 .
+ jm0WoZl7B17L5OMiI4j7EwUXuoZVDuvybewY
+ Z3NfQQOK0zDsnQKZFkG4unV5gp4ORQ5OD/Kt
+ fK9A5KYqEWewqgQcWiJ+PvsyAibVEqpAqrWq
+ OIsnBYJgVzhzFyA1hQOb5j4cpYGCGe5znHoF
+ eeTdIc/ZykCAxFLUMzmHu/ivIuhni6z3gdtS
+ GqVY2eTjWXqyv6ImMZJeL/34+/cKctS7ZCwe
+ rzxmnoDAzS3cUql+hL7Oh7YUWDVfcUkDKqXX
+ 5KMcvjPQhqSERyewQN3n2F9Z4Dxf41TYL2TF
+ /cG6idUt2gLaA+l/+2+CoCwsStzug7bK9mmA
+ cXkidI+IZup7KQ/WcA== )
+*. 3600 IN A 10.1.1.1
+ 3600 IN A 10.2.2.2
+ 3600 IN A 10.3.3.3
+ 3600 RRSIG A 8 0 3600 (
+ 20170519141813 20170419141813 41524 .
+ PK9xvQqB3OB1o/nW7IOlIeZT35lHBujkK9Nq
+ aehnTX7CiYuwe5IpXY7EsGEt6ZtEB+wS54tY
+ UZ9pDyAADLwhQmYHP2jASiY/ZuQj3IL8uymL
+ A/D5xnxfHnsyzqShYEjTTK9+6cL0RQ4t2Fia
+ XkwOQb4+i9wcGTu9zJ/L/WRNzKRqsyQ/fxQB
+ gqDDyBVn47ZIjH0DBDBML7P58dH894bDiLNu
+ 2RwEntgs+bwzUrPYlOA2Le2xNlc8qqzNktWe
+ fr+6OEjn5qXnNccBkbASN9FBV8CJ7Bfl6KKT
+ CRjKv3a/y/mqYOR6pIrw97QYXmjgQvjT4HLy
+ cfu8DpZEweBX9vg5Ag== )
+ 3600 AAAA ::1
+ 3600 AAAA ::2
+ 3600 AAAA ::3
+ 3600 RRSIG AAAA 8 0 3600 (
+ 20170519141813 20170419141813 41524 .
+ q256A5GuT3+3jMaDXhh7Z2w/lPYNxtSLamf4
+ TPcAuIDm41Fnj4M1OU63ViuoBM2GNP512YZx
+ L9wjkTXVjbQJ3nfIT4D7vRdtNpcA48lceYRs
+ lBOPqxuFLxRNbW+a1iLA28IiouecsmJIpfLN
+ fCR9OAMKnuFbdkDHNDYEVyKtTRDuqANfj9s8
+ tEH5SLwoycAtLxP5nBVPqOCgNJAg7j+qNXcA
+ /I+dhqBfxy9eMNmhMbDN09x0+k63vJcdhsgj
+ 1sxAqvnq973r+uM7T1WDBjcn71CSfDP3kplH
+ xM4vGpmDvJ5MkStLQ/+kqGNVb9qUl65gBids
+ A3SYqkZ3KtxTBr/61w== )
+ 0 NSEC . A AAAA RRSIG NSEC
+ 0 RRSIG NSEC 8 0 0 (
+ 20170519141813 20170419141813 41524 .
+ FgFsXY4fdEQZlv5xd2WQuH6b0YIuDoOydNXv
+ iOPAoK/FYucZPqPxLAGsC1bQQ82YlPy1SU1H
+ MbggjMNT224sllm0WY0P1PjkPN8XkBbFRZtK
+ l6YO6Jyav58WZCjDLsRfKYMzFPXe7GqvtB61
+ YkvCf6p/sqxOAuWKqSkHIlyJVUNETyfYKlp5
+ x7CDZiCnPgAppZUEv0kEQKmTCzTgC+ctj2S2
+ 5eTAgsDb8R0FCb5ks+AcvWZZyNTbwvstaz92
+ EqSOCCWkGSDF3gp2Pv5SI+3xUeTyc/NuJ+f3
+ 66C5w0MsaW+9oXo2zy/aOFULzwFtdH8Zizqz
+ wwNdGS1sqvuw1UaqkA== )
diff --git a/tests/deckard/sets/resolver/world_cz_lidovky_www.rpl b/tests/deckard/sets/resolver/world_cz_lidovky_www.rpl
new file mode 100644
index 0000000..9f46ba3
--- /dev/null
+++ b/tests/deckard/sets/resolver/world_cz_lidovky_www.rpl
@@ -0,0 +1,910 @@
+stub-addr: 2001:dc3::35
+val-override-date: "20170228130000"
+trust-anchor: ". 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5"
+CONFIG_END
+
+SCENARIO_BEGIN www.lidovky.cz CNAME c23.idnes.cz points from signed domain into unsigned domain hosted on the same server. The result must be NOERROR without AD flag.
+
+;root
+RANGE_BEGIN 0 100
+ ADDRESS 2001:dc3::35
+ ADDRESS 198.41.0.4
+ ADDRESS 192.228.79.201
+ ADDRESS 192.33.4.12
+ ADDRESS 199.7.91.13
+ ADDRESS 192.203.230.10
+ ADDRESS 192.5.5.241
+ ADDRESS 192.112.36.4
+ ADDRESS 198.97.190.53
+ ADDRESS 192.36.148.17
+ ADDRESS 192.58.128.30
+ ADDRESS 193.0.14.129
+ ADDRESS 199.7.83.42
+ ADDRESS 202.12.27.33
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 2001:500:84::b
+ ADDRESS 2001:500:2::c
+ ADDRESS 2001:500:2d::d
+ ADDRESS 2001:500:a8::e
+ ADDRESS 2001:500:2f::f
+ ADDRESS 2001:500:12::d0d
+ ADDRESS 2001:500:1::53
+ ADDRESS 2001:7fe::53
+ ADDRESS 2001:503:c27::2:30
+ ADDRESS 2001:7fd::1
+ ADDRESS 2001:500:9f::42
+ ADDRESS 2001:dc3::35
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ . IN DS
+ SECTION AUTHORITY
+ . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017022701 1800 900 604800 86400
+ . 86400 IN RRSIG SOA 8 0 86400 20170312170000 20170227160000 61045 . GhyRFKg8xu/asiFmIMifBOFUeJlL++ncqDoBLbYoviben3WNrdU7vJxZ Cm3EZ8HEYr2gFFkupaHBZt+P6GdX9lU8aw7yOZ8ZXV48S209Jo3PkHxH iVOtaC7QzkJPiZUgh06MuWgQoeNJSVqGTCy+TlTlMLqGndNcpT0rkX7H 0gCcuaZcBv0nqEPKqZeq8XFVIfiaUCKz/kkkO0vgP9euN+WT+68hng4F oIQ0eAPIUL6XBW2uWubWS2Yd8C+g/++qeLnte7QYF+9By5HuN6fXskba 0uph3gzjWArn+SYQhEWyqbS6wb0LloAawt9LW7neJYOMFhlU1AOScGjn e8rfBw==
+ . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+ . 86400 IN RRSIG NSEC 8 0 86400 20170312170000 20170227160000 61045 . MLiCUaeASll0V1x0imORnQodzd/6LuDpa8XfebmNE7eGMda62HCK9kB2 I5Yvcc6naw1nzJVSVNIjDQyAKHgSWy457vwvWbEdCuD5XS8A1/drP13x pfP91XG3qPswx3u1i4cLSTO5VJi1lup1Qr1UrN54kNbRp2sS65VKXOH4 4I6bwA1CBOmU6EHlyI2nymZDqCRaTdWjyoYSZ1zkucSjEgn8GtyniNiS p7AfNLnnJ6poKSCcOj2hSQTb58i7B7TJt/JQWb6ko12rcSEVxZljhqHc XzR+i8Bgfpj9ha83tcZwDFQQy4mKjSkboOEoRe8Z5qKIb5DF0wn0vB+M LClQJg==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ . IN NS
+ SECTION ANSWER
+ . 518400 IN NS m.root-servers.net.
+ . 518400 IN NS k.root-servers.net.
+ . 518400 IN NS a.root-servers.net.
+ . 518400 IN NS l.root-servers.net.
+ . 518400 IN NS j.root-servers.net.
+ . 518400 IN NS i.root-servers.net.
+ . 518400 IN NS e.root-servers.net.
+ . 518400 IN NS b.root-servers.net.
+ . 518400 IN NS h.root-servers.net.
+ . 518400 IN NS d.root-servers.net.
+ . 518400 IN NS c.root-servers.net.
+ . 518400 IN NS f.root-servers.net.
+ . 518400 IN NS g.root-servers.net.
+ . 518400 IN RRSIG NS 8 0 518400 20170312170000 20170227160000 61045 . iqk4z3W6lGfSgvbPGl4JPVDca+21mXayctqY0FO1a9YhCSxLQGsV/0eK IfYOGHMCBr2szIactoznQgFybjNG/I5bKo+EU4U0tNNVwrUHWTMsAraQ yIS/efPZyKAHSzKZjlcRVOFbFPA/DWp6JzMhfXaBYMLcsA8ZT/CwCnxF a7wInMupWskMwXXhTgGci+PJVKm+TK5hEtYYnb3Ny2lxoWtTPJuZufM9 1xg2YXs6njo1gKzj3zaTwpndeBbYN78ZfETmPsjyr7X144v9qe7qygCO dTjy+cly1JG1prI9yHaU5zJk3X9VcvWWRR3ACQOFfzthFqyEoHjQmEBe XQHCRg==
+ SECTION ADDITIONAL
+ a.root-servers.net. 3600000 IN A 198.41.0.4
+ b.root-servers.net. 3600000 IN A 192.228.79.201
+ c.root-servers.net. 3600000 IN A 192.33.4.12
+ d.root-servers.net. 3600000 IN A 199.7.91.13
+ e.root-servers.net. 3600000 IN A 192.203.230.10
+ f.root-servers.net. 3600000 IN A 192.5.5.241
+ g.root-servers.net. 3600000 IN A 192.112.36.4
+ h.root-servers.net. 3600000 IN A 198.97.190.53
+ i.root-servers.net. 3600000 IN A 192.36.148.17
+ j.root-servers.net. 3600000 IN A 192.58.128.30
+ k.root-servers.net. 3600000 IN A 193.0.14.129
+ l.root-servers.net. 3600000 IN A 199.7.83.42
+ m.root-servers.net. 3600000 IN A 202.12.27.33
+ a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+ b.root-servers.net. 3600000 IN AAAA 2001:500:84::b
+ c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+ d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+ e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+ f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+ g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+ h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+ i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+ j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+ k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+ l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+ m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ . IN DNSKEY
+ SECTION ANSWER
+ . 172800 IN DNSKEY 256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTRgy7+dzvfArIhi2tKoZ/WR1Df w883SOU6Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfElBwKsz4sVVWmfyr/x +igD/UjrcJ5zEBUrUmVtHyjar7ccaVc1/3ntkhZjI1hcungAlOhPhHlk MeX+5Azx6GdX//An5OgrdyH3o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49zcdis3EaY199WFW60DCS7ydu+ +T5Xa+GyOw1quagwf/JUC/mEpeBQYWrnpkBbpDB3sy4+P2i8iCvavehb RyVm9U0MlIc=
+ . 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+ . 172800 IN RRSIG DNSKEY 8 0 172800 20170313000000 20170220000000 19036 . Dgzxpg2Lr39HXuHwuJWYCGySxsm92RY8TRuSOstPVcHc7we0d4pW7Znt 33j9fzrxdvoVFAvqSioilVKiOY49M8N+sXcsfTK3cnh7ijTA7suXd4ht TClLN7Dn+ZAjhoyjLm5hf7P/jL0K9KKcOqEqS+uqX3W2WeCvUwT3BY6A t2r+pKSVnoX0uFWJX+mmCh4veYW3eoBzAqwAVbCE5hl2tVbf/vzpa8eW kHegVmm5smKzK2ciYOqExl3FtLgf6dp+HTpruS2oN1JPxm4f1IZhVwT0 pSEu8OUNOV8WSbLn3P9aUpq894Tf1i0/AEtFtx2tRCdw3lSKOugfneo0 PYo1JQ==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ cz. IN DS
+ SECTION ANSWER
+ cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+ cz. 86400 IN RRSIG DS 8 1 86400 20170312170000 20170227160000 61045 . irp/lUXakeZMwVjkZQOOt6xAB2Fcglo7nxmUkHBFjsB5lp61Pg6eyt8u xvGrTdv4mv6PH5q0c7bfKo0Ngtedbq8gZ6VHXfcKUU7vP5BUmePWPyvf khKcafAO7D2wIw9gKxPB0syd3woUP7PlQ1Rg/rUMwDnEXtS7zEqzrVbb VkjdqvdgLUsInAc9zdP72qRp9cJhuoRm0nco1uo2ZLUC04poGxSNzXTw hKhngqHDTqD1nr/Wnq7uXtmLyvFelICSpSHmkrCxnou7EtPybC+W+fna f8o7FebZBnB71t5d8s2kxlb+KrWXUMv8VOdZdZTQTN8M5LeKSBL7RnXM 1FbCiQ==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ CZ. IN NS
+ SECTION AUTHORITY
+ cz. 172800 IN NS b.ns.nic.cz.
+ cz. 172800 IN NS a.ns.nic.cz.
+ cz. 172800 IN NS c.ns.nic.cz.
+ cz. 172800 IN NS d.ns.nic.cz.
+ cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+ cz. 86400 IN RRSIG DS 8 1 86400 20170312170000 20170227160000 61045 . irp/lUXakeZMwVjkZQOOt6xAB2Fcglo7nxmUkHBFjsB5lp61Pg6eyt8u xvGrTdv4mv6PH5q0c7bfKo0Ngtedbq8gZ6VHXfcKUU7vP5BUmePWPyvf khKcafAO7D2wIw9gKxPB0syd3woUP7PlQ1Rg/rUMwDnEXtS7zEqzrVbb VkjdqvdgLUsInAc9zdP72qRp9cJhuoRm0nco1uo2ZLUC04poGxSNzXTw hKhngqHDTqD1nr/Wnq7uXtmLyvFelICSpSHmkrCxnou7EtPybC+W+fna f8o7FebZBnB71t5d8s2kxlb+KrWXUMv8VOdZdZTQTN8M5LeKSBL7RnXM 1FbCiQ==
+ SECTION ADDITIONAL
+ a.ns.nic.cz. 155678 IN A 194.0.12.1
+ b.ns.nic.cz. 155678 IN A 194.0.13.1
+ c.ns.nic.cz. 153044 IN A 194.0.14.1
+ d.ns.nic.cz. 153044 IN A 193.29.206.1
+ a.ns.nic.cz. 153051 IN AAAA 2001:678:f::1
+ b.ns.nic.cz. 153051 IN AAAA 2001:678:10::1
+ c.ns.nic.cz. 155678 IN AAAA 2001:678:11::1
+ d.ns.nic.cz. 155678 IN AAAA 2001:678:1::1
+ ENTRY_END
+
+
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ net. IN DS
+ SECTION ANSWER
+ net. 86400 IN DS 35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D 8BD973EE
+ net. 86400 IN RRSIG DS 8 1 86400 20170312170000 20170227160000 61045 . bRSoCpmN/6LhmSB7i68N0zO08WwVikjm6HhOyZMhyjF4sfAaDoeTMs5E XjflCZMly1SP8CwkK6Wz6Ozb8nMUHEsYOhASVBkYC/ImBpqIV5LxaCbW 4L7g5Mwam0MBZb4hybI7JUyuiRONVy3YYk+eUvyf4/flu3Cl14a36LYv 2In/ECg9sV8cMOrYs722vigvzH5eHLIZTOhGBE2//uH8pw1YnMW9sYRj f5algDGge4hZvi0ieQyzfT3UqmQEmZZCz+vdlPtgKqIj6+I+V+SZOB2d aBkb/0NrWIx+iE+fqP6jx7I2HCobVnYUvJjL/t6O1shC4mxcDghLLUpf fSnEag==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ net. IN NS
+ SECTION AUTHORITY
+ net. 172800 IN NS j.gtld-servers.net.
+ net. 172800 IN NS e.gtld-servers.net.
+ net. 172800 IN NS c.gtld-servers.net.
+ net. 172800 IN NS m.gtld-servers.net.
+ net. 172800 IN NS d.gtld-servers.net.
+ net. 172800 IN NS i.gtld-servers.net.
+ net. 172800 IN NS a.gtld-servers.net.
+ net. 172800 IN NS g.gtld-servers.net.
+ net. 172800 IN NS h.gtld-servers.net.
+ net. 172800 IN NS b.gtld-servers.net.
+ net. 172800 IN NS k.gtld-servers.net.
+ net. 172800 IN NS f.gtld-servers.net.
+ net. 172800 IN NS l.gtld-servers.net.
+ net. 86400 IN DS 35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D 8BD973EE
+ net. 86400 IN RRSIG DS 8 1 86400 20170312170000 20170227160000 61045 . bRSoCpmN/6LhmSB7i68N0zO08WwVikjm6HhOyZMhyjF4sfAaDoeTMs5E XjflCZMly1SP8CwkK6Wz6Ozb8nMUHEsYOhASVBkYC/ImBpqIV5LxaCbW 4L7g5Mwam0MBZb4hybI7JUyuiRONVy3YYk+eUvyf4/flu3Cl14a36LYv 2In/ECg9sV8cMOrYs722vigvzH5eHLIZTOhGBE2//uH8pw1YnMW9sYRj f5algDGge4hZvi0ieQyzfT3UqmQEmZZCz+vdlPtgKqIj6+I+V+SZOB2d aBkb/0NrWIx+iE+fqP6jx7I2HCobVnYUvJjL/t6O1shC4mxcDghLLUpf fSnEag==
+ SECTION ADDITIONAL
+ a.gtld-servers.net. 172800 IN A 192.5.6.30
+ b.gtld-servers.net. 172800 IN A 192.33.14.30
+ c.gtld-servers.net. 172800 IN A 192.26.92.30
+ d.gtld-servers.net. 172800 IN A 192.31.80.30
+ e.gtld-servers.net. 172800 IN A 192.12.94.30
+ f.gtld-servers.net. 172800 IN A 192.35.51.30
+ g.gtld-servers.net. 172800 IN A 192.42.93.30
+ h.gtld-servers.net. 172800 IN A 192.54.112.30
+ i.gtld-servers.net. 172800 IN A 192.43.172.30
+ j.gtld-servers.net. 172800 IN A 192.48.79.30
+ k.gtld-servers.net. 172800 IN A 192.52.178.30
+ l.gtld-servers.net. 172800 IN A 192.41.162.30
+ m.gtld-servers.net. 172800 IN A 192.55.83.30
+ a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+ b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+ ENTRY_END
+
+
+RANGE_END
+
+;cz
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ ADDRESS 194.0.13.1
+ ADDRESS 194.0.14.1
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:f::1
+ ADDRESS 2001:678:10::1
+ ADDRESS 2001:678:11::1
+ ADDRESS 2001:678:1::1
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ nic.cz. IN DS
+ SECTION ANSWER
+ nic.cz. 14400 IN DS 61281 13 2 4104D40C8FE2030BF7A09A199FCF37B36F7EC8DDD16F5A84F2E61C24 8D3AFD0F
+ nic.cz. 14400 IN RRSIG DS 10 2 14400 20170312221837 20170228130956 58211 cz. LKiLo/EqBTsv1e6s8p5UfN/qZfd3Dnf5XGO11vW2pELybdmmpD5clR/v mz+cc4zxLiQAxDnBpdUPAPdxcPlILa5mjMfJy2ExsQOZhcbIUInRala6 GhBfGy3bnniJkJCu7sAIsf+HyDM92pFSql67ErS0ROERBhSRVbfunEBy FCo=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ a.ns.nic.cz. IN A
+ SECTION ANSWER
+ a.ns.nic.cz. 1800 IN A 194.0.12.1
+ a.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20170314061428 20170228072511 16836 nic.cz. rJsAWa5cYGooRzu5+jRW5m4ebYHPkHRBwrLT5P7lIkT5VkcoIRYMcdYf gr+pXJFM9IduSZJXfomumKyOYHts7Q==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ b.ns.nic.cz. IN A
+ SECTION ANSWER
+ b.ns.nic.cz. 1800 IN A 194.0.13.1
+ b.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20170314044412 20170228072511 16836 nic.cz. 6dOVqiXZgfp1fltylhOAYvfILWCGu61cpabseUNTmb20TZR1GuI5ueTS lmYa93o46M+01ATfrkwBWZC065G8yg==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ c.ns.nic.cz. IN A
+ SECTION ANSWER
+ c.ns.nic.cz. 1800 IN A 194.0.14.1
+ c.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20170314015427 20170228072511 16836 nic.cz. 824yJyP2dWJ7phi63r1/24v0SbzU9FVi7b8IkXIrQ+3aCTyXKugE8l8C qLz6qwulzu2aG+8SyfvenXDSySqiqQ==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ d.ns.nic.cz. IN A
+ SECTION ANSWER
+ d.ns.nic.cz. 1800 IN A 193.29.206.1
+ d.ns.nic.cz. 1800 IN RRSIG A 13 4 1800 20170313233915 20170228072511 16836 nic.cz. KAlDHStrGzdtoBe9epn87lsggg6vVvHPGMPv/njWSTns7BX0//fTxfOc iOXdutsQhq/8Z2o87pKzE2F9FbE6Hw==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ a.ns.nic.cz. IN AAAA
+ SECTION ANSWER
+ a.ns.nic.cz. 1800 IN AAAA 2001:678:f::1
+ a.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20170313215345 20170228072511 16836 nic.cz. GMmWVeCiIzq2kt4VmsDXGSaAWMtDB78+Yz7qgEqu5C1PAUUBQo4o5lU/ igGhIJHk2BSljJxjaL+LlnW3uOeCDQ==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ b.ns.nic.cz. IN AAAA
+ SECTION ANSWER
+ b.ns.nic.cz. 1800 IN AAAA 2001:678:10::1
+ b.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20170314011606 20170228072511 16836 nic.cz. ALfV0l2a4D1CITaZdP5k5Mc+uTZ1dSb3SRm1Z+AQmeQLKI7YrFlOCuUa q90yMQnG+0GMS4uwSmIcT3V2cjpBXw==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ c.ns.nic.cz. IN AAAA
+ SECTION ANSWER
+ c.ns.nic.cz. 1800 IN AAAA 2001:678:11::1
+ c.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20170313184936 20170228072511 16836 nic.cz. U/tpYchWTle9loCW8fPIMoF3zto86UmFFCSnU7sFG9Qxk4I8fNUro1nT fAeJlrI7L7Yx9qlJTAllzrPjuw+3IA==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ d.ns.nic.cz. IN AAAA
+ SECTION ANSWER
+ d.ns.nic.cz. 1800 IN AAAA 2001:678:1::1
+ d.ns.nic.cz. 1800 IN RRSIG AAAA 13 4 1800 20170313124110 20170228072511 16836 nic.cz. kOI6MVJDSexQQ6uGT7KBjrTB2PDs49Cm65heInzMGZ20R75wO0JhSlce /T+Rpw3R0XpBre39h2DF7yBgePr+qg==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ cz. IN NS
+ SECTION ANSWER
+ cz. 14400 IN NS a.ns.nic.cz.
+ cz. 14400 IN NS b.ns.nic.cz.
+ cz. 14400 IN NS d.ns.nic.cz.
+ cz. 14400 IN NS c.ns.nic.cz.
+ cz. 14400 IN RRSIG NS 10 1 14400 20170307183707 20170222123920 58211 cz. Ma2XNvMziL3GtyLXtKcCBBG12+r7Uor3OFTw6c7Txk573/Y33IMnbN6B iKz0hZw0XK5c6nHciMEDkH2K772fcskHjEnOg+bJMBJlUmqskbVBmwpZ Dd156QC9OIfcE6yJYa6Y1jOegpgCaZLXRDOZodtvvTkYWNP/D01cmsF6 U+4=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ CZ. IN DNSKEY
+ SECTION ANSWER
+ cz. 18000 IN DNSKEY 256 3 10 AwEAAdWL2Br92Vx0dLEOOB8y02ss8LtKIyGlLJ2ymJ02WqR3AAEEZN0f NPKF77kdKsjlG8DlzmSIOR12aa9EhpXqyHOwWI0kHOMJVnn6ZKFIAl71 JP/dYIcshYUxKZZMe+zEAUrVtzlLVDtM6cDOPDuBNa1ujYec3eJl9Ipq eUEG6gAH
+ cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+ cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170304000000 20170218000000 54576 cz. paDUYJRI+4qBfPaGBy7nVMQnsp2hQQdiWWMnNunhfemFYi9MtXE2VTG3 DDL4Kue3ImSko/BxCRqHxHq5Sdf4LNexFWqFUlz4CjVeFobGTmmgOlak Sm2WygfZsO3w1OeO5cDCZTbi6XAhkr1cL3sgJR+/aOKIGUs8uIk1pZ5H WGNB1waF7Euxe+joEFtoj2/Tk7G7AlD1/Hw+pw5AkLTNawpHJF1/vnfT mPxdPHhJYCHlQdBE9dLkqQk7swnxMegBiUCeRd7SRiGq+1wubYsGirwl RZfYQpcqMnLH/1KITlVkKNYKnUGLjej4XRCDZOe3j8geIyS7WCJ5OPnU Lw0KDA==
+ cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170313144128 20170228113958 58211 cz. xSEKl8ttuDR9Q3YjtVX+dPfdtwd4OG6rooml9TDIKNlND9LRTceRnpEH EsxUumTrRfWh8P4HWZF+B7hdm8qvcxAS3X3TYT4T7fKV5AFQbbMh+fv9 nut2RcZF40/x/0Hxh6QPLAtMDZs4W8IovQnpiTw8am9UoJNP+tT+dsgw ndA=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ nic.cz. IN DNSKEY
+ SECTION ANSWER
+ nic.cz. 1800 IN DNSKEY 256 3 13 vtFRotT17dIOLFIWi8BVFpHu8Thf/BrslFNNWlH2PPucF1rec69vuJi2 MswwoRtYQpRehbsjsjJ7kxXlTtfaFw==
+ nic.cz. 1800 IN DNSKEY 257 3 13 LM4zvjUgZi2XZKsYooDE0HFYGfWp242fKB+O8sLsuox8S6MJTowY8lBD jZD7JKbmaNot3+1H8zU9TrDzWmmHwQ==
+ nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20170313103655 20170228072511 61281 nic.cz. mA899bEiTCULWpuF2JpVSm3wyHWmHIYuRMJj2X2E0AUhdbX2zhuSun8q EjKpr/0FfZCmlJIEC6dXmjIV+X0jhg==
+ nic.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20170313194411 20170228072511 16836 nic.cz. iYJgEoykgdz6aqrE1DwM6fyWUFI2pDShqgfg7TiMaunyuvi2JwUaSbEq Ifm2aO5gF7bqSQjM+Y0NOzZ5nAUKrg==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ lidovky.cz. IN DS
+ SECTION ANSWER
+ lidovky.cz. 14400 IN DS 1901 8 2 1ED680FFBD77C4845A9BE15286FC73A756B6E4150C65DBC52EE4799B 641DFCE3
+ lidovky.cz. 14400 IN DS 4555 8 2 E4B03345B8E0EB3CD9208D2FA60F835A1E391CC485E84CBF3CB1136B D7748913
+ lidovky.cz. 14400 IN RRSIG DS 10 2 14400 20170312182850 20170228113958 58211 cz. yw/iboH4hKxLOv+0Mbyvp4rnT14IxkiOpk6kW7ANJI2AGoBa5L7oGy6F 4eEuc2AZKrn/FP2OZL8mItt0hBCucHpaBeRyx8n78pCuMnEaYs/Buxro 0S/bpkMhTRTTJCQ2uwKHAAfi2Q3PC1CWLKB8p7MbN21JlC3S7ANu0DgL 4Ro=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ lidovky.cz. IN NS
+ SECTION AUTHORITY
+ lidovky.cz. 14400 IN NS ns.mafra.cz.
+ lidovky.cz. 14400 IN NS ns.mafracz.net.
+ lidovky.cz. 14400 IN NS ns2.mafra.cz.
+ lidovky.cz. 14400 IN DS 1901 8 2 1ED680FFBD77C4845A9BE15286FC73A756B6E4150C65DBC52EE4799B 641DFCE3
+ lidovky.cz. 14400 IN DS 4555 8 2 E4B03345B8E0EB3CD9208D2FA60F835A1E391CC485E84CBF3CB1136B D7748913
+ lidovky.cz. 14400 IN RRSIG DS 10 2 14400 20170312182850 20170228113958 58211 cz. yw/iboH4hKxLOv+0Mbyvp4rnT14IxkiOpk6kW7ANJI2AGoBa5L7oGy6F 4eEuc2AZKrn/FP2OZL8mItt0hBCucHpaBeRyx8n78pCuMnEaYs/Buxro 0S/bpkMhTRTTJCQ2uwKHAAfi2Q3PC1CWLKB8p7MbN21JlC3S7ANu0DgL 4Ro=
+ SECTION ADDITIONAL
+ ns.mafra.cz. 18000 IN A 194.79.53.77
+ ns2.mafra.cz. 18000 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ mafra.cz. IN DS
+ SECTION AUTHORITY
+ cz. 900 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1488285598 900 300 604800 900
+ cz. 900 IN RRSIG SOA 10 1 14400 20170314055727 20170228113958 58211 cz. LBUALMOXd40KawVmUNWNlfMbeR0LDwNI5DPu9HqF8rtWCtHxReSGPrYs lyaL6gzVOn+i9Zikolj2arR+XPrb3vDMBjhh1AhP83p6Dfk4z0nEeaVy bJBdCSrcXcOi72RXY1QpO6lfhkpW2rhYtKS0Pq0rPVSF6rFVSLMavD82 X9s=
+ NP199O12UJ32S0N5CTA47VUUQK1B2N6P.cz. 900 IN NSEC3 1 0 10 34817B0B5673BB5D NP19M6SR9GQ4GR722R31PHMCCMV2L47C NS
+ NP199O12UJ32S0N5CTA47VUUQK1B2N6P.cz. 900 IN RRSIG NSEC3 10 2 900 20170309110321 20170224213957 58211 cz. Brz4hpl2jq+rhJlu9tZ6Ij0Ru4+2Yyw5a4OVgN4/umq/9jPn2dWgnOPS 6Mk5WIC9Yun9ZIvncS3oE1dRhXAF+nGZS9jr1tdXLx+1Sow4o0nP8cxw 8Sl8BVjBkDpVSZfGVMN06NjJub57uw5nDF3E/AjoCYDxnb0UrVmIGCUb h7A=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ mafra.cz. IN NS
+ SECTION AUTHORITY
+ mafra.cz. 14400 IN NS ns.mafra.cz.
+ mafra.cz. 14400 IN NS ns.mafracz.net.
+ mafra.cz. 14400 IN NS ns2.mafra.cz.
+ np199o12uj32s0n5cta47vuuqk1b2n6p.cz. 900 IN NSEC3 1 0 10 34817B0B5673BB5D NP19M6SR9GQ4GR722R31PHMCCMV2L47C NS
+ np199o12uj32s0n5cta47vuuqk1b2n6p.cz. 900 IN RRSIG NSEC3 10 2 900 20170309110321 20170224213957 58211 cz. Brz4hpl2jq+rhJlu9tZ6Ij0Ru4+2Yyw5a4OVgN4/umq/9jPn2dWgnOPS 6Mk5WIC9Yun9ZIvncS3oE1dRhXAF+nGZS9jr1tdXLx+1Sow4o0nP8cxw 8Sl8BVjBkDpVSZfGVMN06NjJub57uw5nDF3E/AjoCYDxnb0UrVmIGCUb h7A=
+ SECTION ADDITIONAL
+ ns.mafra.cz. 7275 IN A 194.79.53.77
+ ns2.mafra.cz. 7275 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ idnes.cz. IN DS
+ SECTION AUTHORITY
+ cz. 900 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 1488285598 900 300 604800 900
+ cz. 900 IN RRSIG SOA 10 1 14400 20170314055727 20170228113958 58211 cz. LBUALMOXd40KawVmUNWNlfMbeR0LDwNI5DPu9HqF8rtWCtHxReSGPrYs lyaL6gzVOn+i9Zikolj2arR+XPrb3vDMBjhh1AhP83p6Dfk4z0nEeaVy bJBdCSrcXcOi72RXY1QpO6lfhkpW2rhYtKS0Pq0rPVSF6rFVSLMavD82 X9s=
+ AUOICN1434M9JOGSCEGTCFV7NUDKO603.cz. 900 IN NSEC3 1 0 10 34817B0B5673BB5D AUOJ570J8RB3057RHUJ1DAGMCO1GAUDH NS
+ AUOICN1434M9JOGSCEGTCFV7NUDKO603.cz. 900 IN RRSIG NSEC3 10 2 900 20170313031226 20170227134003 58211 cz. CMvsPy0Ce7UR692R7jMat7E9Mm2DHTcZz7b5PlwsNX3i+41Ymlh1TeAs utrGbJUR+cdKQStzN6uNsxGQ84zFmeqOvMKtZBbvdavQbXtDfwTuEplX XolQ82j/0wVYCkpYANkLmyLrwbbZxJ4sSb1sbVRtMN0daeE6y3OleQDk 2Uw=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ idnes.cz. IN NS
+ SECTION AUTHORITY
+ idnes.cz. 14400 IN NS ns.mafra.cz.
+ idnes.cz. 14400 IN NS ns.mafracz.net.
+ idnes.cz. 14400 IN NS ns2.mafra.cz.
+ auoicn1434m9jogscegtcfv7nudko603.cz. 900 IN NSEC3 1 0 10 34817B0B5673BB5D AUOJ570J8RB3057RHUJ1DAGMCO1GAUDH NS
+ auoicn1434m9jogscegtcfv7nudko603.cz. 900 IN RRSIG NSEC3 10 2 900 20170313031226 20170227134003 58211 cz. CMvsPy0Ce7UR692R7jMat7E9Mm2DHTcZz7b5PlwsNX3i+41Ymlh1TeAs utrGbJUR+cdKQStzN6uNsxGQ84zFmeqOvMKtZBbvdavQbXtDfwTuEplX XolQ82j/0wVYCkpYANkLmyLrwbbZxJ4sSb1sbVRtMN0daeE6y3OleQDk 2Uw=
+ SECTION ADDITIONAL
+ ns.mafra.cz. 18000 IN A 194.79.53.77
+ ns2.mafra.cz. 18000 IN A 194.79.55.77
+ ENTRY_END
+
+RANGE_END
+
+;net
+RANGE_BEGIN 0 100
+ ADDRESS 192.5.6.30
+ ADDRESS 192.33.14.30
+ ADDRESS 192.26.92.30
+ ADDRESS 192.31.80.30
+ ADDRESS 192.12.94.30
+ ADDRESS 192.35.51.30
+ ADDRESS 192.42.93.30
+ ADDRESS 192.54.112.30
+ ADDRESS 192.43.172.30
+ ADDRESS 192.48.79.30
+ ADDRESS 192.52.178.30
+ ADDRESS 192.41.162.30
+ ADDRESS 192.55.83.30
+ ADDRESS 2001:503:a83e::2:30
+ ADDRESS 2001:503:231d::2:30
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ net. IN DNSKEY
+ SECTION ANSWER
+ net. 86400 IN DNSKEY 257 3 8 AQOYBnzqWXIEj6mlgXg4LWC0HP2n8eK8XqgHlmJ/69iuIHsa1TrHDG6T cOra/pyeGKwH0nKZhTmXSuUFGh9BCNiwVDuyyb6OBGy2Nte9Kr8NwWg4 q+zhSoOf4D+gC9dEzg0yFdwT0DKEvmNPt0K4jbQDS4Yimb+uPKuF6yie WWrPYYCrv8C9KC8JMze2uT6NuWBfsl2fDUoV4l65qMww06D7n+p7Rbdw WkAZ0fA63mXVXBZF6kpDtsYD7SUB9jhhfLQE/r85bvg3FaSs5Wi2BaqN 06SzGWI1DHu7axthIOeHwg00zxlhTpoYCH0ldoQz+S65zWYi/fRJiyLS Bb6JZOvn
+ net. 86400 IN DNSKEY 256 3 8 AQPMYWRP6GrTFoGFNQyuta0p4VYHr5Ox7yOl0Zv5ejOeRUnmoVgvHUR0 8lmmKEnBBPPZ89f/spt8VQ3GFUAbjJVzlcF5dQbY26YO/XKNcB2dlCEy quowoOQYsbASUj91c0IfFXAbK10reyShzaUi76p2VG5f0tjq/iC4iMZJ yxcpRQ==
+ net. 86400 IN RRSIG DNSKEY 8 1 86400 20170306173857 20170219173357 35886 net. Vvmjg9riU5c81z+4GEMSV4kEHf0ds2lxyD/UmGB4Vjtu0S71KldD4hh2 nA086G2Ssl1gBFEcVkLdPPpvh/c39mSITollT43u55pBLGQQcRXqPL6X 5xjlsOayD4QfwszBn5/5QTSD9pB5D9AsGQARlQTa0Vp1O9ruFDq0BuVQ F4P2QkNaxM6T+QZdFtqFOe6n3H+Qn0/TEvbM72w0hIBr1po3aSZuJleN SR3Wbubs1H7p1E6a6FH2+rRb3t7Q5DWNT/P5kZU0j+JB1PRknSwWCv7n orxIfhoYuFqU8Gw9w5KSw+Qtc7AjxlawQSAAZPLaq9ZL2cEKkeUrEGTD V41adg==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ net. IN DS
+ SECTION ANSWER
+ net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1488288307 1800 900 604800 86400
+ net. 900 IN RRSIG SOA 8 1 900 20170307132507 20170228121507 16757 net. aeKdMkRb/POrt2pw0h0O8fN8EUXFXJlPHu/aHtIihIEkj85ZpCNrEOxr Zg5jkYtPXQwx+X0cnD/uNMEWPOD3vNW3Ap9Y01RlFBzvlBHeH4YA09tr ElBPqkzN6bNrNJi3V/yJjV2dy7IUvqDO9M5cQEuPHIED2sIh1FATmB6b KMs=
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ net. IN NS
+ SECTION ANSWER
+ net. 172800 IN NS i.gtld-servers.net.
+ net. 172800 IN NS e.gtld-servers.net.
+ net. 172800 IN NS h.gtld-servers.net.
+ net. 172800 IN NS b.gtld-servers.net.
+ net. 172800 IN NS a.gtld-servers.net.
+ net. 172800 IN NS j.gtld-servers.net.
+ net. 172800 IN NS f.gtld-servers.net.
+ net. 172800 IN NS m.gtld-servers.net.
+ net. 172800 IN NS l.gtld-servers.net.
+ net. 172800 IN NS g.gtld-servers.net.
+ net. 172800 IN NS k.gtld-servers.net.
+ net. 172800 IN NS c.gtld-servers.net.
+ net. 172800 IN NS d.gtld-servers.net.
+ net. 172800 IN RRSIG NS 8 1 172800 20170304061505 20170225050505 16757 net. Pq4fze7lagq5NaKm7P4plOCY4gbFH3ZqZPvWIMojqNgHmoboqXWpth7R s2th1NzR7fxTvxngwVFlO7tR2Sf19epNimuJHEkxAKceLtSfdwxilfMz WvPq5/2tCINU8xo/SOC13ST4zq3PUi+VfPYbRF+5SakOTkU/6m1+9hlo ixo=
+ SECTION ADDITIONAL
+ a.gtld-servers.net. 172800 IN A 192.5.6.30
+ b.gtld-servers.net. 172800 IN A 192.33.14.30
+ c.gtld-servers.net. 172800 IN A 192.26.92.30
+ d.gtld-servers.net. 172800 IN A 192.31.80.30
+ e.gtld-servers.net. 172800 IN A 192.12.94.30
+ f.gtld-servers.net. 172800 IN A 192.35.51.30
+ g.gtld-servers.net. 172800 IN A 192.42.93.30
+ h.gtld-servers.net. 172800 IN A 192.54.112.30
+ i.gtld-servers.net. 172800 IN A 192.43.172.30
+ j.gtld-servers.net. 172800 IN A 192.48.79.30
+ k.gtld-servers.net. 172800 IN A 192.52.178.30
+ l.gtld-servers.net. 172800 IN A 192.41.162.30
+ m.gtld-servers.net. 172800 IN A 192.55.83.30
+ a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
+ b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ root-servers.net. IN DS
+ SECTION AUTHORITY
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1488288412 1800 900 604800 86400
+ net. 900 IN RRSIG SOA 8 1 900 20170307132652 20170228121652 16757 net. VnpLNPVwJO8pW1+aHC5jGq17aTVQuWMfu7igBcig9XG9li1wVBtawqaB zpiT8zoUWa76qkydyhuKWNjR895eLQz1Ql0cboW8GIddDFfKacpEP9nr QWwqjiMltfXn+iGiumrDbxwHKvwllXhOIShR5uAT640UcJ7QMhrq2jrJ V+Y=
+ T2UFL481TTPOHR68HR18DHJAFU935MJU.net. 86400 IN NSEC3 1 1 0 - T2UKCT9K5I0UHV7B3M3NA6JAIGDJM0GR NS DS RRSIG
+ T2UFL481TTPOHR68HR18DHJAFU935MJU.net. 86400 IN RRSIG NSEC3 8 2 86400 20170307061346 20170228050346 16757 net. KpGr8ZrjFGZ2q39FPpGe9SBR4hJ1e8L9oyvO5JS7Eh4LVdjwsD8B13nQ 7iv6jdCWVIWXh41fB4dcCUvLYqd9d75bACQ4JQVR3ycON9Qwt2XiUyVk iBYm7cp9C78+Uj0/P3TClk90GtZaAb3+JXUZZvrK08HnivVtmTta1Laj TVk=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ gtld-servers.net. IN DS
+ SECTION AUTHORITY
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1488288457 1800 900 604800 86400
+ net. 900 IN RRSIG SOA 8 1 900 20170307132737 20170228121737 16757 net. x5j/Iiv9Bey7T4FSeICdJrAyn5tEubHlhQXGmjM4KAVEq1CybM70rL7s HrwAhyiC/9RobYaMhM4fxmji3h8vWYbWauGMZ5XXmRGL66jE6Zq/M99v zk7RDnedNS+vPAv49PJ5aICGs4hfapPg3Kwf/KKwDzzvactaRYPvptLX u74=
+ 5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5QDPPOTUK27KKP9LIGTRB0K1CBVM9CIM NS DS RRSIG
+ 5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306060531 20170227045531 16757 net. uV9O+X7Vk1+dgIdqY2qE5RvN4B4Nv+xDLjd5V30sapNI8ARrA8d9pEVY qGNU5tF8+VT3lukCjvfgfopyTjw+SO+x4fwpZenmehwgNFkMHYWAv/1l xrdZHw60JMa/jWy+Rtdqi2uBJMGldGEIiuLEHgkKAjub2wtdiEkl2Azo AeY=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ gtld-servers.net. IN NS
+
+ SECTION AUTHORITY
+ gtld-servers.net. 172800 IN NS av1.nstld.com.
+ gtld-servers.net. 172800 IN NS av2.nstld.com.
+ gtld-servers.net. 172800 IN NS av3.nstld.com.
+ gtld-servers.net. 172800 IN NS av4.nstld.com.
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ 5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN NSEC3 1 1 0 - 5QDPPOTUK27KKP9LIGTRB0K1CBVM9CIM NS DS RRSIG
+ 5QD8VL68T2I9KOBD32KJ8LJVH5OH2PQ0.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306060531 20170227045531 16757 net. uV9O+X7Vk1+dgIdqY2qE5RvN4B4Nv+xDLjd5V30sapNI8ARrA8d9pEVY qGNU5tF8+VT3lukCjvfgfopyTjw+SO+x4fwpZenmehwgNFkMHYWAv/1l xrdZHw60JMa/jWy+Rtdqi2uBJMGldGEIiuLEHgkKAjub2wtdiEkl2Azo AeY=
+
+ SECTION ADDITIONAL
+ av1.nstld.com. 172800 IN A 192.42.177.30
+ av1.nstld.com. 172800 IN AAAA 2001:500:124::30
+ av2.nstld.com. 172800 IN A 192.42.178.30
+ av2.nstld.com. 172800 IN AAAA 2001:500:125::30
+ av3.nstld.com. 172800 IN A 192.82.133.30
+ av3.nstld.com. 172800 IN AAAA 2001:500:126::30
+ av4.nstld.com. 172800 IN A 192.82.134.30
+ av4.nstld.com. 172800 IN AAAA 2001:500:127::30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qname qtype
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ a.gtld-servers.net. IN A
+ SECTION ANSWER
+ a.gtld-servers.net. 172800 IN A 192.5.6.30
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ gtld-servers.net. IN A
+ SECTION AUTHORITY
+ gtld-servers.net. 86400 IN SOA av4.nstld.com. nstld.verisign-grs.com. 2016101000 3600 900 1209600 86400
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ a.root-servers.net. IN A
+ SECTION AUTHORITY
+ root-servers.net. 172800 IN NS a.root-servers.net.
+ SECTION ADDITIONAL
+ a.root-servers.net. 3600000 IN A 198.41.0.4
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ root-servers.net. IN AAAA
+ SECTION AUTHORITY
+ root-servers.net. 172800 IN NS a.root-servers.net.
+ SECTION ADDITIONAL
+ a.root-servers.net. 172800 IN A 198.41.0.4
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ mafracz.net. IN DS
+ SECTION AUTHORITY
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ net. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1488288547 1800 900 604800 86400
+ net. 900 IN RRSIG SOA 8 1 900 20170307132907 20170228121907 16757 net. y7pu7BBxAqE7l+JB4PIg/2l+WPgeOrSo+TRo2vKqVJFa03GttNi4BlWH s0sT3t4Mr0nvWxNf7PlUUct7KFssGGCu6kXC3RiZsXDaTeAnHjAfk9rg v/z6PM7fU3shLjEXDuIY9GtPAw65nbSeK1Sai/3gWUOnlxo1J2r3VXl3 cfE=
+ P61KBBD5BIIR8OO46HQUMTGEQAU7RAQJ.net. 86400 IN NSEC3 1 1 0 - P61TM41BB9FNGTRQ6D1PPAU0E9MD6S63 NS DS RRSIG
+ P61KBBD5BIIR8OO46HQUMTGEQAU7RAQJ.net. 86400 IN RRSIG NSEC3 8 2 86400 20170304061336 20170225050336 16757 net. QKFFK4L57Pzylgc3d/9Z5R++Cqxx5agyEG6HPcGtjCSslA7DEj+qULoy TTWNBpgzPgwwrZy0BdNYBZdC3rpdfiJqCidVXe7bRfUQDHY4NJiuouOv jLGxYf/k8gqKAElV9CriTBkkjALwXdlDvCSMnhczMlu0409YoL3XKBdE TCc=
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode subdomain
+ ADJUST copy_id copy_query
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ mafracz.net. IN NS
+ SECTION AUTHORITY
+ mafracz.net. 172800 IN NS ns.mafra.cz.
+ mafracz.net. 172800 IN NS ns2.mafra.cz.
+ mafracz.net. 172800 IN NS ns.mafracz.net.
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN NSEC3 1 1 0 - A1RUUFFJKCT2Q54P78F8EJGJ8JBK7I8B NS SOA RRSIG DNSKEY NSEC3PARAM
+ A1RT98BS5QGC9NFI51S9HCI47ULJG6JH.net. 86400 IN RRSIG NSEC3 8 2 86400 20170306061207 20170227050207 16757 net. s53ftACmRAtcKkfowIENgWkCuHNoyesDp5kz1g62Uxm9v03ig4TkMMBW cUMvLFCp1XpmiOx9MX5klfJgFrhQPYmaRBuQaI3nrH6B57kjsphtJYvc B6wyRGPHAg+oNecZqQbUBEkzBrppoe4a5nhlOkLgbHKb5qPbN0tV5wBu x5c=
+ P61KBBD5BIIR8OO46HQUMTGEQAU7RAQJ.net. 86400 IN NSEC3 1 1 0 - P61TM41BB9FNGTRQ6D1PPAU0E9MD6S63 NS DS RRSIG
+ P61KBBD5BIIR8OO46HQUMTGEQAU7RAQJ.net. 86400 IN RRSIG NSEC3 8 2 86400 20170304061336 20170225050336 16757 net. QKFFK4L57Pzylgc3d/9Z5R++Cqxx5agyEG6HPcGtjCSslA7DEj+qULoy TTWNBpgzPgwwrZy0BdNYBZdC3rpdfiJqCidVXe7bRfUQDHY4NJiuouOv jLGxYf/k8gqKAElV9CriTBkkjALwXdlDvCSMnhczMlu0409YoL3XKBdE TCc=
+ SECTION ADDITIONAL
+ ns.mafracz.net. 165236 IN A 185.17.118.250
+ ENTRY_END
+RANGE_END
+
+
+RANGE_BEGIN 0 100
+ ADDRESS 194.79.53.77
+ ADDRESS 185.17.118.250
+ ADDRESS 194.79.55.77
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ ns.mafracz.net. IN A
+ SECTION ANSWER
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ SECTION AUTHORITY
+ mafracz.net. 600 IN NS ns2.mafra.cz.
+ mafracz.net. 600 IN NS ns.mafracz.net.
+ mafracz.net. 600 IN NS ns.mafra.cz.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id copy_query
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ lidovky.cz. IN DNSKEY
+ SECTION ANSWER
+ lidovky.cz. 3600 IN DNSKEY 256 3 8 AwEAAb8GYuVqOqVTYuppOCtctAHJ38tuSVriiptyQcxdZsU7U7s2XFVp QAuTxxoBOuvJZLMLXNikOki1KCnQx030Zz73AFx8tiPS6rFzR71TJXTC HlpwDnnK3rkdsu6Ay85cLiRtFpgW1D1WPi5oCJWGs4dJ8L5mcoIYikZt 99cfDKY/
+ lidovky.cz. 3600 IN DNSKEY 256 3 8 AwEAActfDtlHpl0/2f9qMqDt5uslMzxKDNf4FGklmcG+OO2HuhOhnQVx arB6lYxIKofy+uOvUhyGxlxCq08bVKueBpAt0x5kLMAwhc6zmn8niIE6 +UZxLg7+r2ojLTl0qQ2sMoG6ryo4/1GCEwh/TjJp8PuAzE0Q7yQOE6ed jZkWjraJ
+ lidovky.cz. 3600 IN DNSKEY 257 3 8 AwEAAeFABHDi1QXB2WaYeLP07RzSfn9IIjMFrL6+obHNgMpY32skT0fX +4YiF1vrAwI3FyvqvLERcUqZl3kMFk/mBDEBcCCP8osbndEUEEg2fVkZ gPDVWT3nCBMXRRuXmddn+L7o18wTUTBbLCxCT22ROOqahUyDEHvHpUbq LTbY+GGnSNzAD9/BWFdMIGOKzQ8oYFFyWDGZYAcznojZO7gvpduw3slg t3YLv4iDxMIgFokCw+qQhf42xtmox7H6KfCaW59PdFfRRAc20JfpGxJ4 m2PAuuacgOoVkqRLqprJ0/NCmMJgQZ3yKQWe2QWfRP9lhmF9HXAVukyy Yh3+JaqulxM=
+ lidovky.cz. 3600 IN RRSIG DNSKEY 8 2 3600 20170305034217 20170226010009 1901 lidovky.cz. ElBtNV7iyYIWDExYkKJ+pwwIcSwJ6kXfiT3yFiwp43CqXg9KxMK55UBe nCToid81/xgGQmSnmHw8w5LQXs5CjiIamoMYCX0SCie0FsfvFx1871np CvzTeSr4U876wnZVAjmM/FnDP63/4SgIICZpMb3P/MU7M+zr93JgOMXs E0Zp4uR6puh7a52VMRBLBIEx4L8mw2TW3VU9an2FD5r6GnAqI5YqEY8P FpHdkb243AvB3rZBWtDiKFSzD+WsrqrDOL3lmA/Jcb5GcxA2CGxfTSCJ +ndebgdkFSwPXQxW7FQwdS4mTuPixdzonq8XtljLZSomyJ0mnepn0j7k lwklow==
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ lidovky.cz. IN A
+ SECTION ANSWER
+ lidovky.cz. 300 IN A 185.17.119.32
+ lidovky.cz. 300 IN RRSIG A 8 2 300 20170306080352 20170227090009 61408 lidovky.cz. rDSYYHIlE4Drq4/QLXrTDk+oeY6nh+W0p7cSeH9BGojdE4qIHjWUDjOS C4sEQpZtgG6EKO5j6P2+8bJ/3SmWdFT2GPHgP5eeRHPoo3iaGQMxXebD pbyVHtN//Gb577ycKcbNys/loflzhTWL2K1QXIHk53iWOTlDBg6uJcqi HsI=
+ SECTION AUTHORITY
+ lidovky.cz. 300 IN NS ns2.mafra.cz.
+ lidovky.cz. 300 IN NS ns.mafracz.net.
+ lidovky.cz. 300 IN NS ns.mafra.cz.
+ lidovky.cz. 300 IN RRSIG NS 8 2 300 20170304164701 20170225230009 61408 lidovky.cz. QmaLuzIDTiB/QbIgyxPRTVGFG/P5wFyrzlBtK7LIUsVIk8wuM9GudvQx weBiLPbaj28YypIdkS/z12sIawYenv4R9lswSVCOqT2H1KhXMtbW+BMk p5bCyr1mEJfceas6td4gywOydtfjYwU7WBvFPpMszP22p7jrizeQQpNB dK4=
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ www.lidovky.cz. IN A
+ SECTION ANSWER
+ www.lidovky.cz. 300 IN CNAME c23.idnes.cz.
+ www.lidovky.cz. 300 IN RRSIG CNAME 8 3 300 20170305033947 20170226030009 61408 lidovky.cz. VyqkB8Fzxs+LTz9WDKLMmbyrtq+V/5R1sYfYBQJPuVa3pJ1vX2I5M6XK n7TDu9gsW2v+zquOps/8aL/e/+R8ivEJomYzdnvH3EwfgT9WCOYJtlUL +sIq8eu45jXTVsFVLa0Fy5LKeFcfic+4C6AG676o5VSucVJLTWiftW47 RPA=
+ c23.idnes.cz. 300 IN A 185.17.119.54
+ SECTION AUTHORITY
+ idnes.cz. 300 IN NS ns.mafra.cz.
+ idnes.cz. 300 IN NS ns2.mafra.cz.
+ idnes.cz. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ c23.idnes.cz. IN A
+ SECTION ANSWER
+ c23.idnes.cz. 300 IN A 185.17.119.54
+ SECTION AUTHORITY
+ idnes.cz. 300 IN NS ns.mafra.cz.
+ idnes.cz. 300 IN NS ns2.mafra.cz.
+ idnes.cz. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ ns2.mafra.cz. IN A
+ SECTION ANSWER
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ SECTION AUTHORITY
+ mafra.cz. 300 IN NS ns.mafra.cz.
+ mafra.cz. 300 IN NS ns2.mafra.cz.
+ mafra.cz. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR AA RD DO NOERROR
+ SECTION QUESTION
+ ns.mafra.cz. IN A
+ SECTION ANSWER
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ SECTION AUTHORITY
+ mafra.cz. 300 IN NS ns.mafra.cz.
+ mafra.cz. 300 IN NS ns2.mafra.cz.
+ mafra.cz. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ lidovky.cz. IN NS
+ SECTION ANSWER
+ lidovky.cz. 300 IN NS ns.mafra.cz.
+ lidovky.cz. 300 IN NS ns2.mafra.cz.
+ lidovky.cz. 300 IN NS ns.mafracz.net.
+ lidovky.cz. 300 IN RRSIG NS 8 2 300 20170304164701 20170225230009 61408 lidovky.cz. QmaLuzIDTiB/QbIgyxPRTVGFG/P5wFyrzlBtK7LIUsVIk8wuM9GudvQx weBiLPbaj28YypIdkS/z12sIawYenv4R9lswSVCOqT2H1KhXMtbW+BMk p5bCyr1mEJfceas6td4gywOydtfjYwU7WBvFPpMszP22p7jrizeQQpNB dK4=
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ mafra.cz. IN NS
+ SECTION ANSWER
+ mafra.cz. 300 IN NS ns.mafra.cz.
+ mafra.cz. 300 IN NS ns2.mafra.cz.
+ mafra.cz. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ mafracz.net. IN NS
+ SECTION ANSWER
+ mafracz.net. 300 IN NS ns.mafra.cz.
+ mafracz.net. 300 IN NS ns2.mafra.cz.
+ mafracz.net. 300 IN NS ns.mafracz.net.
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO AA NOERROR
+ SECTION QUESTION
+ idnes.cz. IN NS
+ SECTION ANSWER
+ idnes.cz. 300 IN NS ns2.mafra.cz.
+ idnes.cz. 300 IN NS ns.mafracz.net.
+ idnes.cz. 300 IN NS ns.mafra.cz.
+
+ SECTION ADDITIONAL
+ ns.mafra.cz. 300 IN A 194.79.53.77
+ ns.mafracz.net. 600 IN A 185.17.118.250
+ ns2.mafra.cz. 300 IN A 194.79.55.77
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ ns.mafra.cz. IN AAAA
+ SECTION AUTHORITY
+ mafra.cz. 291 IN SOA ns.mafra.cz. hostmaster.mafra.cz. 2017021601 3600 600 1209600 600
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ ns2.mafra.cz. IN AAAA
+ SECTION AUTHORITY
+ mafra.cz. 291 IN SOA ns.mafra.cz. hostmaster.mafra.cz. 2017021601 3600 600 1209600 600
+ ENTRY_END
+
+ ENTRY_BEGIN
+ MATCH opcode qtype qname
+ ADJUST copy_id
+ REPLY QR RD DO NOERROR
+ SECTION QUESTION
+ ns.mafracz.net. IN AAAA
+ SECTION AUTHORITY
+ mafracz.net. 600 IN SOA ns.mafracz.net. hostmaster.mafra.cz. 2015061701 3600 600 86400 3600
+ ENTRY_END
+
+RANGE_END
+
+STEP 1 QUERY
+ENTRY_BEGIN
+ REPLY RD DO
+ SECTION QUESTION
+ www.lidovky.cz IN A
+ENTRY_END
+
+STEP 2 CHECK_ANSWER
+ENTRY_BEGIN
+ MATCH rcode question answer flags
+ REPLY QR RD RA NOERROR
+ SECTION QUESTION
+ www.lidovky.cz IN A
+ SECTION ANSWER
+ www.lidovky.cz. 251 IN CNAME c23.idnes.cz.
+ www.lidovky.cz. 251 IN RRSIG CNAME 8 3 300 20170305033947 20170226030009 61408 lidovky.cz. VyqkB8Fzxs+LTz9WDKLMmbyrtq+V/5R1sYfYBQJPuVa3pJ1vX2I5M6XK n7TDu9gsW2v+zquOps/8aL/e/+R8ivEJomYzdnvH3EwfgT9WCOYJtlUL +sIq8eu45jXTVsFVLa0Fy5LKeFcfic+4C6AG676o5VSucVJLTWiftW47 RPA=
+ c23.idnes.cz. 251 IN A 185.17.119.54
+ENTRY_END
+
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/world_cz_rhybar.rpl b/tests/deckard/sets/resolver/world_cz_rhybar.rpl
new file mode 100644
index 0000000..41a2d89
--- /dev/null
+++ b/tests/deckard/sets/resolver/world_cz_rhybar.rpl
@@ -0,0 +1,294 @@
+; test with real world Internet data
+; attempt to resolve www.rhybar.cz. A with CD first to populate BAD cache
+; and then try to resolve without any DNSSEC flag to see if it validates
+; correctly into Bogus status
+
+val-override-date: 20170201163631
+trust-anchor: ". 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5"
+stub-addr: 2001:dc3::35
+CONFIG_END
+
+SCENARIO_BEGIN www.rhybar.cz.
+
+; DNS root
+RANGE_BEGIN 0 100
+ ADDRESS 192.33.4.12
+ ADDRESS 2001:500:2d::d
+ ADDRESS 2001:dc3::35
+ ADDRESS 192.36.148.17
+ ADDRESS 2001:500:12::d0d
+ ADDRESS 192.203.230.10
+ ADDRESS 199.7.83.42
+ ADDRESS 198.97.190.53
+ ADDRESS 2001:500:a8::e
+ ADDRESS 2001:500:9f::42
+ ADDRESS 2001:500:2::c
+ ADDRESS 2001:7fd::1
+ ADDRESS 193.0.14.129
+ ADDRESS 202.12.27.33
+ ADDRESS 192.58.128.30
+ ADDRESS 192.5.5.241
+ ADDRESS 2001:7fe::53
+ ADDRESS 198.41.0.4
+ ADDRESS 2001:500:2f::f
+ ADDRESS 199.7.91.13
+ ADDRESS 192.112.36.4
+ ADDRESS 2001:500:84::b
+ ADDRESS 192.228.79.201
+ ADDRESS 2001:503:c27::2:30
+ ADDRESS 2001:500:1::53
+ ADDRESS 2001:503:ba3e::2:30
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170214050000 20170201040000 61045 . Ey0PFIQr/80otZwczK1hk0h+gxC8IRS9 F1BagrU8rKNcMWpp2cmYLOAeBABkkwdM c1Rg8ENJV17uDVEr32LWDWP1REjCKfI/ 2XXejWZ9jofcbDDNHQgvFX0xg+n3X+YV qG/WzOcHCmDGQNgFVhnC9K0JvO7pXmWS PJmESDO37XKLlFTdRtOYxYJ0wRaAMaBX irFD0qs/ePHyEPso4hg8cYIFeIbVzKgj jv0UrUJgc1V29GilKeYnWq7jHdJt/N0Q 18wgzEB0YlBL07zaq6DBvYCb6cjPoZQm iEKelHQ5MW297YzHGDVia03+5KgJFUhc XGcnMCQqnHxLEuQdY0syBQ==
+SECTION ADDITIONAL
+a.root-servers.net. 3600000 IN A 198.41.0.4
+a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 3600000 IN A 192.228.79.201
+b.root-servers.net. 3600000 IN AAAA 2001:500:84::b
+c.root-servers.net. 3600000 IN A 192.33.4.12
+c.root-servers.net. 3600000 IN AAAA 2001:500:2::c
+d.root-servers.net. 3600000 IN A 199.7.91.13
+d.root-servers.net. 3600000 IN AAAA 2001:500:2d::d
+e.root-servers.net. 3600000 IN A 192.203.230.10
+e.root-servers.net. 3600000 IN AAAA 2001:500:a8::e
+f.root-servers.net. 3600000 IN A 192.5.5.241
+f.root-servers.net. 3600000 IN AAAA 2001:500:2f::f
+g.root-servers.net. 3600000 IN A 192.112.36.4
+g.root-servers.net. 3600000 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 3600000 IN A 198.97.190.53
+h.root-servers.net. 3600000 IN AAAA 2001:500:1::53
+i.root-servers.net. 3600000 IN A 192.36.148.17
+i.root-servers.net. 3600000 IN AAAA 2001:7fe::53
+j.root-servers.net. 3600000 IN A 192.58.128.30
+j.root-servers.net. 3600000 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 3600000 IN A 193.0.14.129
+k.root-servers.net. 3600000 IN AAAA 2001:7fd::1
+l.root-servers.net. 3600000 IN A 199.7.83.42
+l.root-servers.net. 3600000 IN AAAA 2001:500:9f::42
+m.root-servers.net. 3600000 IN A 202.12.27.33
+m.root-servers.net. 3600000 IN AAAA 2001:dc3::35
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN DS
+SECTION AUTHORITY
+. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017020101 1800 900 604800 86400
+. 86400 IN RRSIG SOA 8 0 86400 20170214170000 20170201160000 61045 . VD0rE7mpNaBtbxQiVerNLfdrAZc+YYPW u5GzNEOqScwW5EGamZe02t+pns6Z5LCJ dkka3yXTyIAPPrDig0z9VuYXt9pD45bf pB+9/sP0+oVtQZnuXRRsut9/Es3tuuMU 96O5RcFR8s/IeVfOmhq5hgNuSBrbWTxm 2EggbZ8RR1aUMTTTJorLver0xYQp8T6m LKrdRuC/jlgVH8/fmU+EUm0fZAtQTPDJ 5Q0XSigFYuX4aebIVn/YAtPKlG8twdq4 9tQ6QaUq8Qwx0w4fA+mizcPkufAn6/fs PYZlxhzibO+7L6/XpKR04+u1w5OCsNDy Aocf41ba1xkIJOJaqPNwVg==
+. 86400 IN RRSIG NSEC 8 0 86400 20170214170000 20170201160000 61045 . ThWu+J7xTDlcmWecgMSiRBhauX2dAHG4 RED8SZkdAw2w+0E/Du1+BNYBfnnJYJTr zkA4ThfIniNgeH5zWdlNU1ogDp0fcToI 3lz/yJ1zwJlcQFs0WNLKK0QMsjftF1wO VysIstlIu7+xgDTE/yz9fzBUMPpOh4qW 5G3xMU2Exqi4Qnn4LxPVn6jdLuygxwt+ oQ+qaMRSo3QOfBe5rwJsPQgM5S8k27mB jUmrasNHfqkWLy1nscoTtvyuOTIDh5pZ oXHCAaZbrGKAgovXjIeGCga1frtlCOOY JjUfjvahZXH0IHpP5IYkDsjM8r5iMIY7 6qrI5oHNHGeqkwV0/gJKzw==
+. 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN RRSIG DNSKEY 8 0 172800 20170221000000 20170131000000 19036 . eq4bnmAmFeMpxfwZgDJcj+7oGo5XcBEK TbrXcBfztSS0RWvCzgFHyQSq7zjEV78M zgXCy/NfrN6wBLbSA7v1Q2Y3nWb9phiu SM422iqrUDdXue/iIj5JANdtDpzuiVAJ Fws/JWYl9TfzF3hfk6DjJttByUsZTKsl l6gQZsD/LcZ0cGYPNYWUz1geDXGawqjI 6o5wwdXSpEHUg2M4iN9yU0xeoz2si+E6 K+Sr6ZY20PfrWbanQrRX7Yhz3DMrwjk/ EuzQcLMxkkhqX8Lf9wlBfNk24NaK+L0q 1Fd5i3RNwlxJJP9DkEer7KTP43uoi8SU lzMfjKYd0pUUw7RES4VLdw==
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29 euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v 58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8 g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37 NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/E fucp2gaDX6RS6CXpoY68LsvPVjR0ZSwz z1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgu l0sGIcGOYl7OyQdXfZ57relSQageu+ip AdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1 dfwhYB4N7knNnulqQxA+Uk1ihz0=
+. 172800 IN DNSKEY 256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTR gy7+dzvfArIhi2tKoZ/WR1Dfw883SOU6 Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfEl BwKsz4sVVWmfyr/x+igD/UjrcJ5zEBUr UmVtHyjar7ccaVc1/3ntkhZjI1hcungA lOhPhHlkMeX+5Azx6GdX//An5OgrdyH3 o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49z cdis3EaY199WFW60DCS7ydu++T5Xa+Gy Ow1quagwf/JUC/mEpeBQYWrnpkBbpDB3 sy4+P2i8iCvavehbRyVm9U0MlIc=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 54576 10 2 397e50c85ede9cde33f363a9e66fd1b216d788f8dd438a57a423a386869c8f06
+cz. 86400 IN RRSIG DS 8 1 86400 20170214050000 20170201040000 61045 . KFIT2d+AO6xPTOKH4qWqTcthiqONvswz Ya+rnndNcDVOhvS9aKotG1CbyZXes489 GwfyNNsuO5N+WzDWO5Jzm37doLFFq3Yv AxWupLK8/KpM8lYc1VxlrkZ/XxODPOvJ ZEJ3WCLoyvc4PQgKmpjqxmGv+9GafFDO 7m7P0a2dJGxEH8GSDimcXS8dWf72O6DX zse532zD5mvLR8p2mXaoK7i5PbRRMzyB jHnQRVJVw3myhdNa1wB4P4Y9qUGQty9G xXHwJGsiZjADnzA+zWQYhZYQUp2suM/T Ri4JIKtdzitJHJ7psy0uwqC93L9PUnuq kWNz4YrXgWHP9TJtY5uzKw==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY NOERROR QR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397e50c85ede9cde33f363a9e66fd1b216d788f8dd438a57a423a386869c8f06
+cz. 86400 IN RRSIG DS 8 1 86400 20170214050000 20170201040000 61045 . KFIT2d+AO6xPTOKH4qWqTcthiqONvswz Ya+rnndNcDVOhvS9aKotG1CbyZXes489 GwfyNNsuO5N+WzDWO5Jzm37doLFFq3Yv AxWupLK8/KpM8lYc1VxlrkZ/XxODPOvJ ZEJ3WCLoyvc4PQgKmpjqxmGv+9GafFDO 7m7P0a2dJGxEH8GSDimcXS8dWf72O6DX zse532zD5mvLR8p2mXaoK7i5PbRRMzyB jHnQRVJVw3myhdNa1wB4P4Y9qUGQty9G xXHwJGsiZjADnzA+zWQYhZYQUp2suM/T Ri4JIKtdzitJHJ7psy0uwqC93L9PUnuq kWNz4YrXgWHP9TJtY5uzKw==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+
+; end of M.ROOT-SERVERS.NET.
+RANGE_END
+
+
+; domains: cz. ; ?.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ ADDRESS 194.0.13.1
+ ADDRESS 194.0.14.1
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:f::1
+ ADDRESS 2001:678:10::1
+ ADDRESS 2001:678:11::1
+ ADDRESS 2001:678:1::1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170208000000 20170125000000 54576 cz. NPdwGLJLADvyArolHZkv3rwBwla2txHr HKSNooiGAkLdddmkiC3+t2K7hHb54H1L fj7tVXgNwIAqx1rNK9uz/4ElQDy1k3Bz UezcPkO/FaRiDOm6Y81XLaSG6p+P5pub zEnP8/e36Vk07/cMF/aZFbqNlMQmOVQH pUezGNP8O8+80Q0OEyv9aKfVg/ahfOt8 s1vxMa6Dd67KsP8rw+VhLseOXMXST98x /QvirAeALoMXOi1AzZ6ai1aG8f0+6G9K 2lS/0ceMhdRBfoflBKz/CaEmIdEAsr7M GPH4PNMwiQ5eb32T0WIr01WQtKScNA5B vNG6PvBxxsgEHRTzOvfOCw==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170214174538 20170201143958 58211 cz. sPVcTvaLVDLnKCBtUbdZ1hkPcje55O2p HMHwnH3vfK+Z96nkbUoyNTnVhvMHCV2r LRoB9CHVxOD1O6gMVu36sO6/6xTi3g7J utvIu/+1RUXlAToVnsbqWpsKLqhAdHqL b3+V1bHYllyIhcWwrZwB465kQYwFrZEn C2TsBC1+6CM=
+cz. 18000 IN DNSKEY 256 3 10 AwEAAdWL2Br92Vx0dLEOOB8y02ss8LtK IyGlLJ2ymJ02WqR3AAEEZN0fNPKF77kd KsjlG8DlzmSIOR12aa9EhpXqyHOwWI0k HOMJVnn6ZKFIAl71JP/dYIcshYUxKZZM e+zEAUrVtzlLVDtM6cDOPDuBNa1ujYec 3eJl9IpqeUEG6gAH
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF +9ZWvr5Lewx+q+947o/GrRv4FGFfkZxf 9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux 2oeHRXUvgtLnl5HeRVLL+zgI5byx9HSN r4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K 02vLP4d1cCEzUQy30eyZto2/tG5ZwCU/ iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rIt emYMWr1f9BGAdtTWoPCPCYPjOZMPoIyA 4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG 7SUn8jo0IKQ9W7JJxES0aqFCX/0=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rhybar.cz. IN NS
+SECTION ANSWER
+rhybar.cz. 600 IN NS b.ns.nic.cz.
+rhybar.cz. 600 IN NS a.ns.nic.cz.
+rhybar.cz. 600 IN RRSIG NS 5 2 600 20081030080058 20080930080058 5172 rhybar.cz. XNIBK/CmsKZsw6lT2iAa5g+TLOVxPx39 N7vOxqW5lafaC56EuCZxUEmZT6ECvU/W zvQIqE1vqN4X6N/Z+5QTXKM3zcT+Uhay yiLNRNwdlkmG0xo/+bYACj85lhyB3UGJ +vpRWg2VVJOy9RLMyIka/S7nVYpgKUZF AZuxue6K17o=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rhybar.cz. IN RRSIG
+SECTION ANSWER
+rhybar.cz. 600 IN RRSIG NS 5 2 600 20081030080058 20080930080058 5172 rhybar.cz. XNIBK/CmsKZsw6lT2iAa5g+TLOVxPx39 N7vOxqW5lafaC56EuCZxUEmZT6ECvU/W zvQIqE1vqN4X6N/Z+5QTXKM3zcT+Uhay yiLNRNwdlkmG0xo/+bYACj85lhyB3UGJ +vpRWg2VVJOy9RLMyIka/S7nVYpgKUZF AZuxue6K17o=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rhybar.cz. IN DS
+SECTION ANSWER
+rhybar.cz. 18000 IN DS 59916 5 2 1A6516C32DCF2038E5382D77ADACADE3EDE99CDD77F019FCDF3741B4 9F8D563B
+rhybar.cz. 18000 IN RRSIG DS 10 2 18000 20170214061134 20170201163953 58211 cz. CGwqHhSb6b8JsjztqPeRDKBC/Sp4O0Igc4r53T+SheWdMwgNwvbXiFD6 krt0FGf1QU/JCkH5L5oYHFeaPXljftB2d0JbzLnA+iaI9Jy1aRmUqvTN /PiDVPYI/SRFvCfk2FLMK5LzMfjPjooiSNv9b1zZKJd8cykq8/jgijXy 5Xk=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rhybar.cz. IN DNSKEY
+SECTION ANSWER
+rhybar.cz. 600 IN RRSIG DNSKEY 5 2 600 20081030080058 20080930080058 5172 rhybar.cz. Xh5WqcWoiywSm+t4YhGqVVTb1Revz2Bv ETgb1uoY9DaREJhTUIq6zTA5xGS2WpAh YmIb8OV259NxT/jEtEdFIlTIz2nDzr1I 2ZrDoF/qwfJXvda8zy2wz3AHvou8uLeI BJLQKSpZx1YI3ee9YFFw25yfie9M4g1/ PXuMlTHpVVY=
+rhybar.cz. 600 IN RRSIG DNSKEY 5 2 600 20081030080058 20080930080058 44566 rhybar.cz. XkcudN72dM/HiqmKMZeOSjE8NavwtkXJ 2VGCQ5/RmJphEeSd/IZ4f5I67l+LZjvy +J+fplrvXTSnAx6+y5Z1xvo9HdGhCdUX uh6rIy1OScrUwOPOFJplTqccukafWngo iQZuj9mZS41ZcQA1Js+Q5EzhnmCD/7Tu IpmN6V+4eDXQcnf2uagpntWj153yjePd eb2r6NmfDDBQUu6GLIKfI6CtlmsiZWUA JvtBGLK4DxSn/5jxEA9UGHWqiRVxZKk6 ssZ71Fuxc5e2D+7j0XKZrw6kA0z3F8dg FuQQxWtVC0wyycE4H+PQbD7ZVkWeCiLg URHpDlizUB+xK1nGuHuE3Q==
+rhybar.cz. 600 IN DNSKEY 256 3 5 AwEAAb/riVUjNfP1to3wkJyul0MjwiPo jFgFmMiLj1KIKeVIYCIRNx01Q1we5M17 GQFInCXXyTyjCYJfwkL0Xe7ma6m2pHfE MkOiDl42rsgrmkShxPEvZMd5vpT+RyQW Qh26TJ42MRoCJSt6XNeFLXRyjfRcDt7Z xYD3bHNeyaDuUUGt
+rhybar.cz. 600 IN DNSKEY 256 3 5 AwEAAcrTMVXwOcFCGKtXwdt4XATP43qU 96IryyqiZ0oPtuHEEBCikuQDuJhRjNAV 4DYvR6fb/suAnd91EVNgHHTXUlAWwmJR rqIwZ6VuGaZqVG+NJh1Okif7CL8no2Z4 7j6I3HH3pyzrYH2oQVyr64O/8BV2jrk8 RteeEqa7V7gcrFfJ
+rhybar.cz. 600 IN DNSKEY 257 3 5 AwEAAeKle4K3bxJb4k9sMhdm6BmpRK2r ISAGh0egMSXgOlQnU+3TLQ0aH1th7ejZ nn6Zdkeo8MRXDxLkgp1rUSsRM1Q2SmLJ haat7L15qHmj+vCk5IuSIpAdaRsqOKxH lT6a/LWGwGvDIVxY6J9sXaJ4SInflZpa 5wZUCrhDKvpo0hAzNfoK/aFApzZGaAGA LYx6YpbG+SBW2K+s92eyoJCCrQQ+Nata 41l7K6RFAYjP+g3Kp95McNm3xlBve171 u9FUZNUuN2Rn25oEtHHlK9NcHNqWvFJ3 VmXcA6CkGrBPV6vOAwwUtPDSWSZbdolS 69092ZWYTlOJw6g0LVI2feMMrok=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+rhybar.cz. IN A
+SECTION AUTHORITY
+rhybar.cz. 600 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 2199091609 10800 3600 1209600 7200
+rhybar.cz. 600 IN RRSIG SOA 5 2 600 20081030080058 20080930080058 5172 rhybar.cz. XfQgQHW5sDA+uPzC3L1lE8Etc57iH9/6 AqC8T4Fz+J1PIbiMZKHZrAxgj10dC8xd 6NTjNe3wBPALibRRLo8pe7+XZVmw1Vz4 bCZ93MJ5qeaiZ2IbfsQoqzKtgAPP3HzE 5CYRpkktAXsSLo23Ii9/jS82RouISd0r Bc5WmHYwPRo=
+rhybar.cz. 7200 IN RRSIG NSEC 5 2 7200 20081030080058 20080930080058 5172 rhybar.cz. Xv8ZkTfbfXkJj4FHMBrbIt7afauxnhOS OB6dxwxbhYV1q3wV9vlkUutNoWbChBRu UQVn6f2nCLQ63Zif6MLFKMWHgf91uRby w5JX0IOXbrOyW6sAAUggavNsJcfNpD19 SVRMCRZmIQQ/j8ft5+t703babL+iOiD/ tSbRgZnFpkU=
+rhybar.cz. 7200 IN NSEC www.rhybar.cz. NS SOA RRSIG NSEC DNSKEY
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+www.rhybar.cz. IN A
+SECTION ANSWER
+www.rhybar.cz. 600 IN A 217.31.205.55
+www.rhybar.cz. 600 IN RRSIG A 5 3 600 20081030080058 20080930080058 5172 rhybar.cz. XVkut4l9mw2MhodZFIOD2L57AU2u+I6w GVlK1fr6w5locFC5NIe8ukw79jYdOCH3 WwFgSMscumIz1sGqRPrN/CrhXiU0ymFG Fju9x/k10lv6SGS6lslgnZluet04Cyib GQ2HBnwTx7qK3j+bNzxKLvjpn7DY9f+Y KB8F2FtwNOc=
+ENTRY_END
+
+; end of domain cz.: servers ?.ns.nic.cz.
+RANGE_END
+
+
+; first two steps need to be commented out if you want to reproduce repeated
+; => querying: '2001:dc3::35' score: 93 zone cut: '.' m12n: '.' type: 'DS' proto: 'udp'
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD CD DO
+SECTION QUESTION
+rhybar.cz. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA CD NOERROR
+SECTION QUESTION
+rhybar.cz. IN A
+SECTION AUTHORITY
+rhybar.cz. 600 IN SOA a.ns.nic.cz. hostmaster.nic.cz. 2199091609 10800 3600 1209600 7200
+rhybar.cz. 600 IN RRSIG SOA 5 2 600 20081030080058 20080930080058 5172 rhybar.cz. XfQgQHW5sDA+uPzC3L1lE8Etc57iH9/6AqC8T4Fz+J1PIbiMZKHZrAxg j10dC8xd6NTjNe3wBPALibRRLo8pe7+XZVmw1Vz4bCZ93MJ5qeaiZ2Ib fsQoqzKtgAPP3HzE5CYRpkktAXsSLo23Ii9/jS82RouISd0rBc5WmHYw PRo=
+rhybar.cz. 7200 IN NSEC www.rhybar.cz. NS SOA RRSIG NSEC DNSKEY
+rhybar.cz. 7200 IN RRSIG NSEC 5 2 7200 20081030080058 20080930080058 5172 rhybar.cz. Xv8ZkTfbfXkJj4FHMBrbIt7afauxnhOSOB6dxwxbhYV1q3wV9vlkUutN oWbChBRuUQVn6f2nCLQ63Zif6MLFKMWHgf91uRbyw5JX0IOXbrOyW6sA AUggavNsJcfNpD19SVRMCRZmIQQ/j8ft5+t703babL+iOiD/tSbRgZnF pkU=
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+rhybar.cz. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA SERVFAIL
+SECTION QUESTION
+rhybar.cz. IN A
+SECTION ANSWER
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/world_cz_turris_api.rpl b/tests/deckard/sets/resolver/world_cz_turris_api.rpl
new file mode 100644
index 0000000..2e48077
--- /dev/null
+++ b/tests/deckard/sets/resolver/world_cz_turris_api.rpl
@@ -0,0 +1,323 @@
+val-override-date: 20170213100700
+trust-anchor: ". 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5"
+stub-addr: 2001:dc3::35
+CONFIG_END
+
+SCENARIO_BEGIN api.turris.cz A/AAAA sanity check
+
+RANGE_BEGIN 0 1000
+ ADDRESS 192.33.4.12
+ ADDRESS 2001:500:2d::d
+ ADDRESS 2001:dc3::35
+ ADDRESS 192.36.148.17
+ ADDRESS 2001:500:12::d0d
+ ADDRESS 192.203.230.10
+ ADDRESS 199.7.83.42
+ ADDRESS 198.97.190.53
+ ADDRESS 2001:500:84::b
+ ADDRESS 2001:500:2::c
+ ADDRESS 2001:7fd::1
+ ADDRESS 193.0.14.129
+ ADDRESS 202.12.27.33
+ ADDRESS 192.58.128.30
+ ADDRESS 192.5.5.241
+ ADDRESS 2001:7fe::53
+ ADDRESS 198.41.0.4
+ ADDRESS 2001:500:2f::f
+ ADDRESS 199.7.91.13
+ ADDRESS 192.112.36.4
+ ADDRESS 2001:500:9f::42
+ ADDRESS 192.228.79.201
+ ADDRESS 2001:503:c27::2:30
+ ADDRESS 2001:500:1::53
+ ADDRESS 2001:503:ba3e::2:30
+ ADDRESS 2001:500:a8::e
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+. 518400 IN RRSIG NS 8 0 518400 20170226050000 20170213040000 61045 . X7mYRt9jWw1QDQPQNcFehtDLtWX8MnxE MPF8bhuH8pFhd2cEBNu3X2j9eYt/z76B PAzoblrdW5vvfD4ZEnInjp486i4HPpFQ ZtrfZ1Lbu/wwOZ0cjxE56xZuBRQZ0xUk /pzTYGDwpAEWgOOYlSCVq2v6JVIWgpgW WD3qn43QXEhpuTSi2Xp7K4TKp5dlh7wy dbuQ1BjI0mDIqZ7dRGKX2va3sVMNypsF HQsPTnooTCIWKu+zp0/NXo2XnBgdohJF xCrwcAuuPY3f6FAOAhmTmThNFvmE/2D8 7T1sLtJhGfMt7BCTQ01hKu76MOQL3Xfz E2LmzaTHj9w9oHUEoIXJEg==
+SECTION ADDITIONAL
+a.root-servers.net. 518400 IN A 198.41.0.4
+a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 518400 IN A 192.228.79.201
+b.root-servers.net. 518400 IN AAAA 2001:500:84::b
+c.root-servers.net. 518400 IN A 192.33.4.12
+c.root-servers.net. 518400 IN AAAA 2001:500:2::c
+d.root-servers.net. 518400 IN A 199.7.91.13
+d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
+e.root-servers.net. 518400 IN A 192.203.230.10
+e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
+f.root-servers.net. 518400 IN A 192.5.5.241
+f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
+g.root-servers.net. 518400 IN A 192.112.36.4
+g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 518400 IN A 198.97.190.53
+h.root-servers.net. 518400 IN AAAA 2001:500:1::53
+i.root-servers.net. 518400 IN A 192.36.148.17
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+j.root-servers.net. 518400 IN A 192.58.128.30
+j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 518400 IN A 193.0.14.129
+k.root-servers.net. 518400 IN AAAA 2001:7fd::1
+l.root-servers.net. 518400 IN A 199.7.83.42
+l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
+m.root-servers.net. 518400 IN A 202.12.27.33
+m.root-servers.net. 518400 IN AAAA 2001:dc3::35
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 172800 IN RRSIG DNSKEY 8 0 172800 20170303000000 20170210000000 19036 . KHz7GVvg5DxUv70bUhSjRy1JO5soL+h6 M08g8bSKecd+4NmZI87Sn20puZNRuiAS bnG63i89Z2S45NBAR8KtqB6N5CrRhLhf xZcRo5k3Ts6zsC1EJ58upPKzFtu/sJBs PDjcRJJKbXlB4hLukQwVhn/MbsXxZdZG I57WoLFxbbR49NlFJrlrbTi2gieRR1SC LfT9aiBGsJA3T4jXap9FIsikNf1DJA8H cnQTW7hFi8l/O2ni2hbjsIE4S3GRTMyp qDR/s7piy/qukfWwSknk6YZTbzld6Zgb ZK+oOhRgj/W6XW78bJl0onov0F1wD0NQ sec+sk2P+JNMc4xgvQmn9g==
+. 172800 IN DNSKEY 256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTR gy7+dzvfArIhi2tKoZ/WR1Dfw883SOU6 Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfEl BwKsz4sVVWmfyr/x+igD/UjrcJ5zEBUr UmVtHyjar7ccaVc1/3ntkhZjI1hcungA lOhPhHlkMeX+5Azx6GdX//An5OgrdyH3 o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49z cdis3EaY199WFW60DCS7ydu++T5Xa+Gy Ow1quagwf/JUC/mEpeBQYWrnpkBbpDB3 sy4+P2i8iCvavehbRyVm9U0MlIc=
+. 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29 euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v 58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8 g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37 NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/E fucp2gaDX6RS6CXpoY68LsvPVjR0ZSwz z1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgu l0sGIcGOYl7OyQdXfZ57relSQageu+ip AdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1 dfwhYB4N7knNnulqQxA+Uk1ihz0=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+cz. IN DS
+SECTION ANSWER
+cz. 86400 IN DS 54576 10 2 397e50c85ede9cde33f363a9e66fd1b216d788f8dd438a57a423a386869c8f06
+cz. 86400 IN RRSIG DS 8 1 86400 20170226050000 20170213040000 61045 . GozD7iz2HauQt8xFZzS3ednnBCXLdwAS edCXa5mIvbDARxYzEaC6/+XcgBXu26h0 pMyxGcikiifIurQkrzEBtGa/30yiIegy FDXronn44ni5s1lhRtMmFwBYptGDZo15 /g2uDynqfifMGhMbU/IlQJW6QWPRdxS7 bKm4wj/RtE38+CcsZ6fHudvKDJV9xBip 4hqOuu3IdAcrr64OPIJxuwOhXz+NLGEN bDo7tWpKp/vHx5PJTl3SRilxHVTx4f94 FLr2VijkqsuYmG+pYMj6hwPy56/5whaW tP2jLDot0cihVy5229YIf1S4n7zcR+XP 8wOVGu+WQa5wbX4ONucqmg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY NOERROR QR DO
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397e50c85ede9cde33f363a9e66fd1b216d788f8dd438a57a423a386869c8f06
+cz. 86400 IN RRSIG DS 8 1 86400 20170226050000 20170213040000 61045 . GozD7iz2HauQt8xFZzS3ednnBCXLdwAS edCXa5mIvbDARxYzEaC6/+XcgBXu26h0 pMyxGcikiifIurQkrzEBtGa/30yiIegy FDXronn44ni5s1lhRtMmFwBYptGDZo15 /g2uDynqfifMGhMbU/IlQJW6QWPRdxS7 bKm4wj/RtE38+CcsZ6fHudvKDJV9xBip 4hqOuu3IdAcrr64OPIJxuwOhXz+NLGEN bDo7tWpKp/vHx5PJTl3SRilxHVTx4f94 FLr2VijkqsuYmG+pYMj6hwPy56/5whaW tP2jLDot0cihVy5229YIf1S4n7zcR+XP 8wOVGu+WQa5wbX4ONucqmg==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+RANGE_END
+
+RANGE_BEGIN 0 1000
+ ADDRESS 194.0.14.1
+ ADDRESS 2001:678:11::1
+ ADDRESS 2001:678:1::1
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:f::1
+ ADDRESS 2001:678:10::1
+ ADDRESS 194.0.13.1
+ ADDRESS 194.0.12.1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+cz. IN NS
+SECTION ANSWER
+cz. 18000 IN NS a.ns.nic.cz.
+cz. 18000 IN NS b.ns.nic.cz.
+cz. 18000 IN NS c.ns.nic.cz.
+cz. 18000 IN NS d.ns.nic.cz.
+cz. 18000 IN RRSIG NS 10 1 18000 20170220104540 20170206203958 58211 cz. NNzA115UZfT3uOGUEXJkDqoqKGXwIa3V /PbeHBh39FLO6KRDD9Isy9R6+Jw4Y1v9 9ca5l9eCgXqjAJ9soEqGLBqx+SB8LBNx XDjOS46Ewdc48+KRCqQku5NxsD+xs/hD Kj0/9ck1qdBPJd+547KBxZ+wIPSBvZWL DjhappBGlgw=
+SECTION ADDITIONAL
+a.ns.nic.cz. 18000 IN A 194.0.12.1
+a.ns.nic.cz. 18000 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 18000 IN A 194.0.13.1
+b.ns.nic.cz. 18000 IN AAAA 2001:678:10::1
+d.ns.nic.cz. 18000 IN A 193.29.206.1
+d.ns.nic.cz. 18000 IN AAAA 2001:678:1::1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170220000000 20170206000000 54576 cz. JU9BdCRGVaWiL+cwmzhfurOd2tMHX3fi DweYGPPnHCUx10BtVszJ5oM/1aphMIPa 72Z1Vk681PpTsGAGgRV1uRhsJ+Agawkd P/KjjSzAot+/oWcBl+wdQfLT5E50SbgC kvIHbexSd60BwMyzS8pFuRjYkC+MoGDg g+vLq8k64AWqB5zWeaC1y4C0kolAwBSo znR1xj1bA+CbdVCkucajBndgct5AHJM4 eyN/o9Qhg3RNUFl9WJ6f8AaewZfB/9fN w8+vaxAixjy99LI0mijONZf9E3FFcDq5 qRuLUcIRB+1HzJ2ZTnj6BP8KmSQyj/Ro y/r9jP0L1v59aE5M6LfZAg==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170226022139 20170213084011 58211 cz. VSe3d54BxyxLtg/w4NWhbx5hYu4yC5WC sRi3oXE/042zoBU6ijJyl/ei1zk4x/7o S2PKunCE2SUscFG6othKoikDERM9YN3T gpv+GC4xe4llnB5dCqHSwwFApfZQnrzV AKiVFLGMbeME+R07r2vh4L9zEzFx2poV WMAii6LsB5E=
+cz. 18000 IN DNSKEY 256 3 10 AwEAAdWL2Br92Vx0dLEOOB8y02ss8LtK IyGlLJ2ymJ02WqR3AAEEZN0fNPKF77kd KsjlG8DlzmSIOR12aa9EhpXqyHOwWI0k HOMJVnn6ZKFIAl71JP/dYIcshYUxKZZM e+zEAUrVtzlLVDtM6cDOPDuBNa1ujYec 3eJl9IpqeUEG6gAH
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF +9ZWvr5Lewx+q+947o/GrRv4FGFfkZxf 9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux 2oeHRXUvgtLnl5HeRVLL+zgI5byx9HSN r4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K 02vLP4d1cCEzUQy30eyZto2/tG5ZwCU/ iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rIt emYMWr1f9BGAdtTWoPCPCYPjOZMPoIyA 4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG 7SUn8jo0IKQ9W7JJxES0aqFCX/0=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+turris.cz. IN NS
+SECTION ANSWER
+turris.cz. 1800 IN NS a.ns.nic.cz.
+turris.cz. 1800 IN NS b.ns.nic.cz.
+turris.cz. 1800 IN NS d.ns.nic.cz.
+turris.cz. 1800 IN RRSIG NS 13 2 1800 20170221145034 20170207145034 49237 turris.cz. ls7jS7uS5Oiom5djEnUrgeY0B+RdgsAG nzq5NqmnwdQBFmBm7RZNPoboBNC3vA+L pkTgNkLMURgoiZzaRnGsSA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+turris.cz. IN DS
+SECTION ANSWER
+turris.cz. 18000 IN DS 54959 13 2 afda82e687ffc58d759824274f3c3eb007eea1e46f6108886ec0fa979bfd78c3
+turris.cz. 18000 IN RRSIG DS 10 2 18000 20170225151104 20170213084011 58211 cz. mPn0h45GRfOpPRbFC7R4o1mpenSgLIZ/ pbHqqH8Fz9dyVnAow7ug9XGjhzPgiAj4 X0gG+JTb3TRxsI+FFKUeBJL+/3N392Xf zPEMbtnLupdRQRhfcCc3iGbrUli6b99z E4BAfI+g/jyR/IgRqpJyxsZjuVTcdCX8 nXCYopt/WZY=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+turris.cz. IN DNSKEY
+SECTION ANSWER
+turris.cz. 1800 IN RRSIG DNSKEY 13 2 1800 20170221145034 20170207145034 54959 turris.cz. FSqPyjAbBJY6xppLOSWj3hLUaiOGnbp4 s8utvSASyFeY1lBF+SmhOTWktIa8kMyU lHUJZUr25yDNcosb5ri6oQ==
+turris.cz. 1800 IN DNSKEY 256 3 13 3TQfQFOmvkZdZXMvK7l2nFo7UkQ48KU9 CNmx3HQOvmMS+tKyQZhTWfCFD0Yp/mSv s622xQS8qEdNbaBazXDnXg==
+turris.cz. 1800 IN DNSKEY 257 3 13 KDAJfPGWgvNAEHUMzmmSa+c3gHfoGIsX nhIO1iAYGTAyVBo+CLTyIk3wxDtt4Yn3 eCrCiYsEAHBJgQvA3pwJ8w==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+api.turris.cz. IN A
+SECTION ANSWER
+api.turris.cz. 1800 IN A 217.31.192.101
+api.turris.cz. 1800 IN RRSIG A 13 3 1800 20170221145034 20170207145034 49237 turris.cz. K78pE5gKDt9p+g9rIKXB52Ez2PuFkgum ezA9+W9JNwslrCaCQ3QdfAXd0GLwjgs7 Z9BavCCAeRPpvxDLVCDjqg==
+SECTION AUTHORITY
+turris.cz. 1800 IN NS d.ns.nic.cz.
+turris.cz. 1800 IN NS b.ns.nic.cz.
+turris.cz. 1800 IN NS a.ns.nic.cz.
+turris.cz. 1800 IN RRSIG NS 13 2 1800 20170221145034 20170207145034 49237 turris.cz. ls7jS7uS5Oiom5djEnUrgeY0B+RdgsAG nzq5NqmnwdQBFmBm7RZNPoboBNC3vA+L pkTgNkLMURgoiZzaRnGsSA==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY NOERROR QR AA DO
+SECTION QUESTION
+api.turris.cz. IN AAAA
+SECTION ANSWER
+api.turris.cz. 1800 IN AAAA 2001:1488:ac15:ff80::101
+api.turris.cz. 1800 IN RRSIG AAAA 13 3 1800 20170221145034 20170207145034 49237 turris.cz. bg+Pcv1wqjAQ63Abe2xW/+BxAEJZlHPW 01ez/I4zcnSwQpltaJNZ6oR4Jbnks43c 9TRQs5qBh2ZjaTBiRmcQ8A==
+SECTION AUTHORITY
+turris.cz. 1800 IN NS a.ns.nic.cz.
+turris.cz. 1800 IN NS b.ns.nic.cz.
+turris.cz. 1800 IN NS d.ns.nic.cz.
+turris.cz. 1800 IN RRSIG NS 13 2 1800 20170221145034 20170207145034 49237 turris.cz. ls7jS7uS5Oiom5djEnUrgeY0B+RdgsAG nzq5NqmnwdQBFmBm7RZNPoboBNC3vA+L pkTgNkLMURgoiZzaRnGsSA==
+ENTRY_END
+
+RANGE_END
+
+
+; IPv6
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+api.turris.cz. IN AAAA
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY RD RA QR
+SECTION QUESTION
+api.turris.cz. IN AAAA
+SECTION ANSWER
+api.turris.cz. 1800 IN AAAA 2001:1488:ac15:ff80::101
+ENTRY_END
+
+; do we have AD bit & RRSIGs in cache?
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+api.turris.cz. IN AAAA
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY RD RA QR AD
+SECTION QUESTION
+api.turris.cz. IN AAAA
+SECTION ANSWER
+api.turris.cz. 1800 IN AAAA 2001:1488:ac15:ff80::101
+api.turris.cz. 1800 IN RRSIG AAAA 13 3 1800 20170221145034 20170207145034 49237 turris.cz. bg+Pcv1wqjAQ63Abe2xW/+BxAEJZlHPW 01ez/I4zcnSwQpltaJNZ6oR4Jbnks43c 9TRQs5qBh2ZjaTBiRmcQ8A==
+ENTRY_END
+
+; IPv4
+STEP 110 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+api.turris.cz. IN A
+ENTRY_END
+
+STEP 111 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY RD RA QR
+SECTION QUESTION
+api.turris.cz. IN A
+SECTION ANSWER
+api.turris.cz. 1800 IN A 217.31.192.101
+ENTRY_END
+
+; do we have AD bit & RRSIGs in cache?
+STEP 120 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+api.turris.cz. IN A
+ENTRY_END
+
+STEP 121 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY RD RA QR AD
+SECTION QUESTION
+api.turris.cz. IN A
+SECTION ANSWER
+api.turris.cz. 1800 IN A 217.31.192.101
+api.turris.cz. 1800 IN RRSIG A 13 3 1800 20170221145034 20170207145034 49237 turris.cz. K78pE5gKDt9p+g9rIKXB52Ez2PuFkgum ezA9+W9JNwslrCaCQ3QdfAXd0GLwjgs7 Z9BavCCAeRPpvxDLVCDjqg==
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/world_cz_vutbr_www.rpl b/tests/deckard/sets/resolver/world_cz_vutbr_www.rpl
new file mode 100644
index 0000000..6979a20
--- /dev/null
+++ b/tests/deckard/sets/resolver/world_cz_vutbr_www.rpl
@@ -0,0 +1,296 @@
+; test with real world Internet data
+; attempt to resolve www.vutbr.cz. A leads to CNAME piranha.ro.vutbr.cz.
+; sub-trees vutbr.cz and ro.vutbr.cz. are in separate zones
+; hosted on the same servers with different DNSKEYs
+
+val-override-date: 20170124180319
+trust-anchor: ". 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5"
+stub-addr: 2001:dc3::35
+CONFIG_END
+
+SCENARIO_BEGIN www.vutbr.cz. CNAME kresd issue #130
+
+; DNS root ; M.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 2001:dc3::35
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 16567 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 16567 IN DNSKEY 256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTRgy7+dzvfArIhi2tKoZ/WR1Df w883SOU6Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfElBwKsz4sVVWmfyr/x +igD/UjrcJ5zEBUrUmVtHyjar7ccaVc1/3ntkhZjI1hcungAlOhPhHlk MeX+5Azx6GdX//An5OgrdyH3o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49zcdis3EaY199WFW60DCS7ydu+ +T5Xa+GyOw1quagwf/JUC/mEpeBQYWrnpkBbpDB3sy4+P2i8iCvavehb RyVm9U0MlIc=
+. 16567 IN RRSIG DNSKEY 8 0 172800 20170201000000 20170111000000 19036 . Sh+EpofvZgk3J9szMD2B94FxFgyIUKz3hkbCjgWSTqPQyhqNgqVU8QlS EtOo8YLmS4AX98eit5Gmmb2ObpkGoXBmAzu5w/Qt5WsGsWzLQhYrsy9s lDmFQ2JKUoCyfdwqhlJ8VxjzdFdMUiVl+/GPnv4yjxjM8Ke3VAtBkn6n BO7JkcxxOfcgZdZ4MuvSr40K/SenZE+JlLLL1LF4TMCGqaZTTdOx6kFF KSSgy2AS884htWcK0tnwRc630g6nAI2wdvjlRLBeisbfXanI4v8iiPyT FnMmnV7wJGWJ4gtRJ0UH3u5RWXUPZ+s1tKytk3slXbLyQ9xkEDveuD+h b659gQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR DO NOERROR
+SECTION QUESTION
+cz. IN NS
+SECTION AUTHORITY
+cz. 172800 IN NS d.ns.nic.cz.
+cz. 172800 IN NS a.ns.nic.cz.
+cz. 172800 IN NS c.ns.nic.cz.
+cz. 172800 IN NS b.ns.nic.cz.
+cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06
+cz. 86400 IN RRSIG DS 8 1 86400 20170202170000 20170120160000 61045 . ig2BBmA1kOuTqhVogqLciH40Ina7BCrG/fcaNARSWoaFHGOcC/7KsBZO uMttn/hKDJkH3RPsed2Oswl9bXZ+zrhjeXluUqC0zmsUJDBkS+AkiFJL HCpMSIZaXu/w1ZMADGfyQXl7XWCRbl+eyXi2eTG0SdLtRHNhm3CGJP3C xjzVuOTr9oPEyL0U81jhhlJPCFe8xDD441wLLzpEuVX8VP9N2S1QnIjO BhCEE9OTkPgpS7fMPEl0Yq2gfpRl+DCw1Dd0VB3Hh5M3hmrXuFqNYZQK b0JqDFGYhzvcpUs3EiB9IG7rJt51n6pxCTek1M2w+s6mLYzawVfq+b1Q uQD98A==
+SECTION ADDITIONAL
+a.ns.nic.cz. 172800 IN A 194.0.12.1
+b.ns.nic.cz. 172800 IN A 194.0.13.1
+c.ns.nic.cz. 172800 IN A 194.0.14.1
+d.ns.nic.cz. 172800 IN A 193.29.206.1
+a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1
+b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1
+c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1
+d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1
+ENTRY_END
+; end of M.ROOT-SERVERS.NET.
+RANGE_END
+
+
+; domains: cz. ; ?.ns.nic.cz.
+RANGE_BEGIN 0 100
+ ADDRESS 194.0.12.1
+ ADDRESS 194.0.13.1
+ ADDRESS 194.0.14.1
+ ADDRESS 193.29.206.1
+ ADDRESS 2001:678:f::1
+ ADDRESS 2001:678:10::1
+ ADDRESS 2001:678:11::1
+ ADDRESS 2001:678:1::1
+
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+cz. IN DNSKEY
+SECTION ANSWER
+cz. 18000 IN DNSKEY 256 3 10 AwEAAc9e2YFnG56xtTXu42GLGAkwsrFOBBwOZphNat7HQdBmfi0CbmDf oywCUsaSkObNmm+Zu9MYLNJDHsD+vxsZbtHClpYaSEhMEmHrbnj0BMPV A6hwY6YDGFhKudJ62RmB/rmhQ3iwmICsEdRn2w5fu1rHZv8UJOUMkeWd 6GA48mW3
+cz. 18000 IN DNSKEY 256 3 10 AwEAAdWL2Br92Vx0dLEOOB8y02ss8LtKIyGlLJ2ymJ02WqR3AAEEZN0f NPKF77kdKsjlG8DlzmSIOR12aa9EhpXqyHOwWI0kHOMJVnn6ZKFIAl71 JP/dYIcshYUxKZZMe+zEAUrVtzlLVDtM6cDOPDuBNa1ujYec3eJl9Ipq eUEG6gAH
+cz. 18000 IN DNSKEY 257 3 10 AwEAAay0hi4HN2r/BqMQTpIPIVDyjmyF+9ZWvr5Lewx+q+947o/GrRv4 FGFfkZxf9CFfYVUf0jG5Yq4i06pGVNwJl81HS9Ux2oeHRXUvgtLnl5He RVLL+zgI5byx9HSNr4bPO8ZEn5OjoayhkNyGSFr4VWrzQk/K02vLP4d1 cCEzUQy30eyZto2/tG5ZwCU/iRkS1PJOcOW98hiFIfFDZv1XjbEpqEYh T2PATs6rt+BKwSHKGISmg1PNdg+y0rItemYMWr1f9BGAdtTWoPCPCYPj OZMPoIyA4tMscD+ww54Jf/QNoHccY4hO1yHiuAXG7SUn8jo0IKQ9W7JJ xES0aqFCX/0=
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170127000000 20170120000000 54576 cz. Fdl//hMdLoZq8//gLt/+3a7LfWqB5/psW9YR3AWNPQGfvrEAcKRBcah+ ikbSCmpAZ6j834xZP1zPd5xMoN33PGXf23iqcgjHvUn50Uq48KRBVYwU H885xNJBl/Po0N8STeG0WNZz2mbUbBbPCGN7CI5yl08usvqOvf2fV8+D 0m//+Fa1cWaqMXpHc6OnhWZ+BN4VdcxxwNbGhH2TZxyiGEMMscEGoIxn yL1pVY8T93LOMwQmuFJ71f8Scij3vYouW/mNuEma/UUZM1bEn8vR1UrP /6JTGPGTG+snHvCxiVtAxCNnqoIJDD+xuonpZLeKN5XU7UDMZPDTtSgX vtzjww==
+cz. 18000 IN RRSIG DNSKEY 10 1 18000 20170205002523 20170123080953 58211 cz. MZ6KTtQisTde4iOBH6oasl7bVrRM5ly7Yxdv2l+2gk1YYk4zX6L3m6oB P26SKi+fj8pM77775bRK7uCI9FlyqXa3MJclLU/GmnRANm6T4sSdz0zs F3FK4UfUmHnzdnWXWTnueDfIZr44yF1y1+4I3E96/9/nEYGO+xsifvIj iks=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR DO NOERROR
+SECTION QUESTION
+vutbr.cz. IN NS
+SECTION AUTHORITY
+vutbr.cz. 18000 IN NS pipit.cis.vutbr.cz.
+vutbr.cz. 18000 IN NS rhino.cis.vutbr.cz.
+vutbr.cz. 18000 IN DS 5512 5 2 78510F9433A4D536A5B9099193E9D58EE5B5CF71F14D983B4DA2EB16 29CFA1E9
+vutbr.cz. 18000 IN RRSIG DS 10 2 18000 20170204213601 20170123080953 58211 cz. lXNBswz/r/1NY7VQq+BlisC+1yqFmUBIaF30L8XDAbiHLcj/AIj0dEy6 PlBlkEeDAi4W9DvR0jo9LjHvFFJLs54cuEEd3pHTdlw8x0dLd1X7Zkh7 cezfAt2EEqdux/ce/sc86lUKOpLnDtry2piWwVf2EqFg9NlW4cHTm78U gsY=
+SECTION ADDITIONAL
+pipit.cis.vutbr.cz. 18000 IN A 77.93.219.110
+rhino.cis.vutbr.cz. 18000 IN A 147.229.3.10
+pipit.cis.vutbr.cz. 18000 IN AAAA 2a01:430:120::4d5d:db6e
+rhino.cis.vutbr.cz. 18000 IN AAAA 2001:67c:1220:e000::93e5:30a
+ENTRY_END
+
+; end of domain cz.: servers ?.ns.nic.cz.
+RANGE_END
+
+
+; domains: vutbr.cz. + ro.vutbr.cz.
+; servers: pipit.cis.vutbr.cz. + rhino.cis.vutbr.cz. + shark.ro.vutbr.cz.
+; shark.ro.vutbr.cz. in fact serves both domains but is listed only in ro.vutbr.cz NS
+RANGE_BEGIN 0 100
+ ADDRESS 77.93.219.110
+ ADDRESS 147.229.3.10
+ ADDRESS 147.229.2.59
+ ADDRESS 2a01:430:120::4d5d:db6e
+ ADDRESS 2001:67c:1220:e000::93e5:30a
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+vutbr.cz. IN NS
+SECTION ANSWER
+vutbr.cz. 28800 IN NS rhino.cis.vutbr.cz.
+vutbr.cz. 28800 IN NS pipit.cis.vutbr.cz.
+vutbr.cz. 28800 IN RRSIG NS 5 2 28800 20170216060902 20170117060902 39756 vutbr.cz. y6Jj5vfvdlLeecB/++/qyhjCzfnFJyY1sX1Ja+wV0ulq3laeCVV7ICXh PKG+CjHUu/nDOrzT9QJP4qxYDCANneI0yxI82XKhhoTN5O/TxyWH/DyT k8JarRoMooHv2RwKd8jtLIxvj1SaJ+AvlP0pOPraaVgbHtn1SJ4ubxQD cFc=
+SECTION ADDITIONAL
+pipit.cis.vutbr.cz. 86400 IN A 77.93.219.110
+pipit.cis.vutbr.cz. 86400 IN AAAA 2a01:430:120::4d5d:db6e
+rhino.cis.vutbr.cz. 86400 IN A 147.229.3.10
+rhino.cis.vutbr.cz. 86400 IN AAAA 2001:67c:1220:e000::93e5:30a
+pipit.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. Cz9etHnEOQTzu+6rYJEqx/SQ1tQgPOCyf8HSj4KOsx89jtgiHNC6pep6 ZE0SphMGAs3jC/uGIhlaFNZ3i38OQIMuqwacbz+XZyW5bByvV3QZrhqh dFxMDfmPuNiCAT3crFpUkvVW1OE3YfGHzZGXX7JP5wb1b8A3X6Qih7fV +nQ=
+pipit.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. piafjh6my2fooZRrzwCu9RQ95gYaMQkhIkDaGX/fT6wXzSdmgFZkS1Nl EMIKdDCQaPrLGMG3p32ptMkAm4esPekeyNtLSMBtXwZyUkgEGn6h1QM2 Yr3TOo8cixfk5nmRRdlYadf5krLb8yI9exiqeymgEQLa1YNRz/bWArlX bn8=
+rhino.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. X/tDf8e3JEV0LxiItfpQnBzeaRIq693VG8d30iCH4/1I0uqyCfxboWmm /CBpn9A8MCJu9NEEv+4+povNlfUfqi2yjsqJEVj8ztHxD4g9cc284Cv6 ySjxrSZ9axVqoaopEXujiTwwWJUFcgF6pxqyXVksW7sgKJrboM4VSlQD +Sw=
+rhino.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. T3Yf5PAkSeJtoOH90ea9zZBG9FC3iFhiCSerDn6d9up8GRfzxDsavYJC zQu+3vnOySySn+3TMzQSSFcWdJC2iO7ulaDGr177Gof9QJbKSVSMW7jt YDE2f4/R4Go3NZVwjk/HfpCInoR6pHNA1s/9hMnWtiVopmBdfzyd3/sW YOU=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+vutbr.cz. IN DNSKEY
+SECTION ANSWER
+vutbr.cz. 28800 IN DNSKEY 256 3 5 AwEAAfwRRuGjpt9v4fzuIWFA9MtGfxDrIKhoFA7DNq6B+iCOoQb6t0HZ I9lGDUSR5DRswDGP569NJ/uVD4tJxGnaK2SBQVxIu+bEP1Ouzk+O43iO 8odw50NBWetljjNDP32B3zHpgJRpxyEqzDQaQ6B4Zer6sDZm9wo5SVJe r9LjJV9p
+vutbr.cz. 28800 IN DNSKEY 257 3 5 AwEAAfhR+s/4SLZZNA+kD2u1UgYBUu+X3Avi60QCaE1o2STterM405s8 mWMWJOlZGtjjIky3TEMxQ0+ZtMbEeJu2wNDLdV/XglX+pJAjyy728WJH 4u2/gJR8ZWsEIc0Jwb4FjwmBiF2Koz0SGVvrzEZ9T1H7dHq2X6f8KzYB otJyrAIWr9tZi/9tHrngZJ5wXELmMPWCfEFapdQMoKWoNvzrMYFli17R Mz7gJzCmNxMRV8/WkjsNPgYsTKpsAT8qEsXiTN9987AIKPHvc5j+/njq +fTXdOqGVpIgSiso+qJMddEMBcu/MBBYVFOwRQe1ez2tMwIX7y5mwDvK 0wsmyRvHugfFuxSnfiJvQr05kSnj0wxD9s9LNhrF4PocrcYqnBN/lBx9 D6633jJ3zT3T5Foe/Vj9A/X7F2oN6FOkdwO+YSEUot980pJQut6DR22U P4bLakyDMiTdOQ31c/dRIoTsccxw+838pXFyEPgiqOHRSeN/w9km6BID cl+32Xq97kXSMQH6AxOUsx9/Mxdj7ISwbS4utaAWoP460+TMcnfJfWfB NEWhuFvnfB9l63ZjZToB2PUVhrTxRwKUlfMLegSJKoZfiae82kK1pN4x FYyquKSykm/oXsM2w4OQvpqGcTwAXzZ5s95J45f7PsCap0bscGKumxsH cDswWpUz/UVosIrr
+vutbr.cz. 28800 IN RRSIG DNSKEY 5 2 28800 20170216060902 20170117060902 5512 vutbr.cz. QHw07MAjA4NFi3On8zaMw/q4IuADXVp4TODfK5PHb8OUIX2Yy+bKLrSX /Cc9ClWUpE69x80F9dFEeRZGJiYOwstNQGQVeq/EKNytm1XmhS8cp3SW CYHBpLjZGPrlhvqPhWd0S4vqPNiD8hDzgFAgaCNfwXDDKXhF2/qtpQ0V pDnytMP6pNPLPMpF2hzaLfCMzABShxcEOAr7+KTbxbffOik4YneG8seu XDtBvCVjP8lJcSU+q+UbotLnjyOgn8vV8pliTNqcvRsJTdtvTlJKHu8B iLkFeCE1DpRhyrVT5zC9NSOcoIv7tau2NE2oUPgtRzK76el6i9L9LcSs G+59j02AINefpAtc6W2khmTnGthibeOy/F9FuFkXUy6AmqIdNszMAj++ 8Mzv3A1OHfsfpIS3tLmC4drhdSHr2ab0Pe0lYQq2a9FSeQzSk6s9gwwZ gMVPVQHbouyvn6BCHaRVDjTV8GPKlk3C8GNaHcHb1hAGSPpw3kqL41dd K92Un4tLIoOYomxUYoyMtyxxwddXyR7ivToUHF7e/yv8MACMEo72N9sf y4zLEqkL1mJ1pCp3csI1bKaaA/c7sqb7PX93iqvoY06k55Pd7kT+lAF1 7QvXGg4U1kDrwytQPyocN8wmsX3//CpWUD07v8fCUqKOcIrVNGnoPmPC PpNe3AtpJoE=
+vutbr.cz. 28800 IN RRSIG DNSKEY 5 2 28800 20170216060902 20170117060902 39756 vutbr.cz. CNDE7Ht7xm8Jo9tuOlJ8N9+vI/Htfpk53MI0HG7B1EZJws/yEV7YFOOL SIAt3rzu1OHjaxr4CG/baqGRPtsaWSBHuLSdSduivxXw8xiQcMKzP6Cz 7xhJkQZxzDJ4oO5L2K2zWHcAJ8lfP1/3NHHoH1p2RATLN5sI7ofQE//W +ck=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+www.vutbr.cz. IN A
+SECTION ANSWER
+www.vutbr.cz. 300 IN CNAME piranha.ro.vutbr.cz.
+www.vutbr.cz. 300 IN RRSIG CNAME 5 3 300 20170216060902 20170117060902 39756 vutbr.cz. 9B3UC5SOEw1+yKlYlOTINEuNq0Kdglywc5IYJwzeSzQ3ykptzZo3ABSy bYhTqImVkhm/4NFM9/4HWMHPDzTmrWS0mCI/ljCd/oe/PxW/uESvo4P5 EQzlcuH6xBzc1KdEFAJOSmRzFjj3vyK1QN3k/c+1y2oMFOYOR2oOzCw+ MIE=
+piranha.ro.vutbr.cz. 3600 IN A 147.229.2.90
+piranha.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. Jz8bcAADQjCKTCcF70IK1aHGQlM4ukyN0myABlxoPaqid1mHX5jwR91b kdQmUAh2xDitlgRLbFjbUUgmjSPzQ5Qt7GAFUsVmqxvjbOLZjqHER1dh zmiWO0fDvvP647Osv3RiAP822rNUJcJrUBZU9LmeP05gwIHcpJrhdVBT b7I=
+SECTION AUTHORITY
+ro.vutbr.cz. 86400 IN NS shark.ro.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS rhino.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS pipit.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN RRSIG NS 5 3 86400 20170222120032 20170123120032 12150 ro.vutbr.cz. HAQ8A+QNsS1WIXdW/fbT3jP+IxObBBvgUmvzsmJBXo8HMtnMAcuCQGmB 2JBQsQethQXsdyLnMK8to/5A9VRkqkAa7edxUoy7SdDi/mzGeLAVhF+5 kXSPD6t1vjiNdnIYAMpiOQbodCGxAnq6jnNyrjEzffdq3qw+5IkFNdG4 7Pw=
+SECTION ADDITIONAL
+rhino.cis.vutbr.cz. 83217 IN A 147.229.3.10
+rhino.cis.vutbr.cz. 83217 IN AAAA 2001:67c:1220:e000::93e5:30a
+shark.ro.vutbr.cz. 3600 IN A 147.229.2.59
+pipit.cis.vutbr.cz. 14794 IN A 77.93.219.110
+pipit.cis.vutbr.cz. 14794 IN AAAA 2a01:430:120::4d5d:db6e
+rhino.cis.vutbr.cz. 83217 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. X/tDf8e3JEV0LxiItfpQnBzeaRIq693VG8d30iCH4/1I0uqyCfxboWmm /CBpn9A8MCJu9NEEv+4+povNlfUfqi2yjsqJEVj8ztHxD4g9cc284Cv6 ySjxrSZ9axVqoaopEXujiTwwWJUFcgF6pxqyXVksW7sgKJrboM4VSlQD +Sw=
+rhino.cis.vutbr.cz. 83217 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. T3Yf5PAkSeJtoOH90ea9zZBG9FC3iFhiCSerDn6d9up8GRfzxDsavYJC zQu+3vnOySySn+3TMzQSSFcWdJC2iO7ulaDGr177Gof9QJbKSVSMW7jt YDE2f4/R4Go3NZVwjk/HfpCInoR6pHNA1s/9hMnWtiVopmBdfzyd3/sW YOU=
+shark.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. SmhgyF48yX/6yH7AdSmGX60NL/xaiKH/oAzB0rnPfQZ6j+UfV57ginVV lj798K9A8jjucUpqE8ua2mZ6/aOhpqlV2iI0CZXG44zOupsCY1/OXBDx YNetBcjoXDQCBQRLLLEUL5FerDVxqT74ngdLdKubwRdrB0TLQlvpBr+F Tc8=
+pipit.cis.vutbr.cz. 85923 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. Cz9etHnEOQTzu+6rYJEqx/SQ1tQgPOCyf8HSj4KOsx89jtgiHNC6pep6 ZE0SphMGAs3jC/uGIhlaFNZ3i38OQIMuqwacbz+XZyW5bByvV3QZrhqh dFxMDfmPuNiCAT3crFpUkvVW1OE3YfGHzZGXX7JP5wb1b8A3X6Qih7fV +nQ=
+pipit.cis.vutbr.cz. 85923 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. piafjh6my2fooZRrzwCu9RQ95gYaMQkhIkDaGX/fT6wXzSdmgFZkS1Nl EMIKdDCQaPrLGMG3p32ptMkAm4esPekeyNtLSMBtXwZyUkgEGn6h1QM2 Yr3TOo8cixfk5nmRRdlYadf5krLb8yI9exiqeymgEQLa1YNRz/bWArlX bn8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+ro.vutbr.cz. IN NS
+SECTION ANSWER
+ro.vutbr.cz. 86400 IN NS pipit.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS rhino.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS shark.ro.vutbr.cz.
+ro.vutbr.cz. 86400 IN RRSIG NS 5 3 86400 20170222120032 20170123120032 12150 ro.vutbr.cz. HAQ8A+QNsS1WIXdW/fbT3jP+IxObBBvgUmvzsmJBXo8HMtnMAcuCQGmB 2JBQsQethQXsdyLnMK8to/5A9VRkqkAa7edxUoy7SdDi/mzGeLAVhF+5 kXSPD6t1vjiNdnIYAMpiOQbodCGxAnq6jnNyrjEzffdq3qw+5IkFNdG4 7Pw=
+SECTION ADDITIONAL
+rhino.cis.vutbr.cz. 86400 IN A 147.229.3.10
+rhino.cis.vutbr.cz. 86400 IN AAAA 2001:67c:1220:e000::93e5:30a
+shark.ro.vutbr.cz. 3600 IN A 147.229.2.59
+pipit.cis.vutbr.cz. 86400 IN A 77.93.219.110
+pipit.cis.vutbr.cz. 86400 IN AAAA 2a01:430:120::4d5d:db6e
+rhino.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. X/tDf8e3JEV0LxiItfpQnBzeaRIq693VG8d30iCH4/1I0uqyCfxboWmm /CBpn9A8MCJu9NEEv+4+povNlfUfqi2yjsqJEVj8ztHxD4g9cc284Cv6 ySjxrSZ9axVqoaopEXujiTwwWJUFcgF6pxqyXVksW7sgKJrboM4VSlQD +Sw=
+rhino.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. T3Yf5PAkSeJtoOH90ea9zZBG9FC3iFhiCSerDn6d9up8GRfzxDsavYJC zQu+3vnOySySn+3TMzQSSFcWdJC2iO7ulaDGr177Gof9QJbKSVSMW7jt YDE2f4/R4Go3NZVwjk/HfpCInoR6pHNA1s/9hMnWtiVopmBdfzyd3/sW YOU=
+shark.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. SmhgyF48yX/6yH7AdSmGX60NL/xaiKH/oAzB0rnPfQZ6j+UfV57ginVV lj798K9A8jjucUpqE8ua2mZ6/aOhpqlV2iI0CZXG44zOupsCY1/OXBDx YNetBcjoXDQCBQRLLLEUL5FerDVxqT74ngdLdKubwRdrB0TLQlvpBr+F Tc8=
+pipit.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. Cz9etHnEOQTzu+6rYJEqx/SQ1tQgPOCyf8HSj4KOsx89jtgiHNC6pep6 ZE0SphMGAs3jC/uGIhlaFNZ3i38OQIMuqwacbz+XZyW5bByvV3QZrhqh dFxMDfmPuNiCAT3crFpUkvVW1OE3YfGHzZGXX7JP5wb1b8A3X6Qih7fV +nQ=
+pipit.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. piafjh6my2fooZRrzwCu9RQ95gYaMQkhIkDaGX/fT6wXzSdmgFZkS1Nl EMIKdDCQaPrLGMG3p32ptMkAm4esPekeyNtLSMBtXwZyUkgEGn6h1QM2 Yr3TOo8cixfk5nmRRdlYadf5krLb8yI9exiqeymgEQLa1YNRz/bWArlX bn8=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+ro.vutbr.cz. IN DS
+SECTION ANSWER
+ro.vutbr.cz. 28800 IN DS 16627 5 2 1AEE56EAF9D01A51C8C524E55A7FAE0E27207911F0FA6126052CE5B3 39335FC8
+ro.vutbr.cz. 28800 IN DS 16627 5 1 BFDFD0FB1EDFCEBFB9ECB13C93F9CA65755217BA
+ro.vutbr.cz. 28800 IN RRSIG DS 5 3 28800 20170216060902 20170117060902 39756 vutbr.cz. OOJfGI14bRHqeWhRLMOa75pfHo+clR4rMJpvO3PPjmheownqy2awA7u3 xR5FJko7A6e+difoJdAWCMzN7x1qcrd1htOOKOc7wtcb+QC2JH8B/e0G 0gNPw2UKsFL1Qw9HQkSqxyIaCGg3nMLO1hh3AVccZadw2f/jLpAzw5/1 pLA=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+ro.vutbr.cz. IN DNSKEY
+SECTION ANSWER
+ro.vutbr.cz. 3600 IN DNSKEY 256 3 5 AwEAAb4tyN4pqltB48s1xQS3ZPXnTZJMvgXxiouXU9xtzj4wnhjhZp45 H7ozslWuksrwQWhZ8AASAD5kPFbQRbwpQ7xbEb3xdKHaWCFpyRCTkrqa ZQZQy4gaVqO+oRW42dIQ9K08A/WfvRuRDtw3VWDATp9pUkgpvb1n6+lp 71YK19RX
+ro.vutbr.cz. 3600 IN DNSKEY 257 3 5 AwEAAef6bqTAl94KddNHvit41gw6QBKkiYjUeS+UP58VHybV29RC7sSE +rYmkXabaMOLmoqMQRMepBEaUdM5OoZBWibHrPAbG0Wf+vlMOoWD5+EC 2mCxrUntIlOuS4XpMTh22+l0k1xSPiMGKjY0BDR95Iu3dDezCVl9PkPp tHj/rAnRTH7Q0fH9Mip8sigosd/CmsoY03I0AcZT4z1+XpGsq5Npxwtj 7cz0SRTI/eV5nynNYK+vr6kOfU1fw7p8/wxIfXkks0Xy8ktXa26DFdw1 RoqVlTS1s1diFyF5niCOT6Ei2kAlf0fggZJBypwoK+6J42wwD2OhORX+ lKrhooaN4TU9AcHwgv25XTXhUq4tYh+veazdXNWDjEb3ZyLM8fKERCa9 YtDBFoHM7yFOHbsOhHKMn8F6T2Boi73hU/+wspjL/n8taKevyyygGg+U g4ugo2pTIouAs5DNnv+nUrpctcKZ5nMEUVl+3XBsXplIyz9QEKHWdFzL gyfIZEok8WdYHebcIy1vJrxzqCNw9ixnTn+OK1lwlMToVH1AGpvRKRPo wGSFaIrDyXxKul34j2jEhP9TWRcJqncy166Ueu3c0BKmclM29N8jeWbP 3TqRJ3RRxNj/vk6c/UGmmrHEz8YdNp2L0hv3JgItr2GujCvPApUvLNPW C7DSErQ3JsjV3gah
+ro.vutbr.cz. 3600 IN RRSIG DNSKEY 5 3 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. pN+8YElj24dhtnOQ20sjWxJTjx+FLTMrPms1lWIJKZtp2evQBG5AnAep 6w0QeMUTIh9ter58Dh6wu2IN4uA1h3ThxnSgwLraOChUFBtPTO8h5y8J mAq4KXSfqbEcHzZO/nBAtxSUk7aUz7yWf09xE+iozW3ORRWIXovMYci5 eEw=
+ro.vutbr.cz. 3600 IN RRSIG DNSKEY 5 3 3600 20170222120032 20170123120032 16627 ro.vutbr.cz. DSaIAl+iyToM8+ai9xuRVcRshYyI66XHWkOz0XEbIAwbc8aEMEeFCA91 1vpuBb6H92MXvM8hYsBhZHNIA0ApoIE4bdyEGZY05XN3GYgJ4BEhXJVM RR+inJf+vGGqdlRP6F2sPO+rCqfxWBvSoUFU7DpCpkl7hz2Ex0Clm9C9 YnWgL+tGmAH33s2Y8lTA3hG/0W0NxD5zy1LiyDa8Ls3vV4MC6gVxyloT Capd8FkDL9PmgW0gMRNtIWmc5Hw+j/HRMoy+oRCe8PIfUL/Dpx3iTAH8 iN3wV8apV2uPa0L8QgpixK4Tc87aSainCopVY+NOc5t0HErUzj8i7qA9 J/cRtQvlUzln5vBsrQsVIzIeNV4o8/cM3zFyfdKkHh1tWYKLJKkjfXc5 +7VMvF8PnoHceT/Zr2gCc8tnygRobypzgqy3p69bRJqiT0/eCAgpGusV 1DCOJY0sdiGDZEtpqeINbAgGKAMmmNwjIwYSFowRzdawip1wNd+90RhI +8hvx8Sc5+K5Mom2BF2wGHf/2Kv/ArzyXxqqcNozM61L1AjxIsBHjnLZ TzPlLntmiHUVaqET9Yc3G0K/RdsIpqz4M79N0BX66a58x2a3fLqQdrEC QshZPNxk2S4eCsrVRjHvU4a7e74Rbf/zXp89Y+jmwBbDMdnp+2/h9s6U J0sEBCYyo9M=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+piranha.ro.vutbr.cz. IN A
+SECTION ANSWER
+piranha.ro.vutbr.cz. 3600 IN A 147.229.2.90
+piranha.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. Jz8bcAADQjCKTCcF70IK1aHGQlM4ukyN0myABlxoPaqid1mHX5jwR91b kdQmUAh2xDitlgRLbFjbUUgmjSPzQ5Qt7GAFUsVmqxvjbOLZjqHER1dh zmiWO0fDvvP647Osv3RiAP822rNUJcJrUBZU9LmeP05gwIHcpJrhdVBT b7I=
+SECTION AUTHORITY
+ro.vutbr.cz. 86400 IN NS shark.ro.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS rhino.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN NS pipit.cis.vutbr.cz.
+ro.vutbr.cz. 86400 IN RRSIG NS 5 3 86400 20170222120032 20170123120032 12150 ro.vutbr.cz. HAQ8A+QNsS1WIXdW/fbT3jP+IxObBBvgUmvzsmJBXo8HMtnMAcuCQGmB 2JBQsQethQXsdyLnMK8to/5A9VRkqkAa7edxUoy7SdDi/mzGeLAVhF+5 kXSPD6t1vjiNdnIYAMpiOQbodCGxAnq6jnNyrjEzffdq3qw+5IkFNdG4 7Pw=
+SECTION ADDITIONAL
+rhino.cis.vutbr.cz. 86400 IN A 147.229.3.10
+rhino.cis.vutbr.cz. 86400 IN AAAA 2001:67c:1220:e000::93e5:30a
+shark.ro.vutbr.cz. 3600 IN A 147.229.2.59
+pipit.cis.vutbr.cz. 86400 IN A 77.93.219.110
+pipit.cis.vutbr.cz. 86400 IN AAAA 2a01:430:120::4d5d:db6e
+rhino.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. X/tDf8e3JEV0LxiItfpQnBzeaRIq693VG8d30iCH4/1I0uqyCfxboWmm /CBpn9A8MCJu9NEEv+4+povNlfUfqi2yjsqJEVj8ztHxD4g9cc284Cv6 ySjxrSZ9axVqoaopEXujiTwwWJUFcgF6pxqyXVksW7sgKJrboM4VSlQD +Sw=
+rhino.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. T3Yf5PAkSeJtoOH90ea9zZBG9FC3iFhiCSerDn6d9up8GRfzxDsavYJC zQu+3vnOySySn+3TMzQSSFcWdJC2iO7ulaDGr177Gof9QJbKSVSMW7jt YDE2f4/R4Go3NZVwjk/HfpCInoR6pHNA1s/9hMnWtiVopmBdfzyd3/sW YOU=
+shark.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. SmhgyF48yX/6yH7AdSmGX60NL/xaiKH/oAzB0rnPfQZ6j+UfV57ginVV lj798K9A8jjucUpqE8ua2mZ6/aOhpqlV2iI0CZXG44zOupsCY1/OXBDx YNetBcjoXDQCBQRLLLEUL5FerDVxqT74ngdLdKubwRdrB0TLQlvpBr+F Tc8=
+pipit.cis.vutbr.cz. 86400 IN RRSIG A 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. Cz9etHnEOQTzu+6rYJEqx/SQ1tQgPOCyf8HSj4KOsx89jtgiHNC6pep6 ZE0SphMGAs3jC/uGIhlaFNZ3i38OQIMuqwacbz+XZyW5bByvV3QZrhqh dFxMDfmPuNiCAT3crFpUkvVW1OE3YfGHzZGXX7JP5wb1b8A3X6Qih7fV +nQ=
+pipit.cis.vutbr.cz. 86400 IN RRSIG AAAA 5 4 86400 20170204080646 20170105080646 28257 cis.vutbr.cz. piafjh6my2fooZRrzwCu9RQ95gYaMQkhIkDaGX/fT6wXzSdmgFZkS1Nl EMIKdDCQaPrLGMG3p32ptMkAm4esPekeyNtLSMBtXwZyUkgEGn6h1QM2 Yr3TOo8cixfk5nmRRdlYadf5krLb8yI9exiqeymgEQLa1YNRz/bWArlX bn8=
+ENTRY_END
+
+; end of pipit.cis.vutbr.cz. & rhino.cis.vutbr.cz.
+RANGE_END
+
+
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+www.vutbr.cz. IN A
+ENTRY_END
+
+; recursion happens here.
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+www.vutbr.cz. IN A
+SECTION ANSWER
+www.vutbr.cz. IN CNAME piranha.ro.vutbr.cz.
+piranha.ro.vutbr.cz. IN A 147.229.2.90
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.vutbr.cz. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH flags rcode question answer
+REPLY QR RD RA AD NOERROR
+SECTION QUESTION
+www.vutbr.cz. IN A
+SECTION ANSWER
+www.vutbr.cz. IN CNAME piranha.ro.vutbr.cz.
+www.vutbr.cz. IN RRSIG CNAME 5 3 300 20170216060902 20170117060902 39756 vutbr.cz. 9B3UC5SOEw1+yKlYlOTINEuNq0Kdglywc5IYJwzeSzQ3ykptzZo3ABSy bYhTqImVkhm/4NFM9/4HWMHPDzTmrWS0mCI/ljCd/oe/PxW/uESvo4P5 EQzlcuH6xBzc1KdEFAJOSmRzFjj3vyK1QN3k/c+1y2oMFOYOR2oOzCw+ MIE=
+piranha.ro.vutbr.cz. IN A 147.229.2.90
+piranha.ro.vutbr.cz. 3600 IN RRSIG A 5 4 3600 20170222120032 20170123120032 12150 ro.vutbr.cz. Jz8bcAADQjCKTCcF70IK1aHGQlM4ukyN0myABlxoPaqid1mHX5jwR91b kdQmUAh2xDitlgRLbFjbUUgmjSPzQ5Qt7GAFUsVmqxvjbOLZjqHER1dh zmiWO0fDvvP647Osv3RiAP822rNUJcJrUBZU9LmeP05gwIHcpJrhdVBT b7I=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/world_mx_nic_www.rpl b/tests/deckard/sets/resolver/world_mx_nic_www.rpl
new file mode 100644
index 0000000..c641b53
--- /dev/null
+++ b/tests/deckard/sets/resolver/world_mx_nic_www.rpl
@@ -0,0 +1,272 @@
+; test with real world Internet data
+; attempt to resolve www.nic.mx A leads to CNAME www.nicmexico.mx.
+; sub-tree nic.mx is not signed and nixmexico.mx is signed.
+; the answer must not have AD flag set!
+
+val-override-date: 20170124180319
+trust-anchor: ". 172800 IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5"
+stub-addr: 2001:dc3::35
+CONFIG_END
+
+SCENARIO_BEGIN www.nic.mx. CNAME kresd issue #144
+
+; DNS root ; M.ROOT-SERVERS.NET.
+RANGE_BEGIN 0 100
+ ADDRESS 2001:dc3::35
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+. IN DNSKEY
+SECTION ANSWER
+. 16567 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
+. 16567 IN DNSKEY 256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTRgy7+dzvfArIhi2tKoZ/WR1Df w883SOU6Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfElBwKsz4sVVWmfyr/x +igD/UjrcJ5zEBUrUmVtHyjar7ccaVc1/3ntkhZjI1hcungAlOhPhHlk MeX+5Azx6GdX//An5OgrdyH3o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49zcdis3EaY199WFW60DCS7ydu+ +T5Xa+GyOw1quagwf/JUC/mEpeBQYWrnpkBbpDB3sy4+P2i8iCvavehb RyVm9U0MlIc=
+. 16567 IN RRSIG DNSKEY 8 0 172800 20170201000000 20170111000000 19036 . Sh+EpofvZgk3J9szMD2B94FxFgyIUKz3hkbCjgWSTqPQyhqNgqVU8QlS EtOo8YLmS4AX98eit5Gmmb2ObpkGoXBmAzu5w/Qt5WsGsWzLQhYrsy9s lDmFQ2JKUoCyfdwqhlJ8VxjzdFdMUiVl+/GPnv4yjxjM8Ke3VAtBkn6n BO7JkcxxOfcgZdZ4MuvSr40K/SenZE+JlLLL1LF4TMCGqaZTTdOx6kFF KSSgy2AS884htWcK0tnwRc630g6nAI2wdvjlRLBeisbfXanI4v8iiPyT FnMmnV7wJGWJ4gtRJ0UH3u5RWXUPZ+s1tKytk3slXbLyQ9xkEDveuD+h b659gQ==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR DO NOERROR
+SECTION QUESTION
+mx. IN NS
+SECTION AUTHORITY
+mx. 172800 IN NS c.mx-ns.mx.
+mx. 172800 IN NS m.mx-ns.mx.
+mx. 172800 IN NS e.mx-ns.mx.
+mx. 172800 IN NS i.mx-ns.mx.
+mx. 172800 IN NS o.mx-ns.mx.
+mx. 172800 IN NS x.mx-ns.mx.
+mx. 86400 IN DS 55955 8 2 3d7f3313e86341ec23a02f8ed837572d62cf74bf175ac8b2f19b1e2b8930b0d5
+mx. 86400 IN RRSIG DS 8 1 86400 20170206050000 20170124040000 61045 . DYmv0z7EnlUOu081yDzeh3tourMFyYtBv7IKIiwPN5ZXuHmw0PvqT0oU//DomnA0NdfCRizOSmvDlZITNtlTffEA3mudnbPC+TEpdf1nffHLHQPnjcS0U+zfoBvRK0OHha3J7YgSXFQuCskJAg4P6ktPzgcd2ccv/FRlzzw4CrZOE3AtDWir31xt8c8DxZjysjIptblua7o9kwac+biWoszUl+sJBAXGbn0XXMloTAisYHyyZF9YeTRz3er8gyao8ynRe2KgUZPX4ieVQl+BsXDOmVRYLE8l4hLSRanjoWOR3gAqQUHJwn9xXxhGfApe5tUhaCE7v1EplCw9ykaKVA==
+SECTION ADDITIONAL
+c.mx-ns.mx. 172800 IN A 192.100.224.1
+e.mx-ns.mx. 172800 IN A 189.201.244.1
+i.mx-ns.mx. 172800 IN A 207.248.68.1
+m.mx-ns.mx. 172800 IN A 200.94.176.1
+o.mx-ns.mx. 172800 IN A 200.23.1.1
+x.mx-ns.mx. 172800 IN A 201.131.252.1
+c.mx-ns.mx. 172800 IN AAAA 2001:1258::1
+m.mx-ns.mx. 172800 IN AAAA 2001:13c7:7000::1
+ENTRY_END
+; end of M.ROOT-SERVERS.NET.
+RANGE_END
+
+; ?.mx-ns.mx.
+RANGE_BEGIN 0 100
+ ADDRESS 192.100.224.1
+ ADDRESS 189.201.244.1
+ ADDRESS 207.248.68.1
+ ADDRESS 200.94.176.1
+ ADDRESS 200.23.1.1
+ ADDRESS 201.131.252.1
+ ADDRESS 2001:1258::1
+ ADDRESS 2001:13c7:7000::1
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+mx. IN DNSKEY
+SECTION ANSWER
+mx. 86400 IN DNSKEY 257 3 8 AwEAAcokawGJMW4OI1eas0vAtfl0etrPSlqkh7n/JPpdMt5fplkWI0oo YS3kYBXYzMxXnpNOK57jp5JodELeZKDrHCrUhAzZiy5iJQDy9Qi85mSC KTHg32+JKjXiMEkTZUlOzNRrXC7apWfZbzbx98CnzkWw0Xj2wDIniptM jnwAJeb8L+Mm5AzZSkUugga/eDvpVsT5MZZnT/DuJdxS5olx+HyTKLct m/LDljtQKJya0UtXUKkVc5cv8y+ja5AivjXXrUmDcgd1P6bntcbjpcFY UuLZMsmyOZ2uViXNEhIdBcP+davulxW++DawqOtvnpuRxfLFsuYw/vDC ilfIGEdgz20=
+mx. 86400 IN DNSKEY 256 3 8 AwEAAcwqWcnh23qhQTbWsbOKbRI4btNQCYRa4ksadH8VjQ++VruqkhPu d7e/RsZMhevCWDJHrjfJ739NmiGIwS58uh1sVACfKRmxLP25/1V9frIi HBxkaVLXPAHm8+ApIhzUzaUTUrmSnDm0/wJryo34zETnA6J4czfzYDLX Vqh3KVtL
+mx. 86400 IN RRSIG DNSKEY 8 1 86400 20170223000000 20170124000000 48529 mx. BYGaUXiyB0vIi4sBwvUuL2Im+zcIpykZD96YdvA3Kpk7RlV3LcLD9L6B +HpwFWMRZ+vt09YW/jrzSR9mlXpZeWR6BhHoo9f2MGOO5dwejnUuipLD +t5wKi91XALmaRN4Z2ptdJ0wVMpfXlkfrNTB+RvYAqx/azDGw5Ewjh7C J5Y=
+mx. 86400 IN RRSIG DNSKEY 8 1 86400 20170303150000 20170102150000 55955 mx. SboaaGva7+GbfoNKa8Ov2GhSIvYStcBeudk0A0+53/LMs7sHuLegE9+P lTqih4sl/W1Yd4a4jWoVYGGYu8M4tb1fzaxvr5eTDwm3gKGirbTsQPFl Ih5gNnC6QJKYBhpN7w/Fn3JmJTBLwhd7tREygGqkNO/LdTwiHfbcIzkU 5UpD9A3/oeZoMQe71AvJstU5PIHxg3PU1CNU9YBcNhYzUfTfcr+hlbmA Nm6RaOBaWJwp4YzcS3uJcaXmpS1t/lbxWIgeOXRhql6ZHqCai0lSmNnm vAydmJI/cqXsJ23Pj22TD1QwDFKTp0u2oIiykeFzdbIG0s2thtmyY4km qh1Ulg==
+ENTRY_END
+
+; nix.mx
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+nic.mx. IN NS
+SECTION ANSWER
+nic.mx. 172800 IN NS o.mx-ns.mx.
+nic.mx. 172800 IN NS m.mx-ns.mx.
+nic.mx. 172800 IN NS c.mx-ns.mx.
+nic.mx. 172800 IN NS x.mx-ns.mx.
+nic.mx. 172800 IN NS e.mx-ns.mx.
+nic.mx. 172800 IN NS i.mx-ns.mx.
+SECTION ADDITIONAL
+c.mx-ns.mx. 172800 IN A 192.100.224.1
+c.mx-ns.mx. 172800 IN AAAA 2001:1258::1
+e.mx-ns.mx. 172800 IN A 189.201.244.1
+i.mx-ns.mx. 172800 IN A 207.248.68.1
+m.mx-ns.mx. 172800 IN A 200.94.176.1
+m.mx-ns.mx. 172800 IN AAAA 2001:13c7:7000::1
+o.mx-ns.mx. 172800 IN A 200.23.1.1
+x.mx-ns.mx. 172800 IN A 201.131.252.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+nic.mx. IN DS
+SECTION AUTHORITY
+qpcf3eq45ur6ndho0ecuj1o25g7d48pi.mx. 1800 IN NSEC3 1 1 100 FBB1D947FF931FC5 QPDGRP34SI0F3CBG41HRN7G8TLFK6C7B NS SOA RRSIG DNSKEY NSEC3PARAM
+qpcf3eq45ur6ndho0ecuj1o25g7d48pi.mx. 1800 IN RRSIG NSEC3 8 2 1800 20170223000000 20170124000000 48529 mx. RI7Ezya54VVVcCiyH2rHBjRwWzsoe2A1vBcwzFUeiKFPsoOsCkvAfpvU uZ96IEa0Ni7ZksS2XFuV9TeQotk/HirhRGq2AauGtF4RLExmZnZouAjz tLZYXhr7mZAqfKLzZV5qNzlYSia3wF9m4wkz4eSBfeJ/6u2AoQP81C3Y Dls=
+mx. 1800 IN SOA m.mx-ns.mx. hostmaster.nic.mx. 1485251802 900 900 604800 1800
+mx. 1800 IN RRSIG SOA 8 1 86400 20170223000000 20170124000000 48529 mx. Gwjg+/GJUJj32FMa9HKESM7zsPFdVVEotOIyXKhZjOX139PhfbcOdfJr bfhDvVV8weMoLHhM0rVko0Sr+H8S3+R8wNOkvoFPqd3G5YV2azS52qOQ xPq1gVT0g3bWtmgF0KV2fGQ2Lcw7ynksenBmpQCggjbh/O98zwfRJkcc Huk=
+1e790cnnc0n6fmd7hhf7o1baus5muq9l.mx. 1800 IN NSEC3 1 1 100 FBB1D947FF931FC5 1EDMBBOCRH8AB8GRQF55CMJV2IS3U6E7 NS DS RRSIG
+1e790cnnc0n6fmd7hhf7o1baus5muq9l.mx. 1800 IN RRSIG NSEC3 8 2 1800 20170223000000 20170124000000 48529 mx. xP9wMq871/wi0N99DkUhXHB1VjyjG5zds0CHIdrm1MC0JPl2atB1nliC tYC/nMC6vHGRk7bcX0kFNDgi0duGuNwKEHyTp2gHBSoMefUtDfJbOoq8 4VSQvS0WaJlK1H3eV21AdhmpZEAe0YB6e7lU5plhqNMX5mxDD5d0ZVD8 TWI=
+ENTRY_END
+
+; this entry is the one which caused kresd to return AD flag despite of missing RRSIGs
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+www.nic.mx. IN A
+SECTION ANSWER
+www.nic.mx. 300 IN CNAME www.nicmexico.mx.
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO NOERROR
+SECTION QUESTION
+www.nic.mx. IN RRSIG
+SECTION AUTHORITY
+nic.mx. 1800 IN SOA m.mx-ns.mx. hostmaster.nic.mx. 2016101701 3600 900 604800 1800
+ENTRY_END
+
+; nixmexico.mx
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA RD NOERROR
+SECTION QUESTION
+nicmexico.mx. IN NS
+SECTION ANSWER
+nicmexico.mx. 172800 IN NS o.mx-ns.mx.
+nicmexico.mx. 172800 IN NS m.mx-ns.mx.
+nicmexico.mx. 172800 IN NS e.mx-ns.mx.
+nicmexico.mx. 172800 IN NS x.mx-ns.mx.
+nicmexico.mx. 172800 IN NS i.mx-ns.mx.
+nicmexico.mx. 172800 IN NS c.mx-ns.mx.
+nicmexico.mx. 172800 IN RRSIG NS 7 2 172800 20170221235959 20161221161902 14618 nicmexico.mx. MMPJ1lltyGLyE+s+V7mFb3iJzWkKgnCRtBGgVqynFaKJBgEX+0NFy8Iq o8CKWlXGXitDilaE3xy6ynYnb8CeQuEeaKVLzikUwxu+bTR/tcX1fECp 2i9uDFTl/wrYSyNU4gEy/4Ueev5GsM8XQmK5j8xgUmwc+258eRBZ129O K1E=
+SECTION ADDITIONAL
+c.mx-ns.mx. 172800 IN A 192.100.224.1
+c.mx-ns.mx. 172800 IN AAAA 2001:1258::1
+e.mx-ns.mx. 172800 IN A 189.201.244.1
+i.mx-ns.mx. 172800 IN A 207.248.68.1
+m.mx-ns.mx. 172800 IN A 200.94.176.1
+m.mx-ns.mx. 172800 IN AAAA 2001:13c7:7000::1
+o.mx-ns.mx. 172800 IN A 200.23.1.1
+x.mx-ns.mx. 172800 IN A 201.131.252.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+nicmexico.mx. IN DS
+SECTION ANSWER
+nicmexico.mx. 86400 IN DS 25953 7 1 3980E3CBB2DC1F0A39EE58454F218D695C6FCF2B
+nicmexico.mx. 86400 IN DS 25953 7 2 E390593C68F6C5BD1A38E3CF7D9643235AC9C09A1023EBEA8E6D56FC 9EF2AAA6
+nicmexico.mx. 86400 IN RRSIG DS 8 2 86400 20170223000000 20170124000000 48529 mx. kwiqOPNYD6k+CPGGewQ7YWnJqomLkr4wrIT96qnb11l1m+BBtCZnxh1X 9u1I4nQsLC9/gJh1sytYkMogObxd6CsMUwAn8lA7Pnlbz1upINis7oE5 2MoHjYDhhJnfSryTtiw5Xak+Bup3GGmi4KgNsitQXUK8rFg5xAwyjtb6 udg=
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+nicmexico.mx. IN DNSKEY
+SECTION ANSWER
+nicmexico.mx. 172800 IN DNSKEY 257 3 7 AwEAAdU7ho1gF5Swo/P3EMrcm82fE3bSvXec/q4HvGndCS+iEhOVMQgx SmjhdnILgNE23x5v7iprrQdcrC6qG3h5pWromlJt4zqqWD91OuydXGpB vkx9o3gWo9wqr+2mX4cPKsKKhiyQ1EBEbaYZP1PqEWigdTuzVB2zGWAu yCNlbgHX8Q4pgU/P+jdTB0RFkQEa7BtIu/+7JYpB09REdjtn4AgdqaVK rq9gQRxAbpuQezw5vEnK/EFiH+FIa8FWctMhRkC2IdG5THpG8lzZry+Q 04Mih/r7tsY/RbA0asG4RVOFTtHCdjIZc4f4fxNIaR4B7IzBPIWN0d3/ ILI6sObAnJs=
+nicmexico.mx. 172800 IN DNSKEY 256 3 7 AwEAAdlPfZYpM3PWP1ub8MDc4fSBVu3f+lS3ojPAaKNEgXu0mzGP9BtS Rj7kAIR2BQN61sb6b2QIT2QnGSkOjfho0TLm1UjcAMjRC6A4bwVmwYgj OMXd56jRi1zeus3nBz661inwqSOOs4+72SiVLqmbzDV0uFHAZFrSIrS0 Fp5vDTS/
+nicmexico.mx. 172800 IN DNSKEY 256 3 7 AwEAAbmZ5YmUhQKofswApd84tnITiUqh8kyN609rOanl3ga7WEjGs2bD D8RU/oOj31OzfnEFLSLH0fpIWCPWT+lvZ9HFOxAMavXnwncKsAVLNrv+ CuBGTiQ4wa2C/vQ7i/D1SbnXAUs/17Pu9onlAGeDoolgsUAgldfRwEGp tVfY8r71
+nicmexico.mx. 172800 IN RRSIG DNSKEY 7 2 172800 20170221235959 20161221161902 14618 nicmexico.mx. BTeItGos/TVLbiYrisWuJCFmdnA+p3yBHOMfUsvPAOvs5trTincG5wkY EHsq13Dvk9JNjSYh4HPlmlnsXDmUPXm6Z4bd1BXFVPiK3r4I1YGwwP/M ATNjw5V8w+my3PvOQdwyhWiF8dnd0EfeK3t+b/prwZiWs64ezaNiMxUk i5s=
+nicmexico.mx. 172800 IN RRSIG DNSKEY 7 2 172800 20170221235959 20161221161902 25953 nicmexico.mx. NPVmWrmIeGHYOjrfonov29kFG5gP2vaP0qE8sZplYt44MzgBnhLt+cZS sk6NNEhLPgYe4fiPxj3xzT+BjxTUCCQo3CT1KR4uaEIbepBmxDx8dMv6 4c1AO2wNnt8x/OBG+Nwg3gLaf4UtdJvOQsdpOsTzqKKo7WPKxeb462gw 4aZzYh4uhEjTFil8eGLXOlGe8CYThAdwxKbA6tEZxE5UEa2mIb2orSbz ro+ehp6imnn3YWtLWBtkWQqsSaqLug4HUrXgjbqNSZ+FCdO4WIxLgDsz k+jlA7tdkZknE43AQX/md6orKDalCb4OtrC0yrgYDtwVsgP1qZVAjJWW 09nUIg==
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA DO
+SECTION QUESTION
+www.nicmexico.mx. IN A
+SECTION ANSWER
+www.nicmexico.mx. 172800 IN A 200.94.180.55
+www.nicmexico.mx. 172800 IN A 200.94.180.54
+www.nicmexico.mx. 172800 IN A 200.94.180.57
+www.nicmexico.mx. 172800 IN A 200.94.180.56
+www.nicmexico.mx. 172800 IN RRSIG A 7 3 172800 20170221235959 20161221161902 14618 nicmexico.mx. s3THv+Ay2WrcOTG6bo+54Zc/rff/jhzcJKZ3ZRYMXhw3FToSvTOSqsIG 1gzW/Sk6r2oikHH3nNluaMTAXfCULu2mHiQVAuFlnajFSMPcm8KvEyV0 cCT7knkAFqb+ODkimPMufRHiOLbnhQk9/A25qK7J8rCB76IUmzk41hYR NBU=
+SECTION AUTHORITY
+nicmexico.mx. 172800 IN NS m.mx-ns.mx.
+nicmexico.mx. 172800 IN NS c.mx-ns.mx.
+nicmexico.mx. 172800 IN NS i.mx-ns.mx.
+nicmexico.mx. 172800 IN NS o.mx-ns.mx.
+nicmexico.mx. 172800 IN NS x.mx-ns.mx.
+nicmexico.mx. 172800 IN NS e.mx-ns.mx.
+nicmexico.mx. 172800 IN RRSIG NS 7 2 172800 20170221235959 20161221161902 14618 nicmexico.mx. MMPJ1lltyGLyE+s+V7mFb3iJzWkKgnCRtBGgVqynFaKJBgEX+0NFy8Iq o8CKWlXGXitDilaE3xy6ynYnb8CeQuEeaKVLzikUwxu+bTR/tcX1fECp 2i9uDFTl/wrYSyNU4gEy/4Ueev5GsM8XQmK5j8xgUmwc+258eRBZ129O K1E=
+SECTION ADDITIONAL
+c.mx-ns.mx. 172800 IN A 192.100.224.1
+e.mx-ns.mx. 172800 IN A 189.201.244.1
+i.mx-ns.mx. 172800 IN A 207.248.68.1
+m.mx-ns.mx. 172800 IN A 200.94.176.1
+o.mx-ns.mx. 172800 IN A 200.23.1.1
+x.mx-ns.mx. 172800 IN A 201.131.252.1
+c.mx-ns.mx. 172800 IN AAAA 2001:1258::1
+m.mx-ns.mx. 172800 IN AAAA 2001:13c7:7000::1
+ENTRY_END
+
+; end ?.mx-ns.mx.
+RANGE_END
+
+
+STEP 10 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.nic.mx. IN A
+ENTRY_END
+
+STEP 11 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA DO NOERROR
+SECTION QUESTION
+www.nic.mx. IN A
+SECTION ANSWER
+www.nic.mx. 300 IN CNAME www.nicmexico.mx.
+www.nicmexico.mx. 171139 IN A 200.94.180.57
+www.nicmexico.mx. 171139 IN A 200.94.180.56
+www.nicmexico.mx. 171139 IN A 200.94.180.54
+www.nicmexico.mx. 171139 IN A 200.94.180.55
+www.nicmexico.mx. 171139 IN RRSIG A 7 3 172800 20170221235959 20161221161902 14618 nicmexico.mx. s3THv+Ay2WrcOTG6bo+54Zc/rff/jhzcJKZ3ZRYMXhw3FToSvTOSqsIG1gzW/Sk6r2oikHH3nNluaMTAXfCULu2mHiQVAuFlnajFSMPcm8KvEyV0cCT7knkAFqb+ODkimPMufRHiOLbnhQk9/A25qK7J8rCB76IUmzk41hYRNBU=
+ENTRY_END
+
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD DO
+SECTION QUESTION
+www.nicmexico.mx. IN A
+ENTRY_END
+
+STEP 21 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH rcode flags question answer
+REPLY QR RD RA AD DO NOERROR
+SECTION QUESTION
+www.nicmexico.mx. IN A
+SECTION ANSWER
+www.nicmexico.mx. 170708 IN A 200.94.180.55
+www.nicmexico.mx. 170708 IN A 200.94.180.56
+www.nicmexico.mx. 170708 IN A 200.94.180.54
+www.nicmexico.mx. 170708 IN A 200.94.180.57
+www.nicmexico.mx. 172800 IN RRSIG A 7 3 172800 20170221235959 20161221161902 14618 nicmexico.mx. s3THv+Ay2WrcOTG6bo+54Zc/rff/jhzcJKZ3ZRYMXhw3FToSvTOSqsIG 1gzW/Sk6r2oikHH3nNluaMTAXfCULu2mHiQVAuFlnajFSMPcm8KvEyV0 cCT7knkAFqb+ODkimPMufRHiOLbnhQk9/A25qK7J8rCB76IUmzk41hYR NBU=
+ENTRY_END
+
+SCENARIO_END
diff --git a/tests/deckard/sets/resolver/zone.rpz b/tests/deckard/sets/resolver/zone.rpz
new file mode 100644
index 0000000..a45c53d
--- /dev/null
+++ b/tests/deckard/sets/resolver/zone.rpz
@@ -0,0 +1,10 @@
+$TTL 30
+@ SOA nonexistent.nodomain.none. dummy.nodomain.none. 1 12h 15m 3w 2h
+ NS nonexistant.nodomain.none.
+
+example.cz CNAME .
+*.example.cz CNAME *.
+nic.cz CNAME rpz-drop.
+*.nic.cz CNAME rpz-tcp-only.
+example.com CNAME rpz-passthru.
+
diff --git a/tests/deckard/setup.py b/tests/deckard/setup.py
new file mode 100644
index 0000000..9e2d532
--- /dev/null
+++ b/tests/deckard/setup.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+from distutils.core import setup
+
+version = '3.0'
+
+setup(
+ name='deckard',
+ version=version,
+ description='DNS toolkit',
+ long_description=(
+ "Deckard is a DNS software testing based on library pydnstest."
+ "It supports parsing and running Unbound-like test scenarios,"
+ "and setting up a mock DNS server. It's based on dnspython."),
+ author='CZ.NIC',
+ author_email='knot-dns-users@lists.nic.cz',
+ license='BSD',
+ url='https://gitlab.labs.nic.cz/knot/deckard',
+ packages=['pydnstest'],
+ python_requires='>=3.5',
+ install_requires=[
+ 'dnspython>=1.15',
+ 'jinja2',
+ 'PyYAML',
+ 'python-augeas'
+ ],
+ classifiers=[
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Programming Language :: Python :: 3 :: Only'
+ 'Operating System :: POSIX :: Linux',
+ 'Topic :: Internet :: Name Service (DNS)',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ 'Topic :: Software Development :: Quality Assurance',
+ 'Topic :: Software Development :: Testing',
+ ]
+)
diff --git a/tests/deckard/template/dnssec_getdns.j2 b/tests/deckard/template/dnssec_getdns.j2
new file mode 100644
index 0000000..282dc9f
--- /dev/null
+++ b/tests/deckard/template/dnssec_getdns.j2
@@ -0,0 +1,3 @@
+{% for TA in TRUST_ANCHORS %}
+{{TA}}
+{% endfor %}
diff --git a/tests/deckard/template/getdns.j2 b/tests/deckard/template/getdns.j2
new file mode 100644
index 0000000..49064d4
--- /dev/null
+++ b/tests/deckard/template/getdns.j2
@@ -0,0 +1,6 @@
+{ "listen_addresses": [ {{SELF_ADDR}} ]
+, "dns_root_servers": [ {{ROOT_ADDR}} ]
+, "timeout": 2000
+, "dnssec_return_status": GETDNS_EXTENSION_TRUE
+, "dnssec_trust_anchors": "getdns-root.key"
+}
diff --git a/tests/deckard/template/hints_zone.j2 b/tests/deckard/template/hints_zone.j2
new file mode 100644
index 0000000..b46b30d
--- /dev/null
+++ b/tests/deckard/template/hints_zone.j2
@@ -0,0 +1,9 @@
+; This file holds the information on root name servers needed to
+; initialize cache of Internet domain name servers
+
+. 3600000 NS K.ROOT-SERVERS.NET.
+{% if ':' in ROOT_ADDR %}
+K.ROOT-SERVERS.NET. 3600000 AAAA {{ROOT_ADDR}}
+{% else %}
+K.ROOT-SERVERS.NET. 3600000 A {{ROOT_ADDR}}
+{% endif %}
diff --git a/tests/deckard/template/knotd_master.j2 b/tests/deckard/template/knotd_master.j2
new file mode 100644
index 0000000..ccf1f72
--- /dev/null
+++ b/tests/deckard/template/knotd_master.j2
@@ -0,0 +1,29 @@
+#
+# This is a sample of a minimal configuration file for Knot DNS.
+# For more details, see man 5 knot.conf or refer to the server documentation.
+#
+
+server:
+ listen: {{SELF_ADDR}}@53
+
+control:
+ listen: "{{WORKING_DIR}}/knotd.sock"
+
+log:
+ - target: stdout
+ any: info
+
+acl:
+ - id: acl_slave
+ address: {{ROOT_ADDR}}
+ action: transfer
+
+template:
+ - id: default
+ storage: "{{WORKING_DIR}}"
+
+zone:
+ - domain: example.com
+ file: "{{INSTALL_DIR}}/sets/knotd/master/example.com.zone"
+ acl: acl_slave
+
diff --git a/tests/deckard/template/knotd_slave.j2 b/tests/deckard/template/knotd_slave.j2
new file mode 100644
index 0000000..4ac768e
--- /dev/null
+++ b/tests/deckard/template/knotd_slave.j2
@@ -0,0 +1,28 @@
+#
+# This is a sample of a minimal configuration file for Knot DNS.
+# For more details, see man 5 knot.conf or refer to the server documentation.
+#
+
+server:
+ listen: {{SELF_ADDR}}@53
+
+control:
+ listen: "{{WORKING_DIR}}/knotd.sock"
+
+log:
+ - target: stdout
+ any: info
+
+remote:
+ - id: master
+ address: {{ROOT_ADDR}}@53
+
+template:
+ - id: default
+ storage: "{{WORKING_DIR}}"
+
+zone:
+ - domain: example.com
+ file: "{{WORKING_DIR}}/example.com.zone"
+ master: master
+
diff --git a/tests/deckard/template/kresd.j2 b/tests/deckard/template/kresd.j2
new file mode 100644
index 0000000..4d5a877
--- /dev/null
+++ b/tests/deckard/template/kresd.j2
@@ -0,0 +1,111 @@
+net = { '{{SELF_ADDR}}' }
+modules = {'stats', 'policy', 'hints'}
+-- test. domain is used by some tests, allow it
+policy.add(policy.suffix(policy.PASS, {todname('test.')}))
+-- extra verbose logging for answers received from network
+policy.add(policy.all(policy.QTRACE))
+cache.size = 2*MB
+hints.root({['k.root-servers.net'] = '{{ROOT_ADDR}}'})
+{% if QMIN == "false" %}
+option('NO_MINIMIZE', true)
+{% else %}
+option('NO_MINIMIZE', false)
+{% endif %}
+{% if DO_NOT_QUERY_LOCALHOST == "false" %}
+option('ALLOW_LOCAL', true)
+{% else %}
+option('ALLOW_LOCAL', false)
+{% endif %}
+
+{% if HARDEN_GLUE == "true" %}
+mode('normal')
+{% else %}
+mode('permissive')
+{% endif %}
+-- Always retry failing resolver
+option('NO_THROTTLE', true)
+
+{% for TAF in TRUST_ANCHOR_FILES %}
+trust_anchors.add_file('{{TAF}}')
+{% endfor %}
+trust_anchors.set_insecure({
+{% for DI in NEGATIVE_TRUST_ANCHORS %}
+"{{DI}}",
+{% endfor %}
+})
+
+
+{% if FEATURES.min_ttl is defined %}
+cache.min_ttl({{FEATURES.min_ttl}})
+{% endif %}
+
+{% if FEATURES.max_ttl is defined %}
+cache.max_ttl({{FEATURES.max_ttl}})
+{% endif %}
+
+{% if FEATURES.dns64_prefix is defined %}
+modules.load( 'dns64')
+dns64.config('{{FEATURES.dns64_prefix}}')
+{% endif %}
+
+{% if FEATURES.static_hint_name is defined %}
+{% if FEATURES.static_hint_addr is defined %}
+hints['{{FEATURES.static_hint_name}}'] = '{{FEATURES.static_hint_addr}}'
+{% endif %}
+{% endif %}
+
+{% if FEATURES.renumber_src is defined %}
+{% if FEATURES.renumber_dst is defined %}
+modules.load( 'renumber')
+renumber.config({{ '{{' }}'{{FEATURES.renumber_src}}','{{FEATURES.renumber_dst}}' {{ '}}' }})
+{% endif %}
+{% endif %}
+
+{% for policy in FEATURES.policy %}
+{{policy}}
+{% endfor %}
+
+{% if FEATURES.view is defined %}
+modules.load( 'view')
+{% for view in FEATURES.view %}
+{{view}}
+{% endfor %}
+{% endif %}
+
+{% if FEATURES.workarounds is defined %}
+modules = { 'workarounds < iterate' }
+{% endif %}
+
+-- Disable RFC8145 signaling, scenario doesn't provide expected ansers
+if ta_signal_query then
+ modules.unload('ta_signal_query')
+end
+
+-- Disable RFC8109 priming, scenario doesn't provide expected ansers
+if priming then
+ modules.unload('priming')
+end
+
+-- Disable this module because it make one priming query.
+if detect_time_skew then
+ modules.unload('detect_time_skew')
+end
+
+verbose(true)
+
+-- Self-checks on globals
+assert(help() ~= nil)
+assert(worker.id ~= nil)
+-- Self-checks on facilities
+assert(cache.count() == 0)
+assert(cache.stats() ~= nil)
+assert(cache.backends() ~= nil)
+assert(worker.stats() ~= nil)
+assert(net.interfaces() ~= nil)
+-- Self-checks on loaded stuff
+assert(net.list()['{{SELF_ADDR}}'])
+assert(#modules.list() > 0)
+-- Self-check timers
+ev = event.recurrent(1 * sec, function (ev) return 1 end)
+event.cancel(ev)
+ev = event.after(0, function (ev) return 1 end)
diff --git a/tests/deckard/template/pdns_dnssec.j2 b/tests/deckard/template/pdns_dnssec.j2
new file mode 100644
index 0000000..fbb00d9
--- /dev/null
+++ b/tests/deckard/template/pdns_dnssec.j2
@@ -0,0 +1,5 @@
+-- only DS records are accepted, DNSKEY records will cause errors
+-- addDS takes 2 arguments, the node in the DNS-tree and the data of the corresponding DS record
+{% for TA in TRUST_ANCHORS %}
+addDS('{{TA.split()[0]}}', '{{' '.join(TA.split()[-4:])}}')
+{% endfor %}
diff --git a/tests/deckard/template/pdns_recursor.j2 b/tests/deckard/template/pdns_recursor.j2
new file mode 100644
index 0000000..5e6c091
--- /dev/null
+++ b/tests/deckard/template/pdns_recursor.j2
@@ -0,0 +1,312 @@
+# Autogenerated configuration file template
+#################################
+# aaaa-additional-processing turn on to do AAAA additional processing (slow)
+#
+# aaaa-additional-processing=off
+
+#################################
+# allow-from If set, only allow these comma separated netmasks to recurse
+#
+#allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10
+allow-from=
+
+#################################
+# allow-from-file If set, load allowed netmasks from this file
+#
+# allow-from-file=
+
+#################################
+# auth-can-lower-ttl If we follow RFC 2181 to the letter, an authoritative server can lower the TTL of NS records
+#
+# auth-can-lower-ttl=off
+
+#################################
+# auth-zones Zones for which we have authoritative data, comma separated domain=file pairs
+#
+# auth-zones=
+
+#################################
+# chroot switch to chroot jail
+#
+# chroot=
+
+#################################
+# client-tcp-timeout Timeout in seconds when talking to TCP clients
+#
+# client-tcp-timeout=2
+
+#################################
+# config-dir Location of configuration directory (recursor.conf)
+#
+# config-dir=/etc/powerdns/
+config-dir={{WORKING_DIR}}
+
+#################################
+# daemon Operate as a daemon
+#
+daemon=no
+
+#################################
+# delegation-only Which domains we only accept delegations from
+#
+# delegation-only=
+
+#################################
+# disable-edns Disable EDNS
+#
+# disable-edns=
+
+#################################
+# disable-edns-ping Disable EDNSPing
+#
+# disable-edns-ping=no
+
+#################################
+# disable-packetcache Disable packetcache
+#
+# disable-packetcache=no
+
+dnssec={% if TRUST_ANCHORS|length > 0 %}validate{%else%}process{%endif%}
+
+#################################
+# dont-query If set, do not query these netmasks for DNS data
+#
+# dont-query=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10
+dont-query=
+
+#################################
+# entropy-source If set, read entropy from this file
+#
+# entropy-source=/dev/urandom
+
+#################################
+# etc-hosts-file Path to 'hosts' file
+#
+# etc-hosts-file=/etc/hosts
+
+#################################
+# export-etc-hosts If we should serve up contents from /etc/hosts
+#
+# export-etc-hosts=off
+
+#################################
+# forward-zones Zones for which we forward queries, comma separated domain=ip pairs
+#
+# forward-zones=
+
+#################################
+# forward-zones-file File with (+)domain=ip pairs for forwarding
+#
+# forward-zones-file=
+
+#################################
+# forward-zones-recurse Zones for which we forward queries with recursion bit, comma separated domain=ip pairs
+#
+# forward-zones-recurse=
+
+#################################
+# hint-file If set, load root hints from this file
+#
+# hint-file=
+hint-file=hints.pdns
+
+#################################
+# ignore-rd-bit Assume each packet requires recursion, for compatability
+#
+# ignore-rd-bit=off
+
+#################################
+# local-address IP addresses to listen on, separated by spaces or commas. Also accepts ports.
+#
+local-address={{SELF_ADDR}}
+
+#################################
+# local-port port to listen on
+#
+local-port=53
+
+#################################
+# log-common-errors If we should log rather common errors
+#
+# log-common-errors=yes
+
+#################################
+# logging-facility Facility to log messages as. 0 corresponds to local0
+#
+# logging-facility=
+
+lua-config-file={{WORKING_DIR}}/dnssec.lua
+
+#################################
+# lua-dns-script Filename containing an optional 'lua' script that will be used to modify dns answers
+#
+# lua-dns-script=
+
+#################################
+# max-cache-entries If set, maximum number of entries in the main cache
+#
+# max-cache-entries=1000000
+max-cache-entries=1000000
+
+#################################
+# max-cache-ttl maximum number of seconds to keep a cached entry in memory
+#
+# max-cache-ttl=86400
+
+#################################
+# max-mthreads Maximum number of simultaneous Mtasker threads
+#
+# max-mthreads=2048
+
+#################################
+# max-negative-ttl maximum number of seconds to keep a negative cached entry in memory
+#
+# max-negative-ttl=3600
+
+#################################
+# max-packetcache-entries maximum number of entries to keep in the packetcache
+#
+# max-packetcache-entries=500000
+
+#################################
+# max-tcp-clients Maximum number of simultaneous TCP clients
+#
+# max-tcp-clients=128
+
+#################################
+# max-tcp-per-client If set, maximum number of TCP sessions per client (IP address)
+#
+# max-tcp-per-client=0
+
+#################################
+# network-timeout Wait this nummer of milliseconds for network i/o
+#
+# network-timeout=1500
+
+#################################
+# no-shuffle Don't change
+#
+# no-shuffle=off
+
+#################################
+# packetcache-servfail-ttl maximum number of seconds to keep a cached servfail entry in packetcache
+#
+# packetcache-servfail-ttl=60
+
+#################################
+# packetcache-ttl maximum number of seconds to keep a cached entry in packetcache
+#
+# packetcache-ttl=3600
+
+#################################
+# pdns-distributes-queries If PowerDNS itself should distribute queries over threads (EXPERIMENTAL)
+#
+# pdns-distributes-queries=no
+
+#################################
+# processes Launch this number of processes (EXPERIMENTAL, DO NOT CHANGE)
+#
+# processes=1
+
+#################################
+# query-local-address Source IP address for sending queries
+#
+query-local-address=0.0.0.0
+
+#################################
+# query-local-address6 Source IPv6 address for sending queries
+query-local-address6=::
+
+#################################
+# quiet Suppress logging of questions and answers
+#
+quiet=no
+
+#################################
+# remotes-ringbuffer-entries maximum number of packets to store statistics for
+#
+# remotes-ringbuffer-entries=0
+
+security-poll-suffix=
+
+#################################
+# serve-rfc1918 If we should be authoritative for RFC 1918 private IP space
+#
+serve-rfc1918=no
+
+#################################
+# server-id Returned when queried for 'server.id' TXT or NSID, defaults to hostname
+#
+# server-id=
+
+#################################
+# setgid If set, change group id to this gid for more security
+#
+#setgid=pdns
+
+#################################
+# setuid If set, change user id to this uid for more security
+#
+#setuid=pdns
+
+#################################
+# single-socket If set, only use a single socket for outgoing queries
+#
+# single-socket=off
+
+#################################
+# soa-minimum-ttl Don't change
+#
+# soa-minimum-ttl=0
+
+#################################
+# soa-serial-offset Don't change
+#
+# soa-serial-offset=0
+
+#################################
+# socket-dir Where the controlsocket will live
+#
+socket-dir={{WORKING_DIR}}
+
+#################################
+# socket-group Group of socket
+#
+# socket-group=
+
+#################################
+# socket-mode Permissions for socket
+#
+# socket-mode=
+
+#################################
+# socket-owner Owner of socket
+#
+# socket-owner=
+
+#################################
+# spoof-nearmiss-max If non-zero, assume spoofing after this many near misses
+#
+# spoof-nearmiss-max=20
+
+#################################
+# stack-size stack size per mthread
+#
+# stack-size=200000
+
+#################################
+# threads Launch this number of threads
+#
+threads=1
+
+#################################
+# trace if we should output heaps of logging
+#
+trace=on
+
+#################################
+# version-string string reported on version.pdns or version.bind
+#
+# version-string=PowerDNS Recursor 3.3 $Id: pdns_recursor.cc 1712 2010-09-11 13:40:03Z ahu $
+
+
diff --git a/tests/deckard/template/unbound.j2 b/tests/deckard/template/unbound.j2
new file mode 100644
index 0000000..722374b
--- /dev/null
+++ b/tests/deckard/template/unbound.j2
@@ -0,0 +1,780 @@
+#
+# Example configuration file.
+#
+# See unbound.conf(5) man page, version 1.5.10.
+#
+# this is a comment.
+
+#Use this to include other text into the file.
+#include: "otherfile.conf"
+
+# The server clause sets the main parameters.
+server:
+ # whitespace is not necessary, but looks cleaner.
+
+ # verbosity number, 0 is least verbose. 1 is default.
+ verbosity: 3
+
+ # print statistics to the log (for every thread) every N seconds.
+ # Set to "" or 0 to disable. Default is disabled.
+ # Needs to be disabled for munin plugin
+ statistics-interval: 0
+
+ # enable cumulative statistics, without clearing them after printing.
+ # Needs to be disabled for munin plugin
+ statistics-cumulative: no
+
+ # enable extended statistics (query types, answer codes, status)
+ # printed from unbound-control. default off, because of speed.
+ # Needs to be enabled for munin plugin
+ extended-statistics: yes
+
+ # number of threads to create. 1 disables threading.
+ num-threads: 1
+
+ # specify the interfaces to answer queries from by ip-address.
+ # The default is to listen to localhost (127.0.0.1 and ::1).
+ # specify 0.0.0.0 and ::0 to bind to all available interfaces.
+ # specify every interface[@port] on a new 'interface:' labelled line.
+ # The listen interfaces are not changed on reload, only on restart.
+ interface: {{SELF_ADDR}}
+ # interface: ::0
+ # interface: 192.0.2.153
+ # interface: 192.0.2.154
+ # interface: 192.0.2.154@5003
+ # interface: 2001:DB8::5
+ #
+ # for dns over tls and raw dns over port 80
+ # interface: 0.0.0.0@443
+ # interface: ::0@443
+ # interface: 0.0.0.0@80
+ # interface: ::0@80
+
+ # enable this feature to copy the source address of queries to reply.
+ # Socket options are not supported on all platforms. experimental.
+ # interface-automatic: yes
+ #
+ # NOTE: Enable this option when specifying interface 0.0.0.0 or ::0
+ # NOTE: Disabled per Fedora policy not to listen to * on default install
+ # NOTE: If deploying on non-default port, eg 80/443, this needs to be disabled
+ interface-automatic: no
+
+ # port to answer queries from
+ # port: 53
+
+ # specify the interfaces to send outgoing queries to authoritative
+ # server from by ip-address. If none, the default (all) interface
+ # is used. Specify every interface on a 'outgoing-interface:' line.
+ # outgoing-interface: 192.0.2.153
+ # outgoing-interface: 2001:DB8::5
+ # outgoing-interface: 2001:DB8::6
+
+ # Specify a netblock to use remainder 64 bits as random bits for
+ # upstream queries. Uses freebind option (Linux).
+ # outgoing-interface: 2001:DB8::/64
+ # Also (Linux:) ip -6 addr add 2001:db8::/64 dev lo
+ # And: ip -6 route add local 2001:db8::/64 dev lo
+ # And set prefer-ip6: yes to use the ip6 randomness from a netblock.
+ # Set this to yes to prefer ipv6 upstream servers over ipv4.
+ # prefer-ip6: no
+
+ # number of ports to allocate per thread, determines the size of the
+ # port range that can be open simultaneously. About double the
+ # num-queries-per-thread, or, use as many as the OS will allow you.
+ # outgoing-range: 4096
+
+ # permit unbound to use this port number or port range for
+ # making outgoing queries, using an outgoing interface.
+ # Only ephemeral ports are allowed by SElinux
+ #outgoing-port-permit: 32768-60999
+
+ # deny unbound the use this of port number or port range for
+ # making outgoing queries, using an outgoing interface.
+ # Use this to make sure unbound does not grab a UDP port that some
+ # other server on this computer needs. The default is to avoid
+ # IANA-assigned port numbers.
+ # If multiple outgoing-port-permit and outgoing-port-avoid options
+ # are present, they are processed in order.
+ # Our SElinux policy does not allow non-ephemeral ports to be used
+ #outgoing-port-avoid: 0-32767
+
+ # number of outgoing simultaneous tcp buffers to hold per thread.
+ # outgoing-num-tcp: 10
+
+ # number of incoming simultaneous tcp buffers to hold per thread.
+ # incoming-num-tcp: 10
+
+ # buffer size for UDP port 53 incoming (SO_RCVBUF socket option).
+ # 0 is system default. Use 4m to catch query spikes for busy servers.
+ # so-rcvbuf: 0
+
+ # buffer size for UDP port 53 outgoing (SO_SNDBUF socket option).
+ # 0 is system default. Use 4m to handle spikes on very busy servers.
+ # so-sndbuf: 0
+
+ # use SO_REUSEPORT to distribute queries over threads.
+ # so-reuseport: no
+
+ # use IP_TRANSPARENT so the interface: addresses can be non-local
+ # and you can config non-existing IPs that are going to work later on
+ # (uses IP_BINDANY on FreeBSD).
+ #ip-transparent: yes
+
+ # use IP_FREEBIND so the interface: addresses can be non-local
+ # and you can bind to nonexisting IPs and interfaces that are down.
+ # Linux only. On Linux you also have ip-transparent that is similar.
+ # ip-freebind: no
+
+ # EDNS reassembly buffer to advertise to UDP peers (the actual buffer
+ # is set with msg-buffer-size). 1480 can solve fragmentation (timeouts).
+ # edns-buffer-size: 4096
+
+ # Maximum UDP response size (not applied to TCP response).
+ # Suggested values are 512 to 4096. Default is 4096. 65536 disables it.
+ # 3072 causes +dnssec any isc.org queries to need TC=1. Helps mitigating DDOS
+ #max-udp-size: 3072
+
+ # buffer size for handling DNS data. No messages larger than this
+ # size can be sent or received, by UDP or TCP. In bytes.
+ # msg-buffer-size: 65552
+
+ # the amount of memory to use for the message cache.
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # msg-cache-size: 4m
+
+ # the number of slabs to use for the message cache.
+ # the number of slabs must be a power of 2.
+ # more slabs reduce lock contention, but fragment memory usage.
+ # msg-cache-slabs: 4
+
+ # the number of queries that a thread gets to service.
+ # num-queries-per-thread: 1024
+
+ # if very busy, 50% queries run to completion, 50% get timeout in msec
+ # jostle-timeout: 200
+
+ # msec to wait before close of port on timeout UDP. 0 disables.
+ # delay-close: 0
+
+ # the amount of memory to use for the RRset cache.
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # rrset-cache-size: 4m
+
+ # the number of slabs to use for the RRset cache.
+ # the number of slabs must be a power of 2.
+ # more slabs reduce lock contention, but fragment memory usage.
+ # rrset-cache-slabs: 4
+
+ # the time to live (TTL) value lower bound, in seconds. Default 0.
+ # If more than an hour could easily give trouble due to stale data.
+ # cache-min-ttl: 0
+
+ # the time to live (TTL) value cap for RRsets and messages in the
+ # cache. Items are not cached for longer. In seconds.
+ # cache-max-ttl: 86400
+
+ # the time to live (TTL) value cap for negative responses in the cache
+ # cache-max-negative-ttl: 3600
+
+ # the time to live (TTL) value for cached roundtrip times, lameness and
+ # EDNS version information for hosts. In seconds.
+ # infra-host-ttl: 900
+
+ # minimum wait time for responses, increase if uplink is long. In msec.
+ # infra-cache-min-rtt: 50
+
+ # the number of slabs to use for the Infrastructure cache.
+ # the number of slabs must be a power of 2.
+ # more slabs reduce lock contention, but fragment memory usage.
+ # infra-cache-slabs: 4
+
+ # the maximum number of hosts that are cached (roundtrip, EDNS, lame).
+ # infra-cache-numhosts: 10000
+
+ # define a number of tags here, use with local-zone, access-control.
+ # repeat the define-tag statement to add additional tags.
+ # define-tag: "tag1 tag2 tag3"
+
+ # Enable IPv4, "yes" or "no".
+ # do-ip4: yes
+
+ # Enable IPv6, "yes" or "no".
+ # do-ip6: yes
+
+ # Enable UDP, "yes" or "no".
+ # NOTE: if setting up an unbound on tls443 for public use, you might want to
+ # disable UDP to avoid being used in DNS amplification attacks.
+ # do-udp: yes
+
+ # Enable TCP, "yes" or "no".
+ # do-tcp: yes
+
+ # upstream connections use TCP only (and no UDP), "yes" or "no"
+ # useful for tunneling scenarios, default no.
+ # tcp-upstream: no
+
+ # Maximum segment size (MSS) of TCP socket on which the server
+ # responds to queries. Default is 0, system default MSS.
+ # tcp-mss: 0
+
+ # Maximum segment size (MSS) of TCP socket for outgoing queries.
+ # Default is 0, system default MSS.
+ # outgoing-tcp-mss: 0
+
+ # Detach from the terminal, run in background, "yes" or "no".
+ do-daemonize: no
+
+ # control which clients are allowed to make (recursive) queries
+ # to this server. Specify classless netblocks with /size and action.
+ # By default everything is refused, except for localhost.
+ # Choose deny (drop message), refuse (polite error reply),
+ # allow (recursive ok), allow_snoop (recursive and nonrecursive ok)
+ # deny_non_local (drop queries unless can be answered from local-data)
+ # refuse_non_local (like deny_non_local but polite error reply).
+ # access-control: 0.0.0.0/0 refuse
+ # access-control: 127.0.0.0/8 allow
+ access-control: ::0/0 allow_snoop
+ # access-control: ::1 allow
+ # access-control: ::ffff:127.0.0.1 allow
+
+ # tag access-control with list of tags (in "" with spaces between)
+ # Clients using this access control element use localzones that
+ # are tagged with one of these tags.
+ # access-control-tag: 192.0.2.0/24 "tag2 tag3"
+
+ # set action for particular tag for given access control element
+ # if you have multiple tag values, the tag used to lookup the action
+ # is the first tag match between access-control-tag and local-zone-tag
+ # where "first" comes from the order of the define-tag values.
+ # access-control-tag-action: 192.0.2.0/24 tag3 refuse
+
+ # set redirect data for particular tag for access control element
+ # access-control-tag-data: 192.0.2.0/24 tag2 "A 127.0.0.1"
+
+ # if given, a chroot(2) is done to the given directory.
+ # i.e. you can chroot to the working directory, for example,
+ # for extra security, but make sure all files are in that directory.
+ #
+ # If chroot is enabled, you should pass the configfile (from the
+ # commandline) as a full path from the original root. After the
+ # chroot has been performed the now defunct portion of the config
+ # file path is removed to be able to reread the config after a reload.
+ #
+ # All other file paths (working dir, logfile, roothints, and
+ # key files) can be specified in several ways:
+ # o as an absolute path relative to the new root.
+ # o as a relative path to the working directory.
+ # o as an absolute path relative to the original root.
+ # In the last case the path is adjusted to remove the unused portion.
+ #
+ # The pid file can be absolute and outside of the chroot, it is
+ # written just prior to performing the chroot and dropping permissions.
+ #
+ # Additionally, unbound may need to access /dev/random (for entropy).
+ # How to do this is specific to your OS.
+ #
+ # If you give "" no chroot is performed. The path must not end in a /.
+ # chroot: "/var/lib/unbound"
+ chroot: ""
+
+ # if given, user privileges are dropped (after binding port),
+ # and the given username is assumed. Default is user "unbound".
+ # If you give "" no privileges are dropped.
+ username: ""
+
+ # the working directory. The relative files in this config are
+ # relative to this directory. If you give "" the working directory
+ # is not changed.
+ # If you give a server: directory: dir before include: file statements
+ # then those includes can be relative to the working directory.
+ directory: ""
+
+ # the log file, "" means log to stderr.
+ # Use of this option sets use-syslog to "no".
+ # logfile: ""
+
+ # Log to syslog(3) if yes. The log facility LOG_DAEMON is used to
+ # log to, with identity "unbound". If yes, it overrides the logfile.
+ use-syslog: no
+
+ # print UTC timestamp in ascii to logfile, default is epoch in seconds.
+ log-time-ascii: yes
+
+ # print one line with time, IP, name, type, class for every query.
+ log-queries: yes
+
+ # the pid file. Can be an absolute path outside of chroot/work dir.
+ pidfile: "unbound.pid"
+
+ # file to read root hints from.
+ # get one from https://www.internic.net/domain/named.cache
+ root-hints: "hints.zone"
+
+ # enable to not answer id.server and hostname.bind queries.
+ # hide-identity: no
+
+ # enable to not answer version.server and version.bind queries.
+ # hide-version: no
+
+ # the identity to report. Leave "" or default to return hostname.
+ # identity: ""
+
+ # the version to report. Leave "" or default to return package version.
+ # version: ""
+
+ # the target fetch policy.
+ # series of integers describing the policy per dependency depth.
+ # The number of values in the list determines the maximum dependency
+ # depth the recursor will pursue before giving up. Each integer means:
+ # -1 : fetch all targets opportunistically,
+ # 0: fetch on demand,
+ # positive value: fetch that many targets opportunistically.
+ # Enclose the list of numbers between quotes ("").
+ target-fetch-policy: "0 0 0 0 0"
+
+ # Harden against very small EDNS buffer sizes.
+ # harden-short-bufsize: no
+
+ # Harden against unseemly large queries.
+ # harden-large-queries: no
+
+ # Harden against out of zone rrsets, to avoid spoofing attempts.
+
+ {% if HARDEN_GLUE == "true" %}
+ harden-glue: yes
+ {% else %}
+ harden-glue: no
+ {% endif %}
+
+ # Harden against receiving dnssec-stripped data. If you turn it
+ # off, failing to validate dnskey data for a trustanchor will
+ # trigger insecure mode for that zone (like without a trustanchor).
+ # Default on, which insists on dnssec data for trust-anchored zones.
+ harden-dnssec-stripped: yes
+
+ # Harden against queries that fall under dnssec-signed nxdomain names.
+ harden-below-nxdomain: yes
+
+ # Harden the referral path by performing additional queries for
+ # infrastructure data. Validates the replies (if possible).
+ # Default off, because the lookups burden the server. Experimental
+ # implementation of draft-wijngaards-dnsext-resolver-side-mitigation.
+ harden-referral-path: yes
+
+ # Harden against algorithm downgrade when multiple algorithms are
+ # advertised in the DS record. If no, allows the weakest algorithm
+ # to validate the zone.
+ harden-algo-downgrade: yes
+
+ # Sent minimum amount of information to upstream servers to enhance
+ # privacy. Only sent minimum required labels of the QNAME and set QTYPE
+ # to NS when possible.
+ {% if QMIN == "false" %}
+ qname-minimisation: no
+ {% else %}
+ qname-minimisation: yes
+ {% endif %}
+
+ # Use 0x20-encoded random bits in the query to foil spoof attempts.
+ # This feature is an experimental implementation of draft dns-0x20.
+ use-caps-for-id: yes
+
+ # Domains (and domains in them) without support for dns-0x20 and
+ # the fallback fails because they keep sending different answers.
+ # caps-whitelist: "licdn.com"
+ # caps-whitelist: "senderbase.org"
+
+ # Enforce privacy of these addresses. Strips them away from answers.
+ # It may cause DNSSEC validation to additionally mark it as bogus.
+ # Protects against 'DNS Rebinding' (uses browser as network proxy).
+ # Only 'private-domain' and 'local-data' names are allowed to have
+ # these private addresses. No default.
+ # private-address: 10.0.0.0/8
+ # private-address: 172.16.0.0/12
+ # private-address: 192.168.0.0/16
+ # private-address: 169.254.0.0/16
+ # private-address: fd00::/8
+ # private-address: fe80::/10
+ # private-address: ::ffff:0:0/96
+
+ # Allow the domain (and its subdomains) to contain private addresses.
+ # local-data statements are allowed to contain private addresses too.
+ # private-domain: "example.com"
+
+ # If nonzero, unwanted replies are not only reported in statistics,
+ # but also a running total is kept per thread. If it reaches the
+ # threshold, a warning is printed and a defensive action is taken,
+ # the cache is cleared to flush potential poison out of it.
+ # A suggested value is 10000000, the default is 0 (turned off).
+ unwanted-reply-threshold: 10000000
+
+ # Do not query the following addresses. No DNS queries are sent there.
+ # List one address per entry. List classless netblocks with /size,
+ # do-not-query-address: 127.0.0.1/8
+ # do-not-query-address: ::1
+
+ # if yes, the above default do-not-query-address entries are present.
+ # if no, localhost can be queried (for testing and debugging).
+ {% if DO_NOT_QUERY_LOCALHOST == "false" %}
+ do-not-query-localhost: no
+ {% else %}
+ do-not-query-localhost: yes
+ {% endif %}
+
+ # if yes, perform prefetching of almost expired message cache entries.
+ prefetch: no
+
+ # if yes, perform key lookups adjacent to normal lookups.
+ prefetch-key: no
+
+ # if yes, Unbound rotates RRSet order in response.
+ rrset-roundrobin: yes
+
+ # if yes, Unbound doesn't insert authority/additional sections
+ # into response messages when those sections are not required.
+ minimal-responses: no
+
+ # true to disable DNSSEC lameness check in iterator.
+ # disable-dnssec-lame-check: no
+
+ # module configuration of the server. A string with identifiers
+ # separated by spaces. Syntax: "[dns64] [validator] iterator"
+ # module-config: "validator iterator"
+
+ # File with trusted keys, kept uptodate using RFC5011 probes,
+ # initial file like trust-anchor-file, then it stores metadata.
+ # Use several entries, one per domain name, to track multiple zones.
+ #
+ # If you want to perform DNSSEC validation, run unbound-anchor before
+ # you start unbound (i.e. in the system boot scripts). And enable:
+ # Please note usage of unbound-anchor root anchor is at your own risk
+ # and under the terms of our LICENSE (see that file in the source).
+ # auto-trust-anchor-file: "/var/lib/unbound/root.key"
+
+ {% for TAF in TRUST_ANCHOR_FILES %}
+ auto-trust-anchor-file: "{{TAF}}"
+ {% endfor %}
+
+ # File with DLV trusted keys. Same format as trust-anchor-file.
+ # There can be only one DLV configured, it is trusted from root down.
+ # DLV is going to be decommissioned. Please do not use it any more.
+ # dlv-anchor-file: "dlv.isc.org.key"
+
+ # File with trusted keys for validation. Specify more than one file
+ # with several entries, one file per entry.
+ # Zone file format, with DS and DNSKEY entries.
+ # Note this gets out of date, use auto-trust-anchor-file please.
+
+ # Trusted key for validation. DS or DNSKEY. specify the RR on a
+ # single line, surrounded by "". TTL is ignored. class is IN default.
+ # Note this gets out of date, use auto-trust-anchor-file please.
+ # (These examples are from August 2007 and may not be valid anymore).
+ # trust-anchor: "jelte.nlnetlabs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A"
+
+ # File with trusted keys for validation. Specify more than one file
+ # with several entries, one file per entry. Like trust-anchor-file
+ # but has a different file format. Format is BIND-9 style format,
+ # the trusted-keys { name flag proto algo "key"; }; clauses are read.
+ # you need external update procedures to track changes in keys.
+ # trusted-keys-file: ""
+ #
+ #trusted-keys-file: /etc/unbound/keys.d/*.key
+ #auto-trust-anchor-file: "/var/lib/unbound/root.key"
+
+ # Ignore chain of trust. Domain is treated as insecure.
+ # domain-insecure: "example.com"
+ {% for DI in NEGATIVE_TRUST_ANCHORS %}
+ domain-insecure: "{{DI}}"
+ {% endfor %}
+
+
+ # Override the date for validation with a specific fixed date.
+ # Do not set this unless you are debugging signature inception
+ # and expiration. "" or "0" turns the feature off. -1 ignores date.
+ # val-override-date: ""
+
+ # The time to live for bogus data, rrsets and messages. This avoids
+ # some of the revalidation, until the time interval expires. in secs.
+ # val-bogus-ttl: 60
+
+ # The signature inception and expiration dates are allowed to be off
+ # by 10% of the signature lifetime (expir-incep) from our local clock.
+ # This leeway is capped with a minimum and a maximum. In seconds.
+ # val-sig-skew-min: 3600
+ # val-sig-skew-max: 86400
+
+ # Should additional section of secure message also be kept clean of
+ # unsecure data. Useful to shield the users of this validator from
+ # potential bogus data in the additional section. All unsigned data
+ # in the additional section is removed from secure messages.
+ val-clean-additional: yes
+
+ # Turn permissive mode on to permit bogus messages. Thus, messages
+ # for which security checks failed will be returned to clients,
+ # instead of SERVFAIL. It still performs the security checks, which
+ # result in interesting log files and possibly the AD bit in
+ # replies if the message is found secure. The default is off.
+ # NOTE: TURNING THIS ON DISABLES ALL DNSSEC SECURITY
+ val-permissive-mode: no
+
+ # Ignore the CD flag in incoming queries and refuse them bogus data.
+ # Enable it if the only clients of unbound are legacy servers (w2008)
+ # that set CD but cannot validate themselves.
+ # ignore-cd-flag: no
+
+ # Have the validator log failed validations for your diagnosis.
+ # 0: off. 1: A line per failed user query. 2: With reason and bad IP.
+ val-log-level: 2
+
+ # It is possible to configure NSEC3 maximum iteration counts per
+ # keysize. Keep this table very short, as linear search is done.
+ # A message with an NSEC3 with larger count is marked insecure.
+ # List in ascending order the keysize and count values.
+ # val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500"
+
+ # instruct the auto-trust-anchor-file probing to add anchors after ttl.
+ # add-holddown: 2592000 # 30 days
+
+ # instruct the auto-trust-anchor-file probing to del anchors after ttl.
+ # del-holddown: 2592000 # 30 days
+
+ # auto-trust-anchor-file probing removes missing anchors after ttl.
+ # If the value 0 is given, missing anchors are not removed.
+ # keep-missing: 31622400 # 366 days
+
+ # debug option that allows very small holddown times for key rollover,
+ # otherwise the RFC mandates probe intervals must be at least 1 hour.
+ # permit-small-holddown: no
+
+ # the amount of memory to use for the key cache.
+ # plain value in bytes or you can append k, m or G. default is "4Mb".
+ # key-cache-size: 4m
+
+ # the number of slabs to use for the key cache.
+ # the number of slabs must be a power of 2.
+ # more slabs reduce lock contention, but fragment memory usage.
+ # key-cache-slabs: 4
+
+ # the amount of memory to use for the negative cache (used for DLV).
+ # plain value in bytes or you can append k, m or G. default is "1Mb".
+ # neg-cache-size: 1m
+
+ # By default, for a number of zones a small default 'nothing here'
+ # reply is built-in. Query traffic is thus blocked. If you
+ # wish to serve such zone you can unblock them by uncommenting one
+ # of the nodefault statements below.
+ # You may also have to use domain-insecure: zone to make DNSSEC work,
+ # unless you have your own trust anchors for this zone.
+ local-zone: "test." nodefault
+ local-zone: "localhost." nodefault
+ local-zone: "127.in-addr.arpa." nodefault
+ local-zone: "1.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.ip6.arpa." nodefault
+ local-zone: "onion." nodefault
+ local-zone: "10.in-addr.arpa." nodefault
+ local-zone: "16.172.in-addr.arpa." nodefault
+ local-zone: "17.172.in-addr.arpa." nodefault
+ local-zone: "18.172.in-addr.arpa." nodefault
+ local-zone: "19.172.in-addr.arpa." nodefault
+ local-zone: "20.172.in-addr.arpa." nodefault
+ local-zone: "21.172.in-addr.arpa." nodefault
+ local-zone: "22.172.in-addr.arpa." nodefault
+ local-zone: "23.172.in-addr.arpa." nodefault
+ local-zone: "24.172.in-addr.arpa." nodefault
+ local-zone: "25.172.in-addr.arpa." nodefault
+ local-zone: "26.172.in-addr.arpa." nodefault
+ local-zone: "27.172.in-addr.arpa." nodefault
+ local-zone: "28.172.in-addr.arpa." nodefault
+ local-zone: "29.172.in-addr.arpa." nodefault
+ local-zone: "30.172.in-addr.arpa." nodefault
+ local-zone: "31.172.in-addr.arpa." nodefault
+ local-zone: "168.192.in-addr.arpa." nodefault
+ local-zone: "0.in-addr.arpa." nodefault
+ local-zone: "254.169.in-addr.arpa." nodefault
+ local-zone: "2.0.192.in-addr.arpa." nodefault
+ local-zone: "100.51.198.in-addr.arpa." nodefault
+ local-zone: "113.0.203.in-addr.arpa." nodefault
+ local-zone: "255.255.255.255.in-addr.arpa." nodefault
+ local-zone: "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.ip6.arpa." nodefault
+ local-zone: "d.f.ip6.arpa." nodefault
+ local-zone: "8.e.f.ip6.arpa." nodefault
+ local-zone: "9.e.f.ip6.arpa." nodefault
+ local-zone: "a.e.f.ip6.arpa." nodefault
+ local-zone: "b.e.f.ip6.arpa." nodefault
+ local-zone: "8.b.d.0.1.0.0.2.ip6.arpa." nodefault
+ # And for 64.100.in-addr.arpa. to 127.100.in-addr.arpa.
+
+ # If unbound is running service for the local host then it is useful
+ # to perform lan-wide lookups to the upstream, and unblock the
+ # long list of local-zones above. If this unbound is a dns server
+ # for a network of computers, disabled is better and stops information
+ # leakage of local lan information.
+ unblock-lan-zones: yes
+
+ # The insecure-lan-zones option disables validation for
+ # these zones, as if they were all listed as domain-insecure.
+ # insecure-lan-zones: no
+
+ # a number of locally served zones can be configured.
+ # local-zone: <zone> <type>
+ # local-data: "<resource record string>"
+ # o deny serves local data (if any), else, drops queries.
+ # o refuse serves local data (if any), else, replies with error.
+ # o static serves local data, else, nxdomain or nodata answer.
+ # o transparent gives local data, but resolves normally for other names
+ # o redirect serves the zone data for any subdomain in the zone.
+ # o nodefault can be used to normally resolve AS112 zones.
+ # o typetransparent resolves normally for other types and other names
+ # o inform resolves normally, but logs client IP address
+ # o inform_deny drops queries and logs client IP address
+ # o always_transparent, always_refuse, always_nxdomain, resolve in
+ # that way but ignore local data for that name.
+ #
+ # defaults are localhost address, reverse for 127.0.0.1 and ::1
+ # and nxdomain for AS112 zones. If you configure one of these zones
+ # the default content is omitted, or you can omit it with 'nodefault'.
+ #
+ # If you configure local-data without specifying local-zone, by
+ # default a transparent local-zone is created for the data.
+ #
+ # You can add locally served data with
+ # local-zone: "local." static
+ # local-data: "mycomputer.local. IN A 192.0.2.51"
+ # local-data: 'mytext.local TXT "content of text record"'
+ #
+ # You can override certain queries with
+ # local-data: "adserver.example.com A 127.0.0.1"
+ #
+ # You can redirect a domain to a fixed address with
+ # (this makes example.com, www.example.com, etc, all go to 192.0.2.3)
+ # local-zone: "example.com" redirect
+ # local-data: "example.com A 192.0.2.3"
+ #
+ # Shorthand to make PTR records, "IPv4 name" or "IPv6 name".
+ # You can also add PTR records using local-data directly, but then
+ # you need to do the reverse notation yourself.
+ # local-data-ptr: "192.0.2.3 www.example.com"
+
+ #include: /etc/unbound/local.d/*.conf
+
+ # tag a localzone with a list of tag names (in "" with spaces between)
+ # local-zone-tag: "example.com" "tag2 tag3"
+
+ # add a netblock specific override to a localzone, with zone type
+ # local-zone-override: "example.com" 192.0.2.0/24 refuse
+
+ # service clients over SSL (on the TCP sockets), with plain DNS inside
+ # the SSL stream. Give the certificate to use and private key.
+ # default is "" (disabled). requires restart to take effect.
+ # ssl-service-key: "/etc/unbound/unbound_server.key"
+ # ssl-service-pem: "/etc/unbound/unbound_server.pem"
+ # ssl-port: 443
+ #
+ # request upstream over SSL (with plain DNS inside the SSL stream).
+ # Default is no. Can be turned on and off with unbound-control.
+ # ssl-upstream: no
+
+ # DNS64 prefix. Must be specified when DNS64 is use.
+ # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4.
+ # dns64-prefix: 64:ff9b::0/96
+
+ # ratelimit for uncached, new queries, this limits recursion effort.
+ # ratelimiting is experimental, and may help against randomqueryflood.
+ # if 0(default) it is disabled, otherwise state qps allowed per zone.
+ # ratelimit: 0
+
+ # ratelimits are tracked in a cache, size in bytes of cache (or k,m).
+ # ratelimit-size: 4m
+ # ratelimit cache slabs, reduces lock contention if equal to cpucount.
+ # ratelimit-slabs: 4
+
+ # 0 blocks when ratelimited, otherwise let 1/xth traffic through
+ # ratelimit-factor: 10
+
+ # override the ratelimit for a specific domain name.
+ # give this setting multiple times to have multiple overrides.
+ # ratelimit-for-domain: example.com 1000
+ # override the ratelimits for all domains below a domain name
+ # can give this multiple times, the name closest to the zone is used.
+ # ratelimit-below-domain: com 1000
+
+# Python config section. To enable:
+# o use --with-pythonmodule to configure before compiling.
+# o list python in the module-config string (above) to enable.
+# o and give a python-script to run.
+python:
+ # Script file to load
+ # python-script: "/etc/unbound/ubmodule-tst.py"
+
+# Remote control config section.
+remote-control:
+ # Enable remote control with unbound-control(8) here.
+ # set up the keys and certificates with unbound-control-setup.
+ # Note: required for unbound-munin package
+ control-enable: no
+
+ # Set to no and use an absolute path as control-interface to use
+ # a unix local named pipe for unbound-control.
+ # control-use-cert: yes
+
+ # what interfaces are listened to for remote control.
+ # give 0.0.0.0 and ::0 to listen to all interfaces.
+ # control-interface: 127.0.0.1
+ # control-interface: ::1
+
+ # port number for remote control operations.
+ # control-port: 8953
+
+ # unbound server key file.
+ #server-key-file: "/etc/unbound/unbound_server.key"
+
+ # unbound server certificate file.
+ #server-cert-file: "/etc/unbound/unbound_server.pem"
+
+ # unbound-control key file.
+ #control-key-file: "/etc/unbound/unbound_control.key"
+
+ # unbound-control certificate file.
+ #control-cert-file: "/etc/unbound/unbound_control.pem"
+
+# Stub and Forward zones
+#include: /etc/unbound/conf.d/*.conf
+
+# Stub zones.
+# Create entries like below, to make all queries for 'example.com' and
+# 'example.org' go to the given list of nameservers. list zero or more
+# nameservers by hostname or by ipaddress. If you set stub-prime to yes,
+# the list is treated as priming hints (default is no).
+# With stub-first yes, it attempts without the stub if it fails.
+# Consider adding domain-insecure: name and local-zone: name nodefault
+# to the server: section if the stub is a locally served zone.
+# stub-zone:
+# name: "example.com"
+# stub-addr: 192.0.2.68
+# stub-prime: no
+# stub-first: no
+# stub-zone:
+# name: "example.org"
+# stub-host: ns.example.com.
+
+# You can now also dynamically create and delete stub-zone's using
+# unbound-control stub_add domain.com 1.2.3.4 5.6.7.8
+# unbound-control stub_remove domain.com 1.2.3.4 5.6.7.8
+
+# Forward zones
+# Create entries like below, to make all queries for 'example.com' and
+# 'example.org' go to the given list of servers. These servers have to handle
+# recursion to other nameservers. List zero or more nameservers by hostname
+# or by ipaddress. Use an entry with name "." to forward all queries.
+# If you enable forward-first, it attempts without the forward if it fails.
+# forward-zone:
+# name: "example.com"
+# forward-addr: 192.0.2.68
+# forward-addr: 192.0.2.73@5355 # forward to port 5355.
+# forward-first: no
+# forward-zone:
+# name: "example.org"
+# forward-host: fwd.example.com
+#
+# You can now also dynamically create and delete forward-zone's using
+# unbound-control forward_add domain.com 1.2.3.4 5.6.7.8
+# unbound-control forward_remove domain.com 1.2.3.4 5.6.7.8
diff --git a/tests/deckard/template/unbound_dnssec.j2 b/tests/deckard/template/unbound_dnssec.j2
new file mode 100644
index 0000000..282dc9f
--- /dev/null
+++ b/tests/deckard/template/unbound_dnssec.j2
@@ -0,0 +1,3 @@
+{% for TA in TRUST_ANCHORS %}
+{{TA}}
+{% endfor %}
diff --git a/tests/deckard/tests/__init__.py b/tests/deckard/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/deckard/tests/__init__.py
diff --git a/tests/deckard/tests/test_deckard.py b/tests/deckard/tests/test_deckard.py
new file mode 100644
index 0000000..50096ea
--- /dev/null
+++ b/tests/deckard/tests/test_deckard.py
@@ -0,0 +1,30 @@
+""" This is unittest file for parse methods in scenario.py """
+import os
+import shutil
+import tempfile
+
+from deckard import create_trust_anchor_files
+
+
+def test_create_trust_anchor_files():
+ """Trust anchors must be into separate files grouped by domain."""
+ anchor1a = u'domain1.com.\t3600\tIN\tDS\t11901 7 1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ anchor1b = u'domain1.com.\t3600\tIN\tDS\t11902 7 1 1111111111111111111111111111111111111111'
+ anchor2a = u'domain2.net.\t3600\tIN\tDS\t59835 7 1 cccccccccccccccccccccccccccccccccccccccc'
+ trust_anchors = {'domain1.com': [anchor1a, anchor1b],
+ 'domain2.net': [anchor2a]}
+
+ tmpdir = tempfile.mkdtemp()
+ try:
+ file_names = create_trust_anchor_files(trust_anchors, tmpdir)
+ assert sorted(file_names) == sorted('{wd}/ta/{f}'.format(wd=tmpdir, f=f)
+ for f in [u'domain1.com.key', u'domain2.net.key'])
+ for path in file_names:
+ with open(path) as ta_file:
+ file_name = os.path.basename(path)
+ assert file_name[-4:] == '.key'
+ domain = file_name[:-4]
+ assert ta_file.read() == ''.join(u'{}\n'.format(ta)
+ for ta in trust_anchors[domain])
+ finally:
+ shutil.rmtree(tmpdir)
diff --git a/tests/deckard/tools/divide_tests.sh b/tests/deckard/tools/divide_tests.sh
new file mode 100644
index 0000000..1856610
--- /dev/null
+++ b/tests/deckard/tools/divide_tests.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+# Sorts .rpl tests into several categories.
+# Takes a diretory with the tests as an argument and moves the test to its subdirectories.
+# Env variable SCRIPT= sets *_run.sh script for finding working tests, default script is kresd_run.sh
+# Env variable DEST= sets output directory where the tests will be copied and divided into subfolders. Default value is working directory.
+
+set -o nounset
+set -o errexit
+
+SOURCE="$1"
+
+SCRIPT=${SCRIPT:-"./../kresd_run.sh"}
+DEST=${DEST:-"."}
+
+rm -rf "$DEST/sorted_tests"
+mkdir "$DEST/sorted_tests"
+for TEST in "$SOURCE/"*.rpl
+do
+ cp "$TEST" "$DEST/sorted_tests"
+done
+
+# Test with the same name is already imported in deckard/sets/resolver
+echo Already imported:
+mkdir -p "$DEST/sorted_tests/imported"
+for TEST in `comm -12 <(ls -F ../sets/resolver/*.rpl | xargs -n 1 basename) <(ls -F "$DEST/sorted_tests" | xargs -n 1 basename)`
+do
+ echo -e '\t' "$TEST"
+ mv "$DEST/sorted_tests/$TEST" "$DEST/sorted_tests/imported"
+done
+
+# Parse failed
+echo Parse failed:
+mkdir -p "$DEST/sorted_tests/parsefail"
+for TEST in "$DEST/sorted_tests/"*.rpl
+do
+ if ! python3 parse.py "$TEST" >/dev/null 2>/dev/null
+ then
+ echo -e '\t' $(basename "$TEST")
+ mv "$TEST" "$DEST/sorted_tests/parsefail"
+ fi
+done
+
+
+# Invalid DSA signatures (common in old testbound tests)
+echo Invalid DSA signatures:
+mkdir -p "$DEST/sorted_tests/invaliddsa"
+for TEST in "$DEST/sorted_tests/"*.rpl
+do
+ if ! python3 invalid_dsa.py "$TEST" >/dev/null 2>/dev/null
+ then
+ echo -e '\t' $(basename "$TEST")
+ mv "$TEST" "$DEST/sorted_tests/invaliddsa"
+ fi
+done
+
+
+# Working in selected script
+echo Working in $SCRIPT:
+mkdir -p "$DEST/sorted_tests/working"
+for TEST in "$DEST/sorted_tests/"*.rpl
+do
+ if TESTS="$(readlink -m $TEST)" $SCRIPT >/dev/null 2>/dev/null
+ then
+ echo -e '\t' $(basename "$TEST")
+ mv "$TEST" "$DEST/sorted_tests/working"
+ fi
+done
+
+echo Others:
+mkdir -p "$DEST/sorted_tests/others"
+for TEST in "$DEST/sorted_tests/"*.rpl
+do
+ echo -e '\t' $(basename "$TEST")
+ mv "$TEST" "$DEST/sorted_tests/others"
+done
+
diff --git a/tests/deckard/tools/invalid_dsa.py b/tests/deckard/tools/invalid_dsa.py
new file mode 100644
index 0000000..fd1c845
--- /dev/null
+++ b/tests/deckard/tools/invalid_dsa.py
@@ -0,0 +1,83 @@
+"""Returns 1 if there is a DNSSEC DSA signature which is not 41 bytes long.\
+0 otherwise.
+"""
+
+import os
+import sys
+import argparse
+import dns
+import pydnstest
+import pydnstest.scenario
+import pydnstest.augwrap
+
+
+def parse(test):
+ """ Parse the test"""
+ _, config = pydnstest.scenario.parse_file(os.path.realpath(test))
+ aug = pydnstest.augwrap.AugeasWrapper(
+ confpath=os.path.realpath(test),
+ lens='Deckard', loadpath="../pydnstest")
+ node = aug.tree
+ return config, node
+
+
+def get_dsakeys(config, node):
+ """ Make list of all DSA keys in the test"""
+ dsakeys = []
+ for conf in config:
+ if conf[0] == "trust-anchor":
+ conf[1] = conf[1][1:-1]
+ trust_anchor = conf[1].split()
+ for i, word in enumerate(trust_anchor):
+ if word == "DS":
+ algorithm = trust_anchor[i + 2]
+ if algorithm in ("3", "DSA"):
+ dsakeys.append(trust_anchor[i + 1])
+
+ for entry in node.match("/scenario/range/entry"):
+ records = list(entry.match("/section/answer/record"))
+ records.extend(list(entry.match("/section/authority/record")))
+ records.extend(list(entry.match("/section/additional/record")))
+
+ for record in records:
+ if record["/type"].value == "DS":
+ if record["/data"].value[1] in ["3", "DSA"]:
+ dsakeys.append(record["/data"].value[2])
+ return dsakeys
+
+
+def check_rrsig(node, dsakeys):
+ """ Find records with wrong lenght of rrsig"""
+ for key in dsakeys: # pylint: disable=too-many-nested-blocks
+ for entry in node.match("/scenario/range/entry"):
+ records = list(entry.match("/section/answer/record"))
+ records.extend(list(entry.match("/section/authority/record")))
+ records.extend(list(entry.match("/section/additional/record")))
+
+ for record in records:
+ if record["/type"].value == "RRSIG":
+ rrset = dns.rrset.from_text(record["/domain"].value, 300,
+ 1, dns.rdatatype.RRSIG,
+ record["/data"].value)
+ if rrset.items[0].key_tag == int(key):
+ if len(rrset.items[0].signature) != 41:
+ return True
+ return False
+
+
+def main():
+ """Returns 1 if there is a DNSSEC DSA signature which is not 41 bytes long. \
+ 0 otherwise."""
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument("file")
+ args = argparser.parse_args()
+ config, node = parse(args.file)
+ dsakeys = get_dsakeys(config, node)
+ bad_rrsig = check_rrsig(node, dsakeys)
+ if bad_rrsig:
+ sys.exit(1)
+ else:
+ sys.exit(0)
+
+
+main()
diff --git a/tests/deckard/tools/parse.py b/tests/deckard/tools/parse.py
new file mode 100644
index 0000000..139b284
--- /dev/null
+++ b/tests/deckard/tools/parse.py
@@ -0,0 +1,21 @@
+"""Returns 0 if the test is parsed, 1 if not."""
+
+import sys
+import os
+import argparse
+import pydnstest
+import pydnstest.scenario
+
+
+def main():
+ """Returns 0 if the test is parsed, 1 if not."""
+ argparser = argparse.ArgumentParser()
+ argparser.add_argument("file")
+ args = argparser.parse_args()
+ if pydnstest.scenario.parse_file(os.path.realpath(args.file)):
+ sys.exit(0)
+ else:
+ sys.exit(1)
+
+
+main()
diff --git a/tests/deckard/unbound_run.sh b/tests/deckard/unbound_run.sh
new file mode 100755
index 0000000..a5189e0
--- /dev/null
+++ b/tests/deckard/unbound_run.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -o errexit -o nounset
+
+RUNDIR="$(dirname "$0")"
+cd "$RUNDIR" && ./run.sh --config configs/unbound.yaml "$@"