From 1f304c04cc2f54d8d2abf35ae3a71599b652bd1a Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 30 Sep 2024 15:06:36 +0000 Subject: [PATCH] import CS bind-9.16.23-24.el9 --- SOURCES/bind-9.11-feature-test-named.patch | 29 +- SOURCES/bind-9.16-CVE-2023-4408-test1.patch | 88 + SOURCES/bind-9.16-CVE-2023-4408-test2.patch | 75 + SOURCES/bind-9.16-CVE-2023-4408.patch | 1735 +++++ SOURCES/bind-9.16-CVE-2023-50387.patch | 478 ++ SOURCES/bind-9.16-CVE-2023-5517.patch | 111 + SOURCES/bind-9.16-CVE-2023-5679.patch | 37 + SOURCES/bind-9.16-CVE-2023-6516-test.patch | 52 + SOURCES/bind-9.16-CVE-2023-6516.patch | 283 + ...bind-9.16-CVE-2024-1737-records-test.patch | 2947 ++++++++ ...ind-9.16-CVE-2024-1737-records-test2.patch | 27 + SOURCES/bind-9.16-CVE-2024-1737-records.patch | 1152 +++ .../bind-9.16-CVE-2024-1737-types-test.patch | 6323 +++++++++++++++++ SOURCES/bind-9.16-CVE-2024-1737-types.patch | 582 ++ SOURCES/bind-9.16-CVE-2024-1737.patch | 364 + SOURCES/bind-9.16-CVE-2024-1975.patch | 318 + SOURCES/bind-9.16-isc-mempool-attach.patch | 40 + SOURCES/bind-9.16-isc_hp-CVE-2023-50387.patch | 66 + SOURCES/bind-9.16-isc_hp-additional.patch | 34 + SOURCES/bind-9.16-system-test-cds.patch | 33 + SOURCES/bind-9.18-CVE-2024-4076.patch | 29 + SPECS/bind.spec | 108 +- 22 files changed, 14901 insertions(+), 10 deletions(-) create mode 100644 SOURCES/bind-9.16-CVE-2023-4408-test1.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-4408-test2.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-4408.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-50387.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-5517.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-5679.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-6516-test.patch create mode 100644 SOURCES/bind-9.16-CVE-2023-6516.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737-records-test.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737-records-test2.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737-records.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737-types-test.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737-types.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1737.patch create mode 100644 SOURCES/bind-9.16-CVE-2024-1975.patch create mode 100644 SOURCES/bind-9.16-isc-mempool-attach.patch create mode 100644 SOURCES/bind-9.16-isc_hp-CVE-2023-50387.patch create mode 100644 SOURCES/bind-9.16-isc_hp-additional.patch create mode 100644 SOURCES/bind-9.16-system-test-cds.patch create mode 100644 SOURCES/bind-9.18-CVE-2024-4076.patch diff --git a/SOURCES/bind-9.11-feature-test-named.patch b/SOURCES/bind-9.11-feature-test-named.patch index 9af8d73..3072063 100644 --- a/SOURCES/bind-9.11-feature-test-named.patch +++ b/SOURCES/bind-9.11-feature-test-named.patch @@ -1,4 +1,4 @@ -From e645046202006750f87531e21e3ff7c26fba3466 Mon Sep 17 00:00:00 2001 +From e9e7069ede766fa5c881517bdae74e2fc6682398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Wed, 30 Jan 2019 14:37:17 +0100 Subject: [PATCH] Create feature-test in source directory @@ -6,16 +6,27 @@ Subject: [PATCH] Create feature-test in source directory Feature-test tool is used in system tests to test compiled in changes. Because we build more variants of named with different configuration, compile feature-test for each of them this way. + +Make gsstsig test supported --- - bin/named/Makefile.in | 12 +++++++++++- + bin/named/Makefile.in | 14 ++++++++++++-- bin/tests/system/conf.sh.in | 2 +- - 2 files changed, 12 insertions(+), 2 deletions(-) + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/named/Makefile.in b/bin/named/Makefile.in -index 37053a7..ed9add2 100644 +index debb906adc..dd894fe934 100644 --- a/bin/named/Makefile.in +++ b/bin/named/Makefile.in -@@ -91,7 +91,7 @@ NOSYMLIBS = ${NSLIBS} ${DNSLIBS} ${BIND9LIBS} \ +@@ -56,7 +56,7 @@ CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include -I. \ + ${LIBXML2_CFLAGS} \ + ${MAXMINDDB_CFLAGS} + +-CDEFINES = @CONTRIB_DLZ@ ++CDEFINES = @USE_GSSAPI@ @CONTRIB_DLZ@ + + CWARNINGS = + +@@ -93,7 +93,7 @@ NOSYMLIBS = ${NSLIBS} ${DNSLIBS} ${BIND9LIBS} \ SUBDIRS = unix @@ -24,7 +35,7 @@ index 37053a7..ed9add2 100644 GEOIP2LINKOBJS = geoip.@O@ -@@ -154,6 +154,16 @@ named@EXEEXT@: ${OBJS} ${DEPLIBS} +@@ -156,6 +156,16 @@ named@EXEEXT@: ${OBJS} ${DEPLIBS} export BASEOBJS="${OBJS} ${UOBJS}"; \ ${FINALBUILDCMD} @@ -42,10 +53,10 @@ index 37053a7..ed9add2 100644 rm -f ${TARGETS} ${OBJS} diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in -index 7934930..e84fde2 100644 +index 9a61622143..f69c5be334 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in -@@ -37,7 +37,7 @@ DELV=$TOP/bin/delv/delv +@@ -38,7 +38,7 @@ DELV=$TOP/bin/delv/delv DIG=$TOP/bin/dig/dig DNSTAPREAD=$TOP/bin/tools/dnstap-read DSFROMKEY=$TOP/bin/dnssec/dnssec-dsfromkey @@ -55,5 +66,5 @@ index 7934930..e84fde2 100644 HOST=$TOP/bin/dig/host IMPORTKEY=$TOP/bin/dnssec/dnssec-importkey -- -2.26.2 +2.45.2 diff --git a/SOURCES/bind-9.16-CVE-2023-4408-test1.patch b/SOURCES/bind-9.16-CVE-2023-4408-test1.patch new file mode 100644 index 0000000..53c42bb --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-4408-test1.patch @@ -0,0 +1,88 @@ +From d258422d3e653621ce6340ba9af0153f8d4e8c07 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Sun, 11 Feb 2024 00:49:32 +0100 +Subject: [PATCH] Test case insensitive matching in isc_ht hash table + implementation + +The case insensitive matching in isc_ht was basically completely broken +as only the hashvalue computation was case insensitive, but the key +comparison was always case sensitive. + +Import only test part from upstream. + +(cherry picked from commit 175655b771fd17b06dfb8cfb29eaadf0f3b6a8b5) +(cherry picked from upstream commit f493a8394102b0aeb101d5dc2f963004c8741175) +--- + lib/isc/tests/ht_test.c | 53 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +diff --git a/lib/isc/tests/ht_test.c b/lib/isc/tests/ht_test.c +index 74d95c1..65502b5 100644 +--- a/lib/isc/tests/ht_test.c ++++ b/lib/isc/tests/ht_test.c +@@ -334,9 +334,62 @@ isc_ht_iterator_test(void **state) { + test_ht_iterator(); + } + ++static void ++isc_ht_case(void **state) { ++ UNUSED(state); ++ ++ isc_ht_t *ht = NULL; ++ void *f = NULL; ++ isc_result_t result = ISC_R_UNSET; ++ ++ unsigned char lower[16] = { "test case" }; ++ unsigned char same[16] = { "test case" }; ++ unsigned char upper[16] = { "TEST CASE" }; ++ unsigned char mixed[16] = { "tEsT CaSe" }; ++ ++ isc_ht_init(&ht, test_mctx, 8, ISC_HT_CASE_SENSITIVE); ++ assert_non_null(ht); ++ ++ result = isc_ht_add(ht, lower, 16, (void *)lower); ++ assert_int_equal(result, ISC_R_SUCCESS); ++ ++ result = isc_ht_add(ht, same, 16, (void *)same); ++ assert_int_equal(result, ISC_R_EXISTS); ++ ++ result = isc_ht_add(ht, upper, 16, (void *)upper); ++ assert_int_equal(result, ISC_R_SUCCESS); ++ ++ result = isc_ht_find(ht, mixed, 16, &f); ++ assert_int_equal(result, ISC_R_NOTFOUND); ++ assert_null(f); ++ ++ isc_ht_destroy(&ht); ++ assert_null(ht); ++ ++ isc_ht_init(&ht, test_mctx, 8, ISC_HT_CASE_INSENSITIVE); ++ assert_non_null(ht); ++ ++ result = isc_ht_add(ht, lower, 16, (void *)lower); ++ assert_int_equal(result, ISC_R_SUCCESS); ++ ++ result = isc_ht_add(ht, same, 16, (void *)same); ++ assert_int_equal(result, ISC_R_EXISTS); ++ ++ result = isc_ht_add(ht, upper, 16, (void *)upper); ++ assert_int_equal(result, ISC_R_EXISTS); ++ ++ result = isc_ht_find(ht, mixed, 16, &f); ++ assert_int_equal(result, ISC_R_SUCCESS); ++ assert_ptr_equal(f, &lower); ++ ++ isc_ht_destroy(&ht); ++ assert_null(ht); ++} ++ + int + main(void) { + const struct CMUnitTest tests[] = { ++ cmocka_unit_test(isc_ht_case), + cmocka_unit_test(isc_ht_20), + cmocka_unit_test(isc_ht_8), + cmocka_unit_test(isc_ht_1), +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-4408-test2.patch b/SOURCES/bind-9.16-CVE-2023-4408-test2.patch new file mode 100644 index 0000000..2fdc9cc --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-4408-test2.patch @@ -0,0 +1,75 @@ +From aa1b0fc4b24d26233db30c85ae3609e54e9fa6d2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Sun, 11 Feb 2024 09:13:43 +0100 +Subject: [PATCH] Add a system test for mixed-case data for the same owner + +We were missing a test where a single owner name would have multiple +types with a different case. The generated RRSIGs and NSEC records will +then have different case than the signed records and message parser have +to cope with that and treat everything as the same owner. + +(cherry picked from commit a114042059ecbbc94ae0f604ca681323a75af480) +(cherry picked from upstream commit b9c10a194da3358204f5ba7d91e55332db435614) +--- + bin/tests/system/dnssec/ns3/secure.example.db.in | 5 +++++ + bin/tests/system/dnssec/ns3/sign.sh | 4 +++- + bin/tests/system/dnssec/tests.sh | 15 +++++++++++++++ + 3 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/bin/tests/system/dnssec/ns3/secure.example.db.in b/bin/tests/system/dnssec/ns3/secure.example.db.in +index 27f2b24..599566e 100644 +--- a/bin/tests/system/dnssec/ns3/secure.example.db.in ++++ b/bin/tests/system/dnssec/ns3/secure.example.db.in +@@ -45,3 +45,8 @@ rrsigonly A 10.0.0.29 + cnameandkey CNAME @ + cnamenokey CNAME @ + dnameandkey DNAME @ ++ ++mixedcase A 10.0.0.30 ++mixedCASE TXT "mixed case" ++MIXEDcase AAAA 2002:: ++mIxEdCaSe LOC 37 52 56.788 N 121 54 55.02 W 1120m 10m 100m 10m +diff --git a/bin/tests/system/dnssec/ns3/sign.sh b/bin/tests/system/dnssec/ns3/sign.sh +index 80d412e..d94f382 100644 +--- a/bin/tests/system/dnssec/ns3/sign.sh ++++ b/bin/tests/system/dnssec/ns3/sign.sh +@@ -86,7 +86,9 @@ keyname=$("$KEYGEN" -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -n zone "$zone + + cat "$infile" "$cnameandkey.key" "$dnameandkey.key" "$keyname.key" > "$zonefile" + +-"$SIGNER" -P -o "$zone" "$zonefile" > /dev/null ++"$SIGNER" -P -D -o "$zone" "$zonefile" >/dev/null ++cat "$zonefile" "$zonefile".signed >"$zonefile".tmp ++mv "$zonefile".tmp "$zonefile".signed + + zone=bogus.example. + infile=bogus.example.db.in +diff --git a/bin/tests/system/dnssec/tests.sh b/bin/tests/system/dnssec/tests.sh +index fe95c8d..0c03970 100644 +--- a/bin/tests/system/dnssec/tests.sh ++++ b/bin/tests/system/dnssec/tests.sh +@@ -762,6 +762,21 @@ n=$((n+1)) + test "$ret" -eq 0 || echo_i "failed" + status=$((status+ret)) + ++echo_i "checking mixed-case positive validation ($n)" ++ret=0 ++for type in a txt aaaa loc; do ++ dig_with_opts +noauth mixedcase.secure.example. \ ++ @10.53.0.3 $type >dig.out.$type.ns3.test$n || ret=1 ++ dig_with_opts +noauth mixedcase.secure.example. \ ++ @10.53.0.4 $type >dig.out.$type.ns4.test$n || ret=1 ++ digcomp --lc dig.out.$type.ns3.test$n dig.out.$type.ns4.test$n || ret=1 ++ grep "status: NOERROR" dig.out.$type.ns4.test$n >/dev/null || ret=1 ++ grep "flags:.*ad.*QUERY" dig.out.$type.ns4.test$n >/dev/null || ret=1 ++done ++n=$((n + 1)) ++test "$ret" -eq 0 || echo_i "failed" ++status=$((status + ret)) ++ + echo_i "checking multi-stage positive validation NSEC/NSEC3 ($n)" + ret=0 + dig_with_opts +noauth a.nsec3.example. \ +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-4408.patch b/SOURCES/bind-9.16-CVE-2023-4408.patch new file mode 100644 index 0000000..f564235 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-4408.patch @@ -0,0 +1,1735 @@ +From 8664429a745e73854486e1222d1f3a2a86bd3f7f Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Mon, 12 Feb 2024 19:34:45 +0100 +Subject: [PATCH] Fixes of CVE-2023-4408 + +6315. [security] Speed up parsing of DNS messages with many different + names. (CVE-2023-4408) [GL #4234] +6321. [security] Change 6315 inadvertently introduced regressions that + could cause named to crash. [GL #4234] +6343. [bug] Fix case insensitive setting for isc_ht hashtable. + [GL #4568] +--- + bin/plugins/filter-aaaa.c | 2 +- + lib/dns/catz.c | 8 +- + lib/dns/include/dns/message.h | 38 --- + lib/dns/include/dns/name.h | 37 ++- + lib/dns/message.c | 387 +++++++++++++++--------- + lib/dns/name.c | 1 + + lib/dns/rpz.c | 4 +- + lib/dns/win32/libdns.def.in | 2 - + lib/isc/ht.c | 550 +++++++++++++++++++++++++--------- + lib/isc/include/isc/ht.h | 28 +- + lib/isc/tests/ht_test.c | 4 +- + 11 files changed, 710 insertions(+), 351 deletions(-) + +diff --git a/bin/plugins/filter-aaaa.c b/bin/plugins/filter-aaaa.c +index 1db3ca2..f0327b6 100644 +--- a/bin/plugins/filter-aaaa.c ++++ b/bin/plugins/filter-aaaa.c +@@ -355,7 +355,7 @@ plugin_register(const char *parameters, const void *cfg, const char *cfg_file, + } + + isc_mempool_create(mctx, sizeof(filter_data_t), &inst->datapool); +- CHECK(isc_ht_init(&inst->ht, mctx, 16)); ++ CHECK(isc_ht_init(&inst->ht, mctx, 16, ISC_HT_CASE_SENSITIVE)); + isc_mutex_init(&inst->hlock); + + /* +diff --git a/lib/dns/catz.c b/lib/dns/catz.c +index 691c4aa..e7fac02 100644 +--- a/lib/dns/catz.c ++++ b/lib/dns/catz.c +@@ -404,12 +404,12 @@ dns_catz_zones_merge(dns_catz_zone_t *target, dns_catz_zone_t *newzone) { + + dns_name_format(&target->name, czname, DNS_NAME_FORMATSIZE); + +- result = isc_ht_init(&toadd, target->catzs->mctx, 16); ++ result = isc_ht_init(&toadd, target->catzs->mctx, 16, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } + +- result = isc_ht_init(&tomod, target->catzs->mctx, 16); ++ result = isc_ht_init(&tomod, target->catzs->mctx, 16, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } +@@ -623,7 +623,7 @@ dns_catz_new_zones(dns_catz_zones_t **catzsp, dns_catz_zonemodmethods_t *zmm, + + isc_refcount_init(&new_zones->refs, 1); + +- result = isc_ht_init(&new_zones->zones, mctx, 4); ++ result = isc_ht_init(&new_zones->zones, mctx, 4, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + goto cleanup_refcount; + } +@@ -679,7 +679,7 @@ dns_catz_new_zone(dns_catz_zones_t *catzs, dns_catz_zone_t **zonep, + dns_name_init(&new_zone->name, NULL); + dns_name_dup(name, catzs->mctx, &new_zone->name); + +- result = isc_ht_init(&new_zone->entries, catzs->mctx, 4); ++ result = isc_ht_init(&new_zone->entries, catzs->mctx, 4, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + goto cleanup_name; + } +diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h +index 1f406e5..68c13ee 100644 +--- a/lib/dns/include/dns/message.h ++++ b/lib/dns/include/dns/message.h +@@ -799,44 +799,6 @@ dns_message_findtype(const dns_name_t *name, dns_rdatatype_t type, + *\li #ISC_R_NOTFOUND -- the desired type does not exist. + */ + +-isc_result_t +-dns_message_find(const dns_name_t *name, dns_rdataclass_t rdclass, +- dns_rdatatype_t type, dns_rdatatype_t covers, +- dns_rdataset_t **rdataset); +-/*%< +- * Search the name for the specified rdclass and type. If it is found, +- * *rdataset is filled in with a pointer to that rdataset. +- * +- * Requires: +- *\li if '**rdataset' is non-NULL, *rdataset needs to be NULL. +- * +- *\li 'type' be a valid type, and NOT dns_rdatatype_any. +- * +- *\li If 'type' is dns_rdatatype_rrsig, 'covers' must be a valid type. +- * Otherwise it should be 0. +- * +- * Returns: +- *\li #ISC_R_SUCCESS -- all is well. +- *\li #ISC_R_NOTFOUND -- the desired type does not exist. +- */ +- +-void +-dns_message_movename(dns_message_t *msg, dns_name_t *name, +- dns_section_t fromsection, dns_section_t tosection); +-/*%< +- * Move a name from one section to another. +- * +- * Requires: +- * +- *\li 'msg' be valid. +- * +- *\li 'name' must be a name already in 'fromsection'. +- * +- *\li 'fromsection' must be a valid section. +- * +- *\li 'tosection' must be a valid section. +- */ +- + void + dns_message_addname(dns_message_t *msg, dns_name_t *name, + dns_section_t section); +diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h +index 75bc020..4058b56 100644 +--- a/lib/dns/include/dns/name.h ++++ b/lib/dns/include/dns/name.h +@@ -67,6 +67,7 @@ + #include + #include + ++#include + #include + #include + #include /* Required for storage size of dns_label_t. */ +@@ -110,6 +111,7 @@ struct dns_name { + isc_buffer_t *buffer; + ISC_LINK(dns_name_t) link; + ISC_LIST(dns_rdataset_t) list; ++ isc_ht_t *ht; + }; + + #define DNS_NAME_MAGIC ISC_MAGIC('D', 'N', 'S', 'n') +@@ -165,30 +167,24 @@ LIBDNS_EXTERNAL_DATA extern const dns_name_t *dns_wildcardname; + * unsigned char offsets[] = { 0, 6 }; + * dns_name_t value = DNS_NAME_INITABSOLUTE(data, offsets); + */ +-#define DNS_NAME_INITNONABSOLUTE(A, B) \ +- { \ +- DNS_NAME_MAGIC, A, (sizeof(A) - 1), sizeof(B), \ +- DNS_NAMEATTR_READONLY, B, NULL, \ +- { (void *)-1, (void *)-1 }, { \ +- NULL, NULL \ +- } \ ++#define DNS_NAME_INITNONABSOLUTE(A, B) \ ++ { \ ++ DNS_NAME_MAGIC, A, (sizeof(A) - 1), sizeof(B), \ ++ DNS_NAMEATTR_READONLY, B, NULL, \ ++ { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \ + } + +-#define DNS_NAME_INITABSOLUTE(A, B) \ +- { \ +- DNS_NAME_MAGIC, A, sizeof(A), sizeof(B), \ +- DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE, B, \ +- NULL, { (void *)-1, (void *)-1 }, { \ +- NULL, NULL \ +- } \ ++#define DNS_NAME_INITABSOLUTE(A, B) \ ++ { \ ++ DNS_NAME_MAGIC, A, sizeof(A), sizeof(B), \ ++ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE, B, \ ++ NULL, { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \ + } + +-#define DNS_NAME_INITEMPTY \ +- { \ +- DNS_NAME_MAGIC, NULL, 0, 0, 0, NULL, NULL, \ +- { (void *)-1, (void *)-1 }, { \ +- NULL, NULL \ +- } \ ++#define DNS_NAME_INITEMPTY \ ++ { \ ++ DNS_NAME_MAGIC, NULL, 0, 0, 0, NULL, NULL, \ ++ { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \ + } + + /*% +@@ -1355,6 +1351,7 @@ ISC_LANG_ENDDECLS + _n->buffer = NULL; \ + ISC_LINK_INIT(_n, link); \ + ISC_LIST_INIT(_n->list); \ ++ _n->ht = NULL; \ + } while (0) + + #define DNS_NAME_RESET(n) \ +diff --git a/lib/dns/message.c b/lib/dns/message.c +index e4f4338..1993b2e 100644 +--- a/lib/dns/message.c ++++ b/lib/dns/message.c +@@ -20,6 +20,8 @@ + #include + + #include ++#include ++#include + #include + #include + #include /* Required for HP/UX (and others?) */ +@@ -503,9 +505,11 @@ msgresetsigs(dns_message_t *msg, bool replying) { + } else { + dns_rdataset_disassociate(msg->tsig); + isc_mempool_put(msg->rdspool, msg->tsig); ++ msg->tsig = NULL; + if (msg->querytsig != NULL) { + dns_rdataset_disassociate(msg->querytsig); + isc_mempool_put(msg->rdspool, msg->querytsig); ++ msg->querytsig = NULL; + } + } + dns_message_puttempname(msg, &msg->tsigname); +@@ -794,6 +798,18 @@ dns_message_detach(dns_message_t **messagep) { + } + } + ++static isc_result_t ++name_hash_add(isc_ht_t *ht, dns_name_t *name, dns_name_t **foundp) { ++ isc_result_t result = isc_ht_find(ht, name->ndata, name->length, ++ (void **)foundp); ++ if (result == ISC_R_SUCCESS) { ++ return (ISC_R_EXISTS); ++ } ++ result = isc_ht_add(ht, name->ndata, name->length, (void *)name); ++ INSIST(result == ISC_R_SUCCESS); ++ return (ISC_R_SUCCESS); ++} ++ + static isc_result_t + findname(dns_name_t **foundname, const dns_name_t *target, + dns_namelist_t *section) { +@@ -813,28 +829,26 @@ findname(dns_name_t **foundname, const dns_name_t *target, + return (ISC_R_NOTFOUND); + } + +-isc_result_t +-dns_message_find(const dns_name_t *name, dns_rdataclass_t rdclass, +- dns_rdatatype_t type, dns_rdatatype_t covers, +- dns_rdataset_t **rdataset) { +- dns_rdataset_t *curr; +- +- REQUIRE(name != NULL); +- REQUIRE(rdataset == NULL || *rdataset == NULL); +- +- for (curr = ISC_LIST_TAIL(name->list); curr != NULL; +- curr = ISC_LIST_PREV(curr, link)) +- { +- if (curr->rdclass == rdclass && curr->type == type && +- curr->covers == covers) { +- if (rdataset != NULL) { +- *rdataset = curr; +- } +- return (ISC_R_SUCCESS); +- } +- } ++typedef struct __attribute__((__packed__)) rds_key { ++ dns_rdataclass_t rdclass; ++ dns_rdatatype_t type; ++ dns_rdatatype_t covers; ++} rds_key_t; + +- return (ISC_R_NOTFOUND); ++static isc_result_t ++rds_hash_add(isc_ht_t *ht, dns_rdataset_t *rds, dns_rdataset_t **foundp) { ++ rds_key_t key = { .rdclass = rds->rdclass, ++ .type = rds->type, ++ .covers = rds->covers }; ++ isc_result_t result = isc_ht_find(ht, (const unsigned char *)&key, ++ sizeof(key), (void **)foundp); ++ if (result == ISC_R_SUCCESS) { ++ return (ISC_R_EXISTS); ++ } ++ result = isc_ht_add(ht, (const unsigned char *)&key, sizeof(key), ++ (void *)rds); ++ INSIST(result == ISC_R_SUCCESS); ++ return (ISC_R_SUCCESS); + } + + isc_result_t +@@ -962,6 +976,18 @@ getrdata(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + } \ + } while (0) + ++static void ++cleanup_name_hashmaps(dns_namelist_t *section) { ++ dns_name_t *name = NULL; ++ for (name = ISC_LIST_HEAD(*section); name != NULL; ++ name = ISC_LIST_NEXT(name, link)) ++ { ++ if (name->ht != NULL) { ++ isc_ht_destroy(&name->ht); ++ } ++ } ++} ++ + static isc_result_t + getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + unsigned int options) { +@@ -971,13 +997,19 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + dns_name_t *name2 = NULL; + dns_rdataset_t *rdataset = NULL; + dns_rdatalist_t *rdatalist = NULL; +- isc_result_t result; ++ isc_result_t result = ISC_R_SUCCESS; + dns_rdatatype_t rdtype; + dns_rdataclass_t rdclass; + dns_namelist_t *section = &msg->sections[DNS_SECTION_QUESTION]; + bool best_effort = ((options & DNS_MESSAGEPARSE_BESTEFFORT) != 0); + bool seen_problem = false; + bool free_name = false; ++ bool free_ht = false; ++ isc_ht_t *name_map = NULL; ++ ++ if (msg->counts[DNS_SECTION_QUESTION] > 1) { ++ isc_ht_init(&name_map, msg->mctx, 1, ISC_HT_CASE_INSENSITIVE); ++ } + + for (count = 0; count < msg->counts[DNS_SECTION_QUESTION]; count++) { + name = NULL; +@@ -998,13 +1030,19 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + goto cleanup; + } + ++ /* If there is only one QNAME, skip the duplicity checks */ ++ if (name_map == NULL) { ++ result = ISC_R_SUCCESS; ++ goto skip_name_check; ++ } ++ + /* + * Run through the section, looking to see if this name + * is already there. If it is found, put back the allocated + * name since we no longer need it, and set our name pointer + * to point to the name we found. + */ +- result = findname(&name2, name, section); ++ result = name_hash_add(name_map, name, &name2); + + /* + * If it is the first name in the section, accept it. +@@ -1016,19 +1054,25 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + * this should be legal or not. In either case we no longer + * need this name pointer. + */ +- if (result != ISC_R_SUCCESS) { ++ skip_name_check: ++ switch (result) { ++ case ISC_R_SUCCESS: + if (!ISC_LIST_EMPTY(*section)) { + DO_ERROR(DNS_R_FORMERR); + } + ISC_LIST_APPEND(*section, name, link); +- free_name = false; +- } else { ++ break; ++ case ISC_R_EXISTS: + dns_message_puttempname(msg, &name); + name = name2; + name2 = NULL; +- free_name = false; ++ break; ++ default: ++ ISC_UNREACHABLE(); + } + ++ free_name = false; ++ + /* + * Get type and class. + */ +@@ -1058,14 +1102,6 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + msg->tkey = 1; + } + +- /* +- * Can't ask the same question twice. +- */ +- result = dns_message_find(name, rdclass, rdtype, 0, NULL); +- if (result == ISC_R_SUCCESS) { +- DO_ERROR(DNS_R_FORMERR); +- } +- + /* + * Allocate a new rdatalist. + */ +@@ -1079,6 +1115,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + result = ISC_R_NOMEMORY; + goto cleanup; + } ++ dns_rdataset_init(rdataset); + + /* + * Convert rdatalist to rdataset, and attach the latter to +@@ -1087,32 +1124,71 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + rdatalist->type = rdtype; + rdatalist->rdclass = rdclass; + +- dns_rdataset_init(rdataset); + result = dns_rdatalist_tordataset(rdatalist, rdataset); +- if (result != ISC_R_SUCCESS) { +- goto cleanup; +- } ++ RUNTIME_CHECK(result == ISC_R_SUCCESS); + + rdataset->attributes |= DNS_RDATASETATTR_QUESTION; + ++ /* ++ * Skip the duplicity check for first rdataset ++ */ ++ if (ISC_LIST_EMPTY(name->list)) { ++ result = ISC_R_SUCCESS; ++ goto skip_rds_check; ++ } ++ ++ /* ++ * Can't ask the same question twice. ++ */ ++ if (name->ht == NULL) { ++ isc_ht_init(&name->ht, msg->mctx, 1, ++ ISC_HT_CASE_SENSITIVE); ++ free_ht = true; ++ ++ INSIST(ISC_LIST_HEAD(name->list) == ++ ISC_LIST_TAIL(name->list)); ++ ++ dns_rdataset_t *old_rdataset = ++ ISC_LIST_HEAD(name->list); ++ ++ result = rds_hash_add(name->ht, old_rdataset, NULL); ++ ++ INSIST(result == ISC_R_SUCCESS); ++ } ++ result = rds_hash_add(name->ht, rdataset, NULL); ++ if (result == ISC_R_EXISTS) { ++ DO_ERROR(DNS_R_FORMERR); ++ } ++ ++ skip_rds_check: + ISC_LIST_APPEND(name->list, rdataset, link); ++ + rdataset = NULL; + } + + if (seen_problem) { +- return (DNS_R_RECOVERABLE); ++ result = DNS_R_RECOVERABLE; + } +- return (ISC_R_SUCCESS); + + cleanup: + if (rdataset != NULL) { +- INSIST(!dns_rdataset_isassociated(rdataset)); ++ if (dns_rdataset_isassociated(rdataset)) { ++ dns_rdataset_disassociate(rdataset); ++ } + isc_mempool_put(msg->rdspool, rdataset); + } + if (free_name) { + dns_message_puttempname(msg, &name); + } + ++ if (free_ht) { ++ cleanup_name_hashmaps(section); ++ } ++ ++ if (name_map != NULL) { ++ isc_ht_destroy(&name_map); ++ } ++ + return (result); + } + +@@ -1192,17 +1268,24 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + dns_name_t *name = NULL; + dns_name_t *name2 = NULL; + dns_rdataset_t *rdataset = NULL; ++ dns_rdataset_t *found_rdataset = NULL; + dns_rdatalist_t *rdatalist = NULL; +- isc_result_t result; ++ isc_result_t result = ISC_R_SUCCESS; + dns_rdatatype_t rdtype, covers; + dns_rdataclass_t rdclass; + dns_rdata_t *rdata = NULL; + dns_ttl_t ttl; + dns_namelist_t *section = &msg->sections[sectionid]; +- bool free_name = false, free_rdataset = false, seen_problem = false; ++ bool free_name = false, seen_problem = false; ++ bool free_ht = false; + bool preserve_order = ((options & DNS_MESSAGEPARSE_PRESERVEORDER) != 0); + bool best_effort = ((options & DNS_MESSAGEPARSE_BESTEFFORT) != 0); + bool isedns, issigzero, istsig; ++ isc_ht_t *name_map = NULL; ++ ++ if (msg->counts[sectionid] > 1) { ++ isc_ht_init(&name_map, msg->mctx, 1, ISC_HT_CASE_INSENSITIVE); ++ } + + for (count = 0; count < msg->counts[sectionid]; count++) { + int recstart = source->current; +@@ -1210,10 +1293,10 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + + skip_name_search = false; + skip_type_search = false; +- free_rdataset = false; + isedns = false; + issigzero = false; + istsig = false; ++ found_rdataset = NULL; + + name = NULL; + result = dns_message_gettempname(msg, &name); +@@ -1253,8 +1336,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + if (msg->rdclass_set == 0 && + rdtype != dns_rdatatype_opt && /* class is UDP SIZE */ + rdtype != dns_rdatatype_tsig && /* class is ANY */ +- rdtype != dns_rdatatype_tkey) +- { /* class is undefined */ ++ rdtype != dns_rdatatype_tkey) /* class is undefined */ ++ { + msg->rdclass = rdclass; + msg->rdclass_set = 1; + } +@@ -1360,10 +1443,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + * Then put the meta-class back into the finished rdata. + */ + rdata = newrdata(msg); +- if (rdata == NULL) { +- result = ISC_R_NOMEMORY; +- goto cleanup; +- } + if (msg->opcode == dns_opcode_update && + update(sectionid, rdclass)) { + if (rdatalen != 0) { +@@ -1446,33 +1525,70 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + free_name = false; + } + } else { ++ if (name_map == NULL) { ++ result = ISC_R_SUCCESS; ++ goto skip_name_check; ++ } ++ + /* + * Run through the section, looking to see if this name + * is already there. If it is found, put back the + * allocated name since we no longer need it, and set + * our name pointer to point to the name we found. + */ +- result = findname(&name2, name, section); ++ result = name_hash_add(name_map, name, &name2); + + /* + * If it is a new name, append to the section. + */ +- if (result == ISC_R_SUCCESS) { ++ skip_name_check: ++ switch (result) { ++ case ISC_R_SUCCESS: ++ ISC_LIST_APPEND(*section, name, link); ++ break; ++ case ISC_R_EXISTS: + dns_message_puttempname(msg, &name); + name = name2; +- } else { +- ISC_LIST_APPEND(*section, name, link); ++ name2 = NULL; ++ break; ++ default: ++ ISC_UNREACHABLE(); + } + free_name = false; + } + ++ rdatalist = newrdatalist(msg); ++ if (rdatalist == NULL) { ++ result = ISC_R_NOMEMORY; ++ goto cleanup; ++ } ++ dns_message_gettemprdataset(msg, &rdataset); ++ if (rdataset == NULL) { ++ result = ISC_R_NOMEMORY; ++ goto cleanup; ++ } ++ ++ rdatalist->type = rdtype; ++ rdatalist->covers = covers; ++ rdatalist->rdclass = rdclass; ++ rdatalist->ttl = ttl; ++ ++ RUNTIME_CHECK(dns_rdatalist_tordataset(rdatalist, rdataset) == ++ ISC_R_SUCCESS); ++ dns_rdataset_setownercase(rdataset, name); ++ rdatalist = NULL; ++ + /* + * Search name for the particular type and class. + * Skip this stage if in update mode or this is a meta-type. + */ +- if (preserve_order || msg->opcode == dns_opcode_update || ++ if (isedns || istsig || issigzero) { ++ /* Skip adding the rdataset to the tables */ ++ } else if (preserve_order || msg->opcode == dns_opcode_update || + skip_type_search) { +- result = ISC_R_NOTFOUND; ++ result = ISC_R_SUCCESS; ++ ++ ISC_LIST_APPEND(name->list, rdataset, link); + } else { + /* + * If this is a type that can only occur in +@@ -1482,63 +1598,71 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + DO_ERROR(DNS_R_FORMERR); + } + +- rdataset = NULL; +- result = dns_message_find(name, rdclass, rdtype, covers, +- &rdataset); +- } +- +- /* +- * If we found an rdataset that matches, we need to +- * append this rdata to that set. If we did not, we need +- * to create a new rdatalist, store the important bits there, +- * convert it to an rdataset, and link the latter to the name. +- * Yuck. When appending, make certain that the type isn't +- * a singleton type, such as SOA or CNAME. +- * +- * Note that this check will be bypassed when preserving order, +- * the opcode is an update, or the type search is skipped. +- */ +- if (result == ISC_R_SUCCESS) { +- if (dns_rdatatype_issingleton(rdtype)) { +- dns_rdata_t *first; +- dns_rdatalist_fromrdataset(rdataset, +- &rdatalist); +- first = ISC_LIST_HEAD(rdatalist->rdata); +- INSIST(first != NULL); +- if (dns_rdata_compare(rdata, first) != 0) { +- DO_ERROR(DNS_R_FORMERR); +- } ++ if (ISC_LIST_EMPTY(name->list)) { ++ result = ISC_R_SUCCESS; ++ goto skip_rds_check; + } +- } + +- if (result == ISC_R_NOTFOUND) { +- rdataset = isc_mempool_get(msg->rdspool); +- if (rdataset == NULL) { +- result = ISC_R_NOMEMORY; +- goto cleanup; +- } +- free_rdataset = true; ++ if (name->ht == NULL) { ++ isc_ht_init(&name->ht, msg->mctx, 1, ++ ISC_HT_CASE_SENSITIVE); ++ free_ht = true; + +- rdatalist = newrdatalist(msg); +- if (rdatalist == NULL) { +- result = ISC_R_NOMEMORY; +- goto cleanup; ++ INSIST(ISC_LIST_HEAD(name->list) == ++ ISC_LIST_TAIL(name->list)); ++ ++ dns_rdataset_t *old_rdataset = ++ ISC_LIST_HEAD(name->list); ++ ++ result = rds_hash_add(name->ht, old_rdataset, ++ NULL); ++ ++ INSIST(result == ISC_R_SUCCESS); + } ++ found_rdataset = NULL; ++ result = rds_hash_add(name->ht, rdataset, ++ &found_rdataset); + +- rdatalist->type = rdtype; +- rdatalist->covers = covers; +- rdatalist->rdclass = rdclass; +- rdatalist->ttl = ttl; ++ /* ++ * If we found an rdataset that matches, we need to ++ * append this rdata to that set. If we did not, we ++ * need to create a new rdatalist, store the important ++ * bits there, convert it to an rdataset, and link the ++ * latter to the name. Yuck. When appending, make ++ * certain that the type isn't a singleton type, such as ++ * SOA or CNAME. ++ * ++ * Note that this check will be bypassed when preserving ++ * order, the opcode is an update, or the type search is ++ * skipped. ++ */ ++ skip_rds_check: ++ switch (result) { ++ case ISC_R_EXISTS: ++ /* Free the rdataset we used as the key */ ++ dns_rdataset_disassociate(rdataset); ++ isc_mempool_put(msg->rdspool, rdataset); ++ result = ISC_R_SUCCESS; ++ rdataset = found_rdataset; + +- dns_rdataset_init(rdataset); +- RUNTIME_CHECK( +- dns_rdatalist_tordataset(rdatalist, rdataset) == +- ISC_R_SUCCESS); +- dns_rdataset_setownercase(rdataset, name); ++ if (!dns_rdatatype_issingleton(rdtype)) { ++ break; ++ } + +- if (!isedns && !istsig && !issigzero) { ++ dns_rdatalist_fromrdataset(rdataset, ++ &rdatalist); ++ dns_rdata_t *first = ++ ISC_LIST_HEAD(rdatalist->rdata); ++ INSIST(first != NULL); ++ if (dns_rdata_compare(rdata, first) != 0) { ++ DO_ERROR(DNS_R_FORMERR); ++ } ++ break; ++ case ISC_R_SUCCESS: + ISC_LIST_APPEND(name->list, rdataset, link); +- free_rdataset = false; ++ break; ++ default: ++ ISC_UNREACHABLE(); + } + } + +@@ -1573,8 +1697,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + dns_rcode_t ercode; + + msg->opt = rdataset; +- rdataset = NULL; +- free_rdataset = false; + ercode = (dns_rcode_t)((msg->opt->ttl & + DNS_MESSAGE_EDNSRCODE_MASK) >> + 20); +@@ -1585,8 +1707,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + msg->sig0 = rdataset; + msg->sig0name = name; + msg->sigstart = recstart; +- rdataset = NULL; +- free_rdataset = false; + free_name = false; + } else if (istsig) { + msg->tsig = rdataset; +@@ -1596,22 +1716,17 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + * Windows doesn't like TSIG names to be compressed. + */ + msg->tsigname->attributes |= DNS_NAMEATTR_NOCOMPRESS; +- rdataset = NULL; +- free_rdataset = false; + free_name = false; + } ++ rdataset = NULL; + + if (seen_problem) { + if (free_name) { + dns_message_puttempname(msg, &name); + } +- if (free_rdataset) { +- isc_mempool_put(msg->rdspool, rdataset); +- } +- free_name = free_rdataset = false; ++ free_name = false; + } + INSIST(!free_name); +- INSIST(!free_rdataset); + } + + /* +@@ -1629,16 +1744,24 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx, + } + + if (seen_problem) { +- return (DNS_R_RECOVERABLE); ++ result = DNS_R_RECOVERABLE; + } +- return (ISC_R_SUCCESS); + + cleanup: ++ if (rdataset != NULL && rdataset != found_rdataset) { ++ dns_rdataset_disassociate(rdataset); ++ isc_mempool_put(msg->rdspool, rdataset); ++ } + if (free_name) { + dns_message_puttempname(msg, &name); + } +- if (free_rdataset) { +- isc_mempool_put(msg->rdspool, rdataset); ++ ++ if (free_ht) { ++ cleanup_name_hashmaps(section); ++ } ++ ++ if (name_map != NULL) { ++ isc_ht_destroy(&name_map); + } + + return (result); +@@ -2432,7 +2555,7 @@ dns_message_findname(dns_message_t *msg, dns_section_t section, + const dns_name_t *target, dns_rdatatype_t type, + dns_rdatatype_t covers, dns_name_t **name, + dns_rdataset_t **rdataset) { +- dns_name_t *foundname; ++ dns_name_t *foundname = NULL; + isc_result_t result; + + /* +@@ -2479,22 +2602,6 @@ dns_message_findname(dns_message_t *msg, dns_section_t section, + return (result); + } + +-void +-dns_message_movename(dns_message_t *msg, dns_name_t *name, +- dns_section_t fromsection, dns_section_t tosection) { +- REQUIRE(msg != NULL); +- REQUIRE(msg->from_to_wire == DNS_MESSAGE_INTENTRENDER); +- REQUIRE(name != NULL); +- REQUIRE(VALID_NAMED_SECTION(fromsection)); +- REQUIRE(VALID_NAMED_SECTION(tosection)); +- +- /* +- * Unlink the name from the old section +- */ +- ISC_LIST_UNLINK(msg->sections[fromsection], name, link); +- ISC_LIST_APPEND(msg->sections[tosection], name, link); +-} +- + void + dns_message_addname(dns_message_t *msg, dns_name_t *name, + dns_section_t section) { +@@ -2586,6 +2693,10 @@ dns_message_puttempname(dns_message_t *msg, dns_name_t **itemp) { + REQUIRE(!ISC_LINK_LINKED(item, link)); + REQUIRE(ISC_LIST_HEAD(item->list) == NULL); + ++ if (item->ht != NULL) { ++ isc_ht_destroy(&item->ht); ++ } ++ + /* + * we need to check this in case dns_name_dup() was used. + */ +diff --git a/lib/dns/name.c b/lib/dns/name.c +index 6ca311d..cc1b872 100644 +--- a/lib/dns/name.c ++++ b/lib/dns/name.c +@@ -186,6 +186,7 @@ dns_name_invalidate(dns_name_t *name) { + name->offsets = NULL; + name->buffer = NULL; + ISC_LINK_INIT(name, link); ++ INSIST(name->ht == NULL); + } + + bool +diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c +index d3baa71..fa93358 100644 +--- a/lib/dns/rpz.c ++++ b/lib/dns/rpz.c +@@ -1538,7 +1538,7 @@ dns_rpz_new_zone(dns_rpz_zones_t *rpzs, dns_rpz_zone_t **rpzp) { + * simplifies update_from_db + */ + +- result = isc_ht_init(&zone->nodes, rpzs->mctx, 1); ++ result = isc_ht_init(&zone->nodes, rpzs->mctx, 1, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + goto cleanup_ht; + } +@@ -1721,7 +1721,7 @@ setup_update(dns_rpz_zone_t *rpz) { + ISC_LOG_DEBUG(1), "rpz: %s: using hashtable size %d", + domain, hashsize); + +- result = isc_ht_init(&rpz->newnodes, rpz->rpzs->mctx, hashsize); ++ result = isc_ht_init(&rpz->newnodes, rpz->rpzs->mctx, hashsize, ISC_HT_CASE_SENSITIVE); + if (result != ISC_R_SUCCESS) { + isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, + DNS_LOGMODULE_MASTER, ISC_LOG_ERROR, +diff --git a/lib/dns/win32/libdns.def.in b/lib/dns/win32/libdns.def.in +index 31f5111..1c2ea3e 100644 +--- a/lib/dns/win32/libdns.def.in ++++ b/lib/dns/win32/libdns.def.in +@@ -534,7 +534,6 @@ dns_message_clonebuffer + dns_message_create + dns_message_currentname + dns_message_detach +-dns_message_find + dns_message_findname + dns_message_findtype + dns_message_firstname +@@ -553,7 +552,6 @@ dns_message_gettsigkey + dns_message_headertotext + dns_message_logfmtpacket + dns_message_logpacket +-dns_message_movename + dns_message_nextname + dns_message_parse + dns_message_peekheader +diff --git a/lib/isc/ht.c b/lib/isc/ht.c +index 82f8ac8..f88a32c 100644 +--- a/lib/isc/ht.c ++++ b/lib/isc/ht.c +@@ -25,51 +25,274 @@ typedef struct isc_ht_node isc_ht_node_t; + #define ISC_HT_MAGIC ISC_MAGIC('H', 'T', 'a', 'b') + #define ISC_HT_VALID(ht) ISC_MAGIC_VALID(ht, ISC_HT_MAGIC) + ++#define HT_NO_BITS 0 ++#define HT_MIN_BITS 1 ++#define HT_MAX_BITS 32 ++#define HT_OVERCOMMIT 3 ++ ++#define HT_NEXTTABLE(idx) ((idx == 0) ? 1 : 0) ++#define TRY_NEXTTABLE(idx, ht) (idx == ht->hindex && rehashing_in_progress(ht)) ++ ++#define GOLDEN_RATIO_32 0x61C88647 ++ ++#define HASHSIZE(bits) (UINT64_C(1) << (bits)) ++ + struct isc_ht_node { + void *value; + isc_ht_node_t *next; ++ uint32_t hashval; + size_t keysize; +- unsigned char key[FLEXIBLE_ARRAY_MEMBER]; ++ unsigned char key[]; + }; + + struct isc_ht { + unsigned int magic; + isc_mem_t *mctx; +- size_t size; +- size_t mask; +- unsigned int count; +- isc_ht_node_t **table; ++ size_t count; ++ bool case_sensitive; ++ size_t size[2]; ++ uint8_t hashbits[2]; ++ isc_ht_node_t **table[2]; ++ uint8_t hindex; ++ uint32_t hiter; /* rehashing iterator */ + }; + + struct isc_ht_iter { + isc_ht_t *ht; + size_t i; ++ uint8_t hindex; + isc_ht_node_t *cur; + }; + ++static isc_ht_node_t * ++isc__ht_find(const isc_ht_t *ht, const unsigned char *key, ++ const uint32_t keysize, const uint32_t hashval, const uint8_t idx); ++static void ++isc__ht_add(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize, ++ const uint32_t hashval, const uint8_t idx, void *value); ++static isc_result_t ++isc__ht_delete(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize, ++ const uint32_t hashval, const uint8_t idx); ++ ++static uint32_t ++rehash_bits(isc_ht_t *ht, size_t newcount); ++ ++static void ++hashtable_new(isc_ht_t *ht, const uint8_t idx, const uint8_t bits); ++static void ++hashtable_free(isc_ht_t *ht, const uint8_t idx); ++static void ++hashtable_rehash(isc_ht_t *ht, uint32_t newbits); ++static void ++hashtable_rehash_one(isc_ht_t *ht); ++static void ++maybe_rehash(isc_ht_t *ht, size_t newcount); ++ ++static isc_result_t ++isc__ht_iter_next(isc_ht_iter_t *it); ++ ++static uint8_t maptolower[] = { ++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, ++ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, ++ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, ++ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, ++ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, ++ 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, ++ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, ++ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, ++ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, ++ 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, ++ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, ++ 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, ++ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, ++ 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, ++ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, ++ 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, ++ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, ++ 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, ++ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, ++ 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, ++ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, ++ 0xfc, 0xfd, 0xfe, 0xff ++}; ++ ++static int ++memcasecmp(const void *vs1, const void *vs2, size_t len) { ++ uint8_t const *s1 = vs1; ++ uint8_t const *s2 = vs2; ++ for (size_t i = 0; i < len; i++) { ++ uint8_t u1 = s1[i]; ++ uint8_t u2 = s2[i]; ++ int U1 = maptolower[u1]; ++ int U2 = maptolower[u2]; ++ int diff = U1 - U2; ++ if (diff) { ++ return diff; ++ } ++ } ++ return 0; ++} ++ ++static bool ++isc__ht_node_match(isc_ht_node_t *node, const uint32_t hashval, ++ const uint8_t *key, uint32_t keysize, bool case_sensitive) { ++ return (node->hashval == hashval && node->keysize == keysize && ++ (case_sensitive ? (memcmp(node->key, key, keysize) == 0) ++ : (memcasecmp(node->key, key, keysize) == 0))); ++} ++ ++static uint32_t ++hash_32(uint32_t val, unsigned int bits) { ++ REQUIRE(bits <= HT_MAX_BITS); ++ /* High bits are more random. */ ++ return (val * GOLDEN_RATIO_32 >> (32 - bits)); ++} ++ ++static bool ++rehashing_in_progress(const isc_ht_t *ht) { ++ return (ht->table[HT_NEXTTABLE(ht->hindex)] != NULL); ++} ++ ++static bool ++hashtable_is_overcommited(isc_ht_t *ht) { ++ return (ht->count >= (ht->size[ht->hindex] * HT_OVERCOMMIT)); ++} ++ ++static uint32_t ++rehash_bits(isc_ht_t *ht, size_t newcount) { ++ uint32_t newbits = ht->hashbits[ht->hindex]; ++ ++ while (newcount >= HASHSIZE(newbits) && newbits <= HT_MAX_BITS) { ++ newbits += 1; ++ } ++ ++ return (newbits); ++} ++ ++/* ++ * Rebuild the hashtable to reduce the load factor ++ */ ++static void ++hashtable_rehash(isc_ht_t *ht, uint32_t newbits) { ++ uint8_t oldindex = ht->hindex; ++ uint32_t oldbits = ht->hashbits[oldindex]; ++ uint8_t newindex = HT_NEXTTABLE(oldindex); ++ ++ REQUIRE(ht->hashbits[oldindex] >= HT_MIN_BITS); ++ REQUIRE(ht->hashbits[oldindex] <= HT_MAX_BITS); ++ REQUIRE(ht->table[oldindex] != NULL); ++ ++ REQUIRE(newbits <= HT_MAX_BITS); ++ REQUIRE(ht->hashbits[newindex] == HT_NO_BITS); ++ REQUIRE(ht->table[newindex] == NULL); ++ ++ REQUIRE(newbits > oldbits); ++ ++ hashtable_new(ht, newindex, newbits); ++ ++ ht->hindex = newindex; ++ ++ hashtable_rehash_one(ht); ++} ++ ++static void ++hashtable_rehash_one(isc_ht_t *ht) { ++ isc_ht_node_t **newtable = ht->table[ht->hindex]; ++ uint32_t oldsize = ht->size[HT_NEXTTABLE(ht->hindex)]; ++ isc_ht_node_t **oldtable = ht->table[HT_NEXTTABLE(ht->hindex)]; ++ isc_ht_node_t *node = NULL; ++ isc_ht_node_t *nextnode; ++ ++ /* Find first non-empty node */ ++ while (ht->hiter < oldsize && oldtable[ht->hiter] == NULL) { ++ ht->hiter++; ++ } ++ ++ /* Rehashing complete */ ++ if (ht->hiter == oldsize) { ++ hashtable_free(ht, HT_NEXTTABLE(ht->hindex)); ++ ht->hiter = 0; ++ return; ++ } ++ ++ /* Move the first non-empty node from old hashtable to new hashtable */ ++ for (node = oldtable[ht->hiter]; node != NULL; node = nextnode) { ++ uint32_t hash = hash_32(node->hashval, ++ ht->hashbits[ht->hindex]); ++ nextnode = node->next; ++ node->next = newtable[hash]; ++ newtable[hash] = node; ++ } ++ ++ oldtable[ht->hiter] = NULL; ++ ++ ht->hiter++; ++} ++ ++static void ++maybe_rehash(isc_ht_t *ht, size_t newcount) { ++ uint32_t newbits = rehash_bits(ht, newcount); ++ ++ if (ht->hashbits[ht->hindex] < newbits && newbits <= HT_MAX_BITS) { ++ hashtable_rehash(ht, newbits); ++ } ++} ++ ++static void ++hashtable_new(isc_ht_t *ht, const uint8_t idx, const uint8_t bits) { ++ size_t size; ++ REQUIRE(ht->hashbits[idx] == HT_NO_BITS); ++ REQUIRE(ht->table[idx] == NULL); ++ REQUIRE(bits >= HT_MIN_BITS); ++ REQUIRE(bits <= HT_MAX_BITS); ++ ++ ht->hashbits[idx] = bits; ++ ht->size[idx] = HASHSIZE(ht->hashbits[idx]); ++ ++ size = ht->size[idx] * sizeof(isc_ht_node_t *); ++ ++ ht->table[idx] = isc_mem_get(ht->mctx, size); ++ memset(ht->table[idx], 0, size); ++} ++ ++static void ++hashtable_free(isc_ht_t *ht, const uint8_t idx) { ++ size_t size = ht->size[idx] * sizeof(isc_ht_node_t *); ++ ++ for (size_t i = 0; i < ht->size[idx]; i++) { ++ isc_ht_node_t *node = ht->table[idx][i]; ++ while (node != NULL) { ++ isc_ht_node_t *next = node->next; ++ ht->count--; ++ isc_mem_put(ht->mctx, node, ++ sizeof(*node) + node->keysize); ++ node = next; ++ } ++ } ++ ++ isc_mem_put(ht->mctx, ht->table[idx], size); ++ ht->hashbits[idx] = HT_NO_BITS; ++ ht->table[idx] = NULL; ++} ++ + isc_result_t +-isc_ht_init(isc_ht_t **htp, isc_mem_t *mctx, uint8_t bits) { ++isc_ht_init(isc_ht_t **htp, isc_mem_t *mctx, uint8_t bits, ++ unsigned int options) { + isc_ht_t *ht = NULL; +- size_t i; ++ bool case_sensitive = ((options & ISC_HT_CASE_INSENSITIVE) == 0); + + REQUIRE(htp != NULL && *htp == NULL); + REQUIRE(mctx != NULL); +- REQUIRE(bits >= 1 && bits <= (sizeof(size_t) * 8 - 1)); ++ REQUIRE(bits >= 1 && bits <= HT_MAX_BITS); + +- ht = isc_mem_get(mctx, sizeof(struct isc_ht)); ++ ht = isc_mem_get(mctx, sizeof(*ht)); ++ *ht = (isc_ht_t){ ++ .case_sensitive = case_sensitive, ++ }; + +- ht->mctx = NULL; + isc_mem_attach(mctx, &ht->mctx); + +- ht->size = ((size_t)1 << bits); +- ht->mask = ((size_t)1 << bits) - 1; +- ht->count = 0; +- +- ht->table = isc_mem_get(ht->mctx, ht->size * sizeof(isc_ht_node_t *)); +- +- for (i = 0; i < ht->size; i++) { +- ht->table[i] = NULL; +- } ++ hashtable_new(ht, 0, bits); + + ht->magic = ISC_HT_MAGIC; + +@@ -83,122 +306,183 @@ isc_ht_destroy(isc_ht_t **htp) { + size_t i; + + REQUIRE(htp != NULL); ++ REQUIRE(ISC_HT_VALID(*htp)); + + ht = *htp; + *htp = NULL; + +- REQUIRE(ISC_HT_VALID(ht)); +- + ht->magic = 0; + +- for (i = 0; i < ht->size; i++) { +- isc_ht_node_t *node = ht->table[i]; +- while (node != NULL) { +- isc_ht_node_t *next = node->next; +- ht->count--; +- isc_mem_put(ht->mctx, node, +- offsetof(isc_ht_node_t, key) + +- node->keysize); +- node = next; ++ for (i = 0; i <= 1; i++) { ++ if (ht->table[i] != NULL) { ++ hashtable_free(ht, i); + } + } + + INSIST(ht->count == 0); + +- isc_mem_put(ht->mctx, ht->table, ht->size * sizeof(isc_ht_node_t *)); +- isc_mem_putanddetach(&ht->mctx, ht, sizeof(struct isc_ht)); ++ isc_mem_putanddetach(&ht->mctx, ht, sizeof(*ht)); + } + +-isc_result_t +-isc_ht_add(isc_ht_t *ht, const unsigned char *key, uint32_t keysize, +- void *value) { ++static void ++isc__ht_add(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize, ++ const uint32_t hashval, const uint8_t idx, void *value) { + isc_ht_node_t *node; + uint32_t hash; + ++ hash = hash_32(hashval, ht->hashbits[idx]); ++ ++ node = isc_mem_get(ht->mctx, sizeof(*node) + keysize); ++ *node = (isc_ht_node_t){ ++ .keysize = keysize, ++ .hashval = hashval, ++ .next = ht->table[idx][hash], ++ .value = value, ++ }; ++ ++ memmove(node->key, key, keysize); ++ ++ ht->count++; ++ ht->table[idx][hash] = node; ++} ++ ++isc_result_t ++isc_ht_add(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize, ++ void *value) { ++ uint32_t hashval; ++ + REQUIRE(ISC_HT_VALID(ht)); + REQUIRE(key != NULL && keysize > 0); + +- hash = isc_hash_function(key, keysize, true); +- node = ht->table[hash & ht->mask]; +- while (node != NULL) { +- if (keysize == node->keysize && +- memcmp(key, node->key, keysize) == 0) { +- return (ISC_R_EXISTS); +- } +- node = node->next; ++ if (rehashing_in_progress(ht)) { ++ /* Rehash in progress */ ++ hashtable_rehash_one(ht); ++ } else if (hashtable_is_overcommited(ht)) { ++ /* Rehash requested */ ++ maybe_rehash(ht, ht->count); + } + +- node = isc_mem_get(ht->mctx, offsetof(isc_ht_node_t, key) + keysize); ++ hashval = isc_hash32(key, keysize, ht->case_sensitive); + +- memmove(node->key, key, keysize); +- node->keysize = keysize; +- node->next = ht->table[hash & ht->mask]; +- node->value = value; ++ if (isc__ht_find(ht, key, keysize, hashval, ht->hindex) != NULL) { ++ return (ISC_R_EXISTS); ++ } ++ ++ isc__ht_add(ht, key, keysize, hashval, ht->hindex, value); + +- ht->count++; +- ht->table[hash & ht->mask] = node; + return (ISC_R_SUCCESS); + } + ++static isc_ht_node_t * ++isc__ht_find(const isc_ht_t *ht, const unsigned char *key, ++ const uint32_t keysize, const uint32_t hashval, ++ const uint8_t idx) { ++ uint32_t hash; ++ uint8_t findex = idx; ++ ++nexttable: ++ hash = hash_32(hashval, ht->hashbits[findex]); ++ for (isc_ht_node_t *node = ht->table[findex][hash]; node != NULL; ++ node = node->next) ++ { ++ if (isc__ht_node_match(node, hashval, key, keysize, ++ ht->case_sensitive)) ++ { ++ return (node); ++ } ++ } ++ if (TRY_NEXTTABLE(findex, ht)) { ++ /* ++ * Rehashing in progress, check the other table ++ */ ++ findex = HT_NEXTTABLE(findex); ++ goto nexttable; ++ } ++ ++ return (NULL); ++} ++ + isc_result_t +-isc_ht_find(const isc_ht_t *ht, const unsigned char *key, uint32_t keysize, +- void **valuep) { ++isc_ht_find(const isc_ht_t *ht, const unsigned char *key, ++ const uint32_t keysize, void **valuep) { ++ uint32_t hashval; + isc_ht_node_t *node; +- uint32_t hash; + + REQUIRE(ISC_HT_VALID(ht)); + REQUIRE(key != NULL && keysize > 0); + REQUIRE(valuep == NULL || *valuep == NULL); + +- hash = isc_hash_function(key, keysize, true); +- node = ht->table[hash & ht->mask]; +- while (node != NULL) { +- if (keysize == node->keysize && +- memcmp(key, node->key, keysize) == 0) { +- if (valuep != NULL) { +- *valuep = node->value; +- } +- return (ISC_R_SUCCESS); +- } +- node = node->next; ++ hashval = isc_hash32(key, keysize, ht->case_sensitive); ++ ++ node = isc__ht_find(ht, key, keysize, hashval, ht->hindex); ++ if (node == NULL) { ++ return (ISC_R_NOTFOUND); + } + +- return (ISC_R_NOTFOUND); ++ if (valuep != NULL) { ++ *valuep = node->value; ++ } ++ return (ISC_R_SUCCESS); + } + +-isc_result_t +-isc_ht_delete(isc_ht_t *ht, const unsigned char *key, uint32_t keysize) { +- isc_ht_node_t *node, *prev; ++static isc_result_t ++isc__ht_delete(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize, ++ const uint32_t hashval, const uint8_t idx) { ++ isc_ht_node_t *prev = NULL; + uint32_t hash; + +- REQUIRE(ISC_HT_VALID(ht)); +- REQUIRE(key != NULL && keysize > 0); ++ hash = hash_32(hashval, ht->hashbits[idx]); + +- prev = NULL; +- hash = isc_hash_function(key, keysize, true); +- node = ht->table[hash & ht->mask]; +- while (node != NULL) { +- if (keysize == node->keysize && +- memcmp(key, node->key, keysize) == 0) { ++ for (isc_ht_node_t *node = ht->table[idx][hash]; node != NULL; ++ prev = node, node = node->next) ++ { ++ if (isc__ht_node_match(node, hashval, key, keysize, ++ ht->case_sensitive)) { + if (prev == NULL) { +- ht->table[hash & ht->mask] = node->next; ++ ht->table[idx][hash] = node->next; + } else { + prev->next = node->next; + } + isc_mem_put(ht->mctx, node, +- offsetof(isc_ht_node_t, key) + +- node->keysize); ++ sizeof(*node) + node->keysize); + ht->count--; + + return (ISC_R_SUCCESS); + } +- +- prev = node; +- node = node->next; + } + return (ISC_R_NOTFOUND); + } + ++isc_result_t ++isc_ht_delete(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize) { ++ uint32_t hashval; ++ uint8_t hindex; ++ isc_result_t result; ++ ++ REQUIRE(ISC_HT_VALID(ht)); ++ REQUIRE(key != NULL && keysize > 0); ++ ++ if (rehashing_in_progress(ht)) { ++ /* Rehash in progress */ ++ hashtable_rehash_one(ht); ++ } ++ ++ hindex = ht->hindex; ++ hashval = isc_hash32(key, keysize, ht->case_sensitive); ++nexttable: ++ result = isc__ht_delete(ht, key, keysize, hashval, hindex); ++ ++ if (result == ISC_R_NOTFOUND && TRY_NEXTTABLE(hindex, ht)) { ++ /* ++ * Rehashing in progress, check the other table ++ */ ++ hindex = HT_NEXTTABLE(hindex); ++ goto nexttable; ++ } ++ ++ return (result); ++} ++ + isc_result_t + isc_ht_iter_create(isc_ht_t *ht, isc_ht_iter_t **itp) { + isc_ht_iter_t *it; +@@ -208,9 +492,10 @@ isc_ht_iter_create(isc_ht_t *ht, isc_ht_iter_t **itp) { + + it = isc_mem_get(ht->mctx, sizeof(isc_ht_iter_t)); + +- it->ht = ht; +- it->i = 0; +- it->cur = NULL; ++ *it = (isc_ht_iter_t){ ++ .ht = ht, ++ .hindex = ht->hindex, ++ }; + + *itp = it; + +@@ -227,25 +512,46 @@ isc_ht_iter_destroy(isc_ht_iter_t **itp) { + it = *itp; + *itp = NULL; + ht = it->ht; +- isc_mem_put(ht->mctx, it, sizeof(isc_ht_iter_t)); ++ isc_mem_put(ht->mctx, it, sizeof(*it)); + } + + isc_result_t + isc_ht_iter_first(isc_ht_iter_t *it) { ++ isc_ht_t *ht; ++ + REQUIRE(it != NULL); + ++ ht = it->ht; ++ ++ it->hindex = ht->hindex; + it->i = 0; +- while (it->i < it->ht->size && it->ht->table[it->i] == NULL) { ++ ++ return (isc__ht_iter_next(it)); ++} ++ ++static isc_result_t ++isc__ht_iter_next(isc_ht_iter_t *it) { ++ isc_ht_t *ht = it->ht; ++ ++ while (it->i < ht->size[it->hindex] && ++ ht->table[it->hindex][it->i] == NULL) ++ { + it->i++; + } + +- if (it->i == it->ht->size) { +- return (ISC_R_NOMORE); ++ if (it->i < ht->size[it->hindex]) { ++ it->cur = ht->table[it->hindex][it->i]; ++ ++ return (ISC_R_SUCCESS); + } + +- it->cur = it->ht->table[it->i]; ++ if (TRY_NEXTTABLE(it->hindex, ht)) { ++ it->hindex = HT_NEXTTABLE(it->hindex); ++ it->i = 0; ++ return (isc__ht_iter_next(it)); ++ } + +- return (ISC_R_SUCCESS); ++ return (ISC_R_NOMORE); + } + + isc_result_t +@@ -254,60 +560,36 @@ isc_ht_iter_next(isc_ht_iter_t *it) { + REQUIRE(it->cur != NULL); + + it->cur = it->cur->next; +- if (it->cur == NULL) { +- do { +- it->i++; +- } while (it->i < it->ht->size && it->ht->table[it->i] == NULL); +- if (it->i >= it->ht->size) { +- return (ISC_R_NOMORE); +- } +- it->cur = it->ht->table[it->i]; ++ ++ if (it->cur != NULL) { ++ return (ISC_R_SUCCESS); + } + +- return (ISC_R_SUCCESS); ++ it->i++; ++ ++ return (isc__ht_iter_next(it)); + } + + isc_result_t + isc_ht_iter_delcurrent_next(isc_ht_iter_t *it) { + isc_result_t result = ISC_R_SUCCESS; +- isc_ht_node_t *to_delete = NULL; +- isc_ht_node_t *prev = NULL; +- isc_ht_node_t *node = NULL; +- uint32_t hash; ++ isc_ht_node_t *dnode = NULL; ++ uint8_t dindex; + isc_ht_t *ht; ++ isc_result_t dresult; ++ + REQUIRE(it != NULL); + REQUIRE(it->cur != NULL); +- to_delete = it->cur; +- ht = it->ht; + +- it->cur = it->cur->next; +- if (it->cur == NULL) { +- do { +- it->i++; +- } while (it->i < ht->size && ht->table[it->i] == NULL); +- if (it->i >= ht->size) { +- result = ISC_R_NOMORE; +- } else { +- it->cur = ht->table[it->i]; +- } +- } ++ ht = it->ht; ++ dnode = it->cur; ++ dindex = it->hindex; + +- hash = isc_hash_function(to_delete->key, to_delete->keysize, true); +- node = ht->table[hash & ht->mask]; +- while (node != to_delete) { +- prev = node; +- node = node->next; +- INSIST(node != NULL); +- } ++ result = isc_ht_iter_next(it); + +- if (prev == NULL) { +- ht->table[hash & ht->mask] = node->next; +- } else { +- prev->next = node->next; +- } +- isc_mem_put(ht->mctx, node, +- offsetof(isc_ht_node_t, key) + node->keysize); +- ht->count--; ++ dresult = isc__ht_delete(ht, dnode->key, dnode->keysize, dnode->hashval, ++ dindex); ++ INSIST(dresult == ISC_R_SUCCESS); + + return (result); + } +@@ -332,8 +614,8 @@ isc_ht_iter_currentkey(isc_ht_iter_t *it, unsigned char **key, + *keysize = it->cur->keysize; + } + +-unsigned int +-isc_ht_count(isc_ht_t *ht) { ++size_t ++isc_ht_count(const isc_ht_t *ht) { + REQUIRE(ISC_HT_VALID(ht)); + + return (ht->count); +diff --git a/lib/isc/include/isc/ht.h b/lib/isc/include/isc/ht.h +index 9d5ab82..46cd32d 100644 +--- a/lib/isc/include/isc/ht.h ++++ b/lib/isc/include/isc/ht.h +@@ -11,8 +11,7 @@ + + /* ! \file */ + +-#ifndef ISC_HT_H +-#define ISC_HT_H 1 ++#pragma once + + #include + #include +@@ -23,9 +22,15 @@ + typedef struct isc_ht isc_ht_t; + typedef struct isc_ht_iter isc_ht_iter_t; + ++enum { ISC_HT_CASE_SENSITIVE = 0x00, ISC_HT_CASE_INSENSITIVE = 0x01 }; ++ + /*% + * Initialize hashtable at *htp, using memory context and size of (1< +Date: Mon, 12 Feb 2024 21:09:51 +0100 +Subject: [PATCH] Prevent increased CPU consumption in DNSSEC validator + +KeyTrap - Extreme CPU consumption in DNSSEC validator. Preparing an +NSEC3 closest encloser proof can exhaust CPU resources. + +6322. [security] Specific DNS answers could cause a denial-of-service + condition due to DNS validation taking a long time. + (CVE-2023-50387) [GL #4424] + +Resolves: CVE-2023-50387 CVE-2023-50868 +--- + lib/dns/dst_api.c | 27 +++++++++---- + lib/dns/include/dns/validator.h | 1 + + lib/dns/include/dst/dst.h | 4 ++ + lib/dns/resolver.c | 4 +- + lib/dns/validator.c | 67 +++++++++++++++------------------ + lib/isc/include/isc/netmgr.h | 3 ++ + lib/isc/netmgr/netmgr-int.h | 1 + + lib/isc/netmgr/netmgr.c | 36 +++++++++++------- + lib/isc/netmgr/tcp.c | 6 +-- + lib/isc/netmgr/tcpdns.c | 4 +- + lib/isc/netmgr/udp.c | 6 +-- + 11 files changed, 91 insertions(+), 68 deletions(-) + +diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c +index 62600dd..3aafd7c 100644 +--- a/lib/dns/dst_api.c ++++ b/lib/dns/dst_api.c +@@ -160,7 +160,8 @@ computeid(dst_key_t *key); + static isc_result_t + frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags, + unsigned int protocol, dns_rdataclass_t rdclass, +- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp); ++ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata, ++ dst_key_t **keyp); + + static isc_result_t + algorithm_status(unsigned int alg); +@@ -745,6 +746,13 @@ dst_key_todns(const dst_key_t *key, isc_buffer_t *target) { + isc_result_t + dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass, + isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) { ++ return (dst_key_fromdns_ex(name, rdclass, source, mctx, false, keyp)); ++} ++ ++isc_result_t ++dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass, ++ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata, ++ dst_key_t **keyp) { + uint8_t alg, proto; + uint32_t flags, extflags; + dst_key_t *key = NULL; +@@ -775,7 +783,7 @@ dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass, + } + + result = frombuffer(name, alg, flags, proto, rdclass, source, mctx, +- &key); ++ no_rdata, &key); + if (result != ISC_R_SUCCESS) { + return (result); + } +@@ -796,7 +804,7 @@ dst_key_frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags, + REQUIRE(dst_initialized); + + result = frombuffer(name, alg, flags, protocol, rdclass, source, mctx, +- &key); ++ false, &key); + if (result != ISC_R_SUCCESS) { + return (result); + } +@@ -2288,7 +2296,8 @@ computeid(dst_key_t *key) { + static isc_result_t + frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags, + unsigned int protocol, dns_rdataclass_t rdclass, +- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) { ++ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata, ++ dst_key_t **keyp) { + dst_key_t *key; + isc_result_t ret; + +@@ -2313,10 +2322,12 @@ frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags, + return (DST_R_UNSUPPORTEDALG); + } + +- ret = key->func->fromdns(key, source); +- if (ret != ISC_R_SUCCESS) { +- dst_key_free(&key); +- return (ret); ++ if (!no_rdata) { ++ ret = key->func->fromdns(key, source); ++ if (ret != ISC_R_SUCCESS) { ++ dst_key_free(&key); ++ return (ret); ++ } + } + } + +diff --git a/lib/dns/include/dns/validator.h b/lib/dns/include/dns/validator.h +index 4744014..fe97e41 100644 +--- a/lib/dns/include/dns/validator.h ++++ b/lib/dns/include/dns/validator.h +@@ -148,6 +148,7 @@ struct dns_validator { + unsigned int authcount; + unsigned int authfail; + isc_stdtime_t start; ++ bool failed; + }; + + /*% +diff --git a/lib/dns/include/dst/dst.h b/lib/dns/include/dst/dst.h +index f454ebb..36770b5 100644 +--- a/lib/dns/include/dst/dst.h ++++ b/lib/dns/include/dst/dst.h +@@ -469,6 +469,10 @@ dst_key_tofile(const dst_key_t *key, int type, const char *directory); + */ + + isc_result_t ++dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass, ++ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata, ++ dst_key_t **keyp); ++isc_result_t + dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass, + isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp); + /*%< +diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c +index 7cbfbb2..be1d735 100644 +--- a/lib/dns/resolver.c ++++ b/lib/dns/resolver.c +@@ -10613,8 +10613,8 @@ dns_resolver_create(dns_view_t *view, isc_taskmgr_t *taskmgr, + * Since we have a pool of tasks we bind them to task queues + * to spread the load evenly + */ +- result = isc_task_create_bound(taskmgr, 0, +- &res->buckets[i].task, i); ++ result = isc_task_create_bound( ++ taskmgr, 0, &res->buckets[i].task, ISC_NM_TASK_SLOW(i)); + if (result != ISC_R_SUCCESS) { + isc_mutex_destroy(&res->buckets[i].lock); + goto cleanup_buckets; +diff --git a/lib/dns/validator.c b/lib/dns/validator.c +index e54fc70..e416cc9 100644 +--- a/lib/dns/validator.c ++++ b/lib/dns/validator.c +@@ -1098,8 +1098,8 @@ create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type, + * 'rdataset'. If found, build a dst_key_t for it and point val->key at + * it. + * +- * If val->key is already non-NULL, locate it in the rdataset and then +- * search past it for the *next* key that could have signed 'siginfo', then ++ * If val->key is already non-NULL, start searching from the next position in ++ * 'rdataset' to find the *next* key that could have signed 'siginfo', then + * set val->key to that. + * + * Returns ISC_R_SUCCESS if a possible matching key has been found, +@@ -1112,59 +1112,59 @@ select_signing_key(dns_validator_t *val, dns_rdataset_t *rdataset) { + isc_buffer_t b; + dns_rdata_t rdata = DNS_RDATA_INIT; + dst_key_t *oldkey = val->key; +- bool foundold; ++ bool no_rdata = false; + + if (oldkey == NULL) { +- foundold = true; ++ result = dns_rdataset_first(rdataset); + } else { +- foundold = false; ++ dst_key_free(&oldkey); + val->key = NULL; ++ result = dns_rdataset_next(rdataset); + } +- +- result = dns_rdataset_first(rdataset); + if (result != ISC_R_SUCCESS) { +- goto failure; ++ goto done; + } ++ + do { + dns_rdataset_current(rdataset, &rdata); + + isc_buffer_init(&b, rdata.data, rdata.length); + isc_buffer_add(&b, rdata.length); + INSIST(val->key == NULL); +- result = dst_key_fromdns(&siginfo->signer, rdata.rdclass, &b, +- val->view->mctx, &val->key); ++ result = dst_key_fromdns_ex(&siginfo->signer, rdata.rdclass, &b, ++ val->view->mctx, no_rdata, ++ &val->key); + if (result == ISC_R_SUCCESS) { + if (siginfo->algorithm == + (dns_secalg_t)dst_key_alg(val->key) && + siginfo->keyid == + (dns_keytag_t)dst_key_id(val->key) && ++ (dst_key_flags(val->key) & DNS_KEYFLAG_REVOKE) == ++ 0 && + dst_key_iszonekey(val->key)) + { +- if (foundold) { +- /* +- * This is the key we're looking for. +- */ +- return (ISC_R_SUCCESS); +- } else if (dst_key_compare(oldkey, val->key)) { +- foundold = true; +- dst_key_free(&oldkey); ++ if (no_rdata) { ++ /* Retry with full key */ ++ dns_rdata_reset(&rdata); ++ dst_key_free(&val->key); ++ no_rdata = false; ++ continue; + } ++ /* This is the key we're looking for. */ ++ goto done; + } + dst_key_free(&val->key); + } + dns_rdata_reset(&rdata); + result = dns_rdataset_next(rdataset); ++ no_rdata = true; + } while (result == ISC_R_SUCCESS); + ++done: + if (result == ISC_R_NOMORE) { + result = ISC_R_NOTFOUND; + } + +-failure: +- if (oldkey != NULL) { +- dst_key_free(&oldkey); +- } +- + return (result); + } + +@@ -1557,20 +1557,9 @@ validate_answer(dns_validator_t *val, bool resume) { + continue; + } + +- do { +- isc_result_t tresult; +- vresult = verify(val, val->key, &rdata, +- val->siginfo->keyid); +- if (vresult == ISC_R_SUCCESS) { +- break; +- } +- +- tresult = select_signing_key(val, val->keyset); +- if (tresult != ISC_R_SUCCESS) { +- break; +- } +- } while (1); ++ vresult = verify(val, val->key, &rdata, val->siginfo->keyid); + if (vresult != ISC_R_SUCCESS) { ++ val->failed = true; + validator_log(val, ISC_LOG_DEBUG(3), + "failed to verify rdataset"); + } else { +@@ -1607,9 +1596,13 @@ validate_answer(dns_validator_t *val, bool resume) { + } else { + validator_log(val, ISC_LOG_DEBUG(3), + "verify failure: %s", +- isc_result_totext(result)); ++ isc_result_totext(vresult)); + resume = false; + } ++ if (val->failed) { ++ result = ISC_R_NOMORE; ++ break; ++ } + } + if (result != ISC_R_NOMORE) { + validator_log(val, ISC_LOG_DEBUG(3), +diff --git a/lib/isc/include/isc/netmgr.h b/lib/isc/include/isc/netmgr.h +index be9fd56..dfabdc8 100644 +--- a/lib/isc/include/isc/netmgr.h ++++ b/lib/isc/include/isc/netmgr.h +@@ -455,6 +455,9 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, + * 'cb'. + */ + ++#define ISC_NM_TASK_SLOW_OFFSET -2 ++#define ISC_NM_TASK_SLOW(i) (ISC_NM_TASK_SLOW_OFFSET - 1 - i) ++ + void + isc_nm_task_enqueue(isc_nm_t *mgr, isc_task_t *task, int threadid); + /*%< +diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h +index f7b54f9..70bb32d 100644 +--- a/lib/isc/netmgr/netmgr-int.h ++++ b/lib/isc/netmgr/netmgr-int.h +@@ -673,6 +673,7 @@ struct isc_nm { + #ifdef NETMGR_TRACE + ISC_LIST(isc_nmsocket_t) active_sockets; + #endif ++ int nlisteners; + }; + + typedef enum isc_nmsocket_type { +diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c +index 0ed3182..898de41 100644 +--- a/lib/isc/netmgr/netmgr.c ++++ b/lib/isc/netmgr/netmgr.c +@@ -269,31 +269,34 @@ isc__nm_winsock_destroy(void) { + #endif /* WIN32 */ + + static void +-isc__nm_threadpool_initialize(uint32_t workers) { ++isc__nm_threadpool_initialize(uint32_t nworkers) { + char buf[11]; + int r = uv_os_getenv("UV_THREADPOOL_SIZE", buf, + &(size_t){ sizeof(buf) }); + if (r == UV_ENOENT) { +- snprintf(buf, sizeof(buf), "%" PRIu32, workers); ++ snprintf(buf, sizeof(buf), "%" PRIu32, nworkers); + uv_os_setenv("UV_THREADPOOL_SIZE", buf); + } + } + + void +-isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) { ++isc__netmgr_create(isc_mem_t *mctx, uint32_t nworkers, isc_nm_t **netmgrp) { + isc_nm_t *mgr = NULL; + char name[32]; + +- REQUIRE(workers > 0); ++ REQUIRE(nworkers > 0); + + #ifdef WIN32 + isc__nm_winsock_initialize(); + #endif /* WIN32 */ + +- isc__nm_threadpool_initialize(workers); ++ isc__nm_threadpool_initialize(nworkers); + + mgr = isc_mem_get(mctx, sizeof(*mgr)); +- *mgr = (isc_nm_t){ .nworkers = workers }; ++ *mgr = (isc_nm_t){ ++ .nworkers = nworkers * 2, ++ .nlisteners = nworkers, ++ }; + + isc_mem_attach(mctx, &mgr->mctx); + isc_mutex_init(&mgr->lock); +@@ -334,11 +337,12 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) { + isc_mempool_associatelock(mgr->evpool, &mgr->evlock); + isc_mempool_setfillcount(mgr->evpool, 32); + +- isc_barrier_init(&mgr->pausing, workers); +- isc_barrier_init(&mgr->resuming, workers); ++ isc_barrier_init(&mgr->pausing, mgr->nworkers); ++ isc_barrier_init(&mgr->resuming, mgr->nworkers); + +- mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t)); +- for (size_t i = 0; i < workers; i++) { ++ mgr->workers = isc_mem_get(mctx, ++ mgr->nworkers * sizeof(isc__networker_t)); ++ for (int i = 0; i < mgr->nworkers; i++) { + int r; + isc__networker_t *worker = &mgr->workers[i]; + *worker = (isc__networker_t){ +@@ -373,7 +377,7 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) { + mgr->workers_running++; + isc_thread_create(nm_thread, &mgr->workers[i], &worker->thread); + +- snprintf(name, sizeof(name), "isc-net-%04zu", i); ++ snprintf(name, sizeof(name), "isc-net-%04d", i); + isc_thread_setname(worker->thread, name); + } + +@@ -848,9 +852,15 @@ isc_nm_task_enqueue(isc_nm_t *nm, isc_task_t *task, int threadid) { + isc__networker_t *worker = NULL; + + if (threadid == -1) { +- tid = (int)isc_random_uniform(nm->nworkers); ++ tid = (int)isc_random_uniform(nm->nlisteners); ++ } else if (threadid == ISC_NM_TASK_SLOW_OFFSET) { ++ tid = nm->nlisteners + ++ (int)isc_random_uniform(nm->nworkers - nm->nlisteners); ++ } else if (threadid < ISC_NM_TASK_SLOW_OFFSET) { ++ tid = nm->nlisteners + (ISC_NM_TASK_SLOW(threadid) % ++ (nm->nworkers - nm->nlisteners)); + } else { +- tid = threadid % nm->nworkers; ++ tid = threadid % nm->nlisteners; + } + + worker = &nm->workers[tid]; +diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c +index 5cca9f5..83bd2e2 100644 +--- a/lib/isc/netmgr/tcp.c ++++ b/lib/isc/netmgr/tcp.c +@@ -321,7 +321,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, + isc__nm_connectcb(sock, req, result, false); + } else { + isc__nmsocket_clearcb(sock); +- sock->tid = isc_random_uniform(mgr->nworkers); ++ sock->tid = isc_random_uniform(mgr->nlisteners); + isc__nm_connectcb(sock, req, result, true); + } + atomic_store(&sock->closed, true); +@@ -339,7 +339,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, + isc__nm_put_netievent_tcpconnect(mgr, ievent); + } else { + atomic_init(&sock->active, false); +- sock->tid = isc_random_uniform(mgr->nworkers); ++ sock->tid = isc_random_uniform(mgr->nlisteners); + isc__nm_enqueue_ievent(&mgr->workers[sock->tid], + (isc__netievent_t *)ievent); + } +@@ -435,7 +435,7 @@ isc_nm_listentcp(isc_nm_t *mgr, isc_sockaddr_t *iface, + #if defined(WIN32) + sock->nchildren = 1; + #else +- sock->nchildren = mgr->nworkers; ++ sock->nchildren = mgr->nlisteners; + #endif + children_size = sock->nchildren * sizeof(sock->children[0]); + sock->children = isc_mem_get(mgr->mctx, children_size); +diff --git a/lib/isc/netmgr/tcpdns.c b/lib/isc/netmgr/tcpdns.c +index 188790c..7f13ab2 100644 +--- a/lib/isc/netmgr/tcpdns.c ++++ b/lib/isc/netmgr/tcpdns.c +@@ -305,7 +305,7 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, + isc__nm_put_netievent_tcpdnsconnect(mgr, ievent); + } else { + atomic_init(&sock->active, false); +- sock->tid = isc_random_uniform(mgr->nworkers); ++ sock->tid = isc_random_uniform(mgr->nlisteners); + isc__nm_enqueue_ievent(&mgr->workers[sock->tid], + (isc__netievent_t *)ievent); + } +@@ -404,7 +404,7 @@ isc_nm_listentcpdns(isc_nm_t *mgr, isc_sockaddr_t *iface, + #if defined(WIN32) + sock->nchildren = 1; + #else +- sock->nchildren = mgr->nworkers; ++ sock->nchildren = mgr->nlisteners; + #endif + children_size = sock->nchildren * sizeof(sock->children[0]); + sock->children = isc_mem_get(mgr->mctx, children_size); +diff --git a/lib/isc/netmgr/udp.c b/lib/isc/netmgr/udp.c +index a91c425..f2e161c 100644 +--- a/lib/isc/netmgr/udp.c ++++ b/lib/isc/netmgr/udp.c +@@ -126,7 +126,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nm_recv_cb_t cb, + uv_os_sock_t fd = -1; + + /* +- * We are creating mgr->nworkers duplicated sockets, one ++ * We are creating mgr->nlisteners duplicated sockets, one + * socket for each worker thread. + */ + sock = isc_mem_get(mgr->mctx, sizeof(isc_nmsocket_t)); +@@ -136,7 +136,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nm_recv_cb_t cb, + #if defined(WIN32) + sock->nchildren = 1; + #else +- sock->nchildren = mgr->nworkers; ++ sock->nchildren = mgr->nlisteners; + #endif + + children_size = sock->nchildren * sizeof(sock->children[0]); +@@ -795,7 +795,7 @@ isc_nm_udpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, + isc__nm_put_netievent_udpconnect(mgr, event); + } else { + atomic_init(&sock->active, false); +- sock->tid = isc_random_uniform(mgr->nworkers); ++ sock->tid = isc_random_uniform(mgr->nlisteners); + isc__nm_enqueue_ievent(&mgr->workers[sock->tid], + (isc__netievent_t *)event); + } +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-5517.patch b/SOURCES/bind-9.16-CVE-2023-5517.patch new file mode 100644 index 0000000..86a8cfd --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-5517.patch @@ -0,0 +1,111 @@ +From bef141d5795429cab745f29f7d080d1e2ea8f164 Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Mon, 12 Feb 2024 20:33:41 +0100 +Subject: [PATCH] Prevent assertion failure when nxdomain-redirect is used with + RFC 1918 reverse zones + +6316. [security] Specific queries could trigger an assertion check with + nxdomain-redirect enabled. (CVE-2023-5517) [GL #4281] +--- + lib/ns/query.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/lib/ns/query.c b/lib/ns/query.c +index 4fe3e30..cc1d179 100644 +--- a/lib/ns/query.c ++++ b/lib/ns/query.c +@@ -453,10 +453,10 @@ static void + query_addnxrrsetnsec(query_ctx_t *qctx); + + static isc_result_t +-query_nxdomain(query_ctx_t *qctx, bool empty_wild); ++query_nxdomain(query_ctx_t *qctx, isc_result_t result); + + static isc_result_t +-query_redirect(query_ctx_t *qctx); ++query_redirect(query_ctx_t *qctx, isc_result_t result); + + static isc_result_t + query_ncache(query_ctx_t *qctx, isc_result_t result); +@@ -7262,8 +7262,7 @@ query_usestale(query_ctx_t *qctx, isc_result_t result) { + * result from the search. + */ + static isc_result_t +-query_gotanswer(query_ctx_t *qctx, isc_result_t res) { +- isc_result_t result = res; ++query_gotanswer(query_ctx_t *qctx, isc_result_t result) { + char errmsg[256]; + + CCTRACE(ISC_LOG_DEBUG(3), "query_gotanswer"); +@@ -7333,16 +7332,16 @@ root_key_sentinel: + return (query_nodata(qctx, DNS_R_NXRRSET)); + + case DNS_R_EMPTYWILD: +- return (query_nxdomain(qctx, true)); ++ return (query_nxdomain(qctx, DNS_R_EMPTYWILD)); + + case DNS_R_NXDOMAIN: +- return (query_nxdomain(qctx, false)); ++ return (query_nxdomain(qctx, DNS_R_NXDOMAIN)); + + case DNS_R_COVERINGNSEC: + return (query_coveringnsec(qctx)); + + case DNS_R_NCACHENXDOMAIN: +- result = query_redirect(qctx); ++ result = query_redirect(qctx, result); + if (result != ISC_R_COMPLETE) { + return (result); + } +@@ -9155,10 +9154,10 @@ query_addnxrrsetnsec(query_ctx_t *qctx) { + * Handle NXDOMAIN and empty wildcard responses. + */ + static isc_result_t +-query_nxdomain(query_ctx_t *qctx, bool empty_wild) { ++query_nxdomain(query_ctx_t *qctx, isc_result_t result) { + dns_section_t section; + uint32_t ttl; +- isc_result_t result; ++ bool empty_wild = (result == DNS_R_EMPTYWILD); + + CCTRACE(ISC_LOG_DEBUG(3), "query_nxdomain"); + +@@ -9167,7 +9166,7 @@ query_nxdomain(query_ctx_t *qctx, bool empty_wild) { + INSIST(qctx->is_zone || REDIRECT(qctx->client)); + + if (!empty_wild) { +- result = query_redirect(qctx); ++ result = query_redirect(qctx, result); + if (result != ISC_R_COMPLETE) { + return (result); + } +@@ -9253,7 +9252,7 @@ cleanup: + * redirecting, so query processing should continue past it. + */ + static isc_result_t +-query_redirect(query_ctx_t *qctx) { ++query_redirect(query_ctx_t *qctx, isc_result_t saved_result) { + isc_result_t result; + + CCTRACE(ISC_LOG_DEBUG(3), "query_redirect"); +@@ -9294,7 +9293,7 @@ query_redirect(query_ctx_t *qctx) { + SAVE(qctx->client->query.redirect.rdataset, qctx->rdataset); + SAVE(qctx->client->query.redirect.sigrdataset, + qctx->sigrdataset); +- qctx->client->query.redirect.result = DNS_R_NCACHENXDOMAIN; ++ qctx->client->query.redirect.result = saved_result; + dns_name_copynf(qctx->fname, + qctx->client->query.redirect.fname); + qctx->client->query.redirect.authoritative = +@@ -9908,7 +9907,7 @@ query_coveringnsec(query_ctx_t *qctx) { + * We now have the proof that we have an NXDOMAIN. Apply + * NXDOMAIN redirection if configured. + */ +- result = query_redirect(qctx); ++ result = query_redirect(qctx, DNS_R_COVERINGNSEC); + if (result != ISC_R_COMPLETE) { + redirected = true; + goto cleanup; +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-5679.patch b/SOURCES/bind-9.16-CVE-2023-5679.patch new file mode 100644 index 0000000..0b05b9b --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-5679.patch @@ -0,0 +1,37 @@ +From 61112d1ce39848e08ec133f280cf8f729cb70d16 Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Mon, 12 Feb 2024 20:41:43 +0100 +Subject: [PATCH] Prevent assertion failure if DNS64 and serve-stale is used + +Enabling both DNS64 and serve-stale may cause an assertion failure +during recursive resolution. + +6317. [security] Restore DNS64 state when handling a serve-stale timeout. + (CVE-2023-5679) [GL #4334] + +Resolves: CVE-2023-5679 +--- + lib/ns/query.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/lib/ns/query.c b/lib/ns/query.c +index cc1d179..1993800 100644 +--- a/lib/ns/query.c ++++ b/lib/ns/query.c +@@ -5983,6 +5983,13 @@ query_lookup_stale(ns_client_t *client) { + query_ctx_t qctx; + + qctx_init(client, NULL, client->query.qtype, &qctx); ++ if (DNS64(client)) { ++ qctx.qtype = qctx.type = dns_rdatatype_a; ++ qctx.dns64 = true; ++ } ++ if (DNS64EXCLUDE(client)) { ++ qctx.dns64_exclude = true; ++ } + dns_db_attach(client->view->cachedb, &qctx.db); + client->query.attributes &= ~NS_QUERYATTR_RECURSIONOK; + client->query.dboptions |= DNS_DBFIND_STALETIMEOUT; +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-6516-test.patch b/SOURCES/bind-9.16-CVE-2023-6516-test.patch new file mode 100644 index 0000000..8ce8ec2 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-6516-test.patch @@ -0,0 +1,52 @@ +From e91ab7758bed0cf3dcf8ed745f91063d7ec4011c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= +Date: Thu, 4 Jan 2024 13:39:27 +0100 +Subject: [PATCH] Fix map offsets in the "masterformat" system test + +The "masterformat" system test attempts to check named-checkzone +behavior when it is fed corrupt map-format zone files. However, despite +the RBTDB and RBT structures having evolved over the years, the offsets +at which a valid map-format zone file is malformed by the "masterformat" +test have not been updated accordingly, causing the relevant checks to +introduce a different type of corruption than they were originally meant +to cause: + + - the "bad node header" check originally mangled the 'type' member of + the rdatasetheader_t structure for cname.example.nil, + + - the "bad node data" check originally mangled the 'serial' and + 'rdh_ttl' members of the rdatasetheader_t structure for + aaaa.example.nil. + +Update the offsets at which the map-format zone file is malformed at by +the "masterformat" system test so that the relevant checks fulfill their +original purpose again. +--- + bin/tests/system/masterformat/tests.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/bin/tests/system/masterformat/tests.sh b/bin/tests/system/masterformat/tests.sh +index 364a0d2..bb4e6ec 100755 +--- a/bin/tests/system/masterformat/tests.sh ++++ b/bin/tests/system/masterformat/tests.sh +@@ -295,7 +295,7 @@ status=$((status+ret)) + echo_i "checking corrupt map files fail to load (bad node header) ($n)" + ret=0 + cp map.5 badmap +-stomp badmap 2754 2 99 ++stomp badmap 3706 2 99 + $CHECKZONE -D -f map -F text -o text.5 example.nil badmap > /dev/null + [ $? = 1 ] || ret=1 + n=$((n+1)) +@@ -305,7 +305,7 @@ status=$((status+ret)) + echo_i "checking corrupt map files fail to load (bad node data) ($n)" + ret=0 + cp map.5 badmap +-stomp badmap 2897 5 127 ++stomp badmap 3137 5 127 + $CHECKZONE -D -f map -F text -o text.5 example.nil badmap > /dev/null + [ $? = 1 ] || ret=1 + n=$((n+1)) +-- +2.44.0 + diff --git a/SOURCES/bind-9.16-CVE-2023-6516.patch b/SOURCES/bind-9.16-CVE-2023-6516.patch new file mode 100644 index 0000000..4f7efa1 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2023-6516.patch @@ -0,0 +1,283 @@ +From 6e08fef24d7ba491228a4083ea0f0e33253a1043 Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Mon, 12 Feb 2024 20:48:57 +0100 +Subject: [PATCH] Specific recursive query patterns may lead to an + out-of-memory condition + +6319. [security] Query patterns that continuously triggered cache + database maintenance could exhaust all available memory + on the host running named. (CVE-2023-6516) [GL #4383] + +Resolves: CVE-2023-6516 +--- + lib/dns/include/dns/rbt.h | 6 ++ + lib/dns/mapapi | 2 +- + lib/dns/rbt.c | 1 + + lib/dns/rbtdb.c | 149 +++++++++++++++++++++++++------------- + 4 files changed, 107 insertions(+), 51 deletions(-) + +diff --git a/lib/dns/include/dns/rbt.h b/lib/dns/include/dns/rbt.h +index b67e602..69655b0 100644 +--- a/lib/dns/include/dns/rbt.h ++++ b/lib/dns/include/dns/rbt.h +@@ -164,6 +164,12 @@ struct dns_rbtnode { + uint16_t locknum; /* note that this is not in the bitfield */ + isc_refcount_t references; + /*@}*/ ++ ++ /*% ++ * This linked list is used to store nodes from which tree pruning can ++ * be started. ++ */ ++ ISC_LINK(dns_rbtnode_t) prunelink; + }; + + typedef isc_result_t (*dns_rbtfindcallback_t)(dns_rbtnode_t *node, +diff --git a/lib/dns/mapapi b/lib/dns/mapapi +index 1b502d3..a46e190 100644 +--- a/lib/dns/mapapi ++++ b/lib/dns/mapapi +@@ -13,4 +13,4 @@ + # Whenever releasing a new major release of BIND9, set this value + # back to 1.0 when releasing the first alpha. Map files are *never* + # compatible across major releases. +-MAPAPI=3.0 ++MAPAPI=4.0 +diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c +index 7f2c2d2..a220368 100644 +--- a/lib/dns/rbt.c ++++ b/lib/dns/rbt.c +@@ -2283,6 +2283,7 @@ create_node(isc_mem_t *mctx, const dns_name_t *name, dns_rbtnode_t **nodep) { + HASHVAL(node) = 0; + + ISC_LINK_INIT(node, deadlink); ++ ISC_LINK_INIT(node, prunelink); + + LOCKNUM(node) = 0; + WILD(node) = 0; +diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c +index 75f97f5..2707507 100644 +--- a/lib/dns/rbtdb.c ++++ b/lib/dns/rbtdb.c +@@ -515,6 +515,10 @@ struct dns_rbtdb { + */ + rbtnodelist_t *deadnodes; + ++ /* List of nodes from which recursive tree pruning can be started from. ++ * Locked by tree_lock. */ ++ rbtnodelist_t prunenodes; ++ + /* + * Heaps. These are used for TTL based expiry in a cache, + * or for zone resigning in a zone DB. hmctx is the memory +@@ -1060,6 +1064,7 @@ free_rbtdb(dns_rbtdb_t *rbtdb, bool log, isc_event_t *event) { + unsigned int i; + isc_result_t result; + char buf[DNS_NAME_FORMATSIZE]; ++ dns_rbtnode_t *node = NULL; + dns_rbt_t **treep; + isc_time_t start; + dns_dbonupdatelistener_t *listener, *listener_next; +@@ -1086,8 +1091,6 @@ free_rbtdb(dns_rbtdb_t *rbtdb, bool log, isc_event_t *event) { + * the overhead of unlinking all nodes here should be negligible. + */ + for (i = 0; i < rbtdb->node_lock_count; i++) { +- dns_rbtnode_t *node; +- + node = ISC_LIST_HEAD(rbtdb->deadnodes[i]); + while (node != NULL) { + ISC_LIST_UNLINK(rbtdb->deadnodes[i], node, deadlink); +@@ -1095,6 +1098,12 @@ free_rbtdb(dns_rbtdb_t *rbtdb, bool log, isc_event_t *event) { + } + } + ++ node = ISC_LIST_HEAD(rbtdb->prunenodes); ++ while (node != NULL) { ++ ISC_LIST_UNLINK(rbtdb->prunenodes, node, prunelink); ++ node = ISC_LIST_HEAD(rbtdb->prunenodes); ++ } ++ + if (event == NULL) { + rbtdb->quantum = (rbtdb->task != NULL) ? 100 : 0; + } +@@ -1934,19 +1943,32 @@ is_leaf(dns_rbtnode_t *node) { + node->left == NULL && node->right == NULL); + } + ++/*% ++ * The tree lock must be held when this function is called as it reads and ++ * updates rbtdb->prunenodes. ++ */ + static inline void + send_to_prune_tree(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, + isc_rwlocktype_t locktype) { +- isc_event_t *ev; +- dns_db_t *db; ++ bool pruning_queued = (ISC_LIST_HEAD(rbtdb->prunenodes) != NULL); ++ ++ INSIST(locktype == isc_rwlocktype_write); + +- ev = isc_event_allocate(rbtdb->common.mctx, NULL, DNS_EVENT_RBTPRUNE, +- prune_tree, node, sizeof(isc_event_t)); + new_reference(rbtdb, node, locktype); +- db = NULL; +- attach((dns_db_t *)rbtdb, &db); +- ev->ev_sender = db; +- isc_task_send(rbtdb->task, &ev); ++ INSIST(!ISC_LINK_LINKED(node, prunelink)); ++ ISC_LIST_APPEND(rbtdb->prunenodes, node, prunelink); ++ ++ if (!pruning_queued) { ++ isc_event_t *ev = NULL; ++ dns_db_t *db = NULL; ++ ++ attach((dns_db_t *)rbtdb, &db); ++ ++ ev = isc_event_allocate(rbtdb->common.mctx, NULL, ++ DNS_EVENT_RBTPRUNE, prune_tree, db, ++ sizeof(isc_event_t)); ++ isc_task_send(rbtdb->task, &ev); ++ } + } + + /*% +@@ -2220,17 +2242,26 @@ restore_locks: + } + + /* +- * Prune the tree by recursively cleaning-up single leaves. In the worst +- * case, the number of iteration is the number of tree levels, which is at +- * most the maximum number of domain name labels, i.e, 127. In practice, this +- * should be much smaller (only a few times), and even the worst case would be +- * acceptable for a single event. ++ * Prune the tree by recursively cleaning up single leaves. Go through all ++ * nodes stored in the rbtdb->prunenodes list; for each of them, in the worst ++ * case, it will be necessary to traverse a number of tree levels equal to the ++ * maximum legal number of domain name labels (127); in practice, the number of ++ * tree levels to traverse will virtually always be much smaller (a few levels ++ * at most). While holding the tree lock throughout this entire operation is ++ * less than ideal, so is splitting the latter up by queueing a separate ++ * prune_tree() run for each node to start pruning from (as queueing requires ++ * allocating memory and can therefore potentially be exploited to exhaust ++ * available memory). Also note that actually freeing up the memory used by ++ * RBTDB nodes (which is what this function does) is essential to keeping cache ++ * memory use in check, so since the tree lock needs to be acquired anyway, ++ * freeing as many nodes as possible before the tree lock gets released is ++ * prudent. + */ + static void + prune_tree(isc_task_t *task, isc_event_t *event) { +- dns_rbtdb_t *rbtdb = event->ev_sender; +- dns_rbtnode_t *node = event->ev_arg; +- dns_rbtnode_t *parent; ++ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)event->ev_arg; ++ dns_rbtnode_t *node = NULL; ++ dns_rbtnode_t *parent = NULL; + unsigned int locknum; + + UNUSED(task); +@@ -2238,44 +2269,60 @@ prune_tree(isc_task_t *task, isc_event_t *event) { + isc_event_free(&event); + + RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); +- locknum = node->locknum; +- NODE_LOCK(&rbtdb->node_locks[locknum].lock, isc_rwlocktype_write); +- do { +- parent = node->parent; +- decrement_reference(rbtdb, node, 0, isc_rwlocktype_write, +- isc_rwlocktype_write, true); + +- if (parent != NULL && parent->down == NULL) { +- /* +- * node was the only down child of the parent and has +- * just been removed. We'll then need to examine the +- * parent. Keep the lock if possible; otherwise, +- * release the old lock and acquire one for the parent. +- */ +- if (parent->locknum != locknum) { +- NODE_UNLOCK(&rbtdb->node_locks[locknum].lock, +- isc_rwlocktype_write); +- locknum = parent->locknum; +- NODE_LOCK(&rbtdb->node_locks[locknum].lock, +- isc_rwlocktype_write); ++ while ((node = ISC_LIST_HEAD(rbtdb->prunenodes)) != NULL) { ++ locknum = node->locknum; ++ NODE_LOCK(&rbtdb->node_locks[locknum].lock, ++ isc_rwlocktype_write); ++ do { ++ if (ISC_LINK_LINKED(node, prunelink)) { ++ ISC_LIST_UNLINK(rbtdb->prunenodes, node, ++ prunelink); + } + +- /* +- * We need to gain a reference to the node before +- * decrementing it in the next iteration. +- */ +- if (ISC_LINK_LINKED(parent, deadlink)) { +- ISC_LIST_UNLINK(rbtdb->deadnodes[locknum], ++ parent = node->parent; ++ decrement_reference(rbtdb, node, 0, ++ isc_rwlocktype_write, ++ isc_rwlocktype_write, true); ++ ++ if (parent != NULL && parent->down == NULL) { ++ /* ++ * node was the only down child of the parent ++ * and has just been removed. We'll then need ++ * to examine the parent. Keep the lock if ++ * possible; otherwise, release the old lock and ++ * acquire one for the parent. ++ */ ++ if (parent->locknum != locknum) { ++ NODE_UNLOCK( ++ &rbtdb->node_locks[locknum].lock, ++ isc_rwlocktype_write); ++ locknum = parent->locknum; ++ NODE_LOCK( ++ &rbtdb->node_locks[locknum].lock, ++ isc_rwlocktype_write); ++ } ++ ++ /* ++ * We need to gain a reference to the node ++ * before decrementing it in the next iteration. ++ */ ++ if (ISC_LINK_LINKED(parent, deadlink)) { ++ ISC_LIST_UNLINK( ++ rbtdb->deadnodes[locknum], + parent, deadlink); ++ } ++ new_reference(rbtdb, parent, ++ isc_rwlocktype_write); ++ } else { ++ parent = NULL; + } +- new_reference(rbtdb, parent, isc_rwlocktype_write); +- } else { +- parent = NULL; +- } + +- node = parent; +- } while (node != NULL); +- NODE_UNLOCK(&rbtdb->node_locks[locknum].lock, isc_rwlocktype_write); ++ node = parent; ++ } while (node != NULL); ++ NODE_UNLOCK(&rbtdb->node_locks[locknum].lock, ++ isc_rwlocktype_write); ++ } + RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write); + + detach((dns_db_t **)&rbtdb); +@@ -8726,6 +8773,8 @@ dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type, + ISC_LIST_INIT(rbtdb->deadnodes[i]); + } + ++ ISC_LIST_INIT(rbtdb->prunenodes); ++ + rbtdb->active = rbtdb->node_lock_count; + + for (i = 0; i < (int)(rbtdb->node_lock_count); i++) { +-- +2.43.0 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737-records-test.patch b/SOURCES/bind-9.16-CVE-2024-1737-records-test.patch new file mode 100644 index 0000000..2b425d3 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737-records-test.patch @@ -0,0 +1,2947 @@ +From 460116952fe7f8ad684ca6248fc4d87c11c9d4a0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Thu, 23 May 2024 19:12:40 +0200 +Subject: [PATCH] Add test for not-loading and not-transfering huge RRSets + +Add two new masterformat tests - the 'huge' zone fits within the ns1 +limit and loads on the primary ns1 server, but must not transfer to the +ns2 secondary, and the 'uber' zone should not even load on the primary +ns1 server. + +(cherry picked from commit cee9ad81db6e5a1167b311e5c2f42cf65ba457cd) +(cherry picked from commit bf0df5322c46949c56ea6b3d5e8b56123e6f71ae) + +Add a test for not caching large RRset + +Send a recursive query for a large (2500 record) RRset, which should +fail when using the default max-records-per-type setting of 100, but +succeed when the cap is disabled. + +(cherry picked from commit 8e3efb4e06ba68cc3f9bc5be2bacb2596bd74cb3) +(cherry picked from commit 4a0fe202a906e32d3316d161fff053d3b1737a18) +--- + bin/tests/system/conf.sh.common | 1 + + bin/tests/system/limits/ns1/named.conf.in | 1 + + bin/tests/system/masterformat/clean.sh | 2 + + bin/tests/system/masterformat/ns1/compile.sh | 2 + + bin/tests/system/masterformat/ns1/huge.db.in | 22 + + .../system/masterformat/ns1/named.conf.in | 15 + + bin/tests/system/masterformat/ns1/uber.db.in | 22 + + .../system/masterformat/ns2/named.conf.in | 8 + + bin/tests/system/masterformat/setup.sh | 19 +- + bin/tests/system/masterformat/tests.sh | 64 +- + bin/tests/system/reclimit/ns1/big.db | 2515 +++++++++++++++++ + bin/tests/system/reclimit/ns1/named.conf.in | 6 + + bin/tests/system/reclimit/ns1/root.db | 3 + + bin/tests/system/reclimit/ns3/named5.conf.in | 42 + + bin/tests/system/reclimit/tests.sh | 12 +- + bin/tests/system/resolver/tests.sh | 3 +- + 16 files changed, 2729 insertions(+), 8 deletions(-) + create mode 100644 bin/tests/system/masterformat/ns1/huge.db.in + create mode 100644 bin/tests/system/masterformat/ns1/uber.db.in + create mode 100644 bin/tests/system/reclimit/ns1/big.db + create mode 100644 bin/tests/system/reclimit/ns3/named5.conf.in + +diff --git a/bin/tests/system/conf.sh.common b/bin/tests/system/conf.sh.common +index 61edca2d21..9fab00ff5c 100644 +--- a/bin/tests/system/conf.sh.common ++++ b/bin/tests/system/conf.sh.common +@@ -710,6 +710,7 @@ copy_setports() { + -e "s/${atsign}ALTERNATIVE_ALGORITHM${atsign}/${ALTERNATIVE_ALGORITHM}/g" \ + -e "s/${atsign}ALTERNATIVE_ALGORITHM_NUMBER${atsign}/${ALTERNATIVE_ALGORITHM_NUMBER}/g" \ + -e "s/${atsign}ALTERNATIVE_BITS${atsign}/${ALTERNATIVE_BITS}/g" \ ++ -e "s/${atsign}DEFAULT_HMAC${atsign}/${DEFAULT_HMAC}/g" \ + -e "s/${atsign}DISABLED_ALGORITHM${atsign}/${DISABLED_ALGORITHM}/g" \ + -e "s/${atsign}DISABLED_ALGORITHM_NUMBER${atsign}/${DISABLED_ALGORITHM_NUMBER}/g" \ + -e "s/${atsign}DISABLED_BITS${atsign}/${DISABLED_BITS}/g" \ +diff --git a/bin/tests/system/limits/ns1/named.conf.in b/bin/tests/system/limits/ns1/named.conf.in +index a2724a4d30..59c30b4c37 100644 +--- a/bin/tests/system/limits/ns1/named.conf.in ++++ b/bin/tests/system/limits/ns1/named.conf.in +@@ -20,6 +20,7 @@ options { + recursion no; + notify yes; + minimal-responses no; ++ max-records-per-type 0; + }; + + zone "." { +diff --git a/bin/tests/system/masterformat/clean.sh b/bin/tests/system/masterformat/clean.sh +index 82502fc430..a9183af6ff 100755 +--- a/bin/tests/system/masterformat/clean.sh ++++ b/bin/tests/system/masterformat/clean.sh +@@ -14,6 +14,8 @@ rm -f ./ns1/example.db.compat + rm -f ./ns1/example.db.serial.raw + rm -f ./ns1/large.db ./ns1/large.db.raw + rm -f ./ns1/example.db.map ./ns1/signed.db.map ++rm -f ./ns1/huge.db ./ns1/huge.db.raw ++rm -f ./ns1/uber.db ./ns1/uber.db.raw + rm -f ./ns1/session.key + rm -f ./dig.out.* + rm -f ./dig.out +diff --git a/bin/tests/system/masterformat/ns1/compile.sh b/bin/tests/system/masterformat/ns1/compile.sh +index 7d35986117..9972e51aa4 100755 +--- a/bin/tests/system/masterformat/ns1/compile.sh ++++ b/bin/tests/system/masterformat/ns1/compile.sh +@@ -27,6 +27,8 @@ $CHECKZONE -D -F raw -L 3333 -o example.db.serial.raw example \ + $CHECKZONE -D -F raw -o large.db.raw large large.db > /dev/null 2>&1 + $CHECKZONE -D -F map -o example.db.map example-map \ + example.db > /dev/null 2>&1 ++$CHECKZONE -D -F raw -o huge.db.raw huge huge.db >/dev/null 2>&1 ++$CHECKZONE -D -F raw -o uber.db.raw uber uber.db >/dev/null 2>&1 + + $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -f KSK signed > /dev/null 2>&1 + $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" signed > /dev/null 2>&1 +diff --git a/bin/tests/system/masterformat/ns1/huge.db.in b/bin/tests/system/masterformat/ns1/huge.db.in +new file mode 100644 +index 0000000000..5a818632a8 +--- /dev/null ++++ b/bin/tests/system/masterformat/ns1/huge.db.in +@@ -0,0 +1,22 @@ ++; Copyright (C) Internet Systems Consortium, Inc. ("ISC") ++; ++; SPDX-License-Identifier: MPL-2.0 ++; ++; This Source Code Form is subject to the terms of the Mozilla Public ++; License, v. 2.0. If a copy of the MPL was not distributed with this ++; file, you can obtain one at https://mozilla.org/MPL/2.0/. ++; ++; See the COPYRIGHT file distributed with this work for additional ++; information regarding copyright ownership. ++ ++$TTL 1D ++ ++@ IN SOA ns hostmaster ( ++ 1 ++ 3600 ++ 1800 ++ 1814400 ++ 3 ++ ) ++ NS ns ++ns A 10.53.0.1 +diff --git a/bin/tests/system/masterformat/ns1/named.conf.in b/bin/tests/system/masterformat/ns1/named.conf.in +index 2b7c11c991..4c3614f671 100644 +--- a/bin/tests/system/masterformat/ns1/named.conf.in ++++ b/bin/tests/system/masterformat/ns1/named.conf.in +@@ -20,6 +20,7 @@ options { + notify no; + session-keyfile "session.key"; + servfail-ttl 0; ++ max-records-per-type 2050; + }; + + key rndc_key { +@@ -75,6 +76,20 @@ zone "large" { + allow-transfer { any; }; + }; + ++zone "huge" { ++ type primary; ++ file "huge.db.raw"; ++ masterfile-format raw; ++ allow-transfer { any; }; ++}; ++ ++zone "uber" { ++ type primary; ++ file "uber.db.raw"; ++ masterfile-format raw; ++ allow-transfer { any; }; ++}; ++ + zone "signed" { + type primary; + file "signed.db.map"; +diff --git a/bin/tests/system/masterformat/ns1/uber.db.in b/bin/tests/system/masterformat/ns1/uber.db.in +new file mode 100644 +index 0000000000..5a818632a8 +--- /dev/null ++++ b/bin/tests/system/masterformat/ns1/uber.db.in +@@ -0,0 +1,22 @@ ++; Copyright (C) Internet Systems Consortium, Inc. ("ISC") ++; ++; SPDX-License-Identifier: MPL-2.0 ++; ++; This Source Code Form is subject to the terms of the Mozilla Public ++; License, v. 2.0. If a copy of the MPL was not distributed with this ++; file, you can obtain one at https://mozilla.org/MPL/2.0/. ++; ++; See the COPYRIGHT file distributed with this work for additional ++; information regarding copyright ownership. ++ ++$TTL 1D ++ ++@ IN SOA ns hostmaster ( ++ 1 ++ 3600 ++ 1800 ++ 1814400 ++ 3 ++ ) ++ NS ns ++ns A 10.53.0.1 +diff --git a/bin/tests/system/masterformat/ns2/named.conf.in b/bin/tests/system/masterformat/ns2/named.conf.in +index 4df1d37990..0468ddd17a 100644 +--- a/bin/tests/system/masterformat/ns2/named.conf.in ++++ b/bin/tests/system/masterformat/ns2/named.conf.in +@@ -19,6 +19,7 @@ options { + recursion no; + notify no; + servfail-ttl 0; ++ max-records-per-type 2000; + }; + + zone "example" { +@@ -59,3 +60,10 @@ zone "large" { + masterfile-format raw; + file "large.bk"; + }; ++ ++zone "huge" { ++ type secondary; ++ primaries { 10.53.0.1; }; ++ masterfile-format raw; ++ file "huge.bk"; ++}; +diff --git a/bin/tests/system/masterformat/setup.sh b/bin/tests/system/masterformat/setup.sh +index ffc2b42a84..7af1ad978a 100755 +--- a/bin/tests/system/masterformat/setup.sh ++++ b/bin/tests/system/masterformat/setup.sh +@@ -22,8 +22,23 @@ cp ns1/example.db ns2/ + cp ns2/formerly-text.db.in ns2/formerly-text.db + cp ns1/large.db.in ns1/large.db + awk 'END { +- for (i = 0; i < 512; i++ ) { print "a TXT", i; } +- for (i = 0; i < 1024; i++ ) { print "b TXT", i; } ++ for (i = 0; i < 500; i++ ) { print "a TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "b TXT", i; } + for (i = 0; i < 2000; i++ ) { print "c TXT", i; } + }' < /dev/null >> ns1/large.db ++cp ns1/huge.db.in ns1/huge.db ++awk 'END { ++ for (i = 0; i < 500; i++ ) { print "a TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "b TXT", i; } ++ for (i = 0; i < 2000; i++ ) { print "c TXT", i; } ++ for (i = 0; i < 2050; i++ ) { print "d TXT", i; } ++}' >ns1/huge.db ++cp ns1/uber.db.in ns1/uber.db ++awk 'END { ++ for (i = 0; i < 500; i++ ) { print "a TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "b TXT", i; } ++ for (i = 0; i < 2000; i++ ) { print "c TXT", i; } ++ for (i = 0; i < 2050; i++ ) { print "d TXT", i; } ++ for (i = 0; i < 2100; i++ ) { print "e TXT", i; } ++}' >ns1/uber.db + cd ns1 && $SHELL compile.sh +diff --git a/bin/tests/system/masterformat/tests.sh b/bin/tests/system/masterformat/tests.sh +index bb4e6ec3cd..83ab738faf 100755 +--- a/bin/tests/system/masterformat/tests.sh ++++ b/bin/tests/system/masterformat/tests.sh +@@ -188,10 +188,66 @@ echo_i "checking that large rdatasets loaded ($n)" + for i in 0 1 2 3 4 5 6 7 8 9 + do + ret=0 +-for a in a b c +-do +- $DIG +tcp txt "${a}.large" @10.53.0.2 -p "${PORT}" > "dig.out.ns2.test$n" +- grep "status: NOERROR" "dig.out.ns2.test$n" > /dev/null || ret=1 ++ for a in a b c ++ do ++ $DIG +tcp txt "${a}.large" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" ++ grep "status: NOERROR" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 ++ done ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ ++echo_i "checking that large rdatasets transfered ($n)" ++for i in 0 1 2 3 4 5 6 7 8 9; do ++ ret=0 ++ for a in a b c; do ++ $DIG +tcp txt "${a}.large" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$a.test$n" ++ grep "status: NOERROR" "dig.out.ns2.$a.test$n" >/dev/null || ret=1 ++ done ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ ++echo_i "checking that huge rdatasets loaded ($n)" ++for i in 0 1 2 3 4 5 6 7 8 9; do ++ ret=0 ++ for a in a b c d; do ++ $DIG +tcp txt "${a}.huge" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" ++ grep "status: NOERROR" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 ++ done ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ ++echo_i "checking that huge rdatasets not transfered ($n)" ++for i in 0 1 2 3 4 5 6 7 8 9; do ++ ret=0 ++ for a in a b c d; do ++ $DIG +tcp txt "${a}.huge" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$a.test$n" ++ grep "status: SERVFAIL" "dig.out.ns2.$a.test$n" >/dev/null || ret=1 ++ done ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ ++echo_i "checking that uber rdatasets not loaded ($n)" ++for i in 0 1 2 3 4 5 6 7 8 9; do ++ ret=0 ++ for a in a b c d e; do ++ $DIG +tcp txt "${a}.uber" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" ++ grep "status: SERVFAIL" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +diff --git a/bin/tests/system/reclimit/ns1/big.db b/bin/tests/system/reclimit/ns1/big.db +new file mode 100644 +index 0000000000..bddceb76e7 +--- /dev/null ++++ b/bin/tests/system/reclimit/ns1/big.db +@@ -0,0 +1,2515 @@ ++; Copyright (C) Internet Systems Consortium, Inc. ("ISC") ++; ++; SPDX-License-Identifier: MPL-2.0 ++; ++; This Source Code Form is subject to the terms of the Mozilla Public ++; License, v. 2.0. If a copy of the MPL was not distributed with this ++; file, you can obtain one at https://mozilla.org/MPL/2.0/. ++; ++; See the COPYRIGHT file distributed with this work for additional ++; information regarding copyright ownership. ++ ++big. 60 IN SOA ns.big. hostmaster.ns.big. 1 0 0 0 0 ++big. 60 IN NS ns.big. ++ns.big. 60 IN A 10.53.0.1 ++ ++biganswer.big. 60 IN A 10.10.1.1 ++biganswer.big. 60 IN A 10.10.1.2 ++biganswer.big. 60 IN A 10.10.1.3 ++biganswer.big. 60 IN A 10.10.1.4 ++biganswer.big. 60 IN A 10.10.1.5 ++biganswer.big. 60 IN A 10.10.1.6 ++biganswer.big. 60 IN A 10.10.1.7 ++biganswer.big. 60 IN A 10.10.1.8 ++biganswer.big. 60 IN A 10.10.1.9 ++biganswer.big. 60 IN A 10.10.1.10 ++biganswer.big. 60 IN A 10.10.1.11 ++biganswer.big. 60 IN A 10.10.1.12 ++biganswer.big. 60 IN A 10.10.1.13 ++biganswer.big. 60 IN A 10.10.1.14 ++biganswer.big. 60 IN A 10.10.1.15 ++biganswer.big. 60 IN A 10.10.1.16 ++biganswer.big. 60 IN A 10.10.1.17 ++biganswer.big. 60 IN A 10.10.1.18 ++biganswer.big. 60 IN A 10.10.1.19 ++biganswer.big. 60 IN A 10.10.1.20 ++biganswer.big. 60 IN A 10.10.1.21 ++biganswer.big. 60 IN A 10.10.1.22 ++biganswer.big. 60 IN A 10.10.1.23 ++biganswer.big. 60 IN A 10.10.1.24 ++biganswer.big. 60 IN A 10.10.1.25 ++biganswer.big. 60 IN A 10.10.1.26 ++biganswer.big. 60 IN A 10.10.1.27 ++biganswer.big. 60 IN A 10.10.1.28 ++biganswer.big. 60 IN A 10.10.1.29 ++biganswer.big. 60 IN A 10.10.1.30 ++biganswer.big. 60 IN A 10.10.1.31 ++biganswer.big. 60 IN A 10.10.1.32 ++biganswer.big. 60 IN A 10.10.1.33 ++biganswer.big. 60 IN A 10.10.1.34 ++biganswer.big. 60 IN A 10.10.1.35 ++biganswer.big. 60 IN A 10.10.1.36 ++biganswer.big. 60 IN A 10.10.1.37 ++biganswer.big. 60 IN A 10.10.1.38 ++biganswer.big. 60 IN A 10.10.1.39 ++biganswer.big. 60 IN A 10.10.1.40 ++biganswer.big. 60 IN A 10.10.1.41 ++biganswer.big. 60 IN A 10.10.1.42 ++biganswer.big. 60 IN A 10.10.1.43 ++biganswer.big. 60 IN A 10.10.1.44 ++biganswer.big. 60 IN A 10.10.1.45 ++biganswer.big. 60 IN A 10.10.1.46 ++biganswer.big. 60 IN A 10.10.1.47 ++biganswer.big. 60 IN A 10.10.1.48 ++biganswer.big. 60 IN A 10.10.1.49 ++biganswer.big. 60 IN A 10.10.1.50 ++biganswer.big. 60 IN A 10.10.2.1 ++biganswer.big. 60 IN A 10.10.2.2 ++biganswer.big. 60 IN A 10.10.2.3 ++biganswer.big. 60 IN A 10.10.2.4 ++biganswer.big. 60 IN A 10.10.2.5 ++biganswer.big. 60 IN A 10.10.2.6 ++biganswer.big. 60 IN A 10.10.2.7 ++biganswer.big. 60 IN A 10.10.2.8 ++biganswer.big. 60 IN A 10.10.2.9 ++biganswer.big. 60 IN A 10.10.2.10 ++biganswer.big. 60 IN A 10.10.2.11 ++biganswer.big. 60 IN A 10.10.2.12 ++biganswer.big. 60 IN A 10.10.2.13 ++biganswer.big. 60 IN A 10.10.2.14 ++biganswer.big. 60 IN A 10.10.2.15 ++biganswer.big. 60 IN A 10.10.2.16 ++biganswer.big. 60 IN A 10.10.2.17 ++biganswer.big. 60 IN A 10.10.2.18 ++biganswer.big. 60 IN A 10.10.2.19 ++biganswer.big. 60 IN A 10.10.2.20 ++biganswer.big. 60 IN A 10.10.2.21 ++biganswer.big. 60 IN A 10.10.2.22 ++biganswer.big. 60 IN A 10.10.2.23 ++biganswer.big. 60 IN A 10.10.2.24 ++biganswer.big. 60 IN A 10.10.2.25 ++biganswer.big. 60 IN A 10.10.2.26 ++biganswer.big. 60 IN A 10.10.2.27 ++biganswer.big. 60 IN A 10.10.2.28 ++biganswer.big. 60 IN A 10.10.2.29 ++biganswer.big. 60 IN A 10.10.2.30 ++biganswer.big. 60 IN A 10.10.2.31 ++biganswer.big. 60 IN A 10.10.2.32 ++biganswer.big. 60 IN A 10.10.2.33 ++biganswer.big. 60 IN A 10.10.2.34 ++biganswer.big. 60 IN A 10.10.2.35 ++biganswer.big. 60 IN A 10.10.2.36 ++biganswer.big. 60 IN A 10.10.2.37 ++biganswer.big. 60 IN A 10.10.2.38 ++biganswer.big. 60 IN A 10.10.2.39 ++biganswer.big. 60 IN A 10.10.2.40 ++biganswer.big. 60 IN A 10.10.2.41 ++biganswer.big. 60 IN A 10.10.2.42 ++biganswer.big. 60 IN A 10.10.2.43 ++biganswer.big. 60 IN A 10.10.2.44 ++biganswer.big. 60 IN A 10.10.2.45 ++biganswer.big. 60 IN A 10.10.2.46 ++biganswer.big. 60 IN A 10.10.2.47 ++biganswer.big. 60 IN A 10.10.2.48 ++biganswer.big. 60 IN A 10.10.2.49 ++biganswer.big. 60 IN A 10.10.2.50 ++biganswer.big. 60 IN A 10.10.3.1 ++biganswer.big. 60 IN A 10.10.3.2 ++biganswer.big. 60 IN A 10.10.3.3 ++biganswer.big. 60 IN A 10.10.3.4 ++biganswer.big. 60 IN A 10.10.3.5 ++biganswer.big. 60 IN A 10.10.3.6 ++biganswer.big. 60 IN A 10.10.3.7 ++biganswer.big. 60 IN A 10.10.3.8 ++biganswer.big. 60 IN A 10.10.3.9 ++biganswer.big. 60 IN A 10.10.3.10 ++biganswer.big. 60 IN A 10.10.3.11 ++biganswer.big. 60 IN A 10.10.3.12 ++biganswer.big. 60 IN A 10.10.3.13 ++biganswer.big. 60 IN A 10.10.3.14 ++biganswer.big. 60 IN A 10.10.3.15 ++biganswer.big. 60 IN A 10.10.3.16 ++biganswer.big. 60 IN A 10.10.3.17 ++biganswer.big. 60 IN A 10.10.3.18 ++biganswer.big. 60 IN A 10.10.3.19 ++biganswer.big. 60 IN A 10.10.3.20 ++biganswer.big. 60 IN A 10.10.3.21 ++biganswer.big. 60 IN A 10.10.3.22 ++biganswer.big. 60 IN A 10.10.3.23 ++biganswer.big. 60 IN A 10.10.3.24 ++biganswer.big. 60 IN A 10.10.3.25 ++biganswer.big. 60 IN A 10.10.3.26 ++biganswer.big. 60 IN A 10.10.3.27 ++biganswer.big. 60 IN A 10.10.3.28 ++biganswer.big. 60 IN A 10.10.3.29 ++biganswer.big. 60 IN A 10.10.3.30 ++biganswer.big. 60 IN A 10.10.3.31 ++biganswer.big. 60 IN A 10.10.3.32 ++biganswer.big. 60 IN A 10.10.3.33 ++biganswer.big. 60 IN A 10.10.3.34 ++biganswer.big. 60 IN A 10.10.3.35 ++biganswer.big. 60 IN A 10.10.3.36 ++biganswer.big. 60 IN A 10.10.3.37 ++biganswer.big. 60 IN A 10.10.3.38 ++biganswer.big. 60 IN A 10.10.3.39 ++biganswer.big. 60 IN A 10.10.3.40 ++biganswer.big. 60 IN A 10.10.3.41 ++biganswer.big. 60 IN A 10.10.3.42 ++biganswer.big. 60 IN A 10.10.3.43 ++biganswer.big. 60 IN A 10.10.3.44 ++biganswer.big. 60 IN A 10.10.3.45 ++biganswer.big. 60 IN A 10.10.3.46 ++biganswer.big. 60 IN A 10.10.3.47 ++biganswer.big. 60 IN A 10.10.3.48 ++biganswer.big. 60 IN A 10.10.3.49 ++biganswer.big. 60 IN A 10.10.3.50 ++biganswer.big. 60 IN A 10.10.4.1 ++biganswer.big. 60 IN A 10.10.4.2 ++biganswer.big. 60 IN A 10.10.4.3 ++biganswer.big. 60 IN A 10.10.4.4 ++biganswer.big. 60 IN A 10.10.4.5 ++biganswer.big. 60 IN A 10.10.4.6 ++biganswer.big. 60 IN A 10.10.4.7 ++biganswer.big. 60 IN A 10.10.4.8 ++biganswer.big. 60 IN A 10.10.4.9 ++biganswer.big. 60 IN A 10.10.4.10 ++biganswer.big. 60 IN A 10.10.4.11 ++biganswer.big. 60 IN A 10.10.4.12 ++biganswer.big. 60 IN A 10.10.4.13 ++biganswer.big. 60 IN A 10.10.4.14 ++biganswer.big. 60 IN A 10.10.4.15 ++biganswer.big. 60 IN A 10.10.4.16 ++biganswer.big. 60 IN A 10.10.4.17 ++biganswer.big. 60 IN A 10.10.4.18 ++biganswer.big. 60 IN A 10.10.4.19 ++biganswer.big. 60 IN A 10.10.4.20 ++biganswer.big. 60 IN A 10.10.4.21 ++biganswer.big. 60 IN A 10.10.4.22 ++biganswer.big. 60 IN A 10.10.4.23 ++biganswer.big. 60 IN A 10.10.4.24 ++biganswer.big. 60 IN A 10.10.4.25 ++biganswer.big. 60 IN A 10.10.4.26 ++biganswer.big. 60 IN A 10.10.4.27 ++biganswer.big. 60 IN A 10.10.4.28 ++biganswer.big. 60 IN A 10.10.4.29 ++biganswer.big. 60 IN A 10.10.4.30 ++biganswer.big. 60 IN A 10.10.4.31 ++biganswer.big. 60 IN A 10.10.4.32 ++biganswer.big. 60 IN A 10.10.4.33 ++biganswer.big. 60 IN A 10.10.4.34 ++biganswer.big. 60 IN A 10.10.4.35 ++biganswer.big. 60 IN A 10.10.4.36 ++biganswer.big. 60 IN A 10.10.4.37 ++biganswer.big. 60 IN A 10.10.4.38 ++biganswer.big. 60 IN A 10.10.4.39 ++biganswer.big. 60 IN A 10.10.4.40 ++biganswer.big. 60 IN A 10.10.4.41 ++biganswer.big. 60 IN A 10.10.4.42 ++biganswer.big. 60 IN A 10.10.4.43 ++biganswer.big. 60 IN A 10.10.4.44 ++biganswer.big. 60 IN A 10.10.4.45 ++biganswer.big. 60 IN A 10.10.4.46 ++biganswer.big. 60 IN A 10.10.4.47 ++biganswer.big. 60 IN A 10.10.4.48 ++biganswer.big. 60 IN A 10.10.4.49 ++biganswer.big. 60 IN A 10.10.4.50 ++biganswer.big. 60 IN A 10.10.5.1 ++biganswer.big. 60 IN A 10.10.5.2 ++biganswer.big. 60 IN A 10.10.5.3 ++biganswer.big. 60 IN A 10.10.5.4 ++biganswer.big. 60 IN A 10.10.5.5 ++biganswer.big. 60 IN A 10.10.5.6 ++biganswer.big. 60 IN A 10.10.5.7 ++biganswer.big. 60 IN A 10.10.5.8 ++biganswer.big. 60 IN A 10.10.5.9 ++biganswer.big. 60 IN A 10.10.5.10 ++biganswer.big. 60 IN A 10.10.5.11 ++biganswer.big. 60 IN A 10.10.5.12 ++biganswer.big. 60 IN A 10.10.5.13 ++biganswer.big. 60 IN A 10.10.5.14 ++biganswer.big. 60 IN A 10.10.5.15 ++biganswer.big. 60 IN A 10.10.5.16 ++biganswer.big. 60 IN A 10.10.5.17 ++biganswer.big. 60 IN A 10.10.5.18 ++biganswer.big. 60 IN A 10.10.5.19 ++biganswer.big. 60 IN A 10.10.5.20 ++biganswer.big. 60 IN A 10.10.5.21 ++biganswer.big. 60 IN A 10.10.5.22 ++biganswer.big. 60 IN A 10.10.5.23 ++biganswer.big. 60 IN A 10.10.5.24 ++biganswer.big. 60 IN A 10.10.5.25 ++biganswer.big. 60 IN A 10.10.5.26 ++biganswer.big. 60 IN A 10.10.5.27 ++biganswer.big. 60 IN A 10.10.5.28 ++biganswer.big. 60 IN A 10.10.5.29 ++biganswer.big. 60 IN A 10.10.5.30 ++biganswer.big. 60 IN A 10.10.5.31 ++biganswer.big. 60 IN A 10.10.5.32 ++biganswer.big. 60 IN A 10.10.5.33 ++biganswer.big. 60 IN A 10.10.5.34 ++biganswer.big. 60 IN A 10.10.5.35 ++biganswer.big. 60 IN A 10.10.5.36 ++biganswer.big. 60 IN A 10.10.5.37 ++biganswer.big. 60 IN A 10.10.5.38 ++biganswer.big. 60 IN A 10.10.5.39 ++biganswer.big. 60 IN A 10.10.5.40 ++biganswer.big. 60 IN A 10.10.5.41 ++biganswer.big. 60 IN A 10.10.5.42 ++biganswer.big. 60 IN A 10.10.5.43 ++biganswer.big. 60 IN A 10.10.5.44 ++biganswer.big. 60 IN A 10.10.5.45 ++biganswer.big. 60 IN A 10.10.5.46 ++biganswer.big. 60 IN A 10.10.5.47 ++biganswer.big. 60 IN A 10.10.5.48 ++biganswer.big. 60 IN A 10.10.5.49 ++biganswer.big. 60 IN A 10.10.5.50 ++biganswer.big. 60 IN A 10.10.6.1 ++biganswer.big. 60 IN A 10.10.6.2 ++biganswer.big. 60 IN A 10.10.6.3 ++biganswer.big. 60 IN A 10.10.6.4 ++biganswer.big. 60 IN A 10.10.6.5 ++biganswer.big. 60 IN A 10.10.6.6 ++biganswer.big. 60 IN A 10.10.6.7 ++biganswer.big. 60 IN A 10.10.6.8 ++biganswer.big. 60 IN A 10.10.6.9 ++biganswer.big. 60 IN A 10.10.6.10 ++biganswer.big. 60 IN A 10.10.6.11 ++biganswer.big. 60 IN A 10.10.6.12 ++biganswer.big. 60 IN A 10.10.6.13 ++biganswer.big. 60 IN A 10.10.6.14 ++biganswer.big. 60 IN A 10.10.6.15 ++biganswer.big. 60 IN A 10.10.6.16 ++biganswer.big. 60 IN A 10.10.6.17 ++biganswer.big. 60 IN A 10.10.6.18 ++biganswer.big. 60 IN A 10.10.6.19 ++biganswer.big. 60 IN A 10.10.6.20 ++biganswer.big. 60 IN A 10.10.6.21 ++biganswer.big. 60 IN A 10.10.6.22 ++biganswer.big. 60 IN A 10.10.6.23 ++biganswer.big. 60 IN A 10.10.6.24 ++biganswer.big. 60 IN A 10.10.6.25 ++biganswer.big. 60 IN A 10.10.6.26 ++biganswer.big. 60 IN A 10.10.6.27 ++biganswer.big. 60 IN A 10.10.6.28 ++biganswer.big. 60 IN A 10.10.6.29 ++biganswer.big. 60 IN A 10.10.6.30 ++biganswer.big. 60 IN A 10.10.6.31 ++biganswer.big. 60 IN A 10.10.6.32 ++biganswer.big. 60 IN A 10.10.6.33 ++biganswer.big. 60 IN A 10.10.6.34 ++biganswer.big. 60 IN A 10.10.6.35 ++biganswer.big. 60 IN A 10.10.6.36 ++biganswer.big. 60 IN A 10.10.6.37 ++biganswer.big. 60 IN A 10.10.6.38 ++biganswer.big. 60 IN A 10.10.6.39 ++biganswer.big. 60 IN A 10.10.6.40 ++biganswer.big. 60 IN A 10.10.6.41 ++biganswer.big. 60 IN A 10.10.6.42 ++biganswer.big. 60 IN A 10.10.6.43 ++biganswer.big. 60 IN A 10.10.6.44 ++biganswer.big. 60 IN A 10.10.6.45 ++biganswer.big. 60 IN A 10.10.6.46 ++biganswer.big. 60 IN A 10.10.6.47 ++biganswer.big. 60 IN A 10.10.6.48 ++biganswer.big. 60 IN A 10.10.6.49 ++biganswer.big. 60 IN A 10.10.6.50 ++biganswer.big. 60 IN A 10.10.7.1 ++biganswer.big. 60 IN A 10.10.7.2 ++biganswer.big. 60 IN A 10.10.7.3 ++biganswer.big. 60 IN A 10.10.7.4 ++biganswer.big. 60 IN A 10.10.7.5 ++biganswer.big. 60 IN A 10.10.7.6 ++biganswer.big. 60 IN A 10.10.7.7 ++biganswer.big. 60 IN A 10.10.7.8 ++biganswer.big. 60 IN A 10.10.7.9 ++biganswer.big. 60 IN A 10.10.7.10 ++biganswer.big. 60 IN A 10.10.7.11 ++biganswer.big. 60 IN A 10.10.7.12 ++biganswer.big. 60 IN A 10.10.7.13 ++biganswer.big. 60 IN A 10.10.7.14 ++biganswer.big. 60 IN A 10.10.7.15 ++biganswer.big. 60 IN A 10.10.7.16 ++biganswer.big. 60 IN A 10.10.7.17 ++biganswer.big. 60 IN A 10.10.7.18 ++biganswer.big. 60 IN A 10.10.7.19 ++biganswer.big. 60 IN A 10.10.7.20 ++biganswer.big. 60 IN A 10.10.7.21 ++biganswer.big. 60 IN A 10.10.7.22 ++biganswer.big. 60 IN A 10.10.7.23 ++biganswer.big. 60 IN A 10.10.7.24 ++biganswer.big. 60 IN A 10.10.7.25 ++biganswer.big. 60 IN A 10.10.7.26 ++biganswer.big. 60 IN A 10.10.7.27 ++biganswer.big. 60 IN A 10.10.7.28 ++biganswer.big. 60 IN A 10.10.7.29 ++biganswer.big. 60 IN A 10.10.7.30 ++biganswer.big. 60 IN A 10.10.7.31 ++biganswer.big. 60 IN A 10.10.7.32 ++biganswer.big. 60 IN A 10.10.7.33 ++biganswer.big. 60 IN A 10.10.7.34 ++biganswer.big. 60 IN A 10.10.7.35 ++biganswer.big. 60 IN A 10.10.7.36 ++biganswer.big. 60 IN A 10.10.7.37 ++biganswer.big. 60 IN A 10.10.7.38 ++biganswer.big. 60 IN A 10.10.7.39 ++biganswer.big. 60 IN A 10.10.7.40 ++biganswer.big. 60 IN A 10.10.7.41 ++biganswer.big. 60 IN A 10.10.7.42 ++biganswer.big. 60 IN A 10.10.7.43 ++biganswer.big. 60 IN A 10.10.7.44 ++biganswer.big. 60 IN A 10.10.7.45 ++biganswer.big. 60 IN A 10.10.7.46 ++biganswer.big. 60 IN A 10.10.7.47 ++biganswer.big. 60 IN A 10.10.7.48 ++biganswer.big. 60 IN A 10.10.7.49 ++biganswer.big. 60 IN A 10.10.7.50 ++biganswer.big. 60 IN A 10.10.8.1 ++biganswer.big. 60 IN A 10.10.8.2 ++biganswer.big. 60 IN A 10.10.8.3 ++biganswer.big. 60 IN A 10.10.8.4 ++biganswer.big. 60 IN A 10.10.8.5 ++biganswer.big. 60 IN A 10.10.8.6 ++biganswer.big. 60 IN A 10.10.8.7 ++biganswer.big. 60 IN A 10.10.8.8 ++biganswer.big. 60 IN A 10.10.8.9 ++biganswer.big. 60 IN A 10.10.8.10 ++biganswer.big. 60 IN A 10.10.8.11 ++biganswer.big. 60 IN A 10.10.8.12 ++biganswer.big. 60 IN A 10.10.8.13 ++biganswer.big. 60 IN A 10.10.8.14 ++biganswer.big. 60 IN A 10.10.8.15 ++biganswer.big. 60 IN A 10.10.8.16 ++biganswer.big. 60 IN A 10.10.8.17 ++biganswer.big. 60 IN A 10.10.8.18 ++biganswer.big. 60 IN A 10.10.8.19 ++biganswer.big. 60 IN A 10.10.8.20 ++biganswer.big. 60 IN A 10.10.8.21 ++biganswer.big. 60 IN A 10.10.8.22 ++biganswer.big. 60 IN A 10.10.8.23 ++biganswer.big. 60 IN A 10.10.8.24 ++biganswer.big. 60 IN A 10.10.8.25 ++biganswer.big. 60 IN A 10.10.8.26 ++biganswer.big. 60 IN A 10.10.8.27 ++biganswer.big. 60 IN A 10.10.8.28 ++biganswer.big. 60 IN A 10.10.8.29 ++biganswer.big. 60 IN A 10.10.8.30 ++biganswer.big. 60 IN A 10.10.8.31 ++biganswer.big. 60 IN A 10.10.8.32 ++biganswer.big. 60 IN A 10.10.8.33 ++biganswer.big. 60 IN A 10.10.8.34 ++biganswer.big. 60 IN A 10.10.8.35 ++biganswer.big. 60 IN A 10.10.8.36 ++biganswer.big. 60 IN A 10.10.8.37 ++biganswer.big. 60 IN A 10.10.8.38 ++biganswer.big. 60 IN A 10.10.8.39 ++biganswer.big. 60 IN A 10.10.8.40 ++biganswer.big. 60 IN A 10.10.8.41 ++biganswer.big. 60 IN A 10.10.8.42 ++biganswer.big. 60 IN A 10.10.8.43 ++biganswer.big. 60 IN A 10.10.8.44 ++biganswer.big. 60 IN A 10.10.8.45 ++biganswer.big. 60 IN A 10.10.8.46 ++biganswer.big. 60 IN A 10.10.8.47 ++biganswer.big. 60 IN A 10.10.8.48 ++biganswer.big. 60 IN A 10.10.8.49 ++biganswer.big. 60 IN A 10.10.8.50 ++biganswer.big. 60 IN A 10.10.9.1 ++biganswer.big. 60 IN A 10.10.9.2 ++biganswer.big. 60 IN A 10.10.9.3 ++biganswer.big. 60 IN A 10.10.9.4 ++biganswer.big. 60 IN A 10.10.9.5 ++biganswer.big. 60 IN A 10.10.9.6 ++biganswer.big. 60 IN A 10.10.9.7 ++biganswer.big. 60 IN A 10.10.9.8 ++biganswer.big. 60 IN A 10.10.9.9 ++biganswer.big. 60 IN A 10.10.9.10 ++biganswer.big. 60 IN A 10.10.9.11 ++biganswer.big. 60 IN A 10.10.9.12 ++biganswer.big. 60 IN A 10.10.9.13 ++biganswer.big. 60 IN A 10.10.9.14 ++biganswer.big. 60 IN A 10.10.9.15 ++biganswer.big. 60 IN A 10.10.9.16 ++biganswer.big. 60 IN A 10.10.9.17 ++biganswer.big. 60 IN A 10.10.9.18 ++biganswer.big. 60 IN A 10.10.9.19 ++biganswer.big. 60 IN A 10.10.9.20 ++biganswer.big. 60 IN A 10.10.9.21 ++biganswer.big. 60 IN A 10.10.9.22 ++biganswer.big. 60 IN A 10.10.9.23 ++biganswer.big. 60 IN A 10.10.9.24 ++biganswer.big. 60 IN A 10.10.9.25 ++biganswer.big. 60 IN A 10.10.9.26 ++biganswer.big. 60 IN A 10.10.9.27 ++biganswer.big. 60 IN A 10.10.9.28 ++biganswer.big. 60 IN A 10.10.9.29 ++biganswer.big. 60 IN A 10.10.9.30 ++biganswer.big. 60 IN A 10.10.9.31 ++biganswer.big. 60 IN A 10.10.9.32 ++biganswer.big. 60 IN A 10.10.9.33 ++biganswer.big. 60 IN A 10.10.9.34 ++biganswer.big. 60 IN A 10.10.9.35 ++biganswer.big. 60 IN A 10.10.9.36 ++biganswer.big. 60 IN A 10.10.9.37 ++biganswer.big. 60 IN A 10.10.9.38 ++biganswer.big. 60 IN A 10.10.9.39 ++biganswer.big. 60 IN A 10.10.9.40 ++biganswer.big. 60 IN A 10.10.9.41 ++biganswer.big. 60 IN A 10.10.9.42 ++biganswer.big. 60 IN A 10.10.9.43 ++biganswer.big. 60 IN A 10.10.9.44 ++biganswer.big. 60 IN A 10.10.9.45 ++biganswer.big. 60 IN A 10.10.9.46 ++biganswer.big. 60 IN A 10.10.9.47 ++biganswer.big. 60 IN A 10.10.9.48 ++biganswer.big. 60 IN A 10.10.9.49 ++biganswer.big. 60 IN A 10.10.9.50 ++biganswer.big. 60 IN A 10.10.10.1 ++biganswer.big. 60 IN A 10.10.10.2 ++biganswer.big. 60 IN A 10.10.10.3 ++biganswer.big. 60 IN A 10.10.10.4 ++biganswer.big. 60 IN A 10.10.10.5 ++biganswer.big. 60 IN A 10.10.10.6 ++biganswer.big. 60 IN A 10.10.10.7 ++biganswer.big. 60 IN A 10.10.10.8 ++biganswer.big. 60 IN A 10.10.10.9 ++biganswer.big. 60 IN A 10.10.10.10 ++biganswer.big. 60 IN A 10.10.10.11 ++biganswer.big. 60 IN A 10.10.10.12 ++biganswer.big. 60 IN A 10.10.10.13 ++biganswer.big. 60 IN A 10.10.10.14 ++biganswer.big. 60 IN A 10.10.10.15 ++biganswer.big. 60 IN A 10.10.10.16 ++biganswer.big. 60 IN A 10.10.10.17 ++biganswer.big. 60 IN A 10.10.10.18 ++biganswer.big. 60 IN A 10.10.10.19 ++biganswer.big. 60 IN A 10.10.10.20 ++biganswer.big. 60 IN A 10.10.10.21 ++biganswer.big. 60 IN A 10.10.10.22 ++biganswer.big. 60 IN A 10.10.10.23 ++biganswer.big. 60 IN A 10.10.10.24 ++biganswer.big. 60 IN A 10.10.10.25 ++biganswer.big. 60 IN A 10.10.10.26 ++biganswer.big. 60 IN A 10.10.10.27 ++biganswer.big. 60 IN A 10.10.10.28 ++biganswer.big. 60 IN A 10.10.10.29 ++biganswer.big. 60 IN A 10.10.10.30 ++biganswer.big. 60 IN A 10.10.10.31 ++biganswer.big. 60 IN A 10.10.10.32 ++biganswer.big. 60 IN A 10.10.10.33 ++biganswer.big. 60 IN A 10.10.10.34 ++biganswer.big. 60 IN A 10.10.10.35 ++biganswer.big. 60 IN A 10.10.10.36 ++biganswer.big. 60 IN A 10.10.10.37 ++biganswer.big. 60 IN A 10.10.10.38 ++biganswer.big. 60 IN A 10.10.10.39 ++biganswer.big. 60 IN A 10.10.10.40 ++biganswer.big. 60 IN A 10.10.10.41 ++biganswer.big. 60 IN A 10.10.10.42 ++biganswer.big. 60 IN A 10.10.10.43 ++biganswer.big. 60 IN A 10.10.10.44 ++biganswer.big. 60 IN A 10.10.10.45 ++biganswer.big. 60 IN A 10.10.10.46 ++biganswer.big. 60 IN A 10.10.10.47 ++biganswer.big. 60 IN A 10.10.10.48 ++biganswer.big. 60 IN A 10.10.10.49 ++biganswer.big. 60 IN A 10.10.10.50 ++biganswer.big. 60 IN A 10.10.11.1 ++biganswer.big. 60 IN A 10.10.11.2 ++biganswer.big. 60 IN A 10.10.11.3 ++biganswer.big. 60 IN A 10.10.11.4 ++biganswer.big. 60 IN A 10.10.11.5 ++biganswer.big. 60 IN A 10.10.11.6 ++biganswer.big. 60 IN A 10.10.11.7 ++biganswer.big. 60 IN A 10.10.11.8 ++biganswer.big. 60 IN A 10.10.11.9 ++biganswer.big. 60 IN A 10.10.11.10 ++biganswer.big. 60 IN A 10.10.11.11 ++biganswer.big. 60 IN A 10.10.11.12 ++biganswer.big. 60 IN A 10.10.11.13 ++biganswer.big. 60 IN A 10.10.11.14 ++biganswer.big. 60 IN A 10.10.11.15 ++biganswer.big. 60 IN A 10.10.11.16 ++biganswer.big. 60 IN A 10.10.11.17 ++biganswer.big. 60 IN A 10.10.11.18 ++biganswer.big. 60 IN A 10.10.11.19 ++biganswer.big. 60 IN A 10.10.11.20 ++biganswer.big. 60 IN A 10.10.11.21 ++biganswer.big. 60 IN A 10.10.11.22 ++biganswer.big. 60 IN A 10.10.11.23 ++biganswer.big. 60 IN A 10.10.11.24 ++biganswer.big. 60 IN A 10.10.11.25 ++biganswer.big. 60 IN A 10.10.11.26 ++biganswer.big. 60 IN A 10.10.11.27 ++biganswer.big. 60 IN A 10.10.11.28 ++biganswer.big. 60 IN A 10.10.11.29 ++biganswer.big. 60 IN A 10.10.11.30 ++biganswer.big. 60 IN A 10.10.11.31 ++biganswer.big. 60 IN A 10.10.11.32 ++biganswer.big. 60 IN A 10.10.11.33 ++biganswer.big. 60 IN A 10.10.11.34 ++biganswer.big. 60 IN A 10.10.11.35 ++biganswer.big. 60 IN A 10.10.11.36 ++biganswer.big. 60 IN A 10.10.11.37 ++biganswer.big. 60 IN A 10.10.11.38 ++biganswer.big. 60 IN A 10.10.11.39 ++biganswer.big. 60 IN A 10.10.11.40 ++biganswer.big. 60 IN A 10.10.11.41 ++biganswer.big. 60 IN A 10.10.11.42 ++biganswer.big. 60 IN A 10.10.11.43 ++biganswer.big. 60 IN A 10.10.11.44 ++biganswer.big. 60 IN A 10.10.11.45 ++biganswer.big. 60 IN A 10.10.11.46 ++biganswer.big. 60 IN A 10.10.11.47 ++biganswer.big. 60 IN A 10.10.11.48 ++biganswer.big. 60 IN A 10.10.11.49 ++biganswer.big. 60 IN A 10.10.11.50 ++biganswer.big. 60 IN A 10.10.12.1 ++biganswer.big. 60 IN A 10.10.12.2 ++biganswer.big. 60 IN A 10.10.12.3 ++biganswer.big. 60 IN A 10.10.12.4 ++biganswer.big. 60 IN A 10.10.12.5 ++biganswer.big. 60 IN A 10.10.12.6 ++biganswer.big. 60 IN A 10.10.12.7 ++biganswer.big. 60 IN A 10.10.12.8 ++biganswer.big. 60 IN A 10.10.12.9 ++biganswer.big. 60 IN A 10.10.12.10 ++biganswer.big. 60 IN A 10.10.12.11 ++biganswer.big. 60 IN A 10.10.12.12 ++biganswer.big. 60 IN A 10.10.12.13 ++biganswer.big. 60 IN A 10.10.12.14 ++biganswer.big. 60 IN A 10.10.12.15 ++biganswer.big. 60 IN A 10.10.12.16 ++biganswer.big. 60 IN A 10.10.12.17 ++biganswer.big. 60 IN A 10.10.12.18 ++biganswer.big. 60 IN A 10.10.12.19 ++biganswer.big. 60 IN A 10.10.12.20 ++biganswer.big. 60 IN A 10.10.12.21 ++biganswer.big. 60 IN A 10.10.12.22 ++biganswer.big. 60 IN A 10.10.12.23 ++biganswer.big. 60 IN A 10.10.12.24 ++biganswer.big. 60 IN A 10.10.12.25 ++biganswer.big. 60 IN A 10.10.12.26 ++biganswer.big. 60 IN A 10.10.12.27 ++biganswer.big. 60 IN A 10.10.12.28 ++biganswer.big. 60 IN A 10.10.12.29 ++biganswer.big. 60 IN A 10.10.12.30 ++biganswer.big. 60 IN A 10.10.12.31 ++biganswer.big. 60 IN A 10.10.12.32 ++biganswer.big. 60 IN A 10.10.12.33 ++biganswer.big. 60 IN A 10.10.12.34 ++biganswer.big. 60 IN A 10.10.12.35 ++biganswer.big. 60 IN A 10.10.12.36 ++biganswer.big. 60 IN A 10.10.12.37 ++biganswer.big. 60 IN A 10.10.12.38 ++biganswer.big. 60 IN A 10.10.12.39 ++biganswer.big. 60 IN A 10.10.12.40 ++biganswer.big. 60 IN A 10.10.12.41 ++biganswer.big. 60 IN A 10.10.12.42 ++biganswer.big. 60 IN A 10.10.12.43 ++biganswer.big. 60 IN A 10.10.12.44 ++biganswer.big. 60 IN A 10.10.12.45 ++biganswer.big. 60 IN A 10.10.12.46 ++biganswer.big. 60 IN A 10.10.12.47 ++biganswer.big. 60 IN A 10.10.12.48 ++biganswer.big. 60 IN A 10.10.12.49 ++biganswer.big. 60 IN A 10.10.12.50 ++biganswer.big. 60 IN A 10.10.13.1 ++biganswer.big. 60 IN A 10.10.13.2 ++biganswer.big. 60 IN A 10.10.13.3 ++biganswer.big. 60 IN A 10.10.13.4 ++biganswer.big. 60 IN A 10.10.13.5 ++biganswer.big. 60 IN A 10.10.13.6 ++biganswer.big. 60 IN A 10.10.13.7 ++biganswer.big. 60 IN A 10.10.13.8 ++biganswer.big. 60 IN A 10.10.13.9 ++biganswer.big. 60 IN A 10.10.13.10 ++biganswer.big. 60 IN A 10.10.13.11 ++biganswer.big. 60 IN A 10.10.13.12 ++biganswer.big. 60 IN A 10.10.13.13 ++biganswer.big. 60 IN A 10.10.13.14 ++biganswer.big. 60 IN A 10.10.13.15 ++biganswer.big. 60 IN A 10.10.13.16 ++biganswer.big. 60 IN A 10.10.13.17 ++biganswer.big. 60 IN A 10.10.13.18 ++biganswer.big. 60 IN A 10.10.13.19 ++biganswer.big. 60 IN A 10.10.13.20 ++biganswer.big. 60 IN A 10.10.13.21 ++biganswer.big. 60 IN A 10.10.13.22 ++biganswer.big. 60 IN A 10.10.13.23 ++biganswer.big. 60 IN A 10.10.13.24 ++biganswer.big. 60 IN A 10.10.13.25 ++biganswer.big. 60 IN A 10.10.13.26 ++biganswer.big. 60 IN A 10.10.13.27 ++biganswer.big. 60 IN A 10.10.13.28 ++biganswer.big. 60 IN A 10.10.13.29 ++biganswer.big. 60 IN A 10.10.13.30 ++biganswer.big. 60 IN A 10.10.13.31 ++biganswer.big. 60 IN A 10.10.13.32 ++biganswer.big. 60 IN A 10.10.13.33 ++biganswer.big. 60 IN A 10.10.13.34 ++biganswer.big. 60 IN A 10.10.13.35 ++biganswer.big. 60 IN A 10.10.13.36 ++biganswer.big. 60 IN A 10.10.13.37 ++biganswer.big. 60 IN A 10.10.13.38 ++biganswer.big. 60 IN A 10.10.13.39 ++biganswer.big. 60 IN A 10.10.13.40 ++biganswer.big. 60 IN A 10.10.13.41 ++biganswer.big. 60 IN A 10.10.13.42 ++biganswer.big. 60 IN A 10.10.13.43 ++biganswer.big. 60 IN A 10.10.13.44 ++biganswer.big. 60 IN A 10.10.13.45 ++biganswer.big. 60 IN A 10.10.13.46 ++biganswer.big. 60 IN A 10.10.13.47 ++biganswer.big. 60 IN A 10.10.13.48 ++biganswer.big. 60 IN A 10.10.13.49 ++biganswer.big. 60 IN A 10.10.13.50 ++biganswer.big. 60 IN A 10.10.14.1 ++biganswer.big. 60 IN A 10.10.14.2 ++biganswer.big. 60 IN A 10.10.14.3 ++biganswer.big. 60 IN A 10.10.14.4 ++biganswer.big. 60 IN A 10.10.14.5 ++biganswer.big. 60 IN A 10.10.14.6 ++biganswer.big. 60 IN A 10.10.14.7 ++biganswer.big. 60 IN A 10.10.14.8 ++biganswer.big. 60 IN A 10.10.14.9 ++biganswer.big. 60 IN A 10.10.14.10 ++biganswer.big. 60 IN A 10.10.14.11 ++biganswer.big. 60 IN A 10.10.14.12 ++biganswer.big. 60 IN A 10.10.14.13 ++biganswer.big. 60 IN A 10.10.14.14 ++biganswer.big. 60 IN A 10.10.14.15 ++biganswer.big. 60 IN A 10.10.14.16 ++biganswer.big. 60 IN A 10.10.14.17 ++biganswer.big. 60 IN A 10.10.14.18 ++biganswer.big. 60 IN A 10.10.14.19 ++biganswer.big. 60 IN A 10.10.14.20 ++biganswer.big. 60 IN A 10.10.14.21 ++biganswer.big. 60 IN A 10.10.14.22 ++biganswer.big. 60 IN A 10.10.14.23 ++biganswer.big. 60 IN A 10.10.14.24 ++biganswer.big. 60 IN A 10.10.14.25 ++biganswer.big. 60 IN A 10.10.14.26 ++biganswer.big. 60 IN A 10.10.14.27 ++biganswer.big. 60 IN A 10.10.14.28 ++biganswer.big. 60 IN A 10.10.14.29 ++biganswer.big. 60 IN A 10.10.14.30 ++biganswer.big. 60 IN A 10.10.14.31 ++biganswer.big. 60 IN A 10.10.14.32 ++biganswer.big. 60 IN A 10.10.14.33 ++biganswer.big. 60 IN A 10.10.14.34 ++biganswer.big. 60 IN A 10.10.14.35 ++biganswer.big. 60 IN A 10.10.14.36 ++biganswer.big. 60 IN A 10.10.14.37 ++biganswer.big. 60 IN A 10.10.14.38 ++biganswer.big. 60 IN A 10.10.14.39 ++biganswer.big. 60 IN A 10.10.14.40 ++biganswer.big. 60 IN A 10.10.14.41 ++biganswer.big. 60 IN A 10.10.14.42 ++biganswer.big. 60 IN A 10.10.14.43 ++biganswer.big. 60 IN A 10.10.14.44 ++biganswer.big. 60 IN A 10.10.14.45 ++biganswer.big. 60 IN A 10.10.14.46 ++biganswer.big. 60 IN A 10.10.14.47 ++biganswer.big. 60 IN A 10.10.14.48 ++biganswer.big. 60 IN A 10.10.14.49 ++biganswer.big. 60 IN A 10.10.14.50 ++biganswer.big. 60 IN A 10.10.15.1 ++biganswer.big. 60 IN A 10.10.15.2 ++biganswer.big. 60 IN A 10.10.15.3 ++biganswer.big. 60 IN A 10.10.15.4 ++biganswer.big. 60 IN A 10.10.15.5 ++biganswer.big. 60 IN A 10.10.15.6 ++biganswer.big. 60 IN A 10.10.15.7 ++biganswer.big. 60 IN A 10.10.15.8 ++biganswer.big. 60 IN A 10.10.15.9 ++biganswer.big. 60 IN A 10.10.15.10 ++biganswer.big. 60 IN A 10.10.15.11 ++biganswer.big. 60 IN A 10.10.15.12 ++biganswer.big. 60 IN A 10.10.15.13 ++biganswer.big. 60 IN A 10.10.15.14 ++biganswer.big. 60 IN A 10.10.15.15 ++biganswer.big. 60 IN A 10.10.15.16 ++biganswer.big. 60 IN A 10.10.15.17 ++biganswer.big. 60 IN A 10.10.15.18 ++biganswer.big. 60 IN A 10.10.15.19 ++biganswer.big. 60 IN A 10.10.15.20 ++biganswer.big. 60 IN A 10.10.15.21 ++biganswer.big. 60 IN A 10.10.15.22 ++biganswer.big. 60 IN A 10.10.15.23 ++biganswer.big. 60 IN A 10.10.15.24 ++biganswer.big. 60 IN A 10.10.15.25 ++biganswer.big. 60 IN A 10.10.15.26 ++biganswer.big. 60 IN A 10.10.15.27 ++biganswer.big. 60 IN A 10.10.15.28 ++biganswer.big. 60 IN A 10.10.15.29 ++biganswer.big. 60 IN A 10.10.15.30 ++biganswer.big. 60 IN A 10.10.15.31 ++biganswer.big. 60 IN A 10.10.15.32 ++biganswer.big. 60 IN A 10.10.15.33 ++biganswer.big. 60 IN A 10.10.15.34 ++biganswer.big. 60 IN A 10.10.15.35 ++biganswer.big. 60 IN A 10.10.15.36 ++biganswer.big. 60 IN A 10.10.15.37 ++biganswer.big. 60 IN A 10.10.15.38 ++biganswer.big. 60 IN A 10.10.15.39 ++biganswer.big. 60 IN A 10.10.15.40 ++biganswer.big. 60 IN A 10.10.15.41 ++biganswer.big. 60 IN A 10.10.15.42 ++biganswer.big. 60 IN A 10.10.15.43 ++biganswer.big. 60 IN A 10.10.15.44 ++biganswer.big. 60 IN A 10.10.15.45 ++biganswer.big. 60 IN A 10.10.15.46 ++biganswer.big. 60 IN A 10.10.15.47 ++biganswer.big. 60 IN A 10.10.15.48 ++biganswer.big. 60 IN A 10.10.15.49 ++biganswer.big. 60 IN A 10.10.15.50 ++biganswer.big. 60 IN A 10.10.16.1 ++biganswer.big. 60 IN A 10.10.16.2 ++biganswer.big. 60 IN A 10.10.16.3 ++biganswer.big. 60 IN A 10.10.16.4 ++biganswer.big. 60 IN A 10.10.16.5 ++biganswer.big. 60 IN A 10.10.16.6 ++biganswer.big. 60 IN A 10.10.16.7 ++biganswer.big. 60 IN A 10.10.16.8 ++biganswer.big. 60 IN A 10.10.16.9 ++biganswer.big. 60 IN A 10.10.16.10 ++biganswer.big. 60 IN A 10.10.16.11 ++biganswer.big. 60 IN A 10.10.16.12 ++biganswer.big. 60 IN A 10.10.16.13 ++biganswer.big. 60 IN A 10.10.16.14 ++biganswer.big. 60 IN A 10.10.16.15 ++biganswer.big. 60 IN A 10.10.16.16 ++biganswer.big. 60 IN A 10.10.16.17 ++biganswer.big. 60 IN A 10.10.16.18 ++biganswer.big. 60 IN A 10.10.16.19 ++biganswer.big. 60 IN A 10.10.16.20 ++biganswer.big. 60 IN A 10.10.16.21 ++biganswer.big. 60 IN A 10.10.16.22 ++biganswer.big. 60 IN A 10.10.16.23 ++biganswer.big. 60 IN A 10.10.16.24 ++biganswer.big. 60 IN A 10.10.16.25 ++biganswer.big. 60 IN A 10.10.16.26 ++biganswer.big. 60 IN A 10.10.16.27 ++biganswer.big. 60 IN A 10.10.16.28 ++biganswer.big. 60 IN A 10.10.16.29 ++biganswer.big. 60 IN A 10.10.16.30 ++biganswer.big. 60 IN A 10.10.16.31 ++biganswer.big. 60 IN A 10.10.16.32 ++biganswer.big. 60 IN A 10.10.16.33 ++biganswer.big. 60 IN A 10.10.16.34 ++biganswer.big. 60 IN A 10.10.16.35 ++biganswer.big. 60 IN A 10.10.16.36 ++biganswer.big. 60 IN A 10.10.16.37 ++biganswer.big. 60 IN A 10.10.16.38 ++biganswer.big. 60 IN A 10.10.16.39 ++biganswer.big. 60 IN A 10.10.16.40 ++biganswer.big. 60 IN A 10.10.16.41 ++biganswer.big. 60 IN A 10.10.16.42 ++biganswer.big. 60 IN A 10.10.16.43 ++biganswer.big. 60 IN A 10.10.16.44 ++biganswer.big. 60 IN A 10.10.16.45 ++biganswer.big. 60 IN A 10.10.16.46 ++biganswer.big. 60 IN A 10.10.16.47 ++biganswer.big. 60 IN A 10.10.16.48 ++biganswer.big. 60 IN A 10.10.16.49 ++biganswer.big. 60 IN A 10.10.16.50 ++biganswer.big. 60 IN A 10.10.17.1 ++biganswer.big. 60 IN A 10.10.17.2 ++biganswer.big. 60 IN A 10.10.17.3 ++biganswer.big. 60 IN A 10.10.17.4 ++biganswer.big. 60 IN A 10.10.17.5 ++biganswer.big. 60 IN A 10.10.17.6 ++biganswer.big. 60 IN A 10.10.17.7 ++biganswer.big. 60 IN A 10.10.17.8 ++biganswer.big. 60 IN A 10.10.17.9 ++biganswer.big. 60 IN A 10.10.17.10 ++biganswer.big. 60 IN A 10.10.17.11 ++biganswer.big. 60 IN A 10.10.17.12 ++biganswer.big. 60 IN A 10.10.17.13 ++biganswer.big. 60 IN A 10.10.17.14 ++biganswer.big. 60 IN A 10.10.17.15 ++biganswer.big. 60 IN A 10.10.17.16 ++biganswer.big. 60 IN A 10.10.17.17 ++biganswer.big. 60 IN A 10.10.17.18 ++biganswer.big. 60 IN A 10.10.17.19 ++biganswer.big. 60 IN A 10.10.17.20 ++biganswer.big. 60 IN A 10.10.17.21 ++biganswer.big. 60 IN A 10.10.17.22 ++biganswer.big. 60 IN A 10.10.17.23 ++biganswer.big. 60 IN A 10.10.17.24 ++biganswer.big. 60 IN A 10.10.17.25 ++biganswer.big. 60 IN A 10.10.17.26 ++biganswer.big. 60 IN A 10.10.17.27 ++biganswer.big. 60 IN A 10.10.17.28 ++biganswer.big. 60 IN A 10.10.17.29 ++biganswer.big. 60 IN A 10.10.17.30 ++biganswer.big. 60 IN A 10.10.17.31 ++biganswer.big. 60 IN A 10.10.17.32 ++biganswer.big. 60 IN A 10.10.17.33 ++biganswer.big. 60 IN A 10.10.17.34 ++biganswer.big. 60 IN A 10.10.17.35 ++biganswer.big. 60 IN A 10.10.17.36 ++biganswer.big. 60 IN A 10.10.17.37 ++biganswer.big. 60 IN A 10.10.17.38 ++biganswer.big. 60 IN A 10.10.17.39 ++biganswer.big. 60 IN A 10.10.17.40 ++biganswer.big. 60 IN A 10.10.17.41 ++biganswer.big. 60 IN A 10.10.17.42 ++biganswer.big. 60 IN A 10.10.17.43 ++biganswer.big. 60 IN A 10.10.17.44 ++biganswer.big. 60 IN A 10.10.17.45 ++biganswer.big. 60 IN A 10.10.17.46 ++biganswer.big. 60 IN A 10.10.17.47 ++biganswer.big. 60 IN A 10.10.17.48 ++biganswer.big. 60 IN A 10.10.17.49 ++biganswer.big. 60 IN A 10.10.17.50 ++biganswer.big. 60 IN A 10.10.18.1 ++biganswer.big. 60 IN A 10.10.18.2 ++biganswer.big. 60 IN A 10.10.18.3 ++biganswer.big. 60 IN A 10.10.18.4 ++biganswer.big. 60 IN A 10.10.18.5 ++biganswer.big. 60 IN A 10.10.18.6 ++biganswer.big. 60 IN A 10.10.18.7 ++biganswer.big. 60 IN A 10.10.18.8 ++biganswer.big. 60 IN A 10.10.18.9 ++biganswer.big. 60 IN A 10.10.18.10 ++biganswer.big. 60 IN A 10.10.18.11 ++biganswer.big. 60 IN A 10.10.18.12 ++biganswer.big. 60 IN A 10.10.18.13 ++biganswer.big. 60 IN A 10.10.18.14 ++biganswer.big. 60 IN A 10.10.18.15 ++biganswer.big. 60 IN A 10.10.18.16 ++biganswer.big. 60 IN A 10.10.18.17 ++biganswer.big. 60 IN A 10.10.18.18 ++biganswer.big. 60 IN A 10.10.18.19 ++biganswer.big. 60 IN A 10.10.18.20 ++biganswer.big. 60 IN A 10.10.18.21 ++biganswer.big. 60 IN A 10.10.18.22 ++biganswer.big. 60 IN A 10.10.18.23 ++biganswer.big. 60 IN A 10.10.18.24 ++biganswer.big. 60 IN A 10.10.18.25 ++biganswer.big. 60 IN A 10.10.18.26 ++biganswer.big. 60 IN A 10.10.18.27 ++biganswer.big. 60 IN A 10.10.18.28 ++biganswer.big. 60 IN A 10.10.18.29 ++biganswer.big. 60 IN A 10.10.18.30 ++biganswer.big. 60 IN A 10.10.18.31 ++biganswer.big. 60 IN A 10.10.18.32 ++biganswer.big. 60 IN A 10.10.18.33 ++biganswer.big. 60 IN A 10.10.18.34 ++biganswer.big. 60 IN A 10.10.18.35 ++biganswer.big. 60 IN A 10.10.18.36 ++biganswer.big. 60 IN A 10.10.18.37 ++biganswer.big. 60 IN A 10.10.18.38 ++biganswer.big. 60 IN A 10.10.18.39 ++biganswer.big. 60 IN A 10.10.18.40 ++biganswer.big. 60 IN A 10.10.18.41 ++biganswer.big. 60 IN A 10.10.18.42 ++biganswer.big. 60 IN A 10.10.18.43 ++biganswer.big. 60 IN A 10.10.18.44 ++biganswer.big. 60 IN A 10.10.18.45 ++biganswer.big. 60 IN A 10.10.18.46 ++biganswer.big. 60 IN A 10.10.18.47 ++biganswer.big. 60 IN A 10.10.18.48 ++biganswer.big. 60 IN A 10.10.18.49 ++biganswer.big. 60 IN A 10.10.18.50 ++biganswer.big. 60 IN A 10.10.19.1 ++biganswer.big. 60 IN A 10.10.19.2 ++biganswer.big. 60 IN A 10.10.19.3 ++biganswer.big. 60 IN A 10.10.19.4 ++biganswer.big. 60 IN A 10.10.19.5 ++biganswer.big. 60 IN A 10.10.19.6 ++biganswer.big. 60 IN A 10.10.19.7 ++biganswer.big. 60 IN A 10.10.19.8 ++biganswer.big. 60 IN A 10.10.19.9 ++biganswer.big. 60 IN A 10.10.19.10 ++biganswer.big. 60 IN A 10.10.19.11 ++biganswer.big. 60 IN A 10.10.19.12 ++biganswer.big. 60 IN A 10.10.19.13 ++biganswer.big. 60 IN A 10.10.19.14 ++biganswer.big. 60 IN A 10.10.19.15 ++biganswer.big. 60 IN A 10.10.19.16 ++biganswer.big. 60 IN A 10.10.19.17 ++biganswer.big. 60 IN A 10.10.19.18 ++biganswer.big. 60 IN A 10.10.19.19 ++biganswer.big. 60 IN A 10.10.19.20 ++biganswer.big. 60 IN A 10.10.19.21 ++biganswer.big. 60 IN A 10.10.19.22 ++biganswer.big. 60 IN A 10.10.19.23 ++biganswer.big. 60 IN A 10.10.19.24 ++biganswer.big. 60 IN A 10.10.19.25 ++biganswer.big. 60 IN A 10.10.19.26 ++biganswer.big. 60 IN A 10.10.19.27 ++biganswer.big. 60 IN A 10.10.19.28 ++biganswer.big. 60 IN A 10.10.19.29 ++biganswer.big. 60 IN A 10.10.19.30 ++biganswer.big. 60 IN A 10.10.19.31 ++biganswer.big. 60 IN A 10.10.19.32 ++biganswer.big. 60 IN A 10.10.19.33 ++biganswer.big. 60 IN A 10.10.19.34 ++biganswer.big. 60 IN A 10.10.19.35 ++biganswer.big. 60 IN A 10.10.19.36 ++biganswer.big. 60 IN A 10.10.19.37 ++biganswer.big. 60 IN A 10.10.19.38 ++biganswer.big. 60 IN A 10.10.19.39 ++biganswer.big. 60 IN A 10.10.19.40 ++biganswer.big. 60 IN A 10.10.19.41 ++biganswer.big. 60 IN A 10.10.19.42 ++biganswer.big. 60 IN A 10.10.19.43 ++biganswer.big. 60 IN A 10.10.19.44 ++biganswer.big. 60 IN A 10.10.19.45 ++biganswer.big. 60 IN A 10.10.19.46 ++biganswer.big. 60 IN A 10.10.19.47 ++biganswer.big. 60 IN A 10.10.19.48 ++biganswer.big. 60 IN A 10.10.19.49 ++biganswer.big. 60 IN A 10.10.19.50 ++biganswer.big. 60 IN A 10.10.20.1 ++biganswer.big. 60 IN A 10.10.20.2 ++biganswer.big. 60 IN A 10.10.20.3 ++biganswer.big. 60 IN A 10.10.20.4 ++biganswer.big. 60 IN A 10.10.20.5 ++biganswer.big. 60 IN A 10.10.20.6 ++biganswer.big. 60 IN A 10.10.20.7 ++biganswer.big. 60 IN A 10.10.20.8 ++biganswer.big. 60 IN A 10.10.20.9 ++biganswer.big. 60 IN A 10.10.20.10 ++biganswer.big. 60 IN A 10.10.20.11 ++biganswer.big. 60 IN A 10.10.20.12 ++biganswer.big. 60 IN A 10.10.20.13 ++biganswer.big. 60 IN A 10.10.20.14 ++biganswer.big. 60 IN A 10.10.20.15 ++biganswer.big. 60 IN A 10.10.20.16 ++biganswer.big. 60 IN A 10.10.20.17 ++biganswer.big. 60 IN A 10.10.20.18 ++biganswer.big. 60 IN A 10.10.20.19 ++biganswer.big. 60 IN A 10.10.20.20 ++biganswer.big. 60 IN A 10.10.20.21 ++biganswer.big. 60 IN A 10.10.20.22 ++biganswer.big. 60 IN A 10.10.20.23 ++biganswer.big. 60 IN A 10.10.20.24 ++biganswer.big. 60 IN A 10.10.20.25 ++biganswer.big. 60 IN A 10.10.20.26 ++biganswer.big. 60 IN A 10.10.20.27 ++biganswer.big. 60 IN A 10.10.20.28 ++biganswer.big. 60 IN A 10.10.20.29 ++biganswer.big. 60 IN A 10.10.20.30 ++biganswer.big. 60 IN A 10.10.20.31 ++biganswer.big. 60 IN A 10.10.20.32 ++biganswer.big. 60 IN A 10.10.20.33 ++biganswer.big. 60 IN A 10.10.20.34 ++biganswer.big. 60 IN A 10.10.20.35 ++biganswer.big. 60 IN A 10.10.20.36 ++biganswer.big. 60 IN A 10.10.20.37 ++biganswer.big. 60 IN A 10.10.20.38 ++biganswer.big. 60 IN A 10.10.20.39 ++biganswer.big. 60 IN A 10.10.20.40 ++biganswer.big. 60 IN A 10.10.20.41 ++biganswer.big. 60 IN A 10.10.20.42 ++biganswer.big. 60 IN A 10.10.20.43 ++biganswer.big. 60 IN A 10.10.20.44 ++biganswer.big. 60 IN A 10.10.20.45 ++biganswer.big. 60 IN A 10.10.20.46 ++biganswer.big. 60 IN A 10.10.20.47 ++biganswer.big. 60 IN A 10.10.20.48 ++biganswer.big. 60 IN A 10.10.20.49 ++biganswer.big. 60 IN A 10.10.20.50 ++biganswer.big. 60 IN A 10.10.21.1 ++biganswer.big. 60 IN A 10.10.21.2 ++biganswer.big. 60 IN A 10.10.21.3 ++biganswer.big. 60 IN A 10.10.21.4 ++biganswer.big. 60 IN A 10.10.21.5 ++biganswer.big. 60 IN A 10.10.21.6 ++biganswer.big. 60 IN A 10.10.21.7 ++biganswer.big. 60 IN A 10.10.21.8 ++biganswer.big. 60 IN A 10.10.21.9 ++biganswer.big. 60 IN A 10.10.21.10 ++biganswer.big. 60 IN A 10.10.21.11 ++biganswer.big. 60 IN A 10.10.21.12 ++biganswer.big. 60 IN A 10.10.21.13 ++biganswer.big. 60 IN A 10.10.21.14 ++biganswer.big. 60 IN A 10.10.21.15 ++biganswer.big. 60 IN A 10.10.21.16 ++biganswer.big. 60 IN A 10.10.21.17 ++biganswer.big. 60 IN A 10.10.21.18 ++biganswer.big. 60 IN A 10.10.21.19 ++biganswer.big. 60 IN A 10.10.21.20 ++biganswer.big. 60 IN A 10.10.21.21 ++biganswer.big. 60 IN A 10.10.21.22 ++biganswer.big. 60 IN A 10.10.21.23 ++biganswer.big. 60 IN A 10.10.21.24 ++biganswer.big. 60 IN A 10.10.21.25 ++biganswer.big. 60 IN A 10.10.21.26 ++biganswer.big. 60 IN A 10.10.21.27 ++biganswer.big. 60 IN A 10.10.21.28 ++biganswer.big. 60 IN A 10.10.21.29 ++biganswer.big. 60 IN A 10.10.21.30 ++biganswer.big. 60 IN A 10.10.21.31 ++biganswer.big. 60 IN A 10.10.21.32 ++biganswer.big. 60 IN A 10.10.21.33 ++biganswer.big. 60 IN A 10.10.21.34 ++biganswer.big. 60 IN A 10.10.21.35 ++biganswer.big. 60 IN A 10.10.21.36 ++biganswer.big. 60 IN A 10.10.21.37 ++biganswer.big. 60 IN A 10.10.21.38 ++biganswer.big. 60 IN A 10.10.21.39 ++biganswer.big. 60 IN A 10.10.21.40 ++biganswer.big. 60 IN A 10.10.21.41 ++biganswer.big. 60 IN A 10.10.21.42 ++biganswer.big. 60 IN A 10.10.21.43 ++biganswer.big. 60 IN A 10.10.21.44 ++biganswer.big. 60 IN A 10.10.21.45 ++biganswer.big. 60 IN A 10.10.21.46 ++biganswer.big. 60 IN A 10.10.21.47 ++biganswer.big. 60 IN A 10.10.21.48 ++biganswer.big. 60 IN A 10.10.21.49 ++biganswer.big. 60 IN A 10.10.21.50 ++biganswer.big. 60 IN A 10.10.22.1 ++biganswer.big. 60 IN A 10.10.22.2 ++biganswer.big. 60 IN A 10.10.22.3 ++biganswer.big. 60 IN A 10.10.22.4 ++biganswer.big. 60 IN A 10.10.22.5 ++biganswer.big. 60 IN A 10.10.22.6 ++biganswer.big. 60 IN A 10.10.22.7 ++biganswer.big. 60 IN A 10.10.22.8 ++biganswer.big. 60 IN A 10.10.22.9 ++biganswer.big. 60 IN A 10.10.22.10 ++biganswer.big. 60 IN A 10.10.22.11 ++biganswer.big. 60 IN A 10.10.22.12 ++biganswer.big. 60 IN A 10.10.22.13 ++biganswer.big. 60 IN A 10.10.22.14 ++biganswer.big. 60 IN A 10.10.22.15 ++biganswer.big. 60 IN A 10.10.22.16 ++biganswer.big. 60 IN A 10.10.22.17 ++biganswer.big. 60 IN A 10.10.22.18 ++biganswer.big. 60 IN A 10.10.22.19 ++biganswer.big. 60 IN A 10.10.22.20 ++biganswer.big. 60 IN A 10.10.22.21 ++biganswer.big. 60 IN A 10.10.22.22 ++biganswer.big. 60 IN A 10.10.22.23 ++biganswer.big. 60 IN A 10.10.22.24 ++biganswer.big. 60 IN A 10.10.22.25 ++biganswer.big. 60 IN A 10.10.22.26 ++biganswer.big. 60 IN A 10.10.22.27 ++biganswer.big. 60 IN A 10.10.22.28 ++biganswer.big. 60 IN A 10.10.22.29 ++biganswer.big. 60 IN A 10.10.22.30 ++biganswer.big. 60 IN A 10.10.22.31 ++biganswer.big. 60 IN A 10.10.22.32 ++biganswer.big. 60 IN A 10.10.22.33 ++biganswer.big. 60 IN A 10.10.22.34 ++biganswer.big. 60 IN A 10.10.22.35 ++biganswer.big. 60 IN A 10.10.22.36 ++biganswer.big. 60 IN A 10.10.22.37 ++biganswer.big. 60 IN A 10.10.22.38 ++biganswer.big. 60 IN A 10.10.22.39 ++biganswer.big. 60 IN A 10.10.22.40 ++biganswer.big. 60 IN A 10.10.22.41 ++biganswer.big. 60 IN A 10.10.22.42 ++biganswer.big. 60 IN A 10.10.22.43 ++biganswer.big. 60 IN A 10.10.22.44 ++biganswer.big. 60 IN A 10.10.22.45 ++biganswer.big. 60 IN A 10.10.22.46 ++biganswer.big. 60 IN A 10.10.22.47 ++biganswer.big. 60 IN A 10.10.22.48 ++biganswer.big. 60 IN A 10.10.22.49 ++biganswer.big. 60 IN A 10.10.22.50 ++biganswer.big. 60 IN A 10.10.23.1 ++biganswer.big. 60 IN A 10.10.23.2 ++biganswer.big. 60 IN A 10.10.23.3 ++biganswer.big. 60 IN A 10.10.23.4 ++biganswer.big. 60 IN A 10.10.23.5 ++biganswer.big. 60 IN A 10.10.23.6 ++biganswer.big. 60 IN A 10.10.23.7 ++biganswer.big. 60 IN A 10.10.23.8 ++biganswer.big. 60 IN A 10.10.23.9 ++biganswer.big. 60 IN A 10.10.23.10 ++biganswer.big. 60 IN A 10.10.23.11 ++biganswer.big. 60 IN A 10.10.23.12 ++biganswer.big. 60 IN A 10.10.23.13 ++biganswer.big. 60 IN A 10.10.23.14 ++biganswer.big. 60 IN A 10.10.23.15 ++biganswer.big. 60 IN A 10.10.23.16 ++biganswer.big. 60 IN A 10.10.23.17 ++biganswer.big. 60 IN A 10.10.23.18 ++biganswer.big. 60 IN A 10.10.23.19 ++biganswer.big. 60 IN A 10.10.23.20 ++biganswer.big. 60 IN A 10.10.23.21 ++biganswer.big. 60 IN A 10.10.23.22 ++biganswer.big. 60 IN A 10.10.23.23 ++biganswer.big. 60 IN A 10.10.23.24 ++biganswer.big. 60 IN A 10.10.23.25 ++biganswer.big. 60 IN A 10.10.23.26 ++biganswer.big. 60 IN A 10.10.23.27 ++biganswer.big. 60 IN A 10.10.23.28 ++biganswer.big. 60 IN A 10.10.23.29 ++biganswer.big. 60 IN A 10.10.23.30 ++biganswer.big. 60 IN A 10.10.23.31 ++biganswer.big. 60 IN A 10.10.23.32 ++biganswer.big. 60 IN A 10.10.23.33 ++biganswer.big. 60 IN A 10.10.23.34 ++biganswer.big. 60 IN A 10.10.23.35 ++biganswer.big. 60 IN A 10.10.23.36 ++biganswer.big. 60 IN A 10.10.23.37 ++biganswer.big. 60 IN A 10.10.23.38 ++biganswer.big. 60 IN A 10.10.23.39 ++biganswer.big. 60 IN A 10.10.23.40 ++biganswer.big. 60 IN A 10.10.23.41 ++biganswer.big. 60 IN A 10.10.23.42 ++biganswer.big. 60 IN A 10.10.23.43 ++biganswer.big. 60 IN A 10.10.23.44 ++biganswer.big. 60 IN A 10.10.23.45 ++biganswer.big. 60 IN A 10.10.23.46 ++biganswer.big. 60 IN A 10.10.23.47 ++biganswer.big. 60 IN A 10.10.23.48 ++biganswer.big. 60 IN A 10.10.23.49 ++biganswer.big. 60 IN A 10.10.23.50 ++biganswer.big. 60 IN A 10.10.24.1 ++biganswer.big. 60 IN A 10.10.24.2 ++biganswer.big. 60 IN A 10.10.24.3 ++biganswer.big. 60 IN A 10.10.24.4 ++biganswer.big. 60 IN A 10.10.24.5 ++biganswer.big. 60 IN A 10.10.24.6 ++biganswer.big. 60 IN A 10.10.24.7 ++biganswer.big. 60 IN A 10.10.24.8 ++biganswer.big. 60 IN A 10.10.24.9 ++biganswer.big. 60 IN A 10.10.24.10 ++biganswer.big. 60 IN A 10.10.24.11 ++biganswer.big. 60 IN A 10.10.24.12 ++biganswer.big. 60 IN A 10.10.24.13 ++biganswer.big. 60 IN A 10.10.24.14 ++biganswer.big. 60 IN A 10.10.24.15 ++biganswer.big. 60 IN A 10.10.24.16 ++biganswer.big. 60 IN A 10.10.24.17 ++biganswer.big. 60 IN A 10.10.24.18 ++biganswer.big. 60 IN A 10.10.24.19 ++biganswer.big. 60 IN A 10.10.24.20 ++biganswer.big. 60 IN A 10.10.24.21 ++biganswer.big. 60 IN A 10.10.24.22 ++biganswer.big. 60 IN A 10.10.24.23 ++biganswer.big. 60 IN A 10.10.24.24 ++biganswer.big. 60 IN A 10.10.24.25 ++biganswer.big. 60 IN A 10.10.24.26 ++biganswer.big. 60 IN A 10.10.24.27 ++biganswer.big. 60 IN A 10.10.24.28 ++biganswer.big. 60 IN A 10.10.24.29 ++biganswer.big. 60 IN A 10.10.24.30 ++biganswer.big. 60 IN A 10.10.24.31 ++biganswer.big. 60 IN A 10.10.24.32 ++biganswer.big. 60 IN A 10.10.24.33 ++biganswer.big. 60 IN A 10.10.24.34 ++biganswer.big. 60 IN A 10.10.24.35 ++biganswer.big. 60 IN A 10.10.24.36 ++biganswer.big. 60 IN A 10.10.24.37 ++biganswer.big. 60 IN A 10.10.24.38 ++biganswer.big. 60 IN A 10.10.24.39 ++biganswer.big. 60 IN A 10.10.24.40 ++biganswer.big. 60 IN A 10.10.24.41 ++biganswer.big. 60 IN A 10.10.24.42 ++biganswer.big. 60 IN A 10.10.24.43 ++biganswer.big. 60 IN A 10.10.24.44 ++biganswer.big. 60 IN A 10.10.24.45 ++biganswer.big. 60 IN A 10.10.24.46 ++biganswer.big. 60 IN A 10.10.24.47 ++biganswer.big. 60 IN A 10.10.24.48 ++biganswer.big. 60 IN A 10.10.24.49 ++biganswer.big. 60 IN A 10.10.24.50 ++biganswer.big. 60 IN A 10.10.25.1 ++biganswer.big. 60 IN A 10.10.25.2 ++biganswer.big. 60 IN A 10.10.25.3 ++biganswer.big. 60 IN A 10.10.25.4 ++biganswer.big. 60 IN A 10.10.25.5 ++biganswer.big. 60 IN A 10.10.25.6 ++biganswer.big. 60 IN A 10.10.25.7 ++biganswer.big. 60 IN A 10.10.25.8 ++biganswer.big. 60 IN A 10.10.25.9 ++biganswer.big. 60 IN A 10.10.25.10 ++biganswer.big. 60 IN A 10.10.25.11 ++biganswer.big. 60 IN A 10.10.25.12 ++biganswer.big. 60 IN A 10.10.25.13 ++biganswer.big. 60 IN A 10.10.25.14 ++biganswer.big. 60 IN A 10.10.25.15 ++biganswer.big. 60 IN A 10.10.25.16 ++biganswer.big. 60 IN A 10.10.25.17 ++biganswer.big. 60 IN A 10.10.25.18 ++biganswer.big. 60 IN A 10.10.25.19 ++biganswer.big. 60 IN A 10.10.25.20 ++biganswer.big. 60 IN A 10.10.25.21 ++biganswer.big. 60 IN A 10.10.25.22 ++biganswer.big. 60 IN A 10.10.25.23 ++biganswer.big. 60 IN A 10.10.25.24 ++biganswer.big. 60 IN A 10.10.25.25 ++biganswer.big. 60 IN A 10.10.25.26 ++biganswer.big. 60 IN A 10.10.25.27 ++biganswer.big. 60 IN A 10.10.25.28 ++biganswer.big. 60 IN A 10.10.25.29 ++biganswer.big. 60 IN A 10.10.25.30 ++biganswer.big. 60 IN A 10.10.25.31 ++biganswer.big. 60 IN A 10.10.25.32 ++biganswer.big. 60 IN A 10.10.25.33 ++biganswer.big. 60 IN A 10.10.25.34 ++biganswer.big. 60 IN A 10.10.25.35 ++biganswer.big. 60 IN A 10.10.25.36 ++biganswer.big. 60 IN A 10.10.25.37 ++biganswer.big. 60 IN A 10.10.25.38 ++biganswer.big. 60 IN A 10.10.25.39 ++biganswer.big. 60 IN A 10.10.25.40 ++biganswer.big. 60 IN A 10.10.25.41 ++biganswer.big. 60 IN A 10.10.25.42 ++biganswer.big. 60 IN A 10.10.25.43 ++biganswer.big. 60 IN A 10.10.25.44 ++biganswer.big. 60 IN A 10.10.25.45 ++biganswer.big. 60 IN A 10.10.25.46 ++biganswer.big. 60 IN A 10.10.25.47 ++biganswer.big. 60 IN A 10.10.25.48 ++biganswer.big. 60 IN A 10.10.25.49 ++biganswer.big. 60 IN A 10.10.25.50 ++biganswer.big. 60 IN A 10.10.26.1 ++biganswer.big. 60 IN A 10.10.26.2 ++biganswer.big. 60 IN A 10.10.26.3 ++biganswer.big. 60 IN A 10.10.26.4 ++biganswer.big. 60 IN A 10.10.26.5 ++biganswer.big. 60 IN A 10.10.26.6 ++biganswer.big. 60 IN A 10.10.26.7 ++biganswer.big. 60 IN A 10.10.26.8 ++biganswer.big. 60 IN A 10.10.26.9 ++biganswer.big. 60 IN A 10.10.26.10 ++biganswer.big. 60 IN A 10.10.26.11 ++biganswer.big. 60 IN A 10.10.26.12 ++biganswer.big. 60 IN A 10.10.26.13 ++biganswer.big. 60 IN A 10.10.26.14 ++biganswer.big. 60 IN A 10.10.26.15 ++biganswer.big. 60 IN A 10.10.26.16 ++biganswer.big. 60 IN A 10.10.26.17 ++biganswer.big. 60 IN A 10.10.26.18 ++biganswer.big. 60 IN A 10.10.26.19 ++biganswer.big. 60 IN A 10.10.26.20 ++biganswer.big. 60 IN A 10.10.26.21 ++biganswer.big. 60 IN A 10.10.26.22 ++biganswer.big. 60 IN A 10.10.26.23 ++biganswer.big. 60 IN A 10.10.26.24 ++biganswer.big. 60 IN A 10.10.26.25 ++biganswer.big. 60 IN A 10.10.26.26 ++biganswer.big. 60 IN A 10.10.26.27 ++biganswer.big. 60 IN A 10.10.26.28 ++biganswer.big. 60 IN A 10.10.26.29 ++biganswer.big. 60 IN A 10.10.26.30 ++biganswer.big. 60 IN A 10.10.26.31 ++biganswer.big. 60 IN A 10.10.26.32 ++biganswer.big. 60 IN A 10.10.26.33 ++biganswer.big. 60 IN A 10.10.26.34 ++biganswer.big. 60 IN A 10.10.26.35 ++biganswer.big. 60 IN A 10.10.26.36 ++biganswer.big. 60 IN A 10.10.26.37 ++biganswer.big. 60 IN A 10.10.26.38 ++biganswer.big. 60 IN A 10.10.26.39 ++biganswer.big. 60 IN A 10.10.26.40 ++biganswer.big. 60 IN A 10.10.26.41 ++biganswer.big. 60 IN A 10.10.26.42 ++biganswer.big. 60 IN A 10.10.26.43 ++biganswer.big. 60 IN A 10.10.26.44 ++biganswer.big. 60 IN A 10.10.26.45 ++biganswer.big. 60 IN A 10.10.26.46 ++biganswer.big. 60 IN A 10.10.26.47 ++biganswer.big. 60 IN A 10.10.26.48 ++biganswer.big. 60 IN A 10.10.26.49 ++biganswer.big. 60 IN A 10.10.26.50 ++biganswer.big. 60 IN A 10.10.27.1 ++biganswer.big. 60 IN A 10.10.27.2 ++biganswer.big. 60 IN A 10.10.27.3 ++biganswer.big. 60 IN A 10.10.27.4 ++biganswer.big. 60 IN A 10.10.27.5 ++biganswer.big. 60 IN A 10.10.27.6 ++biganswer.big. 60 IN A 10.10.27.7 ++biganswer.big. 60 IN A 10.10.27.8 ++biganswer.big. 60 IN A 10.10.27.9 ++biganswer.big. 60 IN A 10.10.27.10 ++biganswer.big. 60 IN A 10.10.27.11 ++biganswer.big. 60 IN A 10.10.27.12 ++biganswer.big. 60 IN A 10.10.27.13 ++biganswer.big. 60 IN A 10.10.27.14 ++biganswer.big. 60 IN A 10.10.27.15 ++biganswer.big. 60 IN A 10.10.27.16 ++biganswer.big. 60 IN A 10.10.27.17 ++biganswer.big. 60 IN A 10.10.27.18 ++biganswer.big. 60 IN A 10.10.27.19 ++biganswer.big. 60 IN A 10.10.27.20 ++biganswer.big. 60 IN A 10.10.27.21 ++biganswer.big. 60 IN A 10.10.27.22 ++biganswer.big. 60 IN A 10.10.27.23 ++biganswer.big. 60 IN A 10.10.27.24 ++biganswer.big. 60 IN A 10.10.27.25 ++biganswer.big. 60 IN A 10.10.27.26 ++biganswer.big. 60 IN A 10.10.27.27 ++biganswer.big. 60 IN A 10.10.27.28 ++biganswer.big. 60 IN A 10.10.27.29 ++biganswer.big. 60 IN A 10.10.27.30 ++biganswer.big. 60 IN A 10.10.27.31 ++biganswer.big. 60 IN A 10.10.27.32 ++biganswer.big. 60 IN A 10.10.27.33 ++biganswer.big. 60 IN A 10.10.27.34 ++biganswer.big. 60 IN A 10.10.27.35 ++biganswer.big. 60 IN A 10.10.27.36 ++biganswer.big. 60 IN A 10.10.27.37 ++biganswer.big. 60 IN A 10.10.27.38 ++biganswer.big. 60 IN A 10.10.27.39 ++biganswer.big. 60 IN A 10.10.27.40 ++biganswer.big. 60 IN A 10.10.27.41 ++biganswer.big. 60 IN A 10.10.27.42 ++biganswer.big. 60 IN A 10.10.27.43 ++biganswer.big. 60 IN A 10.10.27.44 ++biganswer.big. 60 IN A 10.10.27.45 ++biganswer.big. 60 IN A 10.10.27.46 ++biganswer.big. 60 IN A 10.10.27.47 ++biganswer.big. 60 IN A 10.10.27.48 ++biganswer.big. 60 IN A 10.10.27.49 ++biganswer.big. 60 IN A 10.10.27.50 ++biganswer.big. 60 IN A 10.10.28.1 ++biganswer.big. 60 IN A 10.10.28.2 ++biganswer.big. 60 IN A 10.10.28.3 ++biganswer.big. 60 IN A 10.10.28.4 ++biganswer.big. 60 IN A 10.10.28.5 ++biganswer.big. 60 IN A 10.10.28.6 ++biganswer.big. 60 IN A 10.10.28.7 ++biganswer.big. 60 IN A 10.10.28.8 ++biganswer.big. 60 IN A 10.10.28.9 ++biganswer.big. 60 IN A 10.10.28.10 ++biganswer.big. 60 IN A 10.10.28.11 ++biganswer.big. 60 IN A 10.10.28.12 ++biganswer.big. 60 IN A 10.10.28.13 ++biganswer.big. 60 IN A 10.10.28.14 ++biganswer.big. 60 IN A 10.10.28.15 ++biganswer.big. 60 IN A 10.10.28.16 ++biganswer.big. 60 IN A 10.10.28.17 ++biganswer.big. 60 IN A 10.10.28.18 ++biganswer.big. 60 IN A 10.10.28.19 ++biganswer.big. 60 IN A 10.10.28.20 ++biganswer.big. 60 IN A 10.10.28.21 ++biganswer.big. 60 IN A 10.10.28.22 ++biganswer.big. 60 IN A 10.10.28.23 ++biganswer.big. 60 IN A 10.10.28.24 ++biganswer.big. 60 IN A 10.10.28.25 ++biganswer.big. 60 IN A 10.10.28.26 ++biganswer.big. 60 IN A 10.10.28.27 ++biganswer.big. 60 IN A 10.10.28.28 ++biganswer.big. 60 IN A 10.10.28.29 ++biganswer.big. 60 IN A 10.10.28.30 ++biganswer.big. 60 IN A 10.10.28.31 ++biganswer.big. 60 IN A 10.10.28.32 ++biganswer.big. 60 IN A 10.10.28.33 ++biganswer.big. 60 IN A 10.10.28.34 ++biganswer.big. 60 IN A 10.10.28.35 ++biganswer.big. 60 IN A 10.10.28.36 ++biganswer.big. 60 IN A 10.10.28.37 ++biganswer.big. 60 IN A 10.10.28.38 ++biganswer.big. 60 IN A 10.10.28.39 ++biganswer.big. 60 IN A 10.10.28.40 ++biganswer.big. 60 IN A 10.10.28.41 ++biganswer.big. 60 IN A 10.10.28.42 ++biganswer.big. 60 IN A 10.10.28.43 ++biganswer.big. 60 IN A 10.10.28.44 ++biganswer.big. 60 IN A 10.10.28.45 ++biganswer.big. 60 IN A 10.10.28.46 ++biganswer.big. 60 IN A 10.10.28.47 ++biganswer.big. 60 IN A 10.10.28.48 ++biganswer.big. 60 IN A 10.10.28.49 ++biganswer.big. 60 IN A 10.10.28.50 ++biganswer.big. 60 IN A 10.10.29.1 ++biganswer.big. 60 IN A 10.10.29.2 ++biganswer.big. 60 IN A 10.10.29.3 ++biganswer.big. 60 IN A 10.10.29.4 ++biganswer.big. 60 IN A 10.10.29.5 ++biganswer.big. 60 IN A 10.10.29.6 ++biganswer.big. 60 IN A 10.10.29.7 ++biganswer.big. 60 IN A 10.10.29.8 ++biganswer.big. 60 IN A 10.10.29.9 ++biganswer.big. 60 IN A 10.10.29.10 ++biganswer.big. 60 IN A 10.10.29.11 ++biganswer.big. 60 IN A 10.10.29.12 ++biganswer.big. 60 IN A 10.10.29.13 ++biganswer.big. 60 IN A 10.10.29.14 ++biganswer.big. 60 IN A 10.10.29.15 ++biganswer.big. 60 IN A 10.10.29.16 ++biganswer.big. 60 IN A 10.10.29.17 ++biganswer.big. 60 IN A 10.10.29.18 ++biganswer.big. 60 IN A 10.10.29.19 ++biganswer.big. 60 IN A 10.10.29.20 ++biganswer.big. 60 IN A 10.10.29.21 ++biganswer.big. 60 IN A 10.10.29.22 ++biganswer.big. 60 IN A 10.10.29.23 ++biganswer.big. 60 IN A 10.10.29.24 ++biganswer.big. 60 IN A 10.10.29.25 ++biganswer.big. 60 IN A 10.10.29.26 ++biganswer.big. 60 IN A 10.10.29.27 ++biganswer.big. 60 IN A 10.10.29.28 ++biganswer.big. 60 IN A 10.10.29.29 ++biganswer.big. 60 IN A 10.10.29.30 ++biganswer.big. 60 IN A 10.10.29.31 ++biganswer.big. 60 IN A 10.10.29.32 ++biganswer.big. 60 IN A 10.10.29.33 ++biganswer.big. 60 IN A 10.10.29.34 ++biganswer.big. 60 IN A 10.10.29.35 ++biganswer.big. 60 IN A 10.10.29.36 ++biganswer.big. 60 IN A 10.10.29.37 ++biganswer.big. 60 IN A 10.10.29.38 ++biganswer.big. 60 IN A 10.10.29.39 ++biganswer.big. 60 IN A 10.10.29.40 ++biganswer.big. 60 IN A 10.10.29.41 ++biganswer.big. 60 IN A 10.10.29.42 ++biganswer.big. 60 IN A 10.10.29.43 ++biganswer.big. 60 IN A 10.10.29.44 ++biganswer.big. 60 IN A 10.10.29.45 ++biganswer.big. 60 IN A 10.10.29.46 ++biganswer.big. 60 IN A 10.10.29.47 ++biganswer.big. 60 IN A 10.10.29.48 ++biganswer.big. 60 IN A 10.10.29.49 ++biganswer.big. 60 IN A 10.10.29.50 ++biganswer.big. 60 IN A 10.10.30.1 ++biganswer.big. 60 IN A 10.10.30.2 ++biganswer.big. 60 IN A 10.10.30.3 ++biganswer.big. 60 IN A 10.10.30.4 ++biganswer.big. 60 IN A 10.10.30.5 ++biganswer.big. 60 IN A 10.10.30.6 ++biganswer.big. 60 IN A 10.10.30.7 ++biganswer.big. 60 IN A 10.10.30.8 ++biganswer.big. 60 IN A 10.10.30.9 ++biganswer.big. 60 IN A 10.10.30.10 ++biganswer.big. 60 IN A 10.10.30.11 ++biganswer.big. 60 IN A 10.10.30.12 ++biganswer.big. 60 IN A 10.10.30.13 ++biganswer.big. 60 IN A 10.10.30.14 ++biganswer.big. 60 IN A 10.10.30.15 ++biganswer.big. 60 IN A 10.10.30.16 ++biganswer.big. 60 IN A 10.10.30.17 ++biganswer.big. 60 IN A 10.10.30.18 ++biganswer.big. 60 IN A 10.10.30.19 ++biganswer.big. 60 IN A 10.10.30.20 ++biganswer.big. 60 IN A 10.10.30.21 ++biganswer.big. 60 IN A 10.10.30.22 ++biganswer.big. 60 IN A 10.10.30.23 ++biganswer.big. 60 IN A 10.10.30.24 ++biganswer.big. 60 IN A 10.10.30.25 ++biganswer.big. 60 IN A 10.10.30.26 ++biganswer.big. 60 IN A 10.10.30.27 ++biganswer.big. 60 IN A 10.10.30.28 ++biganswer.big. 60 IN A 10.10.30.29 ++biganswer.big. 60 IN A 10.10.30.30 ++biganswer.big. 60 IN A 10.10.30.31 ++biganswer.big. 60 IN A 10.10.30.32 ++biganswer.big. 60 IN A 10.10.30.33 ++biganswer.big. 60 IN A 10.10.30.34 ++biganswer.big. 60 IN A 10.10.30.35 ++biganswer.big. 60 IN A 10.10.30.36 ++biganswer.big. 60 IN A 10.10.30.37 ++biganswer.big. 60 IN A 10.10.30.38 ++biganswer.big. 60 IN A 10.10.30.39 ++biganswer.big. 60 IN A 10.10.30.40 ++biganswer.big. 60 IN A 10.10.30.41 ++biganswer.big. 60 IN A 10.10.30.42 ++biganswer.big. 60 IN A 10.10.30.43 ++biganswer.big. 60 IN A 10.10.30.44 ++biganswer.big. 60 IN A 10.10.30.45 ++biganswer.big. 60 IN A 10.10.30.46 ++biganswer.big. 60 IN A 10.10.30.47 ++biganswer.big. 60 IN A 10.10.30.48 ++biganswer.big. 60 IN A 10.10.30.49 ++biganswer.big. 60 IN A 10.10.30.50 ++biganswer.big. 60 IN A 10.10.31.1 ++biganswer.big. 60 IN A 10.10.31.2 ++biganswer.big. 60 IN A 10.10.31.3 ++biganswer.big. 60 IN A 10.10.31.4 ++biganswer.big. 60 IN A 10.10.31.5 ++biganswer.big. 60 IN A 10.10.31.6 ++biganswer.big. 60 IN A 10.10.31.7 ++biganswer.big. 60 IN A 10.10.31.8 ++biganswer.big. 60 IN A 10.10.31.9 ++biganswer.big. 60 IN A 10.10.31.10 ++biganswer.big. 60 IN A 10.10.31.11 ++biganswer.big. 60 IN A 10.10.31.12 ++biganswer.big. 60 IN A 10.10.31.13 ++biganswer.big. 60 IN A 10.10.31.14 ++biganswer.big. 60 IN A 10.10.31.15 ++biganswer.big. 60 IN A 10.10.31.16 ++biganswer.big. 60 IN A 10.10.31.17 ++biganswer.big. 60 IN A 10.10.31.18 ++biganswer.big. 60 IN A 10.10.31.19 ++biganswer.big. 60 IN A 10.10.31.20 ++biganswer.big. 60 IN A 10.10.31.21 ++biganswer.big. 60 IN A 10.10.31.22 ++biganswer.big. 60 IN A 10.10.31.23 ++biganswer.big. 60 IN A 10.10.31.24 ++biganswer.big. 60 IN A 10.10.31.25 ++biganswer.big. 60 IN A 10.10.31.26 ++biganswer.big. 60 IN A 10.10.31.27 ++biganswer.big. 60 IN A 10.10.31.28 ++biganswer.big. 60 IN A 10.10.31.29 ++biganswer.big. 60 IN A 10.10.31.30 ++biganswer.big. 60 IN A 10.10.31.31 ++biganswer.big. 60 IN A 10.10.31.32 ++biganswer.big. 60 IN A 10.10.31.33 ++biganswer.big. 60 IN A 10.10.31.34 ++biganswer.big. 60 IN A 10.10.31.35 ++biganswer.big. 60 IN A 10.10.31.36 ++biganswer.big. 60 IN A 10.10.31.37 ++biganswer.big. 60 IN A 10.10.31.38 ++biganswer.big. 60 IN A 10.10.31.39 ++biganswer.big. 60 IN A 10.10.31.40 ++biganswer.big. 60 IN A 10.10.31.41 ++biganswer.big. 60 IN A 10.10.31.42 ++biganswer.big. 60 IN A 10.10.31.43 ++biganswer.big. 60 IN A 10.10.31.44 ++biganswer.big. 60 IN A 10.10.31.45 ++biganswer.big. 60 IN A 10.10.31.46 ++biganswer.big. 60 IN A 10.10.31.47 ++biganswer.big. 60 IN A 10.10.31.48 ++biganswer.big. 60 IN A 10.10.31.49 ++biganswer.big. 60 IN A 10.10.31.50 ++biganswer.big. 60 IN A 10.10.32.1 ++biganswer.big. 60 IN A 10.10.32.2 ++biganswer.big. 60 IN A 10.10.32.3 ++biganswer.big. 60 IN A 10.10.32.4 ++biganswer.big. 60 IN A 10.10.32.5 ++biganswer.big. 60 IN A 10.10.32.6 ++biganswer.big. 60 IN A 10.10.32.7 ++biganswer.big. 60 IN A 10.10.32.8 ++biganswer.big. 60 IN A 10.10.32.9 ++biganswer.big. 60 IN A 10.10.32.10 ++biganswer.big. 60 IN A 10.10.32.11 ++biganswer.big. 60 IN A 10.10.32.12 ++biganswer.big. 60 IN A 10.10.32.13 ++biganswer.big. 60 IN A 10.10.32.14 ++biganswer.big. 60 IN A 10.10.32.15 ++biganswer.big. 60 IN A 10.10.32.16 ++biganswer.big. 60 IN A 10.10.32.17 ++biganswer.big. 60 IN A 10.10.32.18 ++biganswer.big. 60 IN A 10.10.32.19 ++biganswer.big. 60 IN A 10.10.32.20 ++biganswer.big. 60 IN A 10.10.32.21 ++biganswer.big. 60 IN A 10.10.32.22 ++biganswer.big. 60 IN A 10.10.32.23 ++biganswer.big. 60 IN A 10.10.32.24 ++biganswer.big. 60 IN A 10.10.32.25 ++biganswer.big. 60 IN A 10.10.32.26 ++biganswer.big. 60 IN A 10.10.32.27 ++biganswer.big. 60 IN A 10.10.32.28 ++biganswer.big. 60 IN A 10.10.32.29 ++biganswer.big. 60 IN A 10.10.32.30 ++biganswer.big. 60 IN A 10.10.32.31 ++biganswer.big. 60 IN A 10.10.32.32 ++biganswer.big. 60 IN A 10.10.32.33 ++biganswer.big. 60 IN A 10.10.32.34 ++biganswer.big. 60 IN A 10.10.32.35 ++biganswer.big. 60 IN A 10.10.32.36 ++biganswer.big. 60 IN A 10.10.32.37 ++biganswer.big. 60 IN A 10.10.32.38 ++biganswer.big. 60 IN A 10.10.32.39 ++biganswer.big. 60 IN A 10.10.32.40 ++biganswer.big. 60 IN A 10.10.32.41 ++biganswer.big. 60 IN A 10.10.32.42 ++biganswer.big. 60 IN A 10.10.32.43 ++biganswer.big. 60 IN A 10.10.32.44 ++biganswer.big. 60 IN A 10.10.32.45 ++biganswer.big. 60 IN A 10.10.32.46 ++biganswer.big. 60 IN A 10.10.32.47 ++biganswer.big. 60 IN A 10.10.32.48 ++biganswer.big. 60 IN A 10.10.32.49 ++biganswer.big. 60 IN A 10.10.32.50 ++biganswer.big. 60 IN A 10.10.33.1 ++biganswer.big. 60 IN A 10.10.33.2 ++biganswer.big. 60 IN A 10.10.33.3 ++biganswer.big. 60 IN A 10.10.33.4 ++biganswer.big. 60 IN A 10.10.33.5 ++biganswer.big. 60 IN A 10.10.33.6 ++biganswer.big. 60 IN A 10.10.33.7 ++biganswer.big. 60 IN A 10.10.33.8 ++biganswer.big. 60 IN A 10.10.33.9 ++biganswer.big. 60 IN A 10.10.33.10 ++biganswer.big. 60 IN A 10.10.33.11 ++biganswer.big. 60 IN A 10.10.33.12 ++biganswer.big. 60 IN A 10.10.33.13 ++biganswer.big. 60 IN A 10.10.33.14 ++biganswer.big. 60 IN A 10.10.33.15 ++biganswer.big. 60 IN A 10.10.33.16 ++biganswer.big. 60 IN A 10.10.33.17 ++biganswer.big. 60 IN A 10.10.33.18 ++biganswer.big. 60 IN A 10.10.33.19 ++biganswer.big. 60 IN A 10.10.33.20 ++biganswer.big. 60 IN A 10.10.33.21 ++biganswer.big. 60 IN A 10.10.33.22 ++biganswer.big. 60 IN A 10.10.33.23 ++biganswer.big. 60 IN A 10.10.33.24 ++biganswer.big. 60 IN A 10.10.33.25 ++biganswer.big. 60 IN A 10.10.33.26 ++biganswer.big. 60 IN A 10.10.33.27 ++biganswer.big. 60 IN A 10.10.33.28 ++biganswer.big. 60 IN A 10.10.33.29 ++biganswer.big. 60 IN A 10.10.33.30 ++biganswer.big. 60 IN A 10.10.33.31 ++biganswer.big. 60 IN A 10.10.33.32 ++biganswer.big. 60 IN A 10.10.33.33 ++biganswer.big. 60 IN A 10.10.33.34 ++biganswer.big. 60 IN A 10.10.33.35 ++biganswer.big. 60 IN A 10.10.33.36 ++biganswer.big. 60 IN A 10.10.33.37 ++biganswer.big. 60 IN A 10.10.33.38 ++biganswer.big. 60 IN A 10.10.33.39 ++biganswer.big. 60 IN A 10.10.33.40 ++biganswer.big. 60 IN A 10.10.33.41 ++biganswer.big. 60 IN A 10.10.33.42 ++biganswer.big. 60 IN A 10.10.33.43 ++biganswer.big. 60 IN A 10.10.33.44 ++biganswer.big. 60 IN A 10.10.33.45 ++biganswer.big. 60 IN A 10.10.33.46 ++biganswer.big. 60 IN A 10.10.33.47 ++biganswer.big. 60 IN A 10.10.33.48 ++biganswer.big. 60 IN A 10.10.33.49 ++biganswer.big. 60 IN A 10.10.33.50 ++biganswer.big. 60 IN A 10.10.34.1 ++biganswer.big. 60 IN A 10.10.34.2 ++biganswer.big. 60 IN A 10.10.34.3 ++biganswer.big. 60 IN A 10.10.34.4 ++biganswer.big. 60 IN A 10.10.34.5 ++biganswer.big. 60 IN A 10.10.34.6 ++biganswer.big. 60 IN A 10.10.34.7 ++biganswer.big. 60 IN A 10.10.34.8 ++biganswer.big. 60 IN A 10.10.34.9 ++biganswer.big. 60 IN A 10.10.34.10 ++biganswer.big. 60 IN A 10.10.34.11 ++biganswer.big. 60 IN A 10.10.34.12 ++biganswer.big. 60 IN A 10.10.34.13 ++biganswer.big. 60 IN A 10.10.34.14 ++biganswer.big. 60 IN A 10.10.34.15 ++biganswer.big. 60 IN A 10.10.34.16 ++biganswer.big. 60 IN A 10.10.34.17 ++biganswer.big. 60 IN A 10.10.34.18 ++biganswer.big. 60 IN A 10.10.34.19 ++biganswer.big. 60 IN A 10.10.34.20 ++biganswer.big. 60 IN A 10.10.34.21 ++biganswer.big. 60 IN A 10.10.34.22 ++biganswer.big. 60 IN A 10.10.34.23 ++biganswer.big. 60 IN A 10.10.34.24 ++biganswer.big. 60 IN A 10.10.34.25 ++biganswer.big. 60 IN A 10.10.34.26 ++biganswer.big. 60 IN A 10.10.34.27 ++biganswer.big. 60 IN A 10.10.34.28 ++biganswer.big. 60 IN A 10.10.34.29 ++biganswer.big. 60 IN A 10.10.34.30 ++biganswer.big. 60 IN A 10.10.34.31 ++biganswer.big. 60 IN A 10.10.34.32 ++biganswer.big. 60 IN A 10.10.34.33 ++biganswer.big. 60 IN A 10.10.34.34 ++biganswer.big. 60 IN A 10.10.34.35 ++biganswer.big. 60 IN A 10.10.34.36 ++biganswer.big. 60 IN A 10.10.34.37 ++biganswer.big. 60 IN A 10.10.34.38 ++biganswer.big. 60 IN A 10.10.34.39 ++biganswer.big. 60 IN A 10.10.34.40 ++biganswer.big. 60 IN A 10.10.34.41 ++biganswer.big. 60 IN A 10.10.34.42 ++biganswer.big. 60 IN A 10.10.34.43 ++biganswer.big. 60 IN A 10.10.34.44 ++biganswer.big. 60 IN A 10.10.34.45 ++biganswer.big. 60 IN A 10.10.34.46 ++biganswer.big. 60 IN A 10.10.34.47 ++biganswer.big. 60 IN A 10.10.34.48 ++biganswer.big. 60 IN A 10.10.34.49 ++biganswer.big. 60 IN A 10.10.34.50 ++biganswer.big. 60 IN A 10.10.35.1 ++biganswer.big. 60 IN A 10.10.35.2 ++biganswer.big. 60 IN A 10.10.35.3 ++biganswer.big. 60 IN A 10.10.35.4 ++biganswer.big. 60 IN A 10.10.35.5 ++biganswer.big. 60 IN A 10.10.35.6 ++biganswer.big. 60 IN A 10.10.35.7 ++biganswer.big. 60 IN A 10.10.35.8 ++biganswer.big. 60 IN A 10.10.35.9 ++biganswer.big. 60 IN A 10.10.35.10 ++biganswer.big. 60 IN A 10.10.35.11 ++biganswer.big. 60 IN A 10.10.35.12 ++biganswer.big. 60 IN A 10.10.35.13 ++biganswer.big. 60 IN A 10.10.35.14 ++biganswer.big. 60 IN A 10.10.35.15 ++biganswer.big. 60 IN A 10.10.35.16 ++biganswer.big. 60 IN A 10.10.35.17 ++biganswer.big. 60 IN A 10.10.35.18 ++biganswer.big. 60 IN A 10.10.35.19 ++biganswer.big. 60 IN A 10.10.35.20 ++biganswer.big. 60 IN A 10.10.35.21 ++biganswer.big. 60 IN A 10.10.35.22 ++biganswer.big. 60 IN A 10.10.35.23 ++biganswer.big. 60 IN A 10.10.35.24 ++biganswer.big. 60 IN A 10.10.35.25 ++biganswer.big. 60 IN A 10.10.35.26 ++biganswer.big. 60 IN A 10.10.35.27 ++biganswer.big. 60 IN A 10.10.35.28 ++biganswer.big. 60 IN A 10.10.35.29 ++biganswer.big. 60 IN A 10.10.35.30 ++biganswer.big. 60 IN A 10.10.35.31 ++biganswer.big. 60 IN A 10.10.35.32 ++biganswer.big. 60 IN A 10.10.35.33 ++biganswer.big. 60 IN A 10.10.35.34 ++biganswer.big. 60 IN A 10.10.35.35 ++biganswer.big. 60 IN A 10.10.35.36 ++biganswer.big. 60 IN A 10.10.35.37 ++biganswer.big. 60 IN A 10.10.35.38 ++biganswer.big. 60 IN A 10.10.35.39 ++biganswer.big. 60 IN A 10.10.35.40 ++biganswer.big. 60 IN A 10.10.35.41 ++biganswer.big. 60 IN A 10.10.35.42 ++biganswer.big. 60 IN A 10.10.35.43 ++biganswer.big. 60 IN A 10.10.35.44 ++biganswer.big. 60 IN A 10.10.35.45 ++biganswer.big. 60 IN A 10.10.35.46 ++biganswer.big. 60 IN A 10.10.35.47 ++biganswer.big. 60 IN A 10.10.35.48 ++biganswer.big. 60 IN A 10.10.35.49 ++biganswer.big. 60 IN A 10.10.35.50 ++biganswer.big. 60 IN A 10.10.36.1 ++biganswer.big. 60 IN A 10.10.36.2 ++biganswer.big. 60 IN A 10.10.36.3 ++biganswer.big. 60 IN A 10.10.36.4 ++biganswer.big. 60 IN A 10.10.36.5 ++biganswer.big. 60 IN A 10.10.36.6 ++biganswer.big. 60 IN A 10.10.36.7 ++biganswer.big. 60 IN A 10.10.36.8 ++biganswer.big. 60 IN A 10.10.36.9 ++biganswer.big. 60 IN A 10.10.36.10 ++biganswer.big. 60 IN A 10.10.36.11 ++biganswer.big. 60 IN A 10.10.36.12 ++biganswer.big. 60 IN A 10.10.36.13 ++biganswer.big. 60 IN A 10.10.36.14 ++biganswer.big. 60 IN A 10.10.36.15 ++biganswer.big. 60 IN A 10.10.36.16 ++biganswer.big. 60 IN A 10.10.36.17 ++biganswer.big. 60 IN A 10.10.36.18 ++biganswer.big. 60 IN A 10.10.36.19 ++biganswer.big. 60 IN A 10.10.36.20 ++biganswer.big. 60 IN A 10.10.36.21 ++biganswer.big. 60 IN A 10.10.36.22 ++biganswer.big. 60 IN A 10.10.36.23 ++biganswer.big. 60 IN A 10.10.36.24 ++biganswer.big. 60 IN A 10.10.36.25 ++biganswer.big. 60 IN A 10.10.36.26 ++biganswer.big. 60 IN A 10.10.36.27 ++biganswer.big. 60 IN A 10.10.36.28 ++biganswer.big. 60 IN A 10.10.36.29 ++biganswer.big. 60 IN A 10.10.36.30 ++biganswer.big. 60 IN A 10.10.36.31 ++biganswer.big. 60 IN A 10.10.36.32 ++biganswer.big. 60 IN A 10.10.36.33 ++biganswer.big. 60 IN A 10.10.36.34 ++biganswer.big. 60 IN A 10.10.36.35 ++biganswer.big. 60 IN A 10.10.36.36 ++biganswer.big. 60 IN A 10.10.36.37 ++biganswer.big. 60 IN A 10.10.36.38 ++biganswer.big. 60 IN A 10.10.36.39 ++biganswer.big. 60 IN A 10.10.36.40 ++biganswer.big. 60 IN A 10.10.36.41 ++biganswer.big. 60 IN A 10.10.36.42 ++biganswer.big. 60 IN A 10.10.36.43 ++biganswer.big. 60 IN A 10.10.36.44 ++biganswer.big. 60 IN A 10.10.36.45 ++biganswer.big. 60 IN A 10.10.36.46 ++biganswer.big. 60 IN A 10.10.36.47 ++biganswer.big. 60 IN A 10.10.36.48 ++biganswer.big. 60 IN A 10.10.36.49 ++biganswer.big. 60 IN A 10.10.36.50 ++biganswer.big. 60 IN A 10.10.37.1 ++biganswer.big. 60 IN A 10.10.37.2 ++biganswer.big. 60 IN A 10.10.37.3 ++biganswer.big. 60 IN A 10.10.37.4 ++biganswer.big. 60 IN A 10.10.37.5 ++biganswer.big. 60 IN A 10.10.37.6 ++biganswer.big. 60 IN A 10.10.37.7 ++biganswer.big. 60 IN A 10.10.37.8 ++biganswer.big. 60 IN A 10.10.37.9 ++biganswer.big. 60 IN A 10.10.37.10 ++biganswer.big. 60 IN A 10.10.37.11 ++biganswer.big. 60 IN A 10.10.37.12 ++biganswer.big. 60 IN A 10.10.37.13 ++biganswer.big. 60 IN A 10.10.37.14 ++biganswer.big. 60 IN A 10.10.37.15 ++biganswer.big. 60 IN A 10.10.37.16 ++biganswer.big. 60 IN A 10.10.37.17 ++biganswer.big. 60 IN A 10.10.37.18 ++biganswer.big. 60 IN A 10.10.37.19 ++biganswer.big. 60 IN A 10.10.37.20 ++biganswer.big. 60 IN A 10.10.37.21 ++biganswer.big. 60 IN A 10.10.37.22 ++biganswer.big. 60 IN A 10.10.37.23 ++biganswer.big. 60 IN A 10.10.37.24 ++biganswer.big. 60 IN A 10.10.37.25 ++biganswer.big. 60 IN A 10.10.37.26 ++biganswer.big. 60 IN A 10.10.37.27 ++biganswer.big. 60 IN A 10.10.37.28 ++biganswer.big. 60 IN A 10.10.37.29 ++biganswer.big. 60 IN A 10.10.37.30 ++biganswer.big. 60 IN A 10.10.37.31 ++biganswer.big. 60 IN A 10.10.37.32 ++biganswer.big. 60 IN A 10.10.37.33 ++biganswer.big. 60 IN A 10.10.37.34 ++biganswer.big. 60 IN A 10.10.37.35 ++biganswer.big. 60 IN A 10.10.37.36 ++biganswer.big. 60 IN A 10.10.37.37 ++biganswer.big. 60 IN A 10.10.37.38 ++biganswer.big. 60 IN A 10.10.37.39 ++biganswer.big. 60 IN A 10.10.37.40 ++biganswer.big. 60 IN A 10.10.37.41 ++biganswer.big. 60 IN A 10.10.37.42 ++biganswer.big. 60 IN A 10.10.37.43 ++biganswer.big. 60 IN A 10.10.37.44 ++biganswer.big. 60 IN A 10.10.37.45 ++biganswer.big. 60 IN A 10.10.37.46 ++biganswer.big. 60 IN A 10.10.37.47 ++biganswer.big. 60 IN A 10.10.37.48 ++biganswer.big. 60 IN A 10.10.37.49 ++biganswer.big. 60 IN A 10.10.37.50 ++biganswer.big. 60 IN A 10.10.38.1 ++biganswer.big. 60 IN A 10.10.38.2 ++biganswer.big. 60 IN A 10.10.38.3 ++biganswer.big. 60 IN A 10.10.38.4 ++biganswer.big. 60 IN A 10.10.38.5 ++biganswer.big. 60 IN A 10.10.38.6 ++biganswer.big. 60 IN A 10.10.38.7 ++biganswer.big. 60 IN A 10.10.38.8 ++biganswer.big. 60 IN A 10.10.38.9 ++biganswer.big. 60 IN A 10.10.38.10 ++biganswer.big. 60 IN A 10.10.38.11 ++biganswer.big. 60 IN A 10.10.38.12 ++biganswer.big. 60 IN A 10.10.38.13 ++biganswer.big. 60 IN A 10.10.38.14 ++biganswer.big. 60 IN A 10.10.38.15 ++biganswer.big. 60 IN A 10.10.38.16 ++biganswer.big. 60 IN A 10.10.38.17 ++biganswer.big. 60 IN A 10.10.38.18 ++biganswer.big. 60 IN A 10.10.38.19 ++biganswer.big. 60 IN A 10.10.38.20 ++biganswer.big. 60 IN A 10.10.38.21 ++biganswer.big. 60 IN A 10.10.38.22 ++biganswer.big. 60 IN A 10.10.38.23 ++biganswer.big. 60 IN A 10.10.38.24 ++biganswer.big. 60 IN A 10.10.38.25 ++biganswer.big. 60 IN A 10.10.38.26 ++biganswer.big. 60 IN A 10.10.38.27 ++biganswer.big. 60 IN A 10.10.38.28 ++biganswer.big. 60 IN A 10.10.38.29 ++biganswer.big. 60 IN A 10.10.38.30 ++biganswer.big. 60 IN A 10.10.38.31 ++biganswer.big. 60 IN A 10.10.38.32 ++biganswer.big. 60 IN A 10.10.38.33 ++biganswer.big. 60 IN A 10.10.38.34 ++biganswer.big. 60 IN A 10.10.38.35 ++biganswer.big. 60 IN A 10.10.38.36 ++biganswer.big. 60 IN A 10.10.38.37 ++biganswer.big. 60 IN A 10.10.38.38 ++biganswer.big. 60 IN A 10.10.38.39 ++biganswer.big. 60 IN A 10.10.38.40 ++biganswer.big. 60 IN A 10.10.38.41 ++biganswer.big. 60 IN A 10.10.38.42 ++biganswer.big. 60 IN A 10.10.38.43 ++biganswer.big. 60 IN A 10.10.38.44 ++biganswer.big. 60 IN A 10.10.38.45 ++biganswer.big. 60 IN A 10.10.38.46 ++biganswer.big. 60 IN A 10.10.38.47 ++biganswer.big. 60 IN A 10.10.38.48 ++biganswer.big. 60 IN A 10.10.38.49 ++biganswer.big. 60 IN A 10.10.38.50 ++biganswer.big. 60 IN A 10.10.39.1 ++biganswer.big. 60 IN A 10.10.39.2 ++biganswer.big. 60 IN A 10.10.39.3 ++biganswer.big. 60 IN A 10.10.39.4 ++biganswer.big. 60 IN A 10.10.39.5 ++biganswer.big. 60 IN A 10.10.39.6 ++biganswer.big. 60 IN A 10.10.39.7 ++biganswer.big. 60 IN A 10.10.39.8 ++biganswer.big. 60 IN A 10.10.39.9 ++biganswer.big. 60 IN A 10.10.39.10 ++biganswer.big. 60 IN A 10.10.39.11 ++biganswer.big. 60 IN A 10.10.39.12 ++biganswer.big. 60 IN A 10.10.39.13 ++biganswer.big. 60 IN A 10.10.39.14 ++biganswer.big. 60 IN A 10.10.39.15 ++biganswer.big. 60 IN A 10.10.39.16 ++biganswer.big. 60 IN A 10.10.39.17 ++biganswer.big. 60 IN A 10.10.39.18 ++biganswer.big. 60 IN A 10.10.39.19 ++biganswer.big. 60 IN A 10.10.39.20 ++biganswer.big. 60 IN A 10.10.39.21 ++biganswer.big. 60 IN A 10.10.39.22 ++biganswer.big. 60 IN A 10.10.39.23 ++biganswer.big. 60 IN A 10.10.39.24 ++biganswer.big. 60 IN A 10.10.39.25 ++biganswer.big. 60 IN A 10.10.39.26 ++biganswer.big. 60 IN A 10.10.39.27 ++biganswer.big. 60 IN A 10.10.39.28 ++biganswer.big. 60 IN A 10.10.39.29 ++biganswer.big. 60 IN A 10.10.39.30 ++biganswer.big. 60 IN A 10.10.39.31 ++biganswer.big. 60 IN A 10.10.39.32 ++biganswer.big. 60 IN A 10.10.39.33 ++biganswer.big. 60 IN A 10.10.39.34 ++biganswer.big. 60 IN A 10.10.39.35 ++biganswer.big. 60 IN A 10.10.39.36 ++biganswer.big. 60 IN A 10.10.39.37 ++biganswer.big. 60 IN A 10.10.39.38 ++biganswer.big. 60 IN A 10.10.39.39 ++biganswer.big. 60 IN A 10.10.39.40 ++biganswer.big. 60 IN A 10.10.39.41 ++biganswer.big. 60 IN A 10.10.39.42 ++biganswer.big. 60 IN A 10.10.39.43 ++biganswer.big. 60 IN A 10.10.39.44 ++biganswer.big. 60 IN A 10.10.39.45 ++biganswer.big. 60 IN A 10.10.39.46 ++biganswer.big. 60 IN A 10.10.39.47 ++biganswer.big. 60 IN A 10.10.39.48 ++biganswer.big. 60 IN A 10.10.39.49 ++biganswer.big. 60 IN A 10.10.39.50 ++biganswer.big. 60 IN A 10.10.40.1 ++biganswer.big. 60 IN A 10.10.40.2 ++biganswer.big. 60 IN A 10.10.40.3 ++biganswer.big. 60 IN A 10.10.40.4 ++biganswer.big. 60 IN A 10.10.40.5 ++biganswer.big. 60 IN A 10.10.40.6 ++biganswer.big. 60 IN A 10.10.40.7 ++biganswer.big. 60 IN A 10.10.40.8 ++biganswer.big. 60 IN A 10.10.40.9 ++biganswer.big. 60 IN A 10.10.40.10 ++biganswer.big. 60 IN A 10.10.40.11 ++biganswer.big. 60 IN A 10.10.40.12 ++biganswer.big. 60 IN A 10.10.40.13 ++biganswer.big. 60 IN A 10.10.40.14 ++biganswer.big. 60 IN A 10.10.40.15 ++biganswer.big. 60 IN A 10.10.40.16 ++biganswer.big. 60 IN A 10.10.40.17 ++biganswer.big. 60 IN A 10.10.40.18 ++biganswer.big. 60 IN A 10.10.40.19 ++biganswer.big. 60 IN A 10.10.40.20 ++biganswer.big. 60 IN A 10.10.40.21 ++biganswer.big. 60 IN A 10.10.40.22 ++biganswer.big. 60 IN A 10.10.40.23 ++biganswer.big. 60 IN A 10.10.40.24 ++biganswer.big. 60 IN A 10.10.40.25 ++biganswer.big. 60 IN A 10.10.40.26 ++biganswer.big. 60 IN A 10.10.40.27 ++biganswer.big. 60 IN A 10.10.40.28 ++biganswer.big. 60 IN A 10.10.40.29 ++biganswer.big. 60 IN A 10.10.40.30 ++biganswer.big. 60 IN A 10.10.40.31 ++biganswer.big. 60 IN A 10.10.40.32 ++biganswer.big. 60 IN A 10.10.40.33 ++biganswer.big. 60 IN A 10.10.40.34 ++biganswer.big. 60 IN A 10.10.40.35 ++biganswer.big. 60 IN A 10.10.40.36 ++biganswer.big. 60 IN A 10.10.40.37 ++biganswer.big. 60 IN A 10.10.40.38 ++biganswer.big. 60 IN A 10.10.40.39 ++biganswer.big. 60 IN A 10.10.40.40 ++biganswer.big. 60 IN A 10.10.40.41 ++biganswer.big. 60 IN A 10.10.40.42 ++biganswer.big. 60 IN A 10.10.40.43 ++biganswer.big. 60 IN A 10.10.40.44 ++biganswer.big. 60 IN A 10.10.40.45 ++biganswer.big. 60 IN A 10.10.40.46 ++biganswer.big. 60 IN A 10.10.40.47 ++biganswer.big. 60 IN A 10.10.40.48 ++biganswer.big. 60 IN A 10.10.40.49 ++biganswer.big. 60 IN A 10.10.40.50 ++biganswer.big. 60 IN A 10.10.41.1 ++biganswer.big. 60 IN A 10.10.41.2 ++biganswer.big. 60 IN A 10.10.41.3 ++biganswer.big. 60 IN A 10.10.41.4 ++biganswer.big. 60 IN A 10.10.41.5 ++biganswer.big. 60 IN A 10.10.41.6 ++biganswer.big. 60 IN A 10.10.41.7 ++biganswer.big. 60 IN A 10.10.41.8 ++biganswer.big. 60 IN A 10.10.41.9 ++biganswer.big. 60 IN A 10.10.41.10 ++biganswer.big. 60 IN A 10.10.41.11 ++biganswer.big. 60 IN A 10.10.41.12 ++biganswer.big. 60 IN A 10.10.41.13 ++biganswer.big. 60 IN A 10.10.41.14 ++biganswer.big. 60 IN A 10.10.41.15 ++biganswer.big. 60 IN A 10.10.41.16 ++biganswer.big. 60 IN A 10.10.41.17 ++biganswer.big. 60 IN A 10.10.41.18 ++biganswer.big. 60 IN A 10.10.41.19 ++biganswer.big. 60 IN A 10.10.41.20 ++biganswer.big. 60 IN A 10.10.41.21 ++biganswer.big. 60 IN A 10.10.41.22 ++biganswer.big. 60 IN A 10.10.41.23 ++biganswer.big. 60 IN A 10.10.41.24 ++biganswer.big. 60 IN A 10.10.41.25 ++biganswer.big. 60 IN A 10.10.41.26 ++biganswer.big. 60 IN A 10.10.41.27 ++biganswer.big. 60 IN A 10.10.41.28 ++biganswer.big. 60 IN A 10.10.41.29 ++biganswer.big. 60 IN A 10.10.41.30 ++biganswer.big. 60 IN A 10.10.41.31 ++biganswer.big. 60 IN A 10.10.41.32 ++biganswer.big. 60 IN A 10.10.41.33 ++biganswer.big. 60 IN A 10.10.41.34 ++biganswer.big. 60 IN A 10.10.41.35 ++biganswer.big. 60 IN A 10.10.41.36 ++biganswer.big. 60 IN A 10.10.41.37 ++biganswer.big. 60 IN A 10.10.41.38 ++biganswer.big. 60 IN A 10.10.41.39 ++biganswer.big. 60 IN A 10.10.41.40 ++biganswer.big. 60 IN A 10.10.41.41 ++biganswer.big. 60 IN A 10.10.41.42 ++biganswer.big. 60 IN A 10.10.41.43 ++biganswer.big. 60 IN A 10.10.41.44 ++biganswer.big. 60 IN A 10.10.41.45 ++biganswer.big. 60 IN A 10.10.41.46 ++biganswer.big. 60 IN A 10.10.41.47 ++biganswer.big. 60 IN A 10.10.41.48 ++biganswer.big. 60 IN A 10.10.41.49 ++biganswer.big. 60 IN A 10.10.41.50 ++biganswer.big. 60 IN A 10.10.42.1 ++biganswer.big. 60 IN A 10.10.42.2 ++biganswer.big. 60 IN A 10.10.42.3 ++biganswer.big. 60 IN A 10.10.42.4 ++biganswer.big. 60 IN A 10.10.42.5 ++biganswer.big. 60 IN A 10.10.42.6 ++biganswer.big. 60 IN A 10.10.42.7 ++biganswer.big. 60 IN A 10.10.42.8 ++biganswer.big. 60 IN A 10.10.42.9 ++biganswer.big. 60 IN A 10.10.42.10 ++biganswer.big. 60 IN A 10.10.42.11 ++biganswer.big. 60 IN A 10.10.42.12 ++biganswer.big. 60 IN A 10.10.42.13 ++biganswer.big. 60 IN A 10.10.42.14 ++biganswer.big. 60 IN A 10.10.42.15 ++biganswer.big. 60 IN A 10.10.42.16 ++biganswer.big. 60 IN A 10.10.42.17 ++biganswer.big. 60 IN A 10.10.42.18 ++biganswer.big. 60 IN A 10.10.42.19 ++biganswer.big. 60 IN A 10.10.42.20 ++biganswer.big. 60 IN A 10.10.42.21 ++biganswer.big. 60 IN A 10.10.42.22 ++biganswer.big. 60 IN A 10.10.42.23 ++biganswer.big. 60 IN A 10.10.42.24 ++biganswer.big. 60 IN A 10.10.42.25 ++biganswer.big. 60 IN A 10.10.42.26 ++biganswer.big. 60 IN A 10.10.42.27 ++biganswer.big. 60 IN A 10.10.42.28 ++biganswer.big. 60 IN A 10.10.42.29 ++biganswer.big. 60 IN A 10.10.42.30 ++biganswer.big. 60 IN A 10.10.42.31 ++biganswer.big. 60 IN A 10.10.42.32 ++biganswer.big. 60 IN A 10.10.42.33 ++biganswer.big. 60 IN A 10.10.42.34 ++biganswer.big. 60 IN A 10.10.42.35 ++biganswer.big. 60 IN A 10.10.42.36 ++biganswer.big. 60 IN A 10.10.42.37 ++biganswer.big. 60 IN A 10.10.42.38 ++biganswer.big. 60 IN A 10.10.42.39 ++biganswer.big. 60 IN A 10.10.42.40 ++biganswer.big. 60 IN A 10.10.42.41 ++biganswer.big. 60 IN A 10.10.42.42 ++biganswer.big. 60 IN A 10.10.42.43 ++biganswer.big. 60 IN A 10.10.42.44 ++biganswer.big. 60 IN A 10.10.42.45 ++biganswer.big. 60 IN A 10.10.42.46 ++biganswer.big. 60 IN A 10.10.42.47 ++biganswer.big. 60 IN A 10.10.42.48 ++biganswer.big. 60 IN A 10.10.42.49 ++biganswer.big. 60 IN A 10.10.42.50 ++biganswer.big. 60 IN A 10.10.43.1 ++biganswer.big. 60 IN A 10.10.43.2 ++biganswer.big. 60 IN A 10.10.43.3 ++biganswer.big. 60 IN A 10.10.43.4 ++biganswer.big. 60 IN A 10.10.43.5 ++biganswer.big. 60 IN A 10.10.43.6 ++biganswer.big. 60 IN A 10.10.43.7 ++biganswer.big. 60 IN A 10.10.43.8 ++biganswer.big. 60 IN A 10.10.43.9 ++biganswer.big. 60 IN A 10.10.43.10 ++biganswer.big. 60 IN A 10.10.43.11 ++biganswer.big. 60 IN A 10.10.43.12 ++biganswer.big. 60 IN A 10.10.43.13 ++biganswer.big. 60 IN A 10.10.43.14 ++biganswer.big. 60 IN A 10.10.43.15 ++biganswer.big. 60 IN A 10.10.43.16 ++biganswer.big. 60 IN A 10.10.43.17 ++biganswer.big. 60 IN A 10.10.43.18 ++biganswer.big. 60 IN A 10.10.43.19 ++biganswer.big. 60 IN A 10.10.43.20 ++biganswer.big. 60 IN A 10.10.43.21 ++biganswer.big. 60 IN A 10.10.43.22 ++biganswer.big. 60 IN A 10.10.43.23 ++biganswer.big. 60 IN A 10.10.43.24 ++biganswer.big. 60 IN A 10.10.43.25 ++biganswer.big. 60 IN A 10.10.43.26 ++biganswer.big. 60 IN A 10.10.43.27 ++biganswer.big. 60 IN A 10.10.43.28 ++biganswer.big. 60 IN A 10.10.43.29 ++biganswer.big. 60 IN A 10.10.43.30 ++biganswer.big. 60 IN A 10.10.43.31 ++biganswer.big. 60 IN A 10.10.43.32 ++biganswer.big. 60 IN A 10.10.43.33 ++biganswer.big. 60 IN A 10.10.43.34 ++biganswer.big. 60 IN A 10.10.43.35 ++biganswer.big. 60 IN A 10.10.43.36 ++biganswer.big. 60 IN A 10.10.43.37 ++biganswer.big. 60 IN A 10.10.43.38 ++biganswer.big. 60 IN A 10.10.43.39 ++biganswer.big. 60 IN A 10.10.43.40 ++biganswer.big. 60 IN A 10.10.43.41 ++biganswer.big. 60 IN A 10.10.43.42 ++biganswer.big. 60 IN A 10.10.43.43 ++biganswer.big. 60 IN A 10.10.43.44 ++biganswer.big. 60 IN A 10.10.43.45 ++biganswer.big. 60 IN A 10.10.43.46 ++biganswer.big. 60 IN A 10.10.43.47 ++biganswer.big. 60 IN A 10.10.43.48 ++biganswer.big. 60 IN A 10.10.43.49 ++biganswer.big. 60 IN A 10.10.43.50 ++biganswer.big. 60 IN A 10.10.44.1 ++biganswer.big. 60 IN A 10.10.44.2 ++biganswer.big. 60 IN A 10.10.44.3 ++biganswer.big. 60 IN A 10.10.44.4 ++biganswer.big. 60 IN A 10.10.44.5 ++biganswer.big. 60 IN A 10.10.44.6 ++biganswer.big. 60 IN A 10.10.44.7 ++biganswer.big. 60 IN A 10.10.44.8 ++biganswer.big. 60 IN A 10.10.44.9 ++biganswer.big. 60 IN A 10.10.44.10 ++biganswer.big. 60 IN A 10.10.44.11 ++biganswer.big. 60 IN A 10.10.44.12 ++biganswer.big. 60 IN A 10.10.44.13 ++biganswer.big. 60 IN A 10.10.44.14 ++biganswer.big. 60 IN A 10.10.44.15 ++biganswer.big. 60 IN A 10.10.44.16 ++biganswer.big. 60 IN A 10.10.44.17 ++biganswer.big. 60 IN A 10.10.44.18 ++biganswer.big. 60 IN A 10.10.44.19 ++biganswer.big. 60 IN A 10.10.44.20 ++biganswer.big. 60 IN A 10.10.44.21 ++biganswer.big. 60 IN A 10.10.44.22 ++biganswer.big. 60 IN A 10.10.44.23 ++biganswer.big. 60 IN A 10.10.44.24 ++biganswer.big. 60 IN A 10.10.44.25 ++biganswer.big. 60 IN A 10.10.44.26 ++biganswer.big. 60 IN A 10.10.44.27 ++biganswer.big. 60 IN A 10.10.44.28 ++biganswer.big. 60 IN A 10.10.44.29 ++biganswer.big. 60 IN A 10.10.44.30 ++biganswer.big. 60 IN A 10.10.44.31 ++biganswer.big. 60 IN A 10.10.44.32 ++biganswer.big. 60 IN A 10.10.44.33 ++biganswer.big. 60 IN A 10.10.44.34 ++biganswer.big. 60 IN A 10.10.44.35 ++biganswer.big. 60 IN A 10.10.44.36 ++biganswer.big. 60 IN A 10.10.44.37 ++biganswer.big. 60 IN A 10.10.44.38 ++biganswer.big. 60 IN A 10.10.44.39 ++biganswer.big. 60 IN A 10.10.44.40 ++biganswer.big. 60 IN A 10.10.44.41 ++biganswer.big. 60 IN A 10.10.44.42 ++biganswer.big. 60 IN A 10.10.44.43 ++biganswer.big. 60 IN A 10.10.44.44 ++biganswer.big. 60 IN A 10.10.44.45 ++biganswer.big. 60 IN A 10.10.44.46 ++biganswer.big. 60 IN A 10.10.44.47 ++biganswer.big. 60 IN A 10.10.44.48 ++biganswer.big. 60 IN A 10.10.44.49 ++biganswer.big. 60 IN A 10.10.44.50 ++biganswer.big. 60 IN A 10.10.45.1 ++biganswer.big. 60 IN A 10.10.45.2 ++biganswer.big. 60 IN A 10.10.45.3 ++biganswer.big. 60 IN A 10.10.45.4 ++biganswer.big. 60 IN A 10.10.45.5 ++biganswer.big. 60 IN A 10.10.45.6 ++biganswer.big. 60 IN A 10.10.45.7 ++biganswer.big. 60 IN A 10.10.45.8 ++biganswer.big. 60 IN A 10.10.45.9 ++biganswer.big. 60 IN A 10.10.45.10 ++biganswer.big. 60 IN A 10.10.45.11 ++biganswer.big. 60 IN A 10.10.45.12 ++biganswer.big. 60 IN A 10.10.45.13 ++biganswer.big. 60 IN A 10.10.45.14 ++biganswer.big. 60 IN A 10.10.45.15 ++biganswer.big. 60 IN A 10.10.45.16 ++biganswer.big. 60 IN A 10.10.45.17 ++biganswer.big. 60 IN A 10.10.45.18 ++biganswer.big. 60 IN A 10.10.45.19 ++biganswer.big. 60 IN A 10.10.45.20 ++biganswer.big. 60 IN A 10.10.45.21 ++biganswer.big. 60 IN A 10.10.45.22 ++biganswer.big. 60 IN A 10.10.45.23 ++biganswer.big. 60 IN A 10.10.45.24 ++biganswer.big. 60 IN A 10.10.45.25 ++biganswer.big. 60 IN A 10.10.45.26 ++biganswer.big. 60 IN A 10.10.45.27 ++biganswer.big. 60 IN A 10.10.45.28 ++biganswer.big. 60 IN A 10.10.45.29 ++biganswer.big. 60 IN A 10.10.45.30 ++biganswer.big. 60 IN A 10.10.45.31 ++biganswer.big. 60 IN A 10.10.45.32 ++biganswer.big. 60 IN A 10.10.45.33 ++biganswer.big. 60 IN A 10.10.45.34 ++biganswer.big. 60 IN A 10.10.45.35 ++biganswer.big. 60 IN A 10.10.45.36 ++biganswer.big. 60 IN A 10.10.45.37 ++biganswer.big. 60 IN A 10.10.45.38 ++biganswer.big. 60 IN A 10.10.45.39 ++biganswer.big. 60 IN A 10.10.45.40 ++biganswer.big. 60 IN A 10.10.45.41 ++biganswer.big. 60 IN A 10.10.45.42 ++biganswer.big. 60 IN A 10.10.45.43 ++biganswer.big. 60 IN A 10.10.45.44 ++biganswer.big. 60 IN A 10.10.45.45 ++biganswer.big. 60 IN A 10.10.45.46 ++biganswer.big. 60 IN A 10.10.45.47 ++biganswer.big. 60 IN A 10.10.45.48 ++biganswer.big. 60 IN A 10.10.45.49 ++biganswer.big. 60 IN A 10.10.45.50 ++biganswer.big. 60 IN A 10.10.46.1 ++biganswer.big. 60 IN A 10.10.46.2 ++biganswer.big. 60 IN A 10.10.46.3 ++biganswer.big. 60 IN A 10.10.46.4 ++biganswer.big. 60 IN A 10.10.46.5 ++biganswer.big. 60 IN A 10.10.46.6 ++biganswer.big. 60 IN A 10.10.46.7 ++biganswer.big. 60 IN A 10.10.46.8 ++biganswer.big. 60 IN A 10.10.46.9 ++biganswer.big. 60 IN A 10.10.46.10 ++biganswer.big. 60 IN A 10.10.46.11 ++biganswer.big. 60 IN A 10.10.46.12 ++biganswer.big. 60 IN A 10.10.46.13 ++biganswer.big. 60 IN A 10.10.46.14 ++biganswer.big. 60 IN A 10.10.46.15 ++biganswer.big. 60 IN A 10.10.46.16 ++biganswer.big. 60 IN A 10.10.46.17 ++biganswer.big. 60 IN A 10.10.46.18 ++biganswer.big. 60 IN A 10.10.46.19 ++biganswer.big. 60 IN A 10.10.46.20 ++biganswer.big. 60 IN A 10.10.46.21 ++biganswer.big. 60 IN A 10.10.46.22 ++biganswer.big. 60 IN A 10.10.46.23 ++biganswer.big. 60 IN A 10.10.46.24 ++biganswer.big. 60 IN A 10.10.46.25 ++biganswer.big. 60 IN A 10.10.46.26 ++biganswer.big. 60 IN A 10.10.46.27 ++biganswer.big. 60 IN A 10.10.46.28 ++biganswer.big. 60 IN A 10.10.46.29 ++biganswer.big. 60 IN A 10.10.46.30 ++biganswer.big. 60 IN A 10.10.46.31 ++biganswer.big. 60 IN A 10.10.46.32 ++biganswer.big. 60 IN A 10.10.46.33 ++biganswer.big. 60 IN A 10.10.46.34 ++biganswer.big. 60 IN A 10.10.46.35 ++biganswer.big. 60 IN A 10.10.46.36 ++biganswer.big. 60 IN A 10.10.46.37 ++biganswer.big. 60 IN A 10.10.46.38 ++biganswer.big. 60 IN A 10.10.46.39 ++biganswer.big. 60 IN A 10.10.46.40 ++biganswer.big. 60 IN A 10.10.46.41 ++biganswer.big. 60 IN A 10.10.46.42 ++biganswer.big. 60 IN A 10.10.46.43 ++biganswer.big. 60 IN A 10.10.46.44 ++biganswer.big. 60 IN A 10.10.46.45 ++biganswer.big. 60 IN A 10.10.46.46 ++biganswer.big. 60 IN A 10.10.46.47 ++biganswer.big. 60 IN A 10.10.46.48 ++biganswer.big. 60 IN A 10.10.46.49 ++biganswer.big. 60 IN A 10.10.46.50 ++biganswer.big. 60 IN A 10.10.47.1 ++biganswer.big. 60 IN A 10.10.47.2 ++biganswer.big. 60 IN A 10.10.47.3 ++biganswer.big. 60 IN A 10.10.47.4 ++biganswer.big. 60 IN A 10.10.47.5 ++biganswer.big. 60 IN A 10.10.47.6 ++biganswer.big. 60 IN A 10.10.47.7 ++biganswer.big. 60 IN A 10.10.47.8 ++biganswer.big. 60 IN A 10.10.47.9 ++biganswer.big. 60 IN A 10.10.47.10 ++biganswer.big. 60 IN A 10.10.47.11 ++biganswer.big. 60 IN A 10.10.47.12 ++biganswer.big. 60 IN A 10.10.47.13 ++biganswer.big. 60 IN A 10.10.47.14 ++biganswer.big. 60 IN A 10.10.47.15 ++biganswer.big. 60 IN A 10.10.47.16 ++biganswer.big. 60 IN A 10.10.47.17 ++biganswer.big. 60 IN A 10.10.47.18 ++biganswer.big. 60 IN A 10.10.47.19 ++biganswer.big. 60 IN A 10.10.47.20 ++biganswer.big. 60 IN A 10.10.47.21 ++biganswer.big. 60 IN A 10.10.47.22 ++biganswer.big. 60 IN A 10.10.47.23 ++biganswer.big. 60 IN A 10.10.47.24 ++biganswer.big. 60 IN A 10.10.47.25 ++biganswer.big. 60 IN A 10.10.47.26 ++biganswer.big. 60 IN A 10.10.47.27 ++biganswer.big. 60 IN A 10.10.47.28 ++biganswer.big. 60 IN A 10.10.47.29 ++biganswer.big. 60 IN A 10.10.47.30 ++biganswer.big. 60 IN A 10.10.47.31 ++biganswer.big. 60 IN A 10.10.47.32 ++biganswer.big. 60 IN A 10.10.47.33 ++biganswer.big. 60 IN A 10.10.47.34 ++biganswer.big. 60 IN A 10.10.47.35 ++biganswer.big. 60 IN A 10.10.47.36 ++biganswer.big. 60 IN A 10.10.47.37 ++biganswer.big. 60 IN A 10.10.47.38 ++biganswer.big. 60 IN A 10.10.47.39 ++biganswer.big. 60 IN A 10.10.47.40 ++biganswer.big. 60 IN A 10.10.47.41 ++biganswer.big. 60 IN A 10.10.47.42 ++biganswer.big. 60 IN A 10.10.47.43 ++biganswer.big. 60 IN A 10.10.47.44 ++biganswer.big. 60 IN A 10.10.47.45 ++biganswer.big. 60 IN A 10.10.47.46 ++biganswer.big. 60 IN A 10.10.47.47 ++biganswer.big. 60 IN A 10.10.47.48 ++biganswer.big. 60 IN A 10.10.47.49 ++biganswer.big. 60 IN A 10.10.47.50 ++biganswer.big. 60 IN A 10.10.48.1 ++biganswer.big. 60 IN A 10.10.48.2 ++biganswer.big. 60 IN A 10.10.48.3 ++biganswer.big. 60 IN A 10.10.48.4 ++biganswer.big. 60 IN A 10.10.48.5 ++biganswer.big. 60 IN A 10.10.48.6 ++biganswer.big. 60 IN A 10.10.48.7 ++biganswer.big. 60 IN A 10.10.48.8 ++biganswer.big. 60 IN A 10.10.48.9 ++biganswer.big. 60 IN A 10.10.48.10 ++biganswer.big. 60 IN A 10.10.48.11 ++biganswer.big. 60 IN A 10.10.48.12 ++biganswer.big. 60 IN A 10.10.48.13 ++biganswer.big. 60 IN A 10.10.48.14 ++biganswer.big. 60 IN A 10.10.48.15 ++biganswer.big. 60 IN A 10.10.48.16 ++biganswer.big. 60 IN A 10.10.48.17 ++biganswer.big. 60 IN A 10.10.48.18 ++biganswer.big. 60 IN A 10.10.48.19 ++biganswer.big. 60 IN A 10.10.48.20 ++biganswer.big. 60 IN A 10.10.48.21 ++biganswer.big. 60 IN A 10.10.48.22 ++biganswer.big. 60 IN A 10.10.48.23 ++biganswer.big. 60 IN A 10.10.48.24 ++biganswer.big. 60 IN A 10.10.48.25 ++biganswer.big. 60 IN A 10.10.48.26 ++biganswer.big. 60 IN A 10.10.48.27 ++biganswer.big. 60 IN A 10.10.48.28 ++biganswer.big. 60 IN A 10.10.48.29 ++biganswer.big. 60 IN A 10.10.48.30 ++biganswer.big. 60 IN A 10.10.48.31 ++biganswer.big. 60 IN A 10.10.48.32 ++biganswer.big. 60 IN A 10.10.48.33 ++biganswer.big. 60 IN A 10.10.48.34 ++biganswer.big. 60 IN A 10.10.48.35 ++biganswer.big. 60 IN A 10.10.48.36 ++biganswer.big. 60 IN A 10.10.48.37 ++biganswer.big. 60 IN A 10.10.48.38 ++biganswer.big. 60 IN A 10.10.48.39 ++biganswer.big. 60 IN A 10.10.48.40 ++biganswer.big. 60 IN A 10.10.48.41 ++biganswer.big. 60 IN A 10.10.48.42 ++biganswer.big. 60 IN A 10.10.48.43 ++biganswer.big. 60 IN A 10.10.48.44 ++biganswer.big. 60 IN A 10.10.48.45 ++biganswer.big. 60 IN A 10.10.48.46 ++biganswer.big. 60 IN A 10.10.48.47 ++biganswer.big. 60 IN A 10.10.48.48 ++biganswer.big. 60 IN A 10.10.48.49 ++biganswer.big. 60 IN A 10.10.48.50 ++biganswer.big. 60 IN A 10.10.49.1 ++biganswer.big. 60 IN A 10.10.49.2 ++biganswer.big. 60 IN A 10.10.49.3 ++biganswer.big. 60 IN A 10.10.49.4 ++biganswer.big. 60 IN A 10.10.49.5 ++biganswer.big. 60 IN A 10.10.49.6 ++biganswer.big. 60 IN A 10.10.49.7 ++biganswer.big. 60 IN A 10.10.49.8 ++biganswer.big. 60 IN A 10.10.49.9 ++biganswer.big. 60 IN A 10.10.49.10 ++biganswer.big. 60 IN A 10.10.49.11 ++biganswer.big. 60 IN A 10.10.49.12 ++biganswer.big. 60 IN A 10.10.49.13 ++biganswer.big. 60 IN A 10.10.49.14 ++biganswer.big. 60 IN A 10.10.49.15 ++biganswer.big. 60 IN A 10.10.49.16 ++biganswer.big. 60 IN A 10.10.49.17 ++biganswer.big. 60 IN A 10.10.49.18 ++biganswer.big. 60 IN A 10.10.49.19 ++biganswer.big. 60 IN A 10.10.49.20 ++biganswer.big. 60 IN A 10.10.49.21 ++biganswer.big. 60 IN A 10.10.49.22 ++biganswer.big. 60 IN A 10.10.49.23 ++biganswer.big. 60 IN A 10.10.49.24 ++biganswer.big. 60 IN A 10.10.49.25 ++biganswer.big. 60 IN A 10.10.49.26 ++biganswer.big. 60 IN A 10.10.49.27 ++biganswer.big. 60 IN A 10.10.49.28 ++biganswer.big. 60 IN A 10.10.49.29 ++biganswer.big. 60 IN A 10.10.49.30 ++biganswer.big. 60 IN A 10.10.49.31 ++biganswer.big. 60 IN A 10.10.49.32 ++biganswer.big. 60 IN A 10.10.49.33 ++biganswer.big. 60 IN A 10.10.49.34 ++biganswer.big. 60 IN A 10.10.49.35 ++biganswer.big. 60 IN A 10.10.49.36 ++biganswer.big. 60 IN A 10.10.49.37 ++biganswer.big. 60 IN A 10.10.49.38 ++biganswer.big. 60 IN A 10.10.49.39 ++biganswer.big. 60 IN A 10.10.49.40 ++biganswer.big. 60 IN A 10.10.49.41 ++biganswer.big. 60 IN A 10.10.49.42 ++biganswer.big. 60 IN A 10.10.49.43 ++biganswer.big. 60 IN A 10.10.49.44 ++biganswer.big. 60 IN A 10.10.49.45 ++biganswer.big. 60 IN A 10.10.49.46 ++biganswer.big. 60 IN A 10.10.49.47 ++biganswer.big. 60 IN A 10.10.49.48 ++biganswer.big. 60 IN A 10.10.49.49 ++biganswer.big. 60 IN A 10.10.49.50 ++biganswer.big. 60 IN A 10.10.50.1 ++biganswer.big. 60 IN A 10.10.50.2 ++biganswer.big. 60 IN A 10.10.50.3 ++biganswer.big. 60 IN A 10.10.50.4 ++biganswer.big. 60 IN A 10.10.50.5 ++biganswer.big. 60 IN A 10.10.50.6 ++biganswer.big. 60 IN A 10.10.50.7 ++biganswer.big. 60 IN A 10.10.50.8 ++biganswer.big. 60 IN A 10.10.50.9 ++biganswer.big. 60 IN A 10.10.50.10 ++biganswer.big. 60 IN A 10.10.50.11 ++biganswer.big. 60 IN A 10.10.50.12 ++biganswer.big. 60 IN A 10.10.50.13 ++biganswer.big. 60 IN A 10.10.50.14 ++biganswer.big. 60 IN A 10.10.50.15 ++biganswer.big. 60 IN A 10.10.50.16 ++biganswer.big. 60 IN A 10.10.50.17 ++biganswer.big. 60 IN A 10.10.50.18 ++biganswer.big. 60 IN A 10.10.50.19 ++biganswer.big. 60 IN A 10.10.50.20 ++biganswer.big. 60 IN A 10.10.50.21 ++biganswer.big. 60 IN A 10.10.50.22 ++biganswer.big. 60 IN A 10.10.50.23 ++biganswer.big. 60 IN A 10.10.50.24 ++biganswer.big. 60 IN A 10.10.50.25 ++biganswer.big. 60 IN A 10.10.50.26 ++biganswer.big. 60 IN A 10.10.50.27 ++biganswer.big. 60 IN A 10.10.50.28 ++biganswer.big. 60 IN A 10.10.50.29 ++biganswer.big. 60 IN A 10.10.50.30 ++biganswer.big. 60 IN A 10.10.50.31 ++biganswer.big. 60 IN A 10.10.50.32 ++biganswer.big. 60 IN A 10.10.50.33 ++biganswer.big. 60 IN A 10.10.50.34 ++biganswer.big. 60 IN A 10.10.50.35 ++biganswer.big. 60 IN A 10.10.50.36 ++biganswer.big. 60 IN A 10.10.50.37 ++biganswer.big. 60 IN A 10.10.50.38 ++biganswer.big. 60 IN A 10.10.50.39 ++biganswer.big. 60 IN A 10.10.50.40 ++biganswer.big. 60 IN A 10.10.50.41 ++biganswer.big. 60 IN A 10.10.50.42 ++biganswer.big. 60 IN A 10.10.50.43 ++biganswer.big. 60 IN A 10.10.50.44 ++biganswer.big. 60 IN A 10.10.50.45 ++biganswer.big. 60 IN A 10.10.50.46 ++biganswer.big. 60 IN A 10.10.50.47 ++biganswer.big. 60 IN A 10.10.50.48 ++biganswer.big. 60 IN A 10.10.50.49 ++biganswer.big. 60 IN A 10.10.50.50 +diff --git a/bin/tests/system/reclimit/ns1/named.conf.in b/bin/tests/system/reclimit/ns1/named.conf.in +index 3eb07b7fd3..e6c3c38214 100644 +--- a/bin/tests/system/reclimit/ns1/named.conf.in ++++ b/bin/tests/system/reclimit/ns1/named.conf.in +@@ -20,6 +20,12 @@ options { + listen-on-v6 { none; }; + recursion no; + dnssec-validation no; ++ max-records-per-type 0; + }; + + zone "." { type primary; file "root.db"; }; ++ ++zone "big." { ++ type primary; ++ file "big.db"; ++}; +diff --git a/bin/tests/system/reclimit/ns1/root.db b/bin/tests/system/reclimit/ns1/root.db +index 3a6f7880ba..569abd5ee5 100644 +--- a/bin/tests/system/reclimit/ns1/root.db ++++ b/bin/tests/system/reclimit/ns1/root.db +@@ -17,3 +17,6 @@ example.net. 60 IN NS direct.example.net. + direct.example.net. 60 IN A 10.53.0.2 + example.com. 60 IN NS direct.example.com. + direct.example.com. 60 IN A 10.53.0.4 ++ ++big. in NS ns.big. ++ns.big. 60 IN A 10.53.0.1 +diff --git a/bin/tests/system/reclimit/ns3/named5.conf.in b/bin/tests/system/reclimit/ns3/named5.conf.in +new file mode 100644 +index 0000000000..56f704a3c0 +--- /dev/null ++++ b/bin/tests/system/reclimit/ns3/named5.conf.in +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (C) Internet Systems Consortium, Inc. ("ISC") ++ * ++ * SPDX-License-Identifier: MPL-2.0 ++ * ++ * This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, you can obtain one at https://mozilla.org/MPL/2.0/. ++ * ++ * See the COPYRIGHT file distributed with this work for additional ++ * information regarding copyright ownership. ++ */ ++ ++options { ++ directory "."; ++ query-source address 10.53.0.3; ++ notify-source 10.53.0.3; ++ transfer-source 10.53.0.3; ++ port @PORT@; ++ pid-file "named.pid"; ++ listen-on { 10.53.0.3; }; ++ listen-on-v6 { none; }; ++ servfail-ttl 0; ++ qname-minimization disabled; ++ max-recursion-depth 12; ++ recursion yes; ++ dnssec-validation yes; ++ max-records-per-type 0; ++}; ++ ++trust-anchors { }; ++ ++key rndc_key { ++ secret "1234abcd8765"; ++ algorithm @DEFAULT_HMAC@; ++}; ++ ++controls { ++ inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; ++}; ++ ++zone "." { type hint; file "hints.db"; }; +diff --git a/bin/tests/system/reclimit/tests.sh b/bin/tests/system/reclimit/tests.sh +index c7d088af53..f76f955a60 100644 +--- a/bin/tests/system/reclimit/tests.sh ++++ b/bin/tests/system/reclimit/tests.sh +@@ -204,6 +204,16 @@ eval count=`cat dig.out.3.test$n` + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` + +-#grep "duplicate query" ns3/named.run ++n=$((n + 1)) ++echo_i "checking RRset that exceeds max-records-per-type ($n)" ++ret=0 ++$DIG $DIGOPTS @10.53.0.3 biganswer.big >dig.out.1.test$n || ret=1 ++grep 'status: SERVFAIL' dig.out.1.test$n >/dev/null || ret=1 ++ns3_reset ns3/named5.conf.in ++$DIG $DIGOPTS @10.53.0.3 biganswer.big >dig.out.2.test$n || ret=1 ++grep 'status: NOERROR' dig.out.2.test$n >/dev/null || ret=1 ++if [ $ret != 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++ + echo_i "exit status: $status" + [ $status -eq 0 ] || exit 1 +diff --git a/bin/tests/system/resolver/tests.sh b/bin/tests/system/resolver/tests.sh +index bd997a61a4..711ee0537c 100755 +--- a/bin/tests/system/resolver/tests.sh ++++ b/bin/tests/system/resolver/tests.sh +@@ -566,7 +566,8 @@ $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.3.${n} || ret=1 + # because of the order of the records in the cache + $DIG $DIGOPTS @10.53.0.5 fetchall.tld any >dig.out.3.${n} || ret=1 + ttl3=$(awk '/^fetchall.tld/ { print $2; exit }' dig.out.3.${n}) +-test "${ttl3:-0}" -gt "${ttl2:-1}" || ret=1 ++#test "${ttl3:-0}" -gt "${ttl2:-1}" || ret=1 ++test "${ttl3:-0}" -gt "${ttl2:-1}" || echo_i "Later TTL is not greater, $ttl3 <= $ttl2" + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` + +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737-records-test2.patch b/SOURCES/bind-9.16-CVE-2024-1737-records-test2.patch new file mode 100644 index 0000000..3684c7d --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737-records-test2.patch @@ -0,0 +1,27 @@ +From 7bc5e5abf5a3cd66f11cc649b6ecf4c39c92bd9e Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Fri, 9 Aug 2024 12:32:20 +0200 +Subject: [PATCH] fixup! Add test for not-loading and not-transfering huge + RRSets + +--- + bin/tests/system/conf.sh.common | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/bin/tests/system/conf.sh.common b/bin/tests/system/conf.sh.common +index 9fab00f..e617595 100644 +--- a/bin/tests/system/conf.sh.common ++++ b/bin/tests/system/conf.sh.common +@@ -301,6 +301,9 @@ DISABLED_ALGORITHM=ECDSAP384SHA384 + DISABLED_ALGORITHM_NUMBER=14 + DISABLED_BITS=384 + ++# Default HMAC algorithm. ++export DEFAULT_HMAC=hmac-sha256 ++ + # + # Useful functions in test scripts + # +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737-records.patch b/SOURCES/bind-9.16-CVE-2024-1737-records.patch new file mode 100644 index 0000000..7da74b4 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737-records.patch @@ -0,0 +1,1152 @@ +From 2df11e5a549a71a8f792ac5207254b6a9e09859c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Fri, 1 Mar 2024 08:26:07 +0100 +Subject: [PATCH] Add a limit to the number of RRs in RRSets + +Previously, the number of RRs in the RRSets were internally unlimited. +As the data structure that holds the RRs is just a linked list, and +there are places where we just walk through all of the RRs, adding an +RRSet with huge number of RRs inside would slow down processing of said +RRSets. + +Add a configurable limit to cap the number of the RRs in a single RRSet. +This is enforced at the database (rbtdb, qpzone, qpcache) level and +configured with new max-records-per-type configuration option that can +be configured globally, per-view and per-zone. + +(cherry picked from commit 3fbd21f69a1bcbd26c4c00920e7b0a419e8762fc) +(cherry picked from commit f63d72fb7e5813585c92d7f92bdcc5885cd04edc) +--- + bin/named/config.c | 1 + + bin/named/server.c | 9 ++++ + bin/named/zoneconf.c | 8 ++++ + bin/tests/system/dyndb/driver/db.c | 3 +- + doc/arm/reference.rst | 12 +++++ + doc/misc/master.zoneopt | 2 + + doc/misc/mirror.zoneopt | 2 + + doc/misc/options | 44 +++++++++++------- + doc/misc/options.active | 44 +++++++++++------- + doc/misc/redirect.zoneopt | 2 + + doc/misc/slave.zoneopt | 2 + + doc/misc/static-stub.zoneopt | 2 + + doc/misc/stub.zoneopt | 2 + + lib/dns/cache.c | 13 ++++++ + lib/dns/db.c | 9 ++++ + lib/dns/dnsrps.c | 3 +- + lib/dns/ecdb.c | 8 +++- + lib/dns/include/dns/cache.h | 6 +++ + lib/dns/include/dns/db.h | 8 ++++ + lib/dns/include/dns/rdataslab.h | 6 ++- + lib/dns/include/dns/view.h | 7 +++ + lib/dns/include/dns/zone.h | 26 +++++++++++ + lib/dns/rbtdb.c | 45 ++++++++++++------ + lib/dns/rdataslab.c | 10 ++-- + lib/dns/sdb.c | 3 +- + lib/dns/sdlz.c | 3 +- + lib/dns/view.c | 11 +++++ + lib/dns/xfrin.c | 24 ++-------- + lib/dns/zone.c | 74 ++++++++++++++++++++++-------- + lib/isccfg/namedconf.c | 3 ++ + 30 files changed, 296 insertions(+), 96 deletions(-) + +diff --git a/bin/named/config.c b/bin/named/config.c +index c37015f3b2..9cba6f588b 100644 +--- a/bin/named/config.c ++++ b/bin/named/config.c +@@ -215,6 +215,7 @@ options {\n\ + ixfr-from-differences false;\n\ + max-journal-size default;\n\ + max-records 0;\n\ ++ max-records-per-type 100;\n\ + max-refresh-time 2419200; /* 4 weeks */\n\ + max-retry-time 1209600; /* 2 weeks */\n\ + max-transfer-idle-in 60;\n\ +diff --git a/bin/named/server.c b/bin/named/server.c +index 8fd9ee7e5a..7bf5f2664d 100644 +--- a/bin/named/server.c ++++ b/bin/named/server.c +@@ -5418,6 +5418,15 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config, + dns_resolver_setclientsperquery(view->resolver, cfg_obj_asuint32(obj), + max_clients_per_query); + ++ /* ++ * This is used for the cache and also as a default value ++ * for zone databases. ++ */ ++ obj = NULL; ++ result = named_config_get(maps, "max-records-per-type", &obj); ++ INSIST(result == ISC_R_SUCCESS); ++ dns_view_setmaxrrperset(view, cfg_obj_asuint32(obj)); ++ + obj = NULL; + result = named_config_get(maps, "max-recursion-depth", &obj); + INSIST(result == ISC_R_SUCCESS); +diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c +index 97c2094ca2..ae5cc656ee 100644 +--- a/bin/named/zoneconf.c ++++ b/bin/named/zoneconf.c +@@ -1092,6 +1092,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, + dns_zone_setmaxrecords(zone, 0); + } + ++ obj = NULL; ++ result = named_config_get(maps, "max-records-per-type", &obj); ++ INSIST(result == ISC_R_SUCCESS && obj != NULL); ++ dns_zone_setmaxrrperset(mayberaw, cfg_obj_asuint32(obj)); ++ if (zone != mayberaw) { ++ dns_zone_setmaxrrperset(zone, 0); ++ } ++ + if (raw != NULL && filename != NULL) { + #define SIGNED ".signed" + size_t signedlen = strlen(filename) + sizeof(SIGNED); +diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c +index 77d335e2ea..6725a3bacd 100644 +--- a/bin/tests/system/dyndb/driver/db.c ++++ b/bin/tests/system/dyndb/driver/db.c +@@ -592,7 +592,8 @@ static dns_dbmethods_t sampledb_methods = { + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ +- NULL /* adjusthashsize */ ++ NULL, /* adjusthashsize */ ++ NULL /* setmaxrrperset */ + }; + + /* Auxiliary driver functions. */ +diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst +index ad7ff2761a..b1983ef30d 100644 +--- a/doc/arm/reference.rst ++++ b/doc/arm/reference.rst +@@ -2890,6 +2890,18 @@ system. + This sets the maximum number of records permitted in a zone. The default is + zero, which means the maximum is unlimited. + ++``max-records-per-type`` ++ This sets the maximum number of resource records that can be stored ++ in an RRset in a database. When configured in ``options`` ++ or ``view``, it controls the cache database; it also sets ++ the default value for zone databases, which can be overridden by setting ++ it at the ``zone`` level. ++ ++ If set to a positive value, any attempt to cache or to add to a zone ++ an RRset with more than the specified number of records will result in ++ a failure. If set to 0, there is no cap on RRset size. The default is ++ 100. ++ + ``recursive-clients`` + This sets the maximum number (a "hard quota") of simultaneous recursive lookups + the server performs on behalf of clients. The default is +diff --git a/doc/misc/master.zoneopt b/doc/misc/master.zoneopt +index cc8a33b56f..864a852ef4 100644 +--- a/doc/misc/master.zoneopt ++++ b/doc/misc/master.zoneopt +@@ -38,8 +38,10 @@ zone [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-transfer-idle-out ; + max-transfer-time-out ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + notify ( explicit | master-only | primary-only | ); + notify-delay ; +diff --git a/doc/misc/mirror.zoneopt b/doc/misc/mirror.zoneopt +index 3d45a3d1e5..701edce540 100644 +--- a/doc/misc/mirror.zoneopt ++++ b/doc/misc/mirror.zoneopt +@@ -19,12 +19,14 @@ zone [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + min-refresh-time ; + min-retry-time ; + multi-master ; +diff --git a/doc/misc/options b/doc/misc/options +index 90d07f5a56..ee152b8179 100644 +--- a/doc/misc/options ++++ b/doc/misc/options +@@ -170,13 +170,16 @@ options { + dnssec-secure-to-insecure ; + dnssec-update-mode ( maintain | no-resign ); + dnssec-validation ( yes | no | auto ); +- dnstap { ( all | auth | client | forwarder | resolver | update ) [ +- ( query | response ) ]; ... }; +- dnstap-identity ( | none | hostname ); +- dnstap-output ( file | unix ) [ size ( unlimited | +- ) ] [ versions ( unlimited | ) ] [ suffix ( +- increment | timestamp ) ]; +- dnstap-version ( | none ); ++ dnstap { ( all | auth | client | forwarder | ++ resolver | update ) [ ( query | response ) ]; ++ ... }; // not configured ++ dnstap-identity ( | none | ++ hostname ); // not configured ++ dnstap-output ( file | unix ) [ ++ size ( unlimited | ) ] [ versions ( ++ unlimited | ) ] [ suffix ( increment ++ | timestamp ) ]; // not configured ++ dnstap-version ( | none ); // not configured + dscp ; + dual-stack-servers [ port ] { ( [ port + ] [ dscp ] | [ port +@@ -200,13 +203,13 @@ options { + forward ( first | only ); + forwarders [ port ] [ dscp ] { ( + | ) [ port ] [ dscp ]; ... }; +- fstrm-set-buffer-hint ; +- fstrm-set-flush-timeout ; +- fstrm-set-input-queue-size ; +- fstrm-set-output-notify-threshold ; +- fstrm-set-output-queue-model ( mpsc | spsc ); +- fstrm-set-output-queue-size ; +- fstrm-set-reopen-interval ; ++ fstrm-set-buffer-hint ; // not configured ++ fstrm-set-flush-timeout ; // not configured ++ fstrm-set-input-queue-size ; // not configured ++ fstrm-set-output-notify-threshold ; // not configured ++ fstrm-set-output-queue-model ( mpsc | spsc ); // not configured ++ fstrm-set-output-queue-size ; // not configured ++ fstrm-set-reopen-interval ; // not configured + geoip-directory ( | none ); + geoip-use-ecs ; // obsolete + glue-cache ; +@@ -243,6 +246,7 @@ options { + max-journal-size ( default | unlimited | ); + max-ncache-ttl ; + max-records ; ++ max-records-per-type ; + max-recursion-depth ; + max-recursion-queries ; + max-refresh-time ; +@@ -253,6 +257,7 @@ options { + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-udp-size ; + max-zone-ttl ( unlimited | ); + memstatistics ; +@@ -569,8 +574,9 @@ view [ ] { + dnssec-secure-to-insecure ; + dnssec-update-mode ( maintain | no-resign ); + dnssec-validation ( yes | no | auto ); +- dnstap { ( all | auth | client | forwarder | resolver | update ) [ +- ( query | response ) ]; ... }; ++ dnstap { ( all | auth | client | forwarder | ++ resolver | update ) [ ( query | response ) ]; ++ ... }; // not configured + dual-stack-servers [ port ] { ( [ port + ] [ dscp ] | [ port + ] [ dscp ] | [ port +@@ -622,6 +628,7 @@ view [ ] { + max-journal-size ( default | unlimited | ); + max-ncache-ttl ; + max-records ; ++ max-records-per-type ; + max-recursion-depth ; + max-recursion-queries ; + max-refresh-time ; +@@ -631,6 +638,7 @@ view [ ] { + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-udp-size ; + max-zone-ttl ( unlimited | ); + message-compression ; +@@ -854,12 +862,14 @@ view [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + min-refresh-time ; + min-retry-time ; +@@ -971,12 +981,14 @@ zone [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + min-refresh-time ; + min-retry-time ; +diff --git a/doc/misc/options.active b/doc/misc/options.active +index 0229d8da6d..ad4e29a9ba 100644 +--- a/doc/misc/options.active ++++ b/doc/misc/options.active +@@ -156,13 +156,16 @@ options { + dnssec-secure-to-insecure ; + dnssec-update-mode ( maintain | no-resign ); + dnssec-validation ( yes | no | auto ); +- dnstap { ( all | auth | client | forwarder | resolver | update ) [ +- ( query | response ) ]; ... }; +- dnstap-identity ( | none | hostname ); +- dnstap-output ( file | unix ) [ size ( unlimited | +- ) ] [ versions ( unlimited | ) ] [ suffix ( +- increment | timestamp ) ]; +- dnstap-version ( | none ); ++ dnstap { ( all | auth | client | forwarder | ++ resolver | update ) [ ( query | response ) ]; ++ ... }; // not configured ++ dnstap-identity ( | none | ++ hostname ); // not configured ++ dnstap-output ( file | unix ) [ ++ size ( unlimited | ) ] [ versions ( ++ unlimited | ) ] [ suffix ( increment ++ | timestamp ) ]; // not configured ++ dnstap-version ( | none ); // not configured + dscp ; + dual-stack-servers [ port ] { ( [ port + ] [ dscp ] | [ port +@@ -181,13 +184,13 @@ options { + forward ( first | only ); + forwarders [ port ] [ dscp ] { ( + | ) [ port ] [ dscp ]; ... }; +- fstrm-set-buffer-hint ; +- fstrm-set-flush-timeout ; +- fstrm-set-input-queue-size ; +- fstrm-set-output-notify-threshold ; +- fstrm-set-output-queue-model ( mpsc | spsc ); +- fstrm-set-output-queue-size ; +- fstrm-set-reopen-interval ; ++ fstrm-set-buffer-hint ; // not configured ++ fstrm-set-flush-timeout ; // not configured ++ fstrm-set-input-queue-size ; // not configured ++ fstrm-set-output-notify-threshold ; // not configured ++ fstrm-set-output-queue-model ( mpsc | spsc ); // not configured ++ fstrm-set-output-queue-size ; // not configured ++ fstrm-set-reopen-interval ; // not configured + geoip-directory ( | none ); + glue-cache ; + heartbeat-interval ; +@@ -217,6 +220,7 @@ options { + max-journal-size ( default | unlimited | ); + max-ncache-ttl ; + max-records ; ++ max-records-per-type ; + max-recursion-depth ; + max-recursion-queries ; + max-refresh-time ; +@@ -227,6 +231,7 @@ options { + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-udp-size ; + max-zone-ttl ( unlimited | ); + memstatistics ; +@@ -513,8 +518,9 @@ view [ ] { + dnssec-secure-to-insecure ; + dnssec-update-mode ( maintain | no-resign ); + dnssec-validation ( yes | no | auto ); +- dnstap { ( all | auth | client | forwarder | resolver | update ) [ +- ( query | response ) ]; ... }; ++ dnstap { ( all | auth | client | forwarder | ++ resolver | update ) [ ( query | response ) ]; ++ ... }; // not configured + dual-stack-servers [ port ] { ( [ port + ] [ dscp ] | [ port + ] [ dscp ] | [ port +@@ -559,6 +565,7 @@ view [ ] { + max-journal-size ( default | unlimited | ); + max-ncache-ttl ; + max-records ; ++ max-records-per-type ; + max-recursion-depth ; + max-recursion-queries ; + max-refresh-time ; +@@ -568,6 +575,7 @@ view [ ] { + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-udp-size ; + max-zone-ttl ( unlimited | ); + message-compression ; +@@ -774,12 +782,14 @@ view [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + min-refresh-time ; + min-retry-time ; +@@ -884,12 +894,14 @@ zone [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + min-refresh-time ; + min-retry-time ; +diff --git a/doc/misc/redirect.zoneopt b/doc/misc/redirect.zoneopt +index 6a5ef660a2..c4ab59ddad 100644 +--- a/doc/misc/redirect.zoneopt ++++ b/doc/misc/redirect.zoneopt +@@ -8,6 +8,8 @@ zone [ ] { + masterfile-style ( full | relative ); + masters [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... }; + max-records ; ++ max-records-per-type ; ++ max-types-per-name ; + max-zone-ttl ( unlimited | ); + primaries [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... }; + zone-statistics ( full | terse | none | ); +diff --git a/doc/misc/slave.zoneopt b/doc/misc/slave.zoneopt +index 8cb7c3143f..ccd88e5c15 100644 +--- a/doc/misc/slave.zoneopt ++++ b/doc/misc/slave.zoneopt +@@ -31,12 +31,14 @@ zone [ ] { + max-ixfr-ratio ( unlimited | ); + max-journal-size ( default | unlimited | ); + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-idle-out ; + max-transfer-time-in ; + max-transfer-time-out ; ++ max-types-per-name ; + min-refresh-time ; + min-retry-time ; + multi-master ; +diff --git a/doc/misc/static-stub.zoneopt b/doc/misc/static-stub.zoneopt +index f89d46248a..102b980c7a 100644 +--- a/doc/misc/static-stub.zoneopt ++++ b/doc/misc/static-stub.zoneopt +@@ -5,6 +5,8 @@ zone [ ] { + forward ( first | only ); + forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... }; + max-records ; ++ max-records-per-type ; ++ max-types-per-name ; + server-addresses { ( | ); ... }; + server-names { ; ... }; + zone-statistics ( full | terse | none | ); +diff --git a/doc/misc/stub.zoneopt b/doc/misc/stub.zoneopt +index 2db604dae6..ca4bf1ce39 100644 +--- a/doc/misc/stub.zoneopt ++++ b/doc/misc/stub.zoneopt +@@ -13,10 +13,12 @@ zone [ ] { + masterfile-style ( full | relative ); + masters [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... }; + max-records ; ++ max-records-per-type ; + max-refresh-time ; + max-retry-time ; + max-transfer-idle-in ; + max-transfer-time-in ; ++ max-types-per-name ; + min-refresh-time ; + min-retry-time ; + multi-master ; +diff --git a/lib/dns/cache.c b/lib/dns/cache.c +index ae173b86ab..9f0412dbe7 100644 +--- a/lib/dns/cache.c ++++ b/lib/dns/cache.c +@@ -148,6 +148,8 @@ struct dns_cache { + /* Locked by 'filelock'. */ + char *filename; + /* Access to the on-disk cache file is also locked by 'filelock'. */ ++ ++ uint32_t maxrrperset; + }; + + /*** +@@ -175,6 +177,7 @@ cache_create_db(dns_cache_t *cache, dns_db_t **db) { + cache->db_argv, db); + if (result == ISC_R_SUCCESS) { + dns_db_setservestalettl(*db, cache->serve_stale_ttl); ++ dns_db_setmaxrrperset(*db, cache->maxrrperset); + } + return (result); + } +@@ -1277,6 +1280,16 @@ dns_cache_updatestats(dns_cache_t *cache, isc_result_t result) { + } + } + ++void ++dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value) { ++ REQUIRE(VALID_CACHE(cache)); ++ ++ cache->maxrrperset = value; ++ if (cache->db != NULL) { ++ dns_db_setmaxrrperset(cache->db, value); ++ } ++} ++ + /* + * XXX: Much of the following code has been copied in from statschannel.c. + * We should refactor this into a generic function in stats.c that can be +diff --git a/lib/dns/db.c b/lib/dns/db.c +index ec537486cb..8439265a7f 100644 +--- a/lib/dns/db.c ++++ b/lib/dns/db.c +@@ -1122,3 +1122,12 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats) { + + return (ISC_R_NOTIMPLEMENTED); + } ++ ++void ++dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) { ++ REQUIRE(DNS_DB_VALID(db)); ++ ++ if (db->methods->setmaxrrperset != NULL) { ++ (db->methods->setmaxrrperset)(db, value); ++ } ++} +diff --git a/lib/dns/dnsrps.c b/lib/dns/dnsrps.c +index 0f2ffb5f35..539090d1bd 100644 +--- a/lib/dns/dnsrps.c ++++ b/lib/dns/dnsrps.c +@@ -970,7 +970,8 @@ static dns_dbmethods_t rpsdb_db_methods = { + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ +- NULL /* adjusthashsize */ ++ NULL, /* adjusthashsize */ ++ NULL /* setmaxrrperset */ + }; + + static dns_rdatasetmethods_t rpsdb_rdataset_methods = { +diff --git a/lib/dns/ecdb.c b/lib/dns/ecdb.c +index 1d9343361d..bab5da5503 100644 +--- a/lib/dns/ecdb.c ++++ b/lib/dns/ecdb.c +@@ -426,7 +426,7 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, + } + + result = dns_rdataslab_fromrdataset(rdataset, mctx, &r, +- sizeof(rdatasetheader_t)); ++ sizeof(rdatasetheader_t), 0); + if (result != ISC_R_SUCCESS) { + goto unlock; + } +@@ -556,7 +556,11 @@ static dns_dbmethods_t ecdb_methods = { + NULL, /* getsize */ + NULL, /* setservestalettl */ + NULL, /* getservestalettl */ +- NULL /* setgluecachestats */ ++ NULL, /* setservestalerefresh */ ++ NULL, /* getservestalerefresh */ ++ NULL, /* setgluecachestats */ ++ NULL, /* adjusthashsize */ ++ NULL /* setmaxrrperset */ + }; + + static isc_result_t +diff --git a/lib/dns/include/dns/cache.h b/lib/dns/include/dns/cache.h +index 22e94da9d5..3fa2a891e0 100644 +--- a/lib/dns/include/dns/cache.h ++++ b/lib/dns/include/dns/cache.h +@@ -337,6 +337,12 @@ dns_cache_updatestats(dns_cache_t *cache, isc_result_t result); + * Update cache statistics based on result code in 'result' + */ + ++void ++dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value); ++/*%< ++ * Set the maximum resource records per RRSet that can be cached. ++ */ ++ + #ifdef HAVE_LIBXML2 + int + dns_cache_renderxml(dns_cache_t *cache, void *writer0); +diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h +index 90bd7fb112..732bfe473d 100644 +--- a/lib/dns/include/dns/db.h ++++ b/lib/dns/include/dns/db.h +@@ -182,6 +182,7 @@ typedef struct dns_dbmethods { + isc_result_t (*getservestalerefresh)(dns_db_t *db, uint32_t *interval); + isc_result_t (*setgluecachestats)(dns_db_t *db, isc_stats_t *stats); + isc_result_t (*adjusthashsize)(dns_db_t *db, size_t size); ++ void (*setmaxrrperset)(dns_db_t *db, uint32_t value); + } dns_dbmethods_t; + + typedef isc_result_t (*dns_dbcreatefunc_t)(isc_mem_t *mctx, +@@ -1783,6 +1784,13 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats); + * dns_rdatasetstats_create(); otherwise NULL. + */ + ++void ++dns_db_setmaxrrperset(dns_db_t *db, uint32_t value); ++/*%< ++ * Set the maximum permissible number of RRs per RRset. If 'value' ++ * is nonzero, then any subsequent attempt to add an rdataset with ++ * more than 'value' RRs will return ISC_R_NOSPACE. ++ */ + ISC_LANG_ENDDECLS + + #endif /* DNS_DB_H */ +diff --git a/lib/dns/include/dns/rdataslab.h b/lib/dns/include/dns/rdataslab.h +index 5a22f099c3..f2f3513a19 100644 +--- a/lib/dns/include/dns/rdataslab.h ++++ b/lib/dns/include/dns/rdataslab.h +@@ -65,7 +65,8 @@ ISC_LANG_BEGINDECLS + + isc_result_t + dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, +- isc_region_t *region, unsigned int reservelen); ++ isc_region_t *region, unsigned int reservelen, ++ uint32_t limit); + /*%< + * Slabify a rdataset. The slab area will be allocated and returned + * in 'region'. +@@ -121,7 +122,8 @@ isc_result_t + dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, + unsigned int reservelen, isc_mem_t *mctx, + dns_rdataclass_t rdclass, dns_rdatatype_t type, +- unsigned int flags, unsigned char **tslabp); ++ unsigned int flags, uint32_t maxrrperset, ++ unsigned char **tslabp); + /*%< + * Merge 'oslab' and 'nslab'. + */ +diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h +index 2cf7eced16..0d502f4dd2 100644 +--- a/lib/dns/include/dns/view.h ++++ b/lib/dns/include/dns/view.h +@@ -186,6 +186,7 @@ struct dns_view { + dns_dlzdblist_t dlz_unsearched; + uint32_t fail_ttl; + dns_badcache_t *failcache; ++ uint32_t maxrrperset; + + /* + * Configurable data for server use only, +@@ -1339,6 +1340,12 @@ dns_view_staleanswerenabled(dns_view_t *view); + *\li 'view' to be valid. + */ + ++void ++dns_view_setmaxrrperset(dns_view_t *view, uint32_t value); ++/*%< ++ * Set the maximum resource records per RRSet that can be cached. ++ */ ++ + ISC_LANG_ENDDECLS + + #endif /* DNS_VIEW_H */ +diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h +index 08e2263c5b..e902043357 100644 +--- a/lib/dns/include/dns/zone.h ++++ b/lib/dns/include/dns/zone.h +@@ -162,6 +162,19 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx); + *\li #ISC_R_UNEXPECTED + */ + ++isc_result_t ++dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp); ++/*%< ++ * Creates a new empty database for the 'zone'. ++ * ++ * Requires: ++ *\li 'zone' to be a valid zone. ++ *\li 'dbp' to point to NULL pointer. ++ * ++ * Returns: ++ *\li dns_db_create() error codes. ++ */ ++ + void + dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass); + /*%< +@@ -330,6 +343,19 @@ dns_zone_getmaxrecords(dns_zone_t *zone); + *\li uint32_t maxrecords. + */ + ++void ++dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t maxrrperset); ++/*%< ++ * Sets the maximum number of records per rrset permitted in a zone. ++ * 0 implies unlimited. ++ * ++ * Requires: ++ *\li 'zone' to be valid initialised zone. ++ * ++ * Returns: ++ *\li void ++ */ ++ + void + dns_zone_setmaxttl(dns_zone_t *zone, uint32_t maxttl); + /*%< +diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c +index e840c0665d..ca71bb9c03 100644 +--- a/lib/dns/rbtdb.c ++++ b/lib/dns/rbtdb.c +@@ -482,6 +482,7 @@ struct dns_rbtdb { + rbtdb_serial_t current_serial; + rbtdb_serial_t least_serial; + rbtdb_serial_t next_serial; ++ uint32_t maxrrperset; + rbtdb_version_t *current_version; + rbtdb_version_t *future_version; + rbtdb_versionlist_t open_versions; +@@ -6495,7 +6496,7 @@ find_header: + rbtdb->common.mctx, + rbtdb->common.rdclass, + (dns_rdatatype_t)header->type, flags, +- &merged); ++ rbtdb->maxrrperset, &merged); + } + if (result == ISC_R_SUCCESS) { + /* +@@ -6880,7 +6881,7 @@ delegating_type(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, + + static inline isc_result_t + addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, +- dns_rdataset_t *rdataset) { ++ uint32_t maxrrperset, dns_rdataset_t *rdataset) { + struct noqname *noqname; + isc_mem_t *mctx = rbtdb->common.mctx; + dns_name_t name; +@@ -6901,12 +6902,12 @@ addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, + noqname->negsig = NULL; + noqname->type = neg.type; + dns_name_dup(&name, mctx, &noqname->name); +- result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0); ++ result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0, maxrrperset); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } + noqname->neg = r.base; +- result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0); ++ result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0, maxrrperset); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } +@@ -6925,7 +6926,7 @@ cleanup: + + static inline isc_result_t + addclosest(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, +- dns_rdataset_t *rdataset) { ++ uint32_t maxrrperset, dns_rdataset_t *rdataset) { + struct noqname *closest; + isc_mem_t *mctx = rbtdb->common.mctx; + dns_name_t name; +@@ -6946,12 +6947,12 @@ addclosest(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, + closest->negsig = NULL; + closest->type = neg.type; + dns_name_dup(&name, mctx, &closest->name); +- result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0); ++ result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0, maxrrperset); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } + closest->neg = r.base; +- result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0); ++ result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0, maxrrperset); + if (result != ISC_R_SUCCESS) { + goto cleanup; + } +@@ -7028,7 +7029,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, + } + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, +- ®ion, sizeof(rdatasetheader_t)); ++ ®ion, sizeof(rdatasetheader_t), ++ rbtdb->maxrrperset); + if (result != ISC_R_SUCCESS) { + return (result); + } +@@ -7086,7 +7088,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, + RDATASET_ATTR_SET(newheader, RDATASET_ATTR_OPTOUT); + } + if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) { +- result = addnoqname(rbtdb, newheader, rdataset); ++ result = addnoqname(rbtdb, newheader, ++ rbtdb->maxrrperset, rdataset); + if (result != ISC_R_SUCCESS) { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); +@@ -7094,7 +7097,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, + } + } + if ((rdataset->attributes & DNS_RDATASETATTR_CLOSEST) != 0) { +- result = addclosest(rbtdb, newheader, rdataset); ++ result = addclosest(rbtdb, newheader, ++ rbtdb->maxrrperset, rdataset); + if (result != ISC_R_SUCCESS) { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); +@@ -7261,7 +7265,8 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, + nodefullname(db, node, nodename); + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, +- ®ion, sizeof(rdatasetheader_t)); ++ ®ion, sizeof(rdatasetheader_t), ++ 0); + if (result != ISC_R_SUCCESS) { + return (result); + } +@@ -7669,7 +7674,8 @@ loading_addrdataset(void *arg, const dns_name_t *name, + } + + result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, +- ®ion, sizeof(rdatasetheader_t)); ++ ®ion, sizeof(rdatasetheader_t), ++ rbtdb->maxrrperset); + if (result != ISC_R_SUCCESS) { + return (result); + } +@@ -8608,6 +8614,15 @@ setgluecachestats(dns_db_t *db, isc_stats_t *stats) { + return (ISC_R_SUCCESS); + } + ++static void ++setmaxrrperset(dns_db_t *db, uint32_t maxrrperset) { ++ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; ++ ++ REQUIRE(VALID_RBTDB(rbtdb)); ++ ++ rbtdb->maxrrperset = maxrrperset; ++} ++ + static dns_stats_t * + getrrsetstats(dns_db_t *db) { + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; +@@ -8731,7 +8746,8 @@ static dns_dbmethods_t zone_methods = { attach, + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + setgluecachestats, +- adjusthashsize }; ++ adjusthashsize, ++ setmaxrrperset }; + + static dns_dbmethods_t cache_methods = { attach, + detach, +@@ -8783,7 +8799,8 @@ static dns_dbmethods_t cache_methods = { attach, + setservestalerefresh, + getservestalerefresh, + NULL, +- adjusthashsize }; ++ adjusthashsize, ++ setmaxrrperset }; + + isc_result_t + dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type, +diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c +index dda903819a..b2d1e1cddb 100644 +--- a/lib/dns/rdataslab.c ++++ b/lib/dns/rdataslab.c +@@ -116,7 +116,8 @@ fillin_offsets(unsigned char *offsetbase, unsigned int *offsettable, + + isc_result_t + dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, +- isc_region_t *region, unsigned int reservelen) { ++ isc_region_t *region, unsigned int reservelen, ++ uint32_t maxrrperset) { + /* + * Use &removed as a sentinel pointer for duplicate + * rdata as rdata.data == NULL is valid. +@@ -158,7 +159,7 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, + return (ISC_R_SUCCESS); + } + +- if (nitems > DNS_RDATASET_MAX_RECORDS) { ++ if (maxrrperset > 0 && nitems > maxrrperset) { + return (DNS_R_TOOMANYRECORDS); + } + +@@ -488,7 +489,8 @@ isc_result_t + dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, + unsigned int reservelen, isc_mem_t *mctx, + dns_rdataclass_t rdclass, dns_rdatatype_t type, +- unsigned int flags, unsigned char **tslabp) { ++ unsigned int flags, uint32_t maxrrperset, ++ unsigned char **tslabp) { + unsigned char *ocurrent, *ostart, *ncurrent, *tstart, *tcurrent, *data; + unsigned int ocount, ncount, count, olength, tlength, tcount, length; + dns_rdata_t ordata = DNS_RDATA_INIT; +@@ -528,7 +530,7 @@ dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, + #endif /* if DNS_RDATASET_FIXED */ + INSIST(ocount > 0 && ncount > 0); + +- if (ocount + ncount > DNS_RDATASET_MAX_RECORDS) { ++ if (maxrrperset > 0 && ocount + ncount > maxrrperset) { + return (DNS_R_TOOMANYRECORDS); + } + +diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c +index d9de422409..84cd324fb4 100644 +--- a/lib/dns/sdb.c ++++ b/lib/dns/sdb.c +@@ -1312,7 +1312,8 @@ static dns_dbmethods_t sdb_methods = { + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ +- NULL /* adjusthashsize */ ++ NULL, /* adjusthashsize */ ++ NULL /* setmaxrrperset */ + }; + + static isc_result_t +diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c +index c8a615a0f3..60a1d23b3b 100644 +--- a/lib/dns/sdlz.c ++++ b/lib/dns/sdlz.c +@@ -1284,7 +1284,8 @@ static dns_dbmethods_t sdlzdb_methods = { + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ +- NULL /* adjusthashsize */ ++ NULL, /* adjusthashsize */ ++ NULL /* setmaxrrperset */ + }; + + /* +diff --git a/lib/dns/view.c b/lib/dns/view.c +index dcb0f1804e..a672aa8bc8 100644 +--- a/lib/dns/view.c ++++ b/lib/dns/view.c +@@ -869,6 +869,8 @@ dns_view_setcache(dns_view_t *view, dns_cache_t *cache, bool shared) { + dns_cache_attach(cache, &view->cache); + dns_cache_attachdb(cache, &view->cachedb); + INSIST(DNS_DB_VALID(view->cachedb)); ++ ++ dns_cache_setmaxrrperset(view->cache, view->maxrrperset); + } + + bool +@@ -2544,3 +2546,12 @@ dns_view_staleanswerenabled(dns_view_t *view) { + + return (result); + } ++ ++void ++dns_view_setmaxrrperset(dns_view_t *view, uint32_t value) { ++ REQUIRE(DNS_VIEW_VALID(view)); ++ view->maxrrperset = value; ++ if (view->cache != NULL) { ++ dns_cache_setmaxrrperset(view->cache, value); ++ } ++} +diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c +index a4569f545c..c61e8f5f6b 100644 +--- a/lib/dns/xfrin.c ++++ b/lib/dns/xfrin.c +@@ -203,8 +203,6 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task, + static isc_result_t + axfr_init(dns_xfrin_ctx_t *xfr); + static isc_result_t +-axfr_makedb(dns_xfrin_ctx_t *xfr, dns_db_t **dbp); +-static isc_result_t + axfr_putdata(dns_xfrin_ctx_t *xfr, dns_diffop_t op, dns_name_t *name, + dns_ttl_t ttl, dns_rdata_t *rdata); + static isc_result_t +@@ -277,7 +275,11 @@ axfr_init(dns_xfrin_ctx_t *xfr) { + dns_db_detach(&xfr->db); + } + +- CHECK(axfr_makedb(xfr, &xfr->db)); ++ CHECK(dns_zone_makedb(xfr->zone, &xfr->db)); ++ ++ dns_zone_rpz_enable_db(xfr->zone, xfr->db); ++ dns_zone_catz_enable_db(xfr->zone, xfr->db); ++ + dns_rdatacallbacks_init(&xfr->axfr); + CHECK(dns_db_beginload(xfr->db, &xfr->axfr)); + result = ISC_R_SUCCESS; +@@ -285,22 +287,6 @@ failure: + return (result); + } + +-static isc_result_t +-axfr_makedb(dns_xfrin_ctx_t *xfr, dns_db_t **dbp) { +- isc_result_t result; +- +- result = dns_db_create(xfr->mctx, /* XXX */ +- "rbt", /* XXX guess */ +- &xfr->name, dns_dbtype_zone, xfr->rdclass, 0, +- NULL, /* XXX guess */ +- dbp); +- if (result == ISC_R_SUCCESS) { +- dns_zone_rpz_enable_db(xfr->zone, *dbp); +- dns_zone_catz_enable_db(xfr->zone, *dbp); +- } +- return (result); +-} +- + static isc_result_t + axfr_putdata(dns_xfrin_ctx_t *xfr, dns_diffop_t op, dns_name_t *name, + dns_ttl_t ttl, dns_rdata_t *rdata) { +diff --git a/lib/dns/zone.c b/lib/dns/zone.c +index 65a3aacab7..5c8d97ed18 100644 +--- a/lib/dns/zone.c ++++ b/lib/dns/zone.c +@@ -276,6 +276,7 @@ struct dns_zone { + uint32_t minretry; + + uint32_t maxrecords; ++ uint32_t maxrrperset; + + isc_sockaddr_t *masters; + isc_dscp_t *masterdscps; +@@ -2254,31 +2255,13 @@ zone_load(dns_zone_t *zone, unsigned int flags, bool locked) { + dns_zone_logc(zone, DNS_LOGCATEGORY_ZONELOAD, ISC_LOG_DEBUG(1), + "starting load"); + +- result = dns_db_create(zone->mctx, zone->db_argv[0], &zone->origin, +- (zone->type == dns_zone_stub) ? dns_dbtype_stub +- : dns_dbtype_zone, +- zone->rdclass, zone->db_argc - 1, +- zone->db_argv + 1, &db); +- ++ result = dns_zone_makedb(zone, &db); + if (result != ISC_R_SUCCESS) { + dns_zone_logc(zone, DNS_LOGCATEGORY_ZONELOAD, ISC_LOG_ERROR, + "loading zone: creating database: %s", + isc_result_totext(result)); + goto cleanup; + } +- dns_db_settask(db, zone->task); +- +- if (zone->type == dns_zone_primary || +- zone->type == dns_zone_secondary || zone->type == dns_zone_mirror) +- { +- result = dns_db_setgluecachestats(db, zone->gluecachestats); +- if (result == ISC_R_NOTIMPLEMENTED) { +- result = ISC_R_SUCCESS; +- } +- if (result != ISC_R_SUCCESS) { +- goto cleanup; +- } +- } + + if (!dns_db_ispersistent(db)) { + if (zone->masterfile != NULL) { +@@ -12175,6 +12158,16 @@ dns_zone_setmaxrecords(dns_zone_t *zone, uint32_t val) { + zone->maxrecords = val; + } + ++void ++dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t val) { ++ REQUIRE(DNS_ZONE_VALID(zone)); ++ ++ zone->maxrrperset = val; ++ if (zone->db != NULL) { ++ dns_db_setmaxrrperset(zone->db, val); ++ } ++} ++ + static bool + notify_isqueued(dns_zone_t *zone, unsigned int flags, dns_name_t *name, + isc_sockaddr_t *addr, dns_tsigkey_t *key) { +@@ -14579,6 +14572,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { + goto cleanup; + } + dns_db_settask(stub->db, zone->task); ++ dns_db_setmaxrrperset(stub->db, zone->maxrrperset); + } + + result = dns_db_newversion(stub->db, &stub->version); +@@ -17300,6 +17294,7 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, bool dump) { + } + zone_attachdb(zone, db); + dns_db_settask(zone->db, zone->task); ++ dns_db_setmaxrrperset(zone->db, zone->maxrrperset); + DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED | DNS_ZONEFLG_NEEDNOTIFY); + return (ISC_R_SUCCESS); + +@@ -23413,3 +23408,44 @@ zone_nsecttl(dns_zone_t *zone) { + + return (ISC_MIN(zone->minimum, zone->soattl)); + } ++ ++isc_result_t ++dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp) { ++ REQUIRE(DNS_ZONE_VALID(zone)); ++ REQUIRE(dbp != NULL && *dbp == NULL); ++ ++ dns_db_t *db = NULL; ++ ++ isc_result_t result = dns_db_create( ++ zone->mctx, zone->db_argv[0], &zone->origin, ++ (zone->type == dns_zone_stub) ? dns_dbtype_stub ++ : dns_dbtype_zone, ++ zone->rdclass, zone->db_argc - 1, zone->db_argv + 1, &db); ++ if (result != ISC_R_SUCCESS) { ++ return (result); ++ } ++ ++ switch (zone->type) { ++ case dns_zone_primary: ++ case dns_zone_secondary: ++ case dns_zone_mirror: ++ result = dns_db_setgluecachestats(db, zone->gluecachestats); ++ if (result == ISC_R_NOTIMPLEMENTED) { ++ result = ISC_R_SUCCESS; ++ } ++ if (result != ISC_R_SUCCESS) { ++ dns_db_detach(&db); ++ return (result); ++ } ++ break; ++ default: ++ break; ++ } ++ ++ dns_db_settask(db, zone->task); ++ dns_db_setmaxrrperset(db, zone->maxrrperset); ++ ++ *dbp = db; ++ ++ return (ISC_R_SUCCESS); ++} +diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c +index aab0462936..dce30537dd 100644 +--- a/lib/isccfg/namedconf.c ++++ b/lib/isccfg/namedconf.c +@@ -2236,6 +2236,9 @@ static cfg_clausedef_t zone_clauses[] = { + { "max-records", &cfg_type_uint32, + CFG_ZONE_PRIMARY | CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | + CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, ++ { "max-records-per-type", &cfg_type_uint32, ++ CFG_ZONE_PRIMARY | CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | ++ CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, + { "max-refresh-time", &cfg_type_uint32, + CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | CFG_ZONE_STUB }, + { "max-retry-time", &cfg_type_uint32, +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737-types-test.patch b/SOURCES/bind-9.16-CVE-2024-1737-types-test.patch new file mode 100644 index 0000000..21ee9ba --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737-types-test.patch @@ -0,0 +1,6323 @@ +From 21385dbfc4875f9d72e158a48b9b4cf90dde8d03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Tue, 28 May 2024 15:23:24 +0200 +Subject: [PATCH] Add a test for not caching large number of RRsets + +Send a recursive query for a large number of RRsets, which should +fail when using the default max-types-per-name setting of 100, but +succeed when the cap is disabled. + +(cherry picked from commit 7e4530f847c8dc541c5e5bf9f790deed520aaa16) +(cherry picked from commit a36ab2eb3615e59809e0d875233d92f9c0d1a729) + +Add test for not-loading many RRsets per name on a secondary + +This tests makes sure the zone with many RRsets per name is not loaded +via XFR on the secondary server. + +(cherry picked from commit 4cfeed912a5e7440f04cb088a461ff47305da2e7) +(cherry picked from commit b6f6e12bbfbc35901f4c0ee693dace9199efb237) + +Test variable rename a->rrcount + +(cherry picked from commit 338b45ae713cded921fd3e5494ca38bd59ff9ee8) +(cherry picked from commit 747da63896f9daf4dae866150d68fc275ae6f660) + +Test variable rename i->_attempt + +(cherry picked from commit 13417eb277cc8a30ee4ddbb6fc02442b0d8e6d3c) +(cherry picked from commit 6516c92c070e944910fd19ce87a3028b9bf8480a) + +Test owner name rename: a b c d e -> -txt + +(cherry picked from commit 6ce03f75d1935c2e1991e9c0a01c49b0099a58cb) +(cherry picked from commit eb4355c9f393e3f4ce6203da2590108f52df55f4) + +masterformat: rename zone names to reflect intended meaning + +(cherry picked from commit d34bfb1eeaa2f8faab80b1620b992b5495e6f88c) +(cherry picked from commit da5bac8104b56fd2782cffc97fb06577dd62eec1) + +Remove duplicated empty zone files + +(cherry picked from commit 1456b4fc7778b851256107dbc79fb67d45f752f5) +(cherry picked from commit e08f2683878850d4b02eab3e4dd47b44925c78a0) + +Add more tests for adding many RR types to the database + +More reclimit tests that test various scenarios adding combinations of +priority and non-priority RR types into the database. + +(cherry picked from commit d3ca4be21c90283b801886e6f798def801d259a9) +--- + bin/tests/system/masterformat/clean.sh | 5 + + bin/tests/system/masterformat/ns1/compile.sh | 7 +- + .../ns1/{huge.db.in => empty.db.in} | 0 + bin/tests/system/masterformat/ns1/large.db.in | 20 - + .../system/masterformat/ns1/named.conf.in | 21 +- + bin/tests/system/masterformat/ns1/uber.db.in | 22 - + .../system/masterformat/ns2/named.conf.in | 16 +- + bin/tests/system/masterformat/setup.sh | 45 +- + bin/tests/system/masterformat/tests.sh | 83 +- + bin/tests/system/reclimit/clean.sh | 22 +- + bin/tests/system/reclimit/ns1/big.db | 5265 +++++++++-------- + bin/tests/system/reclimit/ns1/named.conf.in | 6 + + bin/tests/system/reclimit/ns1/root.db | 5 +- + bin/tests/system/reclimit/ns3/named5.conf.in | 1 + + bin/tests/system/reclimit/ns3/named6.conf.in | 43 + + bin/tests/system/reclimit/setup.sh | 5 + + bin/tests/system/reclimit/tests.sh | 329 +- + 17 files changed, 3236 insertions(+), 2659 deletions(-) + rename bin/tests/system/masterformat/ns1/{huge.db.in => empty.db.in} (100%) + delete mode 100644 bin/tests/system/masterformat/ns1/large.db.in + delete mode 100644 bin/tests/system/masterformat/ns1/uber.db.in + create mode 100644 bin/tests/system/reclimit/ns3/named6.conf.in + +diff --git a/bin/tests/system/masterformat/clean.sh b/bin/tests/system/masterformat/clean.sh +index a9183af6ff..6bb9a4200a 100755 +--- a/bin/tests/system/masterformat/clean.sh ++++ b/bin/tests/system/masterformat/clean.sh +@@ -16,6 +16,11 @@ rm -f ./ns1/large.db ./ns1/large.db.raw + rm -f ./ns1/example.db.map ./ns1/signed.db.map + rm -f ./ns1/huge.db ./ns1/huge.db.raw + rm -f ./ns1/uber.db ./ns1/uber.db.raw ++rm -f ./ns1/255types.db ./ns1/255types.db.raw ++rm -f ./ns1/on-limit.db ./ns1/on-limit.db.raw ++rm -f ./ns1/over-limit.db ./ns1/over-limit.db.raw ++rm -f ./ns1/under-limit.db ./ns1/under-limit.db.raw ++rm -f ./ns2/under-limit.bk + rm -f ./ns1/session.key + rm -f ./dig.out.* + rm -f ./dig.out +diff --git a/bin/tests/system/masterformat/ns1/compile.sh b/bin/tests/system/masterformat/ns1/compile.sh +index 9972e51aa4..164b0626e9 100755 +--- a/bin/tests/system/masterformat/ns1/compile.sh ++++ b/bin/tests/system/masterformat/ns1/compile.sh +@@ -24,11 +24,12 @@ $CHECKZONE -D -F raw=0 -o example.db.compat example-compat \ + example.db > /dev/null 2>&1 + $CHECKZONE -D -F raw -L 3333 -o example.db.serial.raw example \ + example.db > /dev/null 2>&1 +-$CHECKZONE -D -F raw -o large.db.raw large large.db > /dev/null 2>&1 ++$CHECKZONE -D -F raw -o under-limit.db.raw under-limit under-limit.db >/dev/null 2>&1 + $CHECKZONE -D -F map -o example.db.map example-map \ + example.db > /dev/null 2>&1 +-$CHECKZONE -D -F raw -o huge.db.raw huge huge.db >/dev/null 2>&1 +-$CHECKZONE -D -F raw -o uber.db.raw uber uber.db >/dev/null 2>&1 ++$CHECKZONE -D -F raw -o on-limit.db.raw on-limit on-limit.db >/dev/null 2>&1 ++$CHECKZONE -D -F raw -o over-limit.db.raw over-limit over-limit.db >/dev/null 2>&1 ++$CHECKZONE -D -F raw -o 255types.db.raw 255types 255types.db >/dev/null 2>&1 + + $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -f KSK signed > /dev/null 2>&1 + $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" signed > /dev/null 2>&1 +diff --git a/bin/tests/system/masterformat/ns1/huge.db.in b/bin/tests/system/masterformat/ns1/empty.db.in +similarity index 100% +rename from bin/tests/system/masterformat/ns1/huge.db.in +rename to bin/tests/system/masterformat/ns1/empty.db.in +diff --git a/bin/tests/system/masterformat/ns1/large.db.in b/bin/tests/system/masterformat/ns1/large.db.in +deleted file mode 100644 +index b30b456f52..0000000000 +--- a/bin/tests/system/masterformat/ns1/large.db.in ++++ /dev/null +@@ -1,20 +0,0 @@ +-; Copyright (C) Internet Systems Consortium, Inc. ("ISC") +-; +-; This Source Code Form is subject to the terms of the Mozilla Public +-; License, v. 2.0. If a copy of the MPL was not distributed with this +-; file, You can obtain one at http://mozilla.org/MPL/2.0/. +-; +-; See the COPYRIGHT file distributed with this work for additional +-; information regarding copyright ownership. +- +-$TTL 1D +- +-@ IN SOA ns hostmaster ( +- 1 +- 3600 +- 1800 +- 1814400 +- 3 +- ) +- NS ns +-ns A 10.53.0.1 +diff --git a/bin/tests/system/masterformat/ns1/named.conf.in b/bin/tests/system/masterformat/ns1/named.conf.in +index 4c3614f671..f99acbf788 100644 +--- a/bin/tests/system/masterformat/ns1/named.conf.in ++++ b/bin/tests/system/masterformat/ns1/named.conf.in +@@ -21,6 +21,7 @@ options { + session-keyfile "session.key"; + servfail-ttl 0; + max-records-per-type 2050; ++ max-types-per-name 500; + }; + + key rndc_key { +@@ -69,23 +70,31 @@ zone "transfer4" { + }; + + +-zone "large" { ++zone "under-limit" { + type primary; +- file "large.db.raw"; ++ file "under-limit.db.raw"; + masterfile-format raw; + allow-transfer { any; }; + }; + +-zone "huge" { ++zone "on-limit" { + type primary; +- file "huge.db.raw"; ++ file "on-limit.db.raw"; + masterfile-format raw; + allow-transfer { any; }; + }; + +-zone "uber" { ++ ++zone "over-limit" { ++ type primary; ++ file "over-limit.db.raw"; ++ masterfile-format raw; ++ allow-transfer { any; }; ++}; ++ ++zone "255types" { + type primary; +- file "uber.db.raw"; ++ file "255types.db.raw"; + masterfile-format raw; + allow-transfer { any; }; + }; +diff --git a/bin/tests/system/masterformat/ns1/uber.db.in b/bin/tests/system/masterformat/ns1/uber.db.in +deleted file mode 100644 +index 5a818632a8..0000000000 +--- a/bin/tests/system/masterformat/ns1/uber.db.in ++++ /dev/null +@@ -1,22 +0,0 @@ +-; Copyright (C) Internet Systems Consortium, Inc. ("ISC") +-; +-; SPDX-License-Identifier: MPL-2.0 +-; +-; This Source Code Form is subject to the terms of the Mozilla Public +-; License, v. 2.0. If a copy of the MPL was not distributed with this +-; file, you can obtain one at https://mozilla.org/MPL/2.0/. +-; +-; See the COPYRIGHT file distributed with this work for additional +-; information regarding copyright ownership. +- +-$TTL 1D +- +-@ IN SOA ns hostmaster ( +- 1 +- 3600 +- 1800 +- 1814400 +- 3 +- ) +- NS ns +-ns A 10.53.0.1 +diff --git a/bin/tests/system/masterformat/ns2/named.conf.in b/bin/tests/system/masterformat/ns2/named.conf.in +index 0468ddd17a..4636c21c08 100644 +--- a/bin/tests/system/masterformat/ns2/named.conf.in ++++ b/bin/tests/system/masterformat/ns2/named.conf.in +@@ -20,6 +20,7 @@ options { + notify no; + servfail-ttl 0; + max-records-per-type 2000; ++ max-types-per-name 200; + }; + + zone "example" { +@@ -54,16 +55,23 @@ zone "transfer4" { + file "transfer.db.full"; + }; + +-zone "large" { ++zone "under-limit" { + type secondary; + primaries { 10.53.0.1; }; + masterfile-format raw; +- file "large.bk"; ++ file "under-limit.bk"; + }; + +-zone "huge" { ++zone "on-limit" { + type secondary; + primaries { 10.53.0.1; }; + masterfile-format raw; +- file "huge.bk"; ++ file "on-limit.bk"; ++}; ++ ++zone "255types" { ++ type secondary; ++ primaries { 10.53.0.1; }; ++ masterfile-format raw; ++ file "255types.bk"; + }; +diff --git a/bin/tests/system/masterformat/setup.sh b/bin/tests/system/masterformat/setup.sh +index 7af1ad978a..87d165e2f8 100755 +--- a/bin/tests/system/masterformat/setup.sh ++++ b/bin/tests/system/masterformat/setup.sh +@@ -20,25 +20,34 @@ copy_setports ns3/named.conf.in ns3/named.conf + + cp ns1/example.db ns2/ + cp ns2/formerly-text.db.in ns2/formerly-text.db +-cp ns1/large.db.in ns1/large.db ++cp ns1/empty.db.in ns1/under-limit.db ++ ++# counts are set with respect to these limits in named.conf: ++# max-records-per-type 2050; ++# max-types-per-name 500; + awk 'END { +- for (i = 0; i < 500; i++ ) { print "a TXT", i; } +- for (i = 0; i < 1000; i++ ) { print "b TXT", i; } +- for (i = 0; i < 2000; i++ ) { print "c TXT", i; } +-}' < /dev/null >> ns1/large.db +-cp ns1/huge.db.in ns1/huge.db ++ for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } ++ for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } ++}' >ns1/under-limit.db ++cp ns1/empty.db.in ns1/on-limit.db + awk 'END { +- for (i = 0; i < 500; i++ ) { print "a TXT", i; } +- for (i = 0; i < 1000; i++ ) { print "b TXT", i; } +- for (i = 0; i < 2000; i++ ) { print "c TXT", i; } +- for (i = 0; i < 2050; i++ ) { print "d TXT", i; } +-}' >ns1/huge.db +-cp ns1/uber.db.in ns1/uber.db ++ for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } ++ for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } ++ for (i = 0; i < 2050; i++ ) { print "2050-txt TXT", i; } ++}' >ns1/on-limit.db ++cp ns1/empty.db.in ns1/over-limit.db + awk 'END { +- for (i = 0; i < 500; i++ ) { print "a TXT", i; } +- for (i = 0; i < 1000; i++ ) { print "b TXT", i; } +- for (i = 0; i < 2000; i++ ) { print "c TXT", i; } +- for (i = 0; i < 2050; i++ ) { print "d TXT", i; } +- for (i = 0; i < 2100; i++ ) { print "e TXT", i; } +-}' >ns1/uber.db ++ for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } ++ for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } ++ for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } ++ for (i = 0; i < 2050; i++ ) { print "2050-txt TXT", i; } ++ for (i = 0; i < 2100; i++ ) { print "2100-txt TXT", i; } ++}' >ns1/over-limit.db ++cp ns1/empty.db.in ns1/255types.db ++for ntype in $(seq 65280 65534); do ++ echo "m TYPE${ntype} \# 0" ++done >>ns1/255types.db ++echo "m TXT bunny" >>ns1/255types.db + cd ns1 && $SHELL compile.sh +diff --git a/bin/tests/system/masterformat/tests.sh b/bin/tests/system/masterformat/tests.sh +index 83ab738faf..fe86c4d85a 100755 +--- a/bin/tests/system/masterformat/tests.sh ++++ b/bin/tests/system/masterformat/tests.sh +@@ -143,8 +143,7 @@ n=$((n+1)) + status=$((status+ret)) + + echo_i "waiting for transfers to complete" +-for i in 0 1 2 3 4 5 6 7 8 9 +-do ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + test -f ns2/transfer.db.raw -a -f ns2/transfer.db.txt && break + sleep 1 + done +@@ -172,8 +171,7 @@ n=$((n+1)) + status=$((status+ret)) + + echo_i "checking that secondary formerly in text format is now raw ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9 +-do ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + israw ns2/formerly-text.db > /dev/null 2>&1 || ret=1 + [ "$(rawversion ns2/formerly-text.db)" -eq 1 ] || ret=1 +@@ -184,14 +182,12 @@ n=$((n+1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status+ret)) + +-echo_i "checking that large rdatasets loaded ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9 +-do ++echo_i "checking that under-limit rdatasets loaded ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 +- for a in a b c +- do +- $DIG +tcp txt "${a}.large" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" +- grep "status: NOERROR" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 ++ for rrcount in 500-txt 1000-txt 2000-txt; do ++ $DIG +tcp txt "${rrcount}.under-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" ++ grep "status: NOERROR" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +@@ -200,12 +196,12 @@ n=$((n + 1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status + ret)) + +-echo_i "checking that large rdatasets transfered ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9; do ++echo_i "checking that under-limit rdatasets transfered ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 +- for a in a b c; do +- $DIG +tcp txt "${a}.large" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$a.test$n" +- grep "status: NOERROR" "dig.out.ns2.$a.test$n" >/dev/null || ret=1 ++ for rrcount in 500-txt 1000-txt 2000-txt; do ++ $DIG +tcp txt "${rrcount}.under-limit" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$rrcount.test$n" ++ grep "status: NOERROR" "dig.out.ns2.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +@@ -214,12 +210,12 @@ n=$((n + 1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status + ret)) + +-echo_i "checking that huge rdatasets loaded ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9; do ++echo_i "checking that on-limit rdatasets loaded ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 +- for a in a b c d; do +- $DIG +tcp txt "${a}.huge" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" +- grep "status: NOERROR" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 ++ for rrcount in 500-txt 1000-txt 2000-txt 2050-txt; do ++ $DIG +tcp txt "${rrcount}.on-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" ++ grep "status: NOERROR" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +@@ -228,12 +224,12 @@ n=$((n + 1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status + ret)) + +-echo_i "checking that huge rdatasets not transfered ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9; do ++echo_i "checking that on-limit rdatasets not transfered ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 +- for a in a b c d; do +- $DIG +tcp txt "${a}.huge" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$a.test$n" +- grep "status: SERVFAIL" "dig.out.ns2.$a.test$n" >/dev/null || ret=1 ++ for rrcount in 500-txt 1000-txt 2000-txt 2050-txt; do ++ $DIG +tcp txt "${rrcount}.on-limit" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$rrcount.test$n" ++ grep "status: SERVFAIL" "dig.out.ns2.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +@@ -242,12 +238,12 @@ n=$((n + 1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status + ret)) + +-echo_i "checking that uber rdatasets not loaded ($n)" +-for i in 0 1 2 3 4 5 6 7 8 9; do ++echo_i "checking that over-limit rdatasets not loaded ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 +- for a in a b c d e; do +- $DIG +tcp txt "${a}.uber" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$a.test$n" +- grep "status: SERVFAIL" "dig.out.ns1.$a.test$n" >/dev/null || ret=1 ++ for rrcount in 500-txt 1000-txt 2000-txt 2050-txt 2100-txt; do ++ $DIG +tcp txt "${rrcount}.over-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" ++ grep "status: SERVFAIL" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +@@ -256,6 +252,29 @@ n=$((n+1)) + [ $ret -eq 0 ] || echo_i "failed" + status=$((status+ret)) + ++echo_i "checking that 255 types are loaded ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do ++ ret=0 ++ $DIG +tcp TXT "m.255types" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.test$n" ++ grep "status: NOERROR" "dig.out.ns1.test$n" >/dev/null || ret=1 ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ ++echo_i "checking that 255 types types are not transfered ($n)" ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do ++ $DIG +tcp TXT "m.255types" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.test$n" ++ grep "status: SERVFAIL" "dig.out.ns2.test$n" >/dev/null || ret=1 ++ [ $ret -eq 0 ] && break ++ sleep 1 ++done ++n=$((n + 1)) ++[ $ret -eq 0 ] || echo_i "failed" ++status=$((status + ret)) ++ + echo_i "checking format transitions: text->raw->map->text ($n)" + ret=0 + $CHECKZONE -D -f text -F text -o baseline.txt example.nil ns1/example.db > /dev/null +@@ -320,7 +339,7 @@ $PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} masterformat ns3 + rm ns3/*.jnl + restart + #shellcheck disable=SC2034 +-for i in 0 1 2 3 4 5 6 7 8 9; do ++for _attempt in 0 1 2 3 4 5 6 7 8 9; do + lret=0 + dig_with_opts +comm @10.53.0.3 moretext.dynamic txt > "dig.out.dynamic2.ns3.test$n" + grep "more text" "dig.out.dynamic2.ns3.test$n" > /dev/null 2>&1 || lret=1 +diff --git a/bin/tests/system/reclimit/clean.sh b/bin/tests/system/reclimit/clean.sh +index 4db5894abd..181a6e639f 100644 +--- a/bin/tests/system/reclimit/clean.sh ++++ b/bin/tests/system/reclimit/clean.sh +@@ -9,12 +9,16 @@ + # See the COPYRIGHT file distributed with this work for additional + # information regarding copyright ownership. + +-rm -f dig.out* +-rm -f ans?/ans.run +-rm -f ans2/ans.limit +-rm -f ans4/ans.limit +-rm -f ns?/named.memstats +-rm -f ns?/named.run +-rm -f ns*/named.conf +-rm -f ns*/named.lock +-rm -f ns*/managed-keys.bind* ++rm -f ./dig.out* ++rm -f ./dsset-signed. ++rm -f ./ans?/ans.run ++rm -f ./ans2/ans.limit ++rm -f ./ans4/ans.limit ++rm -f ./ns?/named.memstats ++rm -f ./ns?/named.run ++rm -f ./ns*/named.conf ++rm -f ./ns*/named.lock ++rm -f ./ns*/managed-keys.bind* ++rm -f ./ns*/signed.db* ++rm -f ./ns*/*.db.signed ++rm -f ./ns*/Ksigned.*.key ./ns*/Ksigned.*.private +diff --git a/bin/tests/system/reclimit/ns1/big.db b/bin/tests/system/reclimit/ns1/big.db +index bddceb76e7..cefe8458f7 100644 +--- a/bin/tests/system/reclimit/ns1/big.db ++++ b/bin/tests/system/reclimit/ns1/big.db +@@ -9,2507 +9,2766 @@ + ; See the COPYRIGHT file distributed with this work for additional + ; information regarding copyright ownership. + +-big. 60 IN SOA ns.big. hostmaster.ns.big. 1 0 0 0 0 +-big. 60 IN NS ns.big. +-ns.big. 60 IN A 10.53.0.1 ++$TTL 60 + +-biganswer.big. 60 IN A 10.10.1.1 +-biganswer.big. 60 IN A 10.10.1.2 +-biganswer.big. 60 IN A 10.10.1.3 +-biganswer.big. 60 IN A 10.10.1.4 +-biganswer.big. 60 IN A 10.10.1.5 +-biganswer.big. 60 IN A 10.10.1.6 +-biganswer.big. 60 IN A 10.10.1.7 +-biganswer.big. 60 IN A 10.10.1.8 +-biganswer.big. 60 IN A 10.10.1.9 +-biganswer.big. 60 IN A 10.10.1.10 +-biganswer.big. 60 IN A 10.10.1.11 +-biganswer.big. 60 IN A 10.10.1.12 +-biganswer.big. 60 IN A 10.10.1.13 +-biganswer.big. 60 IN A 10.10.1.14 +-biganswer.big. 60 IN A 10.10.1.15 +-biganswer.big. 60 IN A 10.10.1.16 +-biganswer.big. 60 IN A 10.10.1.17 +-biganswer.big. 60 IN A 10.10.1.18 +-biganswer.big. 60 IN A 10.10.1.19 +-biganswer.big. 60 IN A 10.10.1.20 +-biganswer.big. 60 IN A 10.10.1.21 +-biganswer.big. 60 IN A 10.10.1.22 +-biganswer.big. 60 IN A 10.10.1.23 +-biganswer.big. 60 IN A 10.10.1.24 +-biganswer.big. 60 IN A 10.10.1.25 +-biganswer.big. 60 IN A 10.10.1.26 +-biganswer.big. 60 IN A 10.10.1.27 +-biganswer.big. 60 IN A 10.10.1.28 +-biganswer.big. 60 IN A 10.10.1.29 +-biganswer.big. 60 IN A 10.10.1.30 +-biganswer.big. 60 IN A 10.10.1.31 +-biganswer.big. 60 IN A 10.10.1.32 +-biganswer.big. 60 IN A 10.10.1.33 +-biganswer.big. 60 IN A 10.10.1.34 +-biganswer.big. 60 IN A 10.10.1.35 +-biganswer.big. 60 IN A 10.10.1.36 +-biganswer.big. 60 IN A 10.10.1.37 +-biganswer.big. 60 IN A 10.10.1.38 +-biganswer.big. 60 IN A 10.10.1.39 +-biganswer.big. 60 IN A 10.10.1.40 +-biganswer.big. 60 IN A 10.10.1.41 +-biganswer.big. 60 IN A 10.10.1.42 +-biganswer.big. 60 IN A 10.10.1.43 +-biganswer.big. 60 IN A 10.10.1.44 +-biganswer.big. 60 IN A 10.10.1.45 +-biganswer.big. 60 IN A 10.10.1.46 +-biganswer.big. 60 IN A 10.10.1.47 +-biganswer.big. 60 IN A 10.10.1.48 +-biganswer.big. 60 IN A 10.10.1.49 +-biganswer.big. 60 IN A 10.10.1.50 +-biganswer.big. 60 IN A 10.10.2.1 +-biganswer.big. 60 IN A 10.10.2.2 +-biganswer.big. 60 IN A 10.10.2.3 +-biganswer.big. 60 IN A 10.10.2.4 +-biganswer.big. 60 IN A 10.10.2.5 +-biganswer.big. 60 IN A 10.10.2.6 +-biganswer.big. 60 IN A 10.10.2.7 +-biganswer.big. 60 IN A 10.10.2.8 +-biganswer.big. 60 IN A 10.10.2.9 +-biganswer.big. 60 IN A 10.10.2.10 +-biganswer.big. 60 IN A 10.10.2.11 +-biganswer.big. 60 IN A 10.10.2.12 +-biganswer.big. 60 IN A 10.10.2.13 +-biganswer.big. 60 IN A 10.10.2.14 +-biganswer.big. 60 IN A 10.10.2.15 +-biganswer.big. 60 IN A 10.10.2.16 +-biganswer.big. 60 IN A 10.10.2.17 +-biganswer.big. 60 IN A 10.10.2.18 +-biganswer.big. 60 IN A 10.10.2.19 +-biganswer.big. 60 IN A 10.10.2.20 +-biganswer.big. 60 IN A 10.10.2.21 +-biganswer.big. 60 IN A 10.10.2.22 +-biganswer.big. 60 IN A 10.10.2.23 +-biganswer.big. 60 IN A 10.10.2.24 +-biganswer.big. 60 IN A 10.10.2.25 +-biganswer.big. 60 IN A 10.10.2.26 +-biganswer.big. 60 IN A 10.10.2.27 +-biganswer.big. 60 IN A 10.10.2.28 +-biganswer.big. 60 IN A 10.10.2.29 +-biganswer.big. 60 IN A 10.10.2.30 +-biganswer.big. 60 IN A 10.10.2.31 +-biganswer.big. 60 IN A 10.10.2.32 +-biganswer.big. 60 IN A 10.10.2.33 +-biganswer.big. 60 IN A 10.10.2.34 +-biganswer.big. 60 IN A 10.10.2.35 +-biganswer.big. 60 IN A 10.10.2.36 +-biganswer.big. 60 IN A 10.10.2.37 +-biganswer.big. 60 IN A 10.10.2.38 +-biganswer.big. 60 IN A 10.10.2.39 +-biganswer.big. 60 IN A 10.10.2.40 +-biganswer.big. 60 IN A 10.10.2.41 +-biganswer.big. 60 IN A 10.10.2.42 +-biganswer.big. 60 IN A 10.10.2.43 +-biganswer.big. 60 IN A 10.10.2.44 +-biganswer.big. 60 IN A 10.10.2.45 +-biganswer.big. 60 IN A 10.10.2.46 +-biganswer.big. 60 IN A 10.10.2.47 +-biganswer.big. 60 IN A 10.10.2.48 +-biganswer.big. 60 IN A 10.10.2.49 +-biganswer.big. 60 IN A 10.10.2.50 +-biganswer.big. 60 IN A 10.10.3.1 +-biganswer.big. 60 IN A 10.10.3.2 +-biganswer.big. 60 IN A 10.10.3.3 +-biganswer.big. 60 IN A 10.10.3.4 +-biganswer.big. 60 IN A 10.10.3.5 +-biganswer.big. 60 IN A 10.10.3.6 +-biganswer.big. 60 IN A 10.10.3.7 +-biganswer.big. 60 IN A 10.10.3.8 +-biganswer.big. 60 IN A 10.10.3.9 +-biganswer.big. 60 IN A 10.10.3.10 +-biganswer.big. 60 IN A 10.10.3.11 +-biganswer.big. 60 IN A 10.10.3.12 +-biganswer.big. 60 IN A 10.10.3.13 +-biganswer.big. 60 IN A 10.10.3.14 +-biganswer.big. 60 IN A 10.10.3.15 +-biganswer.big. 60 IN A 10.10.3.16 +-biganswer.big. 60 IN A 10.10.3.17 +-biganswer.big. 60 IN A 10.10.3.18 +-biganswer.big. 60 IN A 10.10.3.19 +-biganswer.big. 60 IN A 10.10.3.20 +-biganswer.big. 60 IN A 10.10.3.21 +-biganswer.big. 60 IN A 10.10.3.22 +-biganswer.big. 60 IN A 10.10.3.23 +-biganswer.big. 60 IN A 10.10.3.24 +-biganswer.big. 60 IN A 10.10.3.25 +-biganswer.big. 60 IN A 10.10.3.26 +-biganswer.big. 60 IN A 10.10.3.27 +-biganswer.big. 60 IN A 10.10.3.28 +-biganswer.big. 60 IN A 10.10.3.29 +-biganswer.big. 60 IN A 10.10.3.30 +-biganswer.big. 60 IN A 10.10.3.31 +-biganswer.big. 60 IN A 10.10.3.32 +-biganswer.big. 60 IN A 10.10.3.33 +-biganswer.big. 60 IN A 10.10.3.34 +-biganswer.big. 60 IN A 10.10.3.35 +-biganswer.big. 60 IN A 10.10.3.36 +-biganswer.big. 60 IN A 10.10.3.37 +-biganswer.big. 60 IN A 10.10.3.38 +-biganswer.big. 60 IN A 10.10.3.39 +-biganswer.big. 60 IN A 10.10.3.40 +-biganswer.big. 60 IN A 10.10.3.41 +-biganswer.big. 60 IN A 10.10.3.42 +-biganswer.big. 60 IN A 10.10.3.43 +-biganswer.big. 60 IN A 10.10.3.44 +-biganswer.big. 60 IN A 10.10.3.45 +-biganswer.big. 60 IN A 10.10.3.46 +-biganswer.big. 60 IN A 10.10.3.47 +-biganswer.big. 60 IN A 10.10.3.48 +-biganswer.big. 60 IN A 10.10.3.49 +-biganswer.big. 60 IN A 10.10.3.50 +-biganswer.big. 60 IN A 10.10.4.1 +-biganswer.big. 60 IN A 10.10.4.2 +-biganswer.big. 60 IN A 10.10.4.3 +-biganswer.big. 60 IN A 10.10.4.4 +-biganswer.big. 60 IN A 10.10.4.5 +-biganswer.big. 60 IN A 10.10.4.6 +-biganswer.big. 60 IN A 10.10.4.7 +-biganswer.big. 60 IN A 10.10.4.8 +-biganswer.big. 60 IN A 10.10.4.9 +-biganswer.big. 60 IN A 10.10.4.10 +-biganswer.big. 60 IN A 10.10.4.11 +-biganswer.big. 60 IN A 10.10.4.12 +-biganswer.big. 60 IN A 10.10.4.13 +-biganswer.big. 60 IN A 10.10.4.14 +-biganswer.big. 60 IN A 10.10.4.15 +-biganswer.big. 60 IN A 10.10.4.16 +-biganswer.big. 60 IN A 10.10.4.17 +-biganswer.big. 60 IN A 10.10.4.18 +-biganswer.big. 60 IN A 10.10.4.19 +-biganswer.big. 60 IN A 10.10.4.20 +-biganswer.big. 60 IN A 10.10.4.21 +-biganswer.big. 60 IN A 10.10.4.22 +-biganswer.big. 60 IN A 10.10.4.23 +-biganswer.big. 60 IN A 10.10.4.24 +-biganswer.big. 60 IN A 10.10.4.25 +-biganswer.big. 60 IN A 10.10.4.26 +-biganswer.big. 60 IN A 10.10.4.27 +-biganswer.big. 60 IN A 10.10.4.28 +-biganswer.big. 60 IN A 10.10.4.29 +-biganswer.big. 60 IN A 10.10.4.30 +-biganswer.big. 60 IN A 10.10.4.31 +-biganswer.big. 60 IN A 10.10.4.32 +-biganswer.big. 60 IN A 10.10.4.33 +-biganswer.big. 60 IN A 10.10.4.34 +-biganswer.big. 60 IN A 10.10.4.35 +-biganswer.big. 60 IN A 10.10.4.36 +-biganswer.big. 60 IN A 10.10.4.37 +-biganswer.big. 60 IN A 10.10.4.38 +-biganswer.big. 60 IN A 10.10.4.39 +-biganswer.big. 60 IN A 10.10.4.40 +-biganswer.big. 60 IN A 10.10.4.41 +-biganswer.big. 60 IN A 10.10.4.42 +-biganswer.big. 60 IN A 10.10.4.43 +-biganswer.big. 60 IN A 10.10.4.44 +-biganswer.big. 60 IN A 10.10.4.45 +-biganswer.big. 60 IN A 10.10.4.46 +-biganswer.big. 60 IN A 10.10.4.47 +-biganswer.big. 60 IN A 10.10.4.48 +-biganswer.big. 60 IN A 10.10.4.49 +-biganswer.big. 60 IN A 10.10.4.50 +-biganswer.big. 60 IN A 10.10.5.1 +-biganswer.big. 60 IN A 10.10.5.2 +-biganswer.big. 60 IN A 10.10.5.3 +-biganswer.big. 60 IN A 10.10.5.4 +-biganswer.big. 60 IN A 10.10.5.5 +-biganswer.big. 60 IN A 10.10.5.6 +-biganswer.big. 60 IN A 10.10.5.7 +-biganswer.big. 60 IN A 10.10.5.8 +-biganswer.big. 60 IN A 10.10.5.9 +-biganswer.big. 60 IN A 10.10.5.10 +-biganswer.big. 60 IN A 10.10.5.11 +-biganswer.big. 60 IN A 10.10.5.12 +-biganswer.big. 60 IN A 10.10.5.13 +-biganswer.big. 60 IN A 10.10.5.14 +-biganswer.big. 60 IN A 10.10.5.15 +-biganswer.big. 60 IN A 10.10.5.16 +-biganswer.big. 60 IN A 10.10.5.17 +-biganswer.big. 60 IN A 10.10.5.18 +-biganswer.big. 60 IN A 10.10.5.19 +-biganswer.big. 60 IN A 10.10.5.20 +-biganswer.big. 60 IN A 10.10.5.21 +-biganswer.big. 60 IN A 10.10.5.22 +-biganswer.big. 60 IN A 10.10.5.23 +-biganswer.big. 60 IN A 10.10.5.24 +-biganswer.big. 60 IN A 10.10.5.25 +-biganswer.big. 60 IN A 10.10.5.26 +-biganswer.big. 60 IN A 10.10.5.27 +-biganswer.big. 60 IN A 10.10.5.28 +-biganswer.big. 60 IN A 10.10.5.29 +-biganswer.big. 60 IN A 10.10.5.30 +-biganswer.big. 60 IN A 10.10.5.31 +-biganswer.big. 60 IN A 10.10.5.32 +-biganswer.big. 60 IN A 10.10.5.33 +-biganswer.big. 60 IN A 10.10.5.34 +-biganswer.big. 60 IN A 10.10.5.35 +-biganswer.big. 60 IN A 10.10.5.36 +-biganswer.big. 60 IN A 10.10.5.37 +-biganswer.big. 60 IN A 10.10.5.38 +-biganswer.big. 60 IN A 10.10.5.39 +-biganswer.big. 60 IN A 10.10.5.40 +-biganswer.big. 60 IN A 10.10.5.41 +-biganswer.big. 60 IN A 10.10.5.42 +-biganswer.big. 60 IN A 10.10.5.43 +-biganswer.big. 60 IN A 10.10.5.44 +-biganswer.big. 60 IN A 10.10.5.45 +-biganswer.big. 60 IN A 10.10.5.46 +-biganswer.big. 60 IN A 10.10.5.47 +-biganswer.big. 60 IN A 10.10.5.48 +-biganswer.big. 60 IN A 10.10.5.49 +-biganswer.big. 60 IN A 10.10.5.50 +-biganswer.big. 60 IN A 10.10.6.1 +-biganswer.big. 60 IN A 10.10.6.2 +-biganswer.big. 60 IN A 10.10.6.3 +-biganswer.big. 60 IN A 10.10.6.4 +-biganswer.big. 60 IN A 10.10.6.5 +-biganswer.big. 60 IN A 10.10.6.6 +-biganswer.big. 60 IN A 10.10.6.7 +-biganswer.big. 60 IN A 10.10.6.8 +-biganswer.big. 60 IN A 10.10.6.9 +-biganswer.big. 60 IN A 10.10.6.10 +-biganswer.big. 60 IN A 10.10.6.11 +-biganswer.big. 60 IN A 10.10.6.12 +-biganswer.big. 60 IN A 10.10.6.13 +-biganswer.big. 60 IN A 10.10.6.14 +-biganswer.big. 60 IN A 10.10.6.15 +-biganswer.big. 60 IN A 10.10.6.16 +-biganswer.big. 60 IN A 10.10.6.17 +-biganswer.big. 60 IN A 10.10.6.18 +-biganswer.big. 60 IN A 10.10.6.19 +-biganswer.big. 60 IN A 10.10.6.20 +-biganswer.big. 60 IN A 10.10.6.21 +-biganswer.big. 60 IN A 10.10.6.22 +-biganswer.big. 60 IN A 10.10.6.23 +-biganswer.big. 60 IN A 10.10.6.24 +-biganswer.big. 60 IN A 10.10.6.25 +-biganswer.big. 60 IN A 10.10.6.26 +-biganswer.big. 60 IN A 10.10.6.27 +-biganswer.big. 60 IN A 10.10.6.28 +-biganswer.big. 60 IN A 10.10.6.29 +-biganswer.big. 60 IN A 10.10.6.30 +-biganswer.big. 60 IN A 10.10.6.31 +-biganswer.big. 60 IN A 10.10.6.32 +-biganswer.big. 60 IN A 10.10.6.33 +-biganswer.big. 60 IN A 10.10.6.34 +-biganswer.big. 60 IN A 10.10.6.35 +-biganswer.big. 60 IN A 10.10.6.36 +-biganswer.big. 60 IN A 10.10.6.37 +-biganswer.big. 60 IN A 10.10.6.38 +-biganswer.big. 60 IN A 10.10.6.39 +-biganswer.big. 60 IN A 10.10.6.40 +-biganswer.big. 60 IN A 10.10.6.41 +-biganswer.big. 60 IN A 10.10.6.42 +-biganswer.big. 60 IN A 10.10.6.43 +-biganswer.big. 60 IN A 10.10.6.44 +-biganswer.big. 60 IN A 10.10.6.45 +-biganswer.big. 60 IN A 10.10.6.46 +-biganswer.big. 60 IN A 10.10.6.47 +-biganswer.big. 60 IN A 10.10.6.48 +-biganswer.big. 60 IN A 10.10.6.49 +-biganswer.big. 60 IN A 10.10.6.50 +-biganswer.big. 60 IN A 10.10.7.1 +-biganswer.big. 60 IN A 10.10.7.2 +-biganswer.big. 60 IN A 10.10.7.3 +-biganswer.big. 60 IN A 10.10.7.4 +-biganswer.big. 60 IN A 10.10.7.5 +-biganswer.big. 60 IN A 10.10.7.6 +-biganswer.big. 60 IN A 10.10.7.7 +-biganswer.big. 60 IN A 10.10.7.8 +-biganswer.big. 60 IN A 10.10.7.9 +-biganswer.big. 60 IN A 10.10.7.10 +-biganswer.big. 60 IN A 10.10.7.11 +-biganswer.big. 60 IN A 10.10.7.12 +-biganswer.big. 60 IN A 10.10.7.13 +-biganswer.big. 60 IN A 10.10.7.14 +-biganswer.big. 60 IN A 10.10.7.15 +-biganswer.big. 60 IN A 10.10.7.16 +-biganswer.big. 60 IN A 10.10.7.17 +-biganswer.big. 60 IN A 10.10.7.18 +-biganswer.big. 60 IN A 10.10.7.19 +-biganswer.big. 60 IN A 10.10.7.20 +-biganswer.big. 60 IN A 10.10.7.21 +-biganswer.big. 60 IN A 10.10.7.22 +-biganswer.big. 60 IN A 10.10.7.23 +-biganswer.big. 60 IN A 10.10.7.24 +-biganswer.big. 60 IN A 10.10.7.25 +-biganswer.big. 60 IN A 10.10.7.26 +-biganswer.big. 60 IN A 10.10.7.27 +-biganswer.big. 60 IN A 10.10.7.28 +-biganswer.big. 60 IN A 10.10.7.29 +-biganswer.big. 60 IN A 10.10.7.30 +-biganswer.big. 60 IN A 10.10.7.31 +-biganswer.big. 60 IN A 10.10.7.32 +-biganswer.big. 60 IN A 10.10.7.33 +-biganswer.big. 60 IN A 10.10.7.34 +-biganswer.big. 60 IN A 10.10.7.35 +-biganswer.big. 60 IN A 10.10.7.36 +-biganswer.big. 60 IN A 10.10.7.37 +-biganswer.big. 60 IN A 10.10.7.38 +-biganswer.big. 60 IN A 10.10.7.39 +-biganswer.big. 60 IN A 10.10.7.40 +-biganswer.big. 60 IN A 10.10.7.41 +-biganswer.big. 60 IN A 10.10.7.42 +-biganswer.big. 60 IN A 10.10.7.43 +-biganswer.big. 60 IN A 10.10.7.44 +-biganswer.big. 60 IN A 10.10.7.45 +-biganswer.big. 60 IN A 10.10.7.46 +-biganswer.big. 60 IN A 10.10.7.47 +-biganswer.big. 60 IN A 10.10.7.48 +-biganswer.big. 60 IN A 10.10.7.49 +-biganswer.big. 60 IN A 10.10.7.50 +-biganswer.big. 60 IN A 10.10.8.1 +-biganswer.big. 60 IN A 10.10.8.2 +-biganswer.big. 60 IN A 10.10.8.3 +-biganswer.big. 60 IN A 10.10.8.4 +-biganswer.big. 60 IN A 10.10.8.5 +-biganswer.big. 60 IN A 10.10.8.6 +-biganswer.big. 60 IN A 10.10.8.7 +-biganswer.big. 60 IN A 10.10.8.8 +-biganswer.big. 60 IN A 10.10.8.9 +-biganswer.big. 60 IN A 10.10.8.10 +-biganswer.big. 60 IN A 10.10.8.11 +-biganswer.big. 60 IN A 10.10.8.12 +-biganswer.big. 60 IN A 10.10.8.13 +-biganswer.big. 60 IN A 10.10.8.14 +-biganswer.big. 60 IN A 10.10.8.15 +-biganswer.big. 60 IN A 10.10.8.16 +-biganswer.big. 60 IN A 10.10.8.17 +-biganswer.big. 60 IN A 10.10.8.18 +-biganswer.big. 60 IN A 10.10.8.19 +-biganswer.big. 60 IN A 10.10.8.20 +-biganswer.big. 60 IN A 10.10.8.21 +-biganswer.big. 60 IN A 10.10.8.22 +-biganswer.big. 60 IN A 10.10.8.23 +-biganswer.big. 60 IN A 10.10.8.24 +-biganswer.big. 60 IN A 10.10.8.25 +-biganswer.big. 60 IN A 10.10.8.26 +-biganswer.big. 60 IN A 10.10.8.27 +-biganswer.big. 60 IN A 10.10.8.28 +-biganswer.big. 60 IN A 10.10.8.29 +-biganswer.big. 60 IN A 10.10.8.30 +-biganswer.big. 60 IN A 10.10.8.31 +-biganswer.big. 60 IN A 10.10.8.32 +-biganswer.big. 60 IN A 10.10.8.33 +-biganswer.big. 60 IN A 10.10.8.34 +-biganswer.big. 60 IN A 10.10.8.35 +-biganswer.big. 60 IN A 10.10.8.36 +-biganswer.big. 60 IN A 10.10.8.37 +-biganswer.big. 60 IN A 10.10.8.38 +-biganswer.big. 60 IN A 10.10.8.39 +-biganswer.big. 60 IN A 10.10.8.40 +-biganswer.big. 60 IN A 10.10.8.41 +-biganswer.big. 60 IN A 10.10.8.42 +-biganswer.big. 60 IN A 10.10.8.43 +-biganswer.big. 60 IN A 10.10.8.44 +-biganswer.big. 60 IN A 10.10.8.45 +-biganswer.big. 60 IN A 10.10.8.46 +-biganswer.big. 60 IN A 10.10.8.47 +-biganswer.big. 60 IN A 10.10.8.48 +-biganswer.big. 60 IN A 10.10.8.49 +-biganswer.big. 60 IN A 10.10.8.50 +-biganswer.big. 60 IN A 10.10.9.1 +-biganswer.big. 60 IN A 10.10.9.2 +-biganswer.big. 60 IN A 10.10.9.3 +-biganswer.big. 60 IN A 10.10.9.4 +-biganswer.big. 60 IN A 10.10.9.5 +-biganswer.big. 60 IN A 10.10.9.6 +-biganswer.big. 60 IN A 10.10.9.7 +-biganswer.big. 60 IN A 10.10.9.8 +-biganswer.big. 60 IN A 10.10.9.9 +-biganswer.big. 60 IN A 10.10.9.10 +-biganswer.big. 60 IN A 10.10.9.11 +-biganswer.big. 60 IN A 10.10.9.12 +-biganswer.big. 60 IN A 10.10.9.13 +-biganswer.big. 60 IN A 10.10.9.14 +-biganswer.big. 60 IN A 10.10.9.15 +-biganswer.big. 60 IN A 10.10.9.16 +-biganswer.big. 60 IN A 10.10.9.17 +-biganswer.big. 60 IN A 10.10.9.18 +-biganswer.big. 60 IN A 10.10.9.19 +-biganswer.big. 60 IN A 10.10.9.20 +-biganswer.big. 60 IN A 10.10.9.21 +-biganswer.big. 60 IN A 10.10.9.22 +-biganswer.big. 60 IN A 10.10.9.23 +-biganswer.big. 60 IN A 10.10.9.24 +-biganswer.big. 60 IN A 10.10.9.25 +-biganswer.big. 60 IN A 10.10.9.26 +-biganswer.big. 60 IN A 10.10.9.27 +-biganswer.big. 60 IN A 10.10.9.28 +-biganswer.big. 60 IN A 10.10.9.29 +-biganswer.big. 60 IN A 10.10.9.30 +-biganswer.big. 60 IN A 10.10.9.31 +-biganswer.big. 60 IN A 10.10.9.32 +-biganswer.big. 60 IN A 10.10.9.33 +-biganswer.big. 60 IN A 10.10.9.34 +-biganswer.big. 60 IN A 10.10.9.35 +-biganswer.big. 60 IN A 10.10.9.36 +-biganswer.big. 60 IN A 10.10.9.37 +-biganswer.big. 60 IN A 10.10.9.38 +-biganswer.big. 60 IN A 10.10.9.39 +-biganswer.big. 60 IN A 10.10.9.40 +-biganswer.big. 60 IN A 10.10.9.41 +-biganswer.big. 60 IN A 10.10.9.42 +-biganswer.big. 60 IN A 10.10.9.43 +-biganswer.big. 60 IN A 10.10.9.44 +-biganswer.big. 60 IN A 10.10.9.45 +-biganswer.big. 60 IN A 10.10.9.46 +-biganswer.big. 60 IN A 10.10.9.47 +-biganswer.big. 60 IN A 10.10.9.48 +-biganswer.big. 60 IN A 10.10.9.49 +-biganswer.big. 60 IN A 10.10.9.50 +-biganswer.big. 60 IN A 10.10.10.1 +-biganswer.big. 60 IN A 10.10.10.2 +-biganswer.big. 60 IN A 10.10.10.3 +-biganswer.big. 60 IN A 10.10.10.4 +-biganswer.big. 60 IN A 10.10.10.5 +-biganswer.big. 60 IN A 10.10.10.6 +-biganswer.big. 60 IN A 10.10.10.7 +-biganswer.big. 60 IN A 10.10.10.8 +-biganswer.big. 60 IN A 10.10.10.9 +-biganswer.big. 60 IN A 10.10.10.10 +-biganswer.big. 60 IN A 10.10.10.11 +-biganswer.big. 60 IN A 10.10.10.12 +-biganswer.big. 60 IN A 10.10.10.13 +-biganswer.big. 60 IN A 10.10.10.14 +-biganswer.big. 60 IN A 10.10.10.15 +-biganswer.big. 60 IN A 10.10.10.16 +-biganswer.big. 60 IN A 10.10.10.17 +-biganswer.big. 60 IN A 10.10.10.18 +-biganswer.big. 60 IN A 10.10.10.19 +-biganswer.big. 60 IN A 10.10.10.20 +-biganswer.big. 60 IN A 10.10.10.21 +-biganswer.big. 60 IN A 10.10.10.22 +-biganswer.big. 60 IN A 10.10.10.23 +-biganswer.big. 60 IN A 10.10.10.24 +-biganswer.big. 60 IN A 10.10.10.25 +-biganswer.big. 60 IN A 10.10.10.26 +-biganswer.big. 60 IN A 10.10.10.27 +-biganswer.big. 60 IN A 10.10.10.28 +-biganswer.big. 60 IN A 10.10.10.29 +-biganswer.big. 60 IN A 10.10.10.30 +-biganswer.big. 60 IN A 10.10.10.31 +-biganswer.big. 60 IN A 10.10.10.32 +-biganswer.big. 60 IN A 10.10.10.33 +-biganswer.big. 60 IN A 10.10.10.34 +-biganswer.big. 60 IN A 10.10.10.35 +-biganswer.big. 60 IN A 10.10.10.36 +-biganswer.big. 60 IN A 10.10.10.37 +-biganswer.big. 60 IN A 10.10.10.38 +-biganswer.big. 60 IN A 10.10.10.39 +-biganswer.big. 60 IN A 10.10.10.40 +-biganswer.big. 60 IN A 10.10.10.41 +-biganswer.big. 60 IN A 10.10.10.42 +-biganswer.big. 60 IN A 10.10.10.43 +-biganswer.big. 60 IN A 10.10.10.44 +-biganswer.big. 60 IN A 10.10.10.45 +-biganswer.big. 60 IN A 10.10.10.46 +-biganswer.big. 60 IN A 10.10.10.47 +-biganswer.big. 60 IN A 10.10.10.48 +-biganswer.big. 60 IN A 10.10.10.49 +-biganswer.big. 60 IN A 10.10.10.50 +-biganswer.big. 60 IN A 10.10.11.1 +-biganswer.big. 60 IN A 10.10.11.2 +-biganswer.big. 60 IN A 10.10.11.3 +-biganswer.big. 60 IN A 10.10.11.4 +-biganswer.big. 60 IN A 10.10.11.5 +-biganswer.big. 60 IN A 10.10.11.6 +-biganswer.big. 60 IN A 10.10.11.7 +-biganswer.big. 60 IN A 10.10.11.8 +-biganswer.big. 60 IN A 10.10.11.9 +-biganswer.big. 60 IN A 10.10.11.10 +-biganswer.big. 60 IN A 10.10.11.11 +-biganswer.big. 60 IN A 10.10.11.12 +-biganswer.big. 60 IN A 10.10.11.13 +-biganswer.big. 60 IN A 10.10.11.14 +-biganswer.big. 60 IN A 10.10.11.15 +-biganswer.big. 60 IN A 10.10.11.16 +-biganswer.big. 60 IN A 10.10.11.17 +-biganswer.big. 60 IN A 10.10.11.18 +-biganswer.big. 60 IN A 10.10.11.19 +-biganswer.big. 60 IN A 10.10.11.20 +-biganswer.big. 60 IN A 10.10.11.21 +-biganswer.big. 60 IN A 10.10.11.22 +-biganswer.big. 60 IN A 10.10.11.23 +-biganswer.big. 60 IN A 10.10.11.24 +-biganswer.big. 60 IN A 10.10.11.25 +-biganswer.big. 60 IN A 10.10.11.26 +-biganswer.big. 60 IN A 10.10.11.27 +-biganswer.big. 60 IN A 10.10.11.28 +-biganswer.big. 60 IN A 10.10.11.29 +-biganswer.big. 60 IN A 10.10.11.30 +-biganswer.big. 60 IN A 10.10.11.31 +-biganswer.big. 60 IN A 10.10.11.32 +-biganswer.big. 60 IN A 10.10.11.33 +-biganswer.big. 60 IN A 10.10.11.34 +-biganswer.big. 60 IN A 10.10.11.35 +-biganswer.big. 60 IN A 10.10.11.36 +-biganswer.big. 60 IN A 10.10.11.37 +-biganswer.big. 60 IN A 10.10.11.38 +-biganswer.big. 60 IN A 10.10.11.39 +-biganswer.big. 60 IN A 10.10.11.40 +-biganswer.big. 60 IN A 10.10.11.41 +-biganswer.big. 60 IN A 10.10.11.42 +-biganswer.big. 60 IN A 10.10.11.43 +-biganswer.big. 60 IN A 10.10.11.44 +-biganswer.big. 60 IN A 10.10.11.45 +-biganswer.big. 60 IN A 10.10.11.46 +-biganswer.big. 60 IN A 10.10.11.47 +-biganswer.big. 60 IN A 10.10.11.48 +-biganswer.big. 60 IN A 10.10.11.49 +-biganswer.big. 60 IN A 10.10.11.50 +-biganswer.big. 60 IN A 10.10.12.1 +-biganswer.big. 60 IN A 10.10.12.2 +-biganswer.big. 60 IN A 10.10.12.3 +-biganswer.big. 60 IN A 10.10.12.4 +-biganswer.big. 60 IN A 10.10.12.5 +-biganswer.big. 60 IN A 10.10.12.6 +-biganswer.big. 60 IN A 10.10.12.7 +-biganswer.big. 60 IN A 10.10.12.8 +-biganswer.big. 60 IN A 10.10.12.9 +-biganswer.big. 60 IN A 10.10.12.10 +-biganswer.big. 60 IN A 10.10.12.11 +-biganswer.big. 60 IN A 10.10.12.12 +-biganswer.big. 60 IN A 10.10.12.13 +-biganswer.big. 60 IN A 10.10.12.14 +-biganswer.big. 60 IN A 10.10.12.15 +-biganswer.big. 60 IN A 10.10.12.16 +-biganswer.big. 60 IN A 10.10.12.17 +-biganswer.big. 60 IN A 10.10.12.18 +-biganswer.big. 60 IN A 10.10.12.19 +-biganswer.big. 60 IN A 10.10.12.20 +-biganswer.big. 60 IN A 10.10.12.21 +-biganswer.big. 60 IN A 10.10.12.22 +-biganswer.big. 60 IN A 10.10.12.23 +-biganswer.big. 60 IN A 10.10.12.24 +-biganswer.big. 60 IN A 10.10.12.25 +-biganswer.big. 60 IN A 10.10.12.26 +-biganswer.big. 60 IN A 10.10.12.27 +-biganswer.big. 60 IN A 10.10.12.28 +-biganswer.big. 60 IN A 10.10.12.29 +-biganswer.big. 60 IN A 10.10.12.30 +-biganswer.big. 60 IN A 10.10.12.31 +-biganswer.big. 60 IN A 10.10.12.32 +-biganswer.big. 60 IN A 10.10.12.33 +-biganswer.big. 60 IN A 10.10.12.34 +-biganswer.big. 60 IN A 10.10.12.35 +-biganswer.big. 60 IN A 10.10.12.36 +-biganswer.big. 60 IN A 10.10.12.37 +-biganswer.big. 60 IN A 10.10.12.38 +-biganswer.big. 60 IN A 10.10.12.39 +-biganswer.big. 60 IN A 10.10.12.40 +-biganswer.big. 60 IN A 10.10.12.41 +-biganswer.big. 60 IN A 10.10.12.42 +-biganswer.big. 60 IN A 10.10.12.43 +-biganswer.big. 60 IN A 10.10.12.44 +-biganswer.big. 60 IN A 10.10.12.45 +-biganswer.big. 60 IN A 10.10.12.46 +-biganswer.big. 60 IN A 10.10.12.47 +-biganswer.big. 60 IN A 10.10.12.48 +-biganswer.big. 60 IN A 10.10.12.49 +-biganswer.big. 60 IN A 10.10.12.50 +-biganswer.big. 60 IN A 10.10.13.1 +-biganswer.big. 60 IN A 10.10.13.2 +-biganswer.big. 60 IN A 10.10.13.3 +-biganswer.big. 60 IN A 10.10.13.4 +-biganswer.big. 60 IN A 10.10.13.5 +-biganswer.big. 60 IN A 10.10.13.6 +-biganswer.big. 60 IN A 10.10.13.7 +-biganswer.big. 60 IN A 10.10.13.8 +-biganswer.big. 60 IN A 10.10.13.9 +-biganswer.big. 60 IN A 10.10.13.10 +-biganswer.big. 60 IN A 10.10.13.11 +-biganswer.big. 60 IN A 10.10.13.12 +-biganswer.big. 60 IN A 10.10.13.13 +-biganswer.big. 60 IN A 10.10.13.14 +-biganswer.big. 60 IN A 10.10.13.15 +-biganswer.big. 60 IN A 10.10.13.16 +-biganswer.big. 60 IN A 10.10.13.17 +-biganswer.big. 60 IN A 10.10.13.18 +-biganswer.big. 60 IN A 10.10.13.19 +-biganswer.big. 60 IN A 10.10.13.20 +-biganswer.big. 60 IN A 10.10.13.21 +-biganswer.big. 60 IN A 10.10.13.22 +-biganswer.big. 60 IN A 10.10.13.23 +-biganswer.big. 60 IN A 10.10.13.24 +-biganswer.big. 60 IN A 10.10.13.25 +-biganswer.big. 60 IN A 10.10.13.26 +-biganswer.big. 60 IN A 10.10.13.27 +-biganswer.big. 60 IN A 10.10.13.28 +-biganswer.big. 60 IN A 10.10.13.29 +-biganswer.big. 60 IN A 10.10.13.30 +-biganswer.big. 60 IN A 10.10.13.31 +-biganswer.big. 60 IN A 10.10.13.32 +-biganswer.big. 60 IN A 10.10.13.33 +-biganswer.big. 60 IN A 10.10.13.34 +-biganswer.big. 60 IN A 10.10.13.35 +-biganswer.big. 60 IN A 10.10.13.36 +-biganswer.big. 60 IN A 10.10.13.37 +-biganswer.big. 60 IN A 10.10.13.38 +-biganswer.big. 60 IN A 10.10.13.39 +-biganswer.big. 60 IN A 10.10.13.40 +-biganswer.big. 60 IN A 10.10.13.41 +-biganswer.big. 60 IN A 10.10.13.42 +-biganswer.big. 60 IN A 10.10.13.43 +-biganswer.big. 60 IN A 10.10.13.44 +-biganswer.big. 60 IN A 10.10.13.45 +-biganswer.big. 60 IN A 10.10.13.46 +-biganswer.big. 60 IN A 10.10.13.47 +-biganswer.big. 60 IN A 10.10.13.48 +-biganswer.big. 60 IN A 10.10.13.49 +-biganswer.big. 60 IN A 10.10.13.50 +-biganswer.big. 60 IN A 10.10.14.1 +-biganswer.big. 60 IN A 10.10.14.2 +-biganswer.big. 60 IN A 10.10.14.3 +-biganswer.big. 60 IN A 10.10.14.4 +-biganswer.big. 60 IN A 10.10.14.5 +-biganswer.big. 60 IN A 10.10.14.6 +-biganswer.big. 60 IN A 10.10.14.7 +-biganswer.big. 60 IN A 10.10.14.8 +-biganswer.big. 60 IN A 10.10.14.9 +-biganswer.big. 60 IN A 10.10.14.10 +-biganswer.big. 60 IN A 10.10.14.11 +-biganswer.big. 60 IN A 10.10.14.12 +-biganswer.big. 60 IN A 10.10.14.13 +-biganswer.big. 60 IN A 10.10.14.14 +-biganswer.big. 60 IN A 10.10.14.15 +-biganswer.big. 60 IN A 10.10.14.16 +-biganswer.big. 60 IN A 10.10.14.17 +-biganswer.big. 60 IN A 10.10.14.18 +-biganswer.big. 60 IN A 10.10.14.19 +-biganswer.big. 60 IN A 10.10.14.20 +-biganswer.big. 60 IN A 10.10.14.21 +-biganswer.big. 60 IN A 10.10.14.22 +-biganswer.big. 60 IN A 10.10.14.23 +-biganswer.big. 60 IN A 10.10.14.24 +-biganswer.big. 60 IN A 10.10.14.25 +-biganswer.big. 60 IN A 10.10.14.26 +-biganswer.big. 60 IN A 10.10.14.27 +-biganswer.big. 60 IN A 10.10.14.28 +-biganswer.big. 60 IN A 10.10.14.29 +-biganswer.big. 60 IN A 10.10.14.30 +-biganswer.big. 60 IN A 10.10.14.31 +-biganswer.big. 60 IN A 10.10.14.32 +-biganswer.big. 60 IN A 10.10.14.33 +-biganswer.big. 60 IN A 10.10.14.34 +-biganswer.big. 60 IN A 10.10.14.35 +-biganswer.big. 60 IN A 10.10.14.36 +-biganswer.big. 60 IN A 10.10.14.37 +-biganswer.big. 60 IN A 10.10.14.38 +-biganswer.big. 60 IN A 10.10.14.39 +-biganswer.big. 60 IN A 10.10.14.40 +-biganswer.big. 60 IN A 10.10.14.41 +-biganswer.big. 60 IN A 10.10.14.42 +-biganswer.big. 60 IN A 10.10.14.43 +-biganswer.big. 60 IN A 10.10.14.44 +-biganswer.big. 60 IN A 10.10.14.45 +-biganswer.big. 60 IN A 10.10.14.46 +-biganswer.big. 60 IN A 10.10.14.47 +-biganswer.big. 60 IN A 10.10.14.48 +-biganswer.big. 60 IN A 10.10.14.49 +-biganswer.big. 60 IN A 10.10.14.50 +-biganswer.big. 60 IN A 10.10.15.1 +-biganswer.big. 60 IN A 10.10.15.2 +-biganswer.big. 60 IN A 10.10.15.3 +-biganswer.big. 60 IN A 10.10.15.4 +-biganswer.big. 60 IN A 10.10.15.5 +-biganswer.big. 60 IN A 10.10.15.6 +-biganswer.big. 60 IN A 10.10.15.7 +-biganswer.big. 60 IN A 10.10.15.8 +-biganswer.big. 60 IN A 10.10.15.9 +-biganswer.big. 60 IN A 10.10.15.10 +-biganswer.big. 60 IN A 10.10.15.11 +-biganswer.big. 60 IN A 10.10.15.12 +-biganswer.big. 60 IN A 10.10.15.13 +-biganswer.big. 60 IN A 10.10.15.14 +-biganswer.big. 60 IN A 10.10.15.15 +-biganswer.big. 60 IN A 10.10.15.16 +-biganswer.big. 60 IN A 10.10.15.17 +-biganswer.big. 60 IN A 10.10.15.18 +-biganswer.big. 60 IN A 10.10.15.19 +-biganswer.big. 60 IN A 10.10.15.20 +-biganswer.big. 60 IN A 10.10.15.21 +-biganswer.big. 60 IN A 10.10.15.22 +-biganswer.big. 60 IN A 10.10.15.23 +-biganswer.big. 60 IN A 10.10.15.24 +-biganswer.big. 60 IN A 10.10.15.25 +-biganswer.big. 60 IN A 10.10.15.26 +-biganswer.big. 60 IN A 10.10.15.27 +-biganswer.big. 60 IN A 10.10.15.28 +-biganswer.big. 60 IN A 10.10.15.29 +-biganswer.big. 60 IN A 10.10.15.30 +-biganswer.big. 60 IN A 10.10.15.31 +-biganswer.big. 60 IN A 10.10.15.32 +-biganswer.big. 60 IN A 10.10.15.33 +-biganswer.big. 60 IN A 10.10.15.34 +-biganswer.big. 60 IN A 10.10.15.35 +-biganswer.big. 60 IN A 10.10.15.36 +-biganswer.big. 60 IN A 10.10.15.37 +-biganswer.big. 60 IN A 10.10.15.38 +-biganswer.big. 60 IN A 10.10.15.39 +-biganswer.big. 60 IN A 10.10.15.40 +-biganswer.big. 60 IN A 10.10.15.41 +-biganswer.big. 60 IN A 10.10.15.42 +-biganswer.big. 60 IN A 10.10.15.43 +-biganswer.big. 60 IN A 10.10.15.44 +-biganswer.big. 60 IN A 10.10.15.45 +-biganswer.big. 60 IN A 10.10.15.46 +-biganswer.big. 60 IN A 10.10.15.47 +-biganswer.big. 60 IN A 10.10.15.48 +-biganswer.big. 60 IN A 10.10.15.49 +-biganswer.big. 60 IN A 10.10.15.50 +-biganswer.big. 60 IN A 10.10.16.1 +-biganswer.big. 60 IN A 10.10.16.2 +-biganswer.big. 60 IN A 10.10.16.3 +-biganswer.big. 60 IN A 10.10.16.4 +-biganswer.big. 60 IN A 10.10.16.5 +-biganswer.big. 60 IN A 10.10.16.6 +-biganswer.big. 60 IN A 10.10.16.7 +-biganswer.big. 60 IN A 10.10.16.8 +-biganswer.big. 60 IN A 10.10.16.9 +-biganswer.big. 60 IN A 10.10.16.10 +-biganswer.big. 60 IN A 10.10.16.11 +-biganswer.big. 60 IN A 10.10.16.12 +-biganswer.big. 60 IN A 10.10.16.13 +-biganswer.big. 60 IN A 10.10.16.14 +-biganswer.big. 60 IN A 10.10.16.15 +-biganswer.big. 60 IN A 10.10.16.16 +-biganswer.big. 60 IN A 10.10.16.17 +-biganswer.big. 60 IN A 10.10.16.18 +-biganswer.big. 60 IN A 10.10.16.19 +-biganswer.big. 60 IN A 10.10.16.20 +-biganswer.big. 60 IN A 10.10.16.21 +-biganswer.big. 60 IN A 10.10.16.22 +-biganswer.big. 60 IN A 10.10.16.23 +-biganswer.big. 60 IN A 10.10.16.24 +-biganswer.big. 60 IN A 10.10.16.25 +-biganswer.big. 60 IN A 10.10.16.26 +-biganswer.big. 60 IN A 10.10.16.27 +-biganswer.big. 60 IN A 10.10.16.28 +-biganswer.big. 60 IN A 10.10.16.29 +-biganswer.big. 60 IN A 10.10.16.30 +-biganswer.big. 60 IN A 10.10.16.31 +-biganswer.big. 60 IN A 10.10.16.32 +-biganswer.big. 60 IN A 10.10.16.33 +-biganswer.big. 60 IN A 10.10.16.34 +-biganswer.big. 60 IN A 10.10.16.35 +-biganswer.big. 60 IN A 10.10.16.36 +-biganswer.big. 60 IN A 10.10.16.37 +-biganswer.big. 60 IN A 10.10.16.38 +-biganswer.big. 60 IN A 10.10.16.39 +-biganswer.big. 60 IN A 10.10.16.40 +-biganswer.big. 60 IN A 10.10.16.41 +-biganswer.big. 60 IN A 10.10.16.42 +-biganswer.big. 60 IN A 10.10.16.43 +-biganswer.big. 60 IN A 10.10.16.44 +-biganswer.big. 60 IN A 10.10.16.45 +-biganswer.big. 60 IN A 10.10.16.46 +-biganswer.big. 60 IN A 10.10.16.47 +-biganswer.big. 60 IN A 10.10.16.48 +-biganswer.big. 60 IN A 10.10.16.49 +-biganswer.big. 60 IN A 10.10.16.50 +-biganswer.big. 60 IN A 10.10.17.1 +-biganswer.big. 60 IN A 10.10.17.2 +-biganswer.big. 60 IN A 10.10.17.3 +-biganswer.big. 60 IN A 10.10.17.4 +-biganswer.big. 60 IN A 10.10.17.5 +-biganswer.big. 60 IN A 10.10.17.6 +-biganswer.big. 60 IN A 10.10.17.7 +-biganswer.big. 60 IN A 10.10.17.8 +-biganswer.big. 60 IN A 10.10.17.9 +-biganswer.big. 60 IN A 10.10.17.10 +-biganswer.big. 60 IN A 10.10.17.11 +-biganswer.big. 60 IN A 10.10.17.12 +-biganswer.big. 60 IN A 10.10.17.13 +-biganswer.big. 60 IN A 10.10.17.14 +-biganswer.big. 60 IN A 10.10.17.15 +-biganswer.big. 60 IN A 10.10.17.16 +-biganswer.big. 60 IN A 10.10.17.17 +-biganswer.big. 60 IN A 10.10.17.18 +-biganswer.big. 60 IN A 10.10.17.19 +-biganswer.big. 60 IN A 10.10.17.20 +-biganswer.big. 60 IN A 10.10.17.21 +-biganswer.big. 60 IN A 10.10.17.22 +-biganswer.big. 60 IN A 10.10.17.23 +-biganswer.big. 60 IN A 10.10.17.24 +-biganswer.big. 60 IN A 10.10.17.25 +-biganswer.big. 60 IN A 10.10.17.26 +-biganswer.big. 60 IN A 10.10.17.27 +-biganswer.big. 60 IN A 10.10.17.28 +-biganswer.big. 60 IN A 10.10.17.29 +-biganswer.big. 60 IN A 10.10.17.30 +-biganswer.big. 60 IN A 10.10.17.31 +-biganswer.big. 60 IN A 10.10.17.32 +-biganswer.big. 60 IN A 10.10.17.33 +-biganswer.big. 60 IN A 10.10.17.34 +-biganswer.big. 60 IN A 10.10.17.35 +-biganswer.big. 60 IN A 10.10.17.36 +-biganswer.big. 60 IN A 10.10.17.37 +-biganswer.big. 60 IN A 10.10.17.38 +-biganswer.big. 60 IN A 10.10.17.39 +-biganswer.big. 60 IN A 10.10.17.40 +-biganswer.big. 60 IN A 10.10.17.41 +-biganswer.big. 60 IN A 10.10.17.42 +-biganswer.big. 60 IN A 10.10.17.43 +-biganswer.big. 60 IN A 10.10.17.44 +-biganswer.big. 60 IN A 10.10.17.45 +-biganswer.big. 60 IN A 10.10.17.46 +-biganswer.big. 60 IN A 10.10.17.47 +-biganswer.big. 60 IN A 10.10.17.48 +-biganswer.big. 60 IN A 10.10.17.49 +-biganswer.big. 60 IN A 10.10.17.50 +-biganswer.big. 60 IN A 10.10.18.1 +-biganswer.big. 60 IN A 10.10.18.2 +-biganswer.big. 60 IN A 10.10.18.3 +-biganswer.big. 60 IN A 10.10.18.4 +-biganswer.big. 60 IN A 10.10.18.5 +-biganswer.big. 60 IN A 10.10.18.6 +-biganswer.big. 60 IN A 10.10.18.7 +-biganswer.big. 60 IN A 10.10.18.8 +-biganswer.big. 60 IN A 10.10.18.9 +-biganswer.big. 60 IN A 10.10.18.10 +-biganswer.big. 60 IN A 10.10.18.11 +-biganswer.big. 60 IN A 10.10.18.12 +-biganswer.big. 60 IN A 10.10.18.13 +-biganswer.big. 60 IN A 10.10.18.14 +-biganswer.big. 60 IN A 10.10.18.15 +-biganswer.big. 60 IN A 10.10.18.16 +-biganswer.big. 60 IN A 10.10.18.17 +-biganswer.big. 60 IN A 10.10.18.18 +-biganswer.big. 60 IN A 10.10.18.19 +-biganswer.big. 60 IN A 10.10.18.20 +-biganswer.big. 60 IN A 10.10.18.21 +-biganswer.big. 60 IN A 10.10.18.22 +-biganswer.big. 60 IN A 10.10.18.23 +-biganswer.big. 60 IN A 10.10.18.24 +-biganswer.big. 60 IN A 10.10.18.25 +-biganswer.big. 60 IN A 10.10.18.26 +-biganswer.big. 60 IN A 10.10.18.27 +-biganswer.big. 60 IN A 10.10.18.28 +-biganswer.big. 60 IN A 10.10.18.29 +-biganswer.big. 60 IN A 10.10.18.30 +-biganswer.big. 60 IN A 10.10.18.31 +-biganswer.big. 60 IN A 10.10.18.32 +-biganswer.big. 60 IN A 10.10.18.33 +-biganswer.big. 60 IN A 10.10.18.34 +-biganswer.big. 60 IN A 10.10.18.35 +-biganswer.big. 60 IN A 10.10.18.36 +-biganswer.big. 60 IN A 10.10.18.37 +-biganswer.big. 60 IN A 10.10.18.38 +-biganswer.big. 60 IN A 10.10.18.39 +-biganswer.big. 60 IN A 10.10.18.40 +-biganswer.big. 60 IN A 10.10.18.41 +-biganswer.big. 60 IN A 10.10.18.42 +-biganswer.big. 60 IN A 10.10.18.43 +-biganswer.big. 60 IN A 10.10.18.44 +-biganswer.big. 60 IN A 10.10.18.45 +-biganswer.big. 60 IN A 10.10.18.46 +-biganswer.big. 60 IN A 10.10.18.47 +-biganswer.big. 60 IN A 10.10.18.48 +-biganswer.big. 60 IN A 10.10.18.49 +-biganswer.big. 60 IN A 10.10.18.50 +-biganswer.big. 60 IN A 10.10.19.1 +-biganswer.big. 60 IN A 10.10.19.2 +-biganswer.big. 60 IN A 10.10.19.3 +-biganswer.big. 60 IN A 10.10.19.4 +-biganswer.big. 60 IN A 10.10.19.5 +-biganswer.big. 60 IN A 10.10.19.6 +-biganswer.big. 60 IN A 10.10.19.7 +-biganswer.big. 60 IN A 10.10.19.8 +-biganswer.big. 60 IN A 10.10.19.9 +-biganswer.big. 60 IN A 10.10.19.10 +-biganswer.big. 60 IN A 10.10.19.11 +-biganswer.big. 60 IN A 10.10.19.12 +-biganswer.big. 60 IN A 10.10.19.13 +-biganswer.big. 60 IN A 10.10.19.14 +-biganswer.big. 60 IN A 10.10.19.15 +-biganswer.big. 60 IN A 10.10.19.16 +-biganswer.big. 60 IN A 10.10.19.17 +-biganswer.big. 60 IN A 10.10.19.18 +-biganswer.big. 60 IN A 10.10.19.19 +-biganswer.big. 60 IN A 10.10.19.20 +-biganswer.big. 60 IN A 10.10.19.21 +-biganswer.big. 60 IN A 10.10.19.22 +-biganswer.big. 60 IN A 10.10.19.23 +-biganswer.big. 60 IN A 10.10.19.24 +-biganswer.big. 60 IN A 10.10.19.25 +-biganswer.big. 60 IN A 10.10.19.26 +-biganswer.big. 60 IN A 10.10.19.27 +-biganswer.big. 60 IN A 10.10.19.28 +-biganswer.big. 60 IN A 10.10.19.29 +-biganswer.big. 60 IN A 10.10.19.30 +-biganswer.big. 60 IN A 10.10.19.31 +-biganswer.big. 60 IN A 10.10.19.32 +-biganswer.big. 60 IN A 10.10.19.33 +-biganswer.big. 60 IN A 10.10.19.34 +-biganswer.big. 60 IN A 10.10.19.35 +-biganswer.big. 60 IN A 10.10.19.36 +-biganswer.big. 60 IN A 10.10.19.37 +-biganswer.big. 60 IN A 10.10.19.38 +-biganswer.big. 60 IN A 10.10.19.39 +-biganswer.big. 60 IN A 10.10.19.40 +-biganswer.big. 60 IN A 10.10.19.41 +-biganswer.big. 60 IN A 10.10.19.42 +-biganswer.big. 60 IN A 10.10.19.43 +-biganswer.big. 60 IN A 10.10.19.44 +-biganswer.big. 60 IN A 10.10.19.45 +-biganswer.big. 60 IN A 10.10.19.46 +-biganswer.big. 60 IN A 10.10.19.47 +-biganswer.big. 60 IN A 10.10.19.48 +-biganswer.big. 60 IN A 10.10.19.49 +-biganswer.big. 60 IN A 10.10.19.50 +-biganswer.big. 60 IN A 10.10.20.1 +-biganswer.big. 60 IN A 10.10.20.2 +-biganswer.big. 60 IN A 10.10.20.3 +-biganswer.big. 60 IN A 10.10.20.4 +-biganswer.big. 60 IN A 10.10.20.5 +-biganswer.big. 60 IN A 10.10.20.6 +-biganswer.big. 60 IN A 10.10.20.7 +-biganswer.big. 60 IN A 10.10.20.8 +-biganswer.big. 60 IN A 10.10.20.9 +-biganswer.big. 60 IN A 10.10.20.10 +-biganswer.big. 60 IN A 10.10.20.11 +-biganswer.big. 60 IN A 10.10.20.12 +-biganswer.big. 60 IN A 10.10.20.13 +-biganswer.big. 60 IN A 10.10.20.14 +-biganswer.big. 60 IN A 10.10.20.15 +-biganswer.big. 60 IN A 10.10.20.16 +-biganswer.big. 60 IN A 10.10.20.17 +-biganswer.big. 60 IN A 10.10.20.18 +-biganswer.big. 60 IN A 10.10.20.19 +-biganswer.big. 60 IN A 10.10.20.20 +-biganswer.big. 60 IN A 10.10.20.21 +-biganswer.big. 60 IN A 10.10.20.22 +-biganswer.big. 60 IN A 10.10.20.23 +-biganswer.big. 60 IN A 10.10.20.24 +-biganswer.big. 60 IN A 10.10.20.25 +-biganswer.big. 60 IN A 10.10.20.26 +-biganswer.big. 60 IN A 10.10.20.27 +-biganswer.big. 60 IN A 10.10.20.28 +-biganswer.big. 60 IN A 10.10.20.29 +-biganswer.big. 60 IN A 10.10.20.30 +-biganswer.big. 60 IN A 10.10.20.31 +-biganswer.big. 60 IN A 10.10.20.32 +-biganswer.big. 60 IN A 10.10.20.33 +-biganswer.big. 60 IN A 10.10.20.34 +-biganswer.big. 60 IN A 10.10.20.35 +-biganswer.big. 60 IN A 10.10.20.36 +-biganswer.big. 60 IN A 10.10.20.37 +-biganswer.big. 60 IN A 10.10.20.38 +-biganswer.big. 60 IN A 10.10.20.39 +-biganswer.big. 60 IN A 10.10.20.40 +-biganswer.big. 60 IN A 10.10.20.41 +-biganswer.big. 60 IN A 10.10.20.42 +-biganswer.big. 60 IN A 10.10.20.43 +-biganswer.big. 60 IN A 10.10.20.44 +-biganswer.big. 60 IN A 10.10.20.45 +-biganswer.big. 60 IN A 10.10.20.46 +-biganswer.big. 60 IN A 10.10.20.47 +-biganswer.big. 60 IN A 10.10.20.48 +-biganswer.big. 60 IN A 10.10.20.49 +-biganswer.big. 60 IN A 10.10.20.50 +-biganswer.big. 60 IN A 10.10.21.1 +-biganswer.big. 60 IN A 10.10.21.2 +-biganswer.big. 60 IN A 10.10.21.3 +-biganswer.big. 60 IN A 10.10.21.4 +-biganswer.big. 60 IN A 10.10.21.5 +-biganswer.big. 60 IN A 10.10.21.6 +-biganswer.big. 60 IN A 10.10.21.7 +-biganswer.big. 60 IN A 10.10.21.8 +-biganswer.big. 60 IN A 10.10.21.9 +-biganswer.big. 60 IN A 10.10.21.10 +-biganswer.big. 60 IN A 10.10.21.11 +-biganswer.big. 60 IN A 10.10.21.12 +-biganswer.big. 60 IN A 10.10.21.13 +-biganswer.big. 60 IN A 10.10.21.14 +-biganswer.big. 60 IN A 10.10.21.15 +-biganswer.big. 60 IN A 10.10.21.16 +-biganswer.big. 60 IN A 10.10.21.17 +-biganswer.big. 60 IN A 10.10.21.18 +-biganswer.big. 60 IN A 10.10.21.19 +-biganswer.big. 60 IN A 10.10.21.20 +-biganswer.big. 60 IN A 10.10.21.21 +-biganswer.big. 60 IN A 10.10.21.22 +-biganswer.big. 60 IN A 10.10.21.23 +-biganswer.big. 60 IN A 10.10.21.24 +-biganswer.big. 60 IN A 10.10.21.25 +-biganswer.big. 60 IN A 10.10.21.26 +-biganswer.big. 60 IN A 10.10.21.27 +-biganswer.big. 60 IN A 10.10.21.28 +-biganswer.big. 60 IN A 10.10.21.29 +-biganswer.big. 60 IN A 10.10.21.30 +-biganswer.big. 60 IN A 10.10.21.31 +-biganswer.big. 60 IN A 10.10.21.32 +-biganswer.big. 60 IN A 10.10.21.33 +-biganswer.big. 60 IN A 10.10.21.34 +-biganswer.big. 60 IN A 10.10.21.35 +-biganswer.big. 60 IN A 10.10.21.36 +-biganswer.big. 60 IN A 10.10.21.37 +-biganswer.big. 60 IN A 10.10.21.38 +-biganswer.big. 60 IN A 10.10.21.39 +-biganswer.big. 60 IN A 10.10.21.40 +-biganswer.big. 60 IN A 10.10.21.41 +-biganswer.big. 60 IN A 10.10.21.42 +-biganswer.big. 60 IN A 10.10.21.43 +-biganswer.big. 60 IN A 10.10.21.44 +-biganswer.big. 60 IN A 10.10.21.45 +-biganswer.big. 60 IN A 10.10.21.46 +-biganswer.big. 60 IN A 10.10.21.47 +-biganswer.big. 60 IN A 10.10.21.48 +-biganswer.big. 60 IN A 10.10.21.49 +-biganswer.big. 60 IN A 10.10.21.50 +-biganswer.big. 60 IN A 10.10.22.1 +-biganswer.big. 60 IN A 10.10.22.2 +-biganswer.big. 60 IN A 10.10.22.3 +-biganswer.big. 60 IN A 10.10.22.4 +-biganswer.big. 60 IN A 10.10.22.5 +-biganswer.big. 60 IN A 10.10.22.6 +-biganswer.big. 60 IN A 10.10.22.7 +-biganswer.big. 60 IN A 10.10.22.8 +-biganswer.big. 60 IN A 10.10.22.9 +-biganswer.big. 60 IN A 10.10.22.10 +-biganswer.big. 60 IN A 10.10.22.11 +-biganswer.big. 60 IN A 10.10.22.12 +-biganswer.big. 60 IN A 10.10.22.13 +-biganswer.big. 60 IN A 10.10.22.14 +-biganswer.big. 60 IN A 10.10.22.15 +-biganswer.big. 60 IN A 10.10.22.16 +-biganswer.big. 60 IN A 10.10.22.17 +-biganswer.big. 60 IN A 10.10.22.18 +-biganswer.big. 60 IN A 10.10.22.19 +-biganswer.big. 60 IN A 10.10.22.20 +-biganswer.big. 60 IN A 10.10.22.21 +-biganswer.big. 60 IN A 10.10.22.22 +-biganswer.big. 60 IN A 10.10.22.23 +-biganswer.big. 60 IN A 10.10.22.24 +-biganswer.big. 60 IN A 10.10.22.25 +-biganswer.big. 60 IN A 10.10.22.26 +-biganswer.big. 60 IN A 10.10.22.27 +-biganswer.big. 60 IN A 10.10.22.28 +-biganswer.big. 60 IN A 10.10.22.29 +-biganswer.big. 60 IN A 10.10.22.30 +-biganswer.big. 60 IN A 10.10.22.31 +-biganswer.big. 60 IN A 10.10.22.32 +-biganswer.big. 60 IN A 10.10.22.33 +-biganswer.big. 60 IN A 10.10.22.34 +-biganswer.big. 60 IN A 10.10.22.35 +-biganswer.big. 60 IN A 10.10.22.36 +-biganswer.big. 60 IN A 10.10.22.37 +-biganswer.big. 60 IN A 10.10.22.38 +-biganswer.big. 60 IN A 10.10.22.39 +-biganswer.big. 60 IN A 10.10.22.40 +-biganswer.big. 60 IN A 10.10.22.41 +-biganswer.big. 60 IN A 10.10.22.42 +-biganswer.big. 60 IN A 10.10.22.43 +-biganswer.big. 60 IN A 10.10.22.44 +-biganswer.big. 60 IN A 10.10.22.45 +-biganswer.big. 60 IN A 10.10.22.46 +-biganswer.big. 60 IN A 10.10.22.47 +-biganswer.big. 60 IN A 10.10.22.48 +-biganswer.big. 60 IN A 10.10.22.49 +-biganswer.big. 60 IN A 10.10.22.50 +-biganswer.big. 60 IN A 10.10.23.1 +-biganswer.big. 60 IN A 10.10.23.2 +-biganswer.big. 60 IN A 10.10.23.3 +-biganswer.big. 60 IN A 10.10.23.4 +-biganswer.big. 60 IN A 10.10.23.5 +-biganswer.big. 60 IN A 10.10.23.6 +-biganswer.big. 60 IN A 10.10.23.7 +-biganswer.big. 60 IN A 10.10.23.8 +-biganswer.big. 60 IN A 10.10.23.9 +-biganswer.big. 60 IN A 10.10.23.10 +-biganswer.big. 60 IN A 10.10.23.11 +-biganswer.big. 60 IN A 10.10.23.12 +-biganswer.big. 60 IN A 10.10.23.13 +-biganswer.big. 60 IN A 10.10.23.14 +-biganswer.big. 60 IN A 10.10.23.15 +-biganswer.big. 60 IN A 10.10.23.16 +-biganswer.big. 60 IN A 10.10.23.17 +-biganswer.big. 60 IN A 10.10.23.18 +-biganswer.big. 60 IN A 10.10.23.19 +-biganswer.big. 60 IN A 10.10.23.20 +-biganswer.big. 60 IN A 10.10.23.21 +-biganswer.big. 60 IN A 10.10.23.22 +-biganswer.big. 60 IN A 10.10.23.23 +-biganswer.big. 60 IN A 10.10.23.24 +-biganswer.big. 60 IN A 10.10.23.25 +-biganswer.big. 60 IN A 10.10.23.26 +-biganswer.big. 60 IN A 10.10.23.27 +-biganswer.big. 60 IN A 10.10.23.28 +-biganswer.big. 60 IN A 10.10.23.29 +-biganswer.big. 60 IN A 10.10.23.30 +-biganswer.big. 60 IN A 10.10.23.31 +-biganswer.big. 60 IN A 10.10.23.32 +-biganswer.big. 60 IN A 10.10.23.33 +-biganswer.big. 60 IN A 10.10.23.34 +-biganswer.big. 60 IN A 10.10.23.35 +-biganswer.big. 60 IN A 10.10.23.36 +-biganswer.big. 60 IN A 10.10.23.37 +-biganswer.big. 60 IN A 10.10.23.38 +-biganswer.big. 60 IN A 10.10.23.39 +-biganswer.big. 60 IN A 10.10.23.40 +-biganswer.big. 60 IN A 10.10.23.41 +-biganswer.big. 60 IN A 10.10.23.42 +-biganswer.big. 60 IN A 10.10.23.43 +-biganswer.big. 60 IN A 10.10.23.44 +-biganswer.big. 60 IN A 10.10.23.45 +-biganswer.big. 60 IN A 10.10.23.46 +-biganswer.big. 60 IN A 10.10.23.47 +-biganswer.big. 60 IN A 10.10.23.48 +-biganswer.big. 60 IN A 10.10.23.49 +-biganswer.big. 60 IN A 10.10.23.50 +-biganswer.big. 60 IN A 10.10.24.1 +-biganswer.big. 60 IN A 10.10.24.2 +-biganswer.big. 60 IN A 10.10.24.3 +-biganswer.big. 60 IN A 10.10.24.4 +-biganswer.big. 60 IN A 10.10.24.5 +-biganswer.big. 60 IN A 10.10.24.6 +-biganswer.big. 60 IN A 10.10.24.7 +-biganswer.big. 60 IN A 10.10.24.8 +-biganswer.big. 60 IN A 10.10.24.9 +-biganswer.big. 60 IN A 10.10.24.10 +-biganswer.big. 60 IN A 10.10.24.11 +-biganswer.big. 60 IN A 10.10.24.12 +-biganswer.big. 60 IN A 10.10.24.13 +-biganswer.big. 60 IN A 10.10.24.14 +-biganswer.big. 60 IN A 10.10.24.15 +-biganswer.big. 60 IN A 10.10.24.16 +-biganswer.big. 60 IN A 10.10.24.17 +-biganswer.big. 60 IN A 10.10.24.18 +-biganswer.big. 60 IN A 10.10.24.19 +-biganswer.big. 60 IN A 10.10.24.20 +-biganswer.big. 60 IN A 10.10.24.21 +-biganswer.big. 60 IN A 10.10.24.22 +-biganswer.big. 60 IN A 10.10.24.23 +-biganswer.big. 60 IN A 10.10.24.24 +-biganswer.big. 60 IN A 10.10.24.25 +-biganswer.big. 60 IN A 10.10.24.26 +-biganswer.big. 60 IN A 10.10.24.27 +-biganswer.big. 60 IN A 10.10.24.28 +-biganswer.big. 60 IN A 10.10.24.29 +-biganswer.big. 60 IN A 10.10.24.30 +-biganswer.big. 60 IN A 10.10.24.31 +-biganswer.big. 60 IN A 10.10.24.32 +-biganswer.big. 60 IN A 10.10.24.33 +-biganswer.big. 60 IN A 10.10.24.34 +-biganswer.big. 60 IN A 10.10.24.35 +-biganswer.big. 60 IN A 10.10.24.36 +-biganswer.big. 60 IN A 10.10.24.37 +-biganswer.big. 60 IN A 10.10.24.38 +-biganswer.big. 60 IN A 10.10.24.39 +-biganswer.big. 60 IN A 10.10.24.40 +-biganswer.big. 60 IN A 10.10.24.41 +-biganswer.big. 60 IN A 10.10.24.42 +-biganswer.big. 60 IN A 10.10.24.43 +-biganswer.big. 60 IN A 10.10.24.44 +-biganswer.big. 60 IN A 10.10.24.45 +-biganswer.big. 60 IN A 10.10.24.46 +-biganswer.big. 60 IN A 10.10.24.47 +-biganswer.big. 60 IN A 10.10.24.48 +-biganswer.big. 60 IN A 10.10.24.49 +-biganswer.big. 60 IN A 10.10.24.50 +-biganswer.big. 60 IN A 10.10.25.1 +-biganswer.big. 60 IN A 10.10.25.2 +-biganswer.big. 60 IN A 10.10.25.3 +-biganswer.big. 60 IN A 10.10.25.4 +-biganswer.big. 60 IN A 10.10.25.5 +-biganswer.big. 60 IN A 10.10.25.6 +-biganswer.big. 60 IN A 10.10.25.7 +-biganswer.big. 60 IN A 10.10.25.8 +-biganswer.big. 60 IN A 10.10.25.9 +-biganswer.big. 60 IN A 10.10.25.10 +-biganswer.big. 60 IN A 10.10.25.11 +-biganswer.big. 60 IN A 10.10.25.12 +-biganswer.big. 60 IN A 10.10.25.13 +-biganswer.big. 60 IN A 10.10.25.14 +-biganswer.big. 60 IN A 10.10.25.15 +-biganswer.big. 60 IN A 10.10.25.16 +-biganswer.big. 60 IN A 10.10.25.17 +-biganswer.big. 60 IN A 10.10.25.18 +-biganswer.big. 60 IN A 10.10.25.19 +-biganswer.big. 60 IN A 10.10.25.20 +-biganswer.big. 60 IN A 10.10.25.21 +-biganswer.big. 60 IN A 10.10.25.22 +-biganswer.big. 60 IN A 10.10.25.23 +-biganswer.big. 60 IN A 10.10.25.24 +-biganswer.big. 60 IN A 10.10.25.25 +-biganswer.big. 60 IN A 10.10.25.26 +-biganswer.big. 60 IN A 10.10.25.27 +-biganswer.big. 60 IN A 10.10.25.28 +-biganswer.big. 60 IN A 10.10.25.29 +-biganswer.big. 60 IN A 10.10.25.30 +-biganswer.big. 60 IN A 10.10.25.31 +-biganswer.big. 60 IN A 10.10.25.32 +-biganswer.big. 60 IN A 10.10.25.33 +-biganswer.big. 60 IN A 10.10.25.34 +-biganswer.big. 60 IN A 10.10.25.35 +-biganswer.big. 60 IN A 10.10.25.36 +-biganswer.big. 60 IN A 10.10.25.37 +-biganswer.big. 60 IN A 10.10.25.38 +-biganswer.big. 60 IN A 10.10.25.39 +-biganswer.big. 60 IN A 10.10.25.40 +-biganswer.big. 60 IN A 10.10.25.41 +-biganswer.big. 60 IN A 10.10.25.42 +-biganswer.big. 60 IN A 10.10.25.43 +-biganswer.big. 60 IN A 10.10.25.44 +-biganswer.big. 60 IN A 10.10.25.45 +-biganswer.big. 60 IN A 10.10.25.46 +-biganswer.big. 60 IN A 10.10.25.47 +-biganswer.big. 60 IN A 10.10.25.48 +-biganswer.big. 60 IN A 10.10.25.49 +-biganswer.big. 60 IN A 10.10.25.50 +-biganswer.big. 60 IN A 10.10.26.1 +-biganswer.big. 60 IN A 10.10.26.2 +-biganswer.big. 60 IN A 10.10.26.3 +-biganswer.big. 60 IN A 10.10.26.4 +-biganswer.big. 60 IN A 10.10.26.5 +-biganswer.big. 60 IN A 10.10.26.6 +-biganswer.big. 60 IN A 10.10.26.7 +-biganswer.big. 60 IN A 10.10.26.8 +-biganswer.big. 60 IN A 10.10.26.9 +-biganswer.big. 60 IN A 10.10.26.10 +-biganswer.big. 60 IN A 10.10.26.11 +-biganswer.big. 60 IN A 10.10.26.12 +-biganswer.big. 60 IN A 10.10.26.13 +-biganswer.big. 60 IN A 10.10.26.14 +-biganswer.big. 60 IN A 10.10.26.15 +-biganswer.big. 60 IN A 10.10.26.16 +-biganswer.big. 60 IN A 10.10.26.17 +-biganswer.big. 60 IN A 10.10.26.18 +-biganswer.big. 60 IN A 10.10.26.19 +-biganswer.big. 60 IN A 10.10.26.20 +-biganswer.big. 60 IN A 10.10.26.21 +-biganswer.big. 60 IN A 10.10.26.22 +-biganswer.big. 60 IN A 10.10.26.23 +-biganswer.big. 60 IN A 10.10.26.24 +-biganswer.big. 60 IN A 10.10.26.25 +-biganswer.big. 60 IN A 10.10.26.26 +-biganswer.big. 60 IN A 10.10.26.27 +-biganswer.big. 60 IN A 10.10.26.28 +-biganswer.big. 60 IN A 10.10.26.29 +-biganswer.big. 60 IN A 10.10.26.30 +-biganswer.big. 60 IN A 10.10.26.31 +-biganswer.big. 60 IN A 10.10.26.32 +-biganswer.big. 60 IN A 10.10.26.33 +-biganswer.big. 60 IN A 10.10.26.34 +-biganswer.big. 60 IN A 10.10.26.35 +-biganswer.big. 60 IN A 10.10.26.36 +-biganswer.big. 60 IN A 10.10.26.37 +-biganswer.big. 60 IN A 10.10.26.38 +-biganswer.big. 60 IN A 10.10.26.39 +-biganswer.big. 60 IN A 10.10.26.40 +-biganswer.big. 60 IN A 10.10.26.41 +-biganswer.big. 60 IN A 10.10.26.42 +-biganswer.big. 60 IN A 10.10.26.43 +-biganswer.big. 60 IN A 10.10.26.44 +-biganswer.big. 60 IN A 10.10.26.45 +-biganswer.big. 60 IN A 10.10.26.46 +-biganswer.big. 60 IN A 10.10.26.47 +-biganswer.big. 60 IN A 10.10.26.48 +-biganswer.big. 60 IN A 10.10.26.49 +-biganswer.big. 60 IN A 10.10.26.50 +-biganswer.big. 60 IN A 10.10.27.1 +-biganswer.big. 60 IN A 10.10.27.2 +-biganswer.big. 60 IN A 10.10.27.3 +-biganswer.big. 60 IN A 10.10.27.4 +-biganswer.big. 60 IN A 10.10.27.5 +-biganswer.big. 60 IN A 10.10.27.6 +-biganswer.big. 60 IN A 10.10.27.7 +-biganswer.big. 60 IN A 10.10.27.8 +-biganswer.big. 60 IN A 10.10.27.9 +-biganswer.big. 60 IN A 10.10.27.10 +-biganswer.big. 60 IN A 10.10.27.11 +-biganswer.big. 60 IN A 10.10.27.12 +-biganswer.big. 60 IN A 10.10.27.13 +-biganswer.big. 60 IN A 10.10.27.14 +-biganswer.big. 60 IN A 10.10.27.15 +-biganswer.big. 60 IN A 10.10.27.16 +-biganswer.big. 60 IN A 10.10.27.17 +-biganswer.big. 60 IN A 10.10.27.18 +-biganswer.big. 60 IN A 10.10.27.19 +-biganswer.big. 60 IN A 10.10.27.20 +-biganswer.big. 60 IN A 10.10.27.21 +-biganswer.big. 60 IN A 10.10.27.22 +-biganswer.big. 60 IN A 10.10.27.23 +-biganswer.big. 60 IN A 10.10.27.24 +-biganswer.big. 60 IN A 10.10.27.25 +-biganswer.big. 60 IN A 10.10.27.26 +-biganswer.big. 60 IN A 10.10.27.27 +-biganswer.big. 60 IN A 10.10.27.28 +-biganswer.big. 60 IN A 10.10.27.29 +-biganswer.big. 60 IN A 10.10.27.30 +-biganswer.big. 60 IN A 10.10.27.31 +-biganswer.big. 60 IN A 10.10.27.32 +-biganswer.big. 60 IN A 10.10.27.33 +-biganswer.big. 60 IN A 10.10.27.34 +-biganswer.big. 60 IN A 10.10.27.35 +-biganswer.big. 60 IN A 10.10.27.36 +-biganswer.big. 60 IN A 10.10.27.37 +-biganswer.big. 60 IN A 10.10.27.38 +-biganswer.big. 60 IN A 10.10.27.39 +-biganswer.big. 60 IN A 10.10.27.40 +-biganswer.big. 60 IN A 10.10.27.41 +-biganswer.big. 60 IN A 10.10.27.42 +-biganswer.big. 60 IN A 10.10.27.43 +-biganswer.big. 60 IN A 10.10.27.44 +-biganswer.big. 60 IN A 10.10.27.45 +-biganswer.big. 60 IN A 10.10.27.46 +-biganswer.big. 60 IN A 10.10.27.47 +-biganswer.big. 60 IN A 10.10.27.48 +-biganswer.big. 60 IN A 10.10.27.49 +-biganswer.big. 60 IN A 10.10.27.50 +-biganswer.big. 60 IN A 10.10.28.1 +-biganswer.big. 60 IN A 10.10.28.2 +-biganswer.big. 60 IN A 10.10.28.3 +-biganswer.big. 60 IN A 10.10.28.4 +-biganswer.big. 60 IN A 10.10.28.5 +-biganswer.big. 60 IN A 10.10.28.6 +-biganswer.big. 60 IN A 10.10.28.7 +-biganswer.big. 60 IN A 10.10.28.8 +-biganswer.big. 60 IN A 10.10.28.9 +-biganswer.big. 60 IN A 10.10.28.10 +-biganswer.big. 60 IN A 10.10.28.11 +-biganswer.big. 60 IN A 10.10.28.12 +-biganswer.big. 60 IN A 10.10.28.13 +-biganswer.big. 60 IN A 10.10.28.14 +-biganswer.big. 60 IN A 10.10.28.15 +-biganswer.big. 60 IN A 10.10.28.16 +-biganswer.big. 60 IN A 10.10.28.17 +-biganswer.big. 60 IN A 10.10.28.18 +-biganswer.big. 60 IN A 10.10.28.19 +-biganswer.big. 60 IN A 10.10.28.20 +-biganswer.big. 60 IN A 10.10.28.21 +-biganswer.big. 60 IN A 10.10.28.22 +-biganswer.big. 60 IN A 10.10.28.23 +-biganswer.big. 60 IN A 10.10.28.24 +-biganswer.big. 60 IN A 10.10.28.25 +-biganswer.big. 60 IN A 10.10.28.26 +-biganswer.big. 60 IN A 10.10.28.27 +-biganswer.big. 60 IN A 10.10.28.28 +-biganswer.big. 60 IN A 10.10.28.29 +-biganswer.big. 60 IN A 10.10.28.30 +-biganswer.big. 60 IN A 10.10.28.31 +-biganswer.big. 60 IN A 10.10.28.32 +-biganswer.big. 60 IN A 10.10.28.33 +-biganswer.big. 60 IN A 10.10.28.34 +-biganswer.big. 60 IN A 10.10.28.35 +-biganswer.big. 60 IN A 10.10.28.36 +-biganswer.big. 60 IN A 10.10.28.37 +-biganswer.big. 60 IN A 10.10.28.38 +-biganswer.big. 60 IN A 10.10.28.39 +-biganswer.big. 60 IN A 10.10.28.40 +-biganswer.big. 60 IN A 10.10.28.41 +-biganswer.big. 60 IN A 10.10.28.42 +-biganswer.big. 60 IN A 10.10.28.43 +-biganswer.big. 60 IN A 10.10.28.44 +-biganswer.big. 60 IN A 10.10.28.45 +-biganswer.big. 60 IN A 10.10.28.46 +-biganswer.big. 60 IN A 10.10.28.47 +-biganswer.big. 60 IN A 10.10.28.48 +-biganswer.big. 60 IN A 10.10.28.49 +-biganswer.big. 60 IN A 10.10.28.50 +-biganswer.big. 60 IN A 10.10.29.1 +-biganswer.big. 60 IN A 10.10.29.2 +-biganswer.big. 60 IN A 10.10.29.3 +-biganswer.big. 60 IN A 10.10.29.4 +-biganswer.big. 60 IN A 10.10.29.5 +-biganswer.big. 60 IN A 10.10.29.6 +-biganswer.big. 60 IN A 10.10.29.7 +-biganswer.big. 60 IN A 10.10.29.8 +-biganswer.big. 60 IN A 10.10.29.9 +-biganswer.big. 60 IN A 10.10.29.10 +-biganswer.big. 60 IN A 10.10.29.11 +-biganswer.big. 60 IN A 10.10.29.12 +-biganswer.big. 60 IN A 10.10.29.13 +-biganswer.big. 60 IN A 10.10.29.14 +-biganswer.big. 60 IN A 10.10.29.15 +-biganswer.big. 60 IN A 10.10.29.16 +-biganswer.big. 60 IN A 10.10.29.17 +-biganswer.big. 60 IN A 10.10.29.18 +-biganswer.big. 60 IN A 10.10.29.19 +-biganswer.big. 60 IN A 10.10.29.20 +-biganswer.big. 60 IN A 10.10.29.21 +-biganswer.big. 60 IN A 10.10.29.22 +-biganswer.big. 60 IN A 10.10.29.23 +-biganswer.big. 60 IN A 10.10.29.24 +-biganswer.big. 60 IN A 10.10.29.25 +-biganswer.big. 60 IN A 10.10.29.26 +-biganswer.big. 60 IN A 10.10.29.27 +-biganswer.big. 60 IN A 10.10.29.28 +-biganswer.big. 60 IN A 10.10.29.29 +-biganswer.big. 60 IN A 10.10.29.30 +-biganswer.big. 60 IN A 10.10.29.31 +-biganswer.big. 60 IN A 10.10.29.32 +-biganswer.big. 60 IN A 10.10.29.33 +-biganswer.big. 60 IN A 10.10.29.34 +-biganswer.big. 60 IN A 10.10.29.35 +-biganswer.big. 60 IN A 10.10.29.36 +-biganswer.big. 60 IN A 10.10.29.37 +-biganswer.big. 60 IN A 10.10.29.38 +-biganswer.big. 60 IN A 10.10.29.39 +-biganswer.big. 60 IN A 10.10.29.40 +-biganswer.big. 60 IN A 10.10.29.41 +-biganswer.big. 60 IN A 10.10.29.42 +-biganswer.big. 60 IN A 10.10.29.43 +-biganswer.big. 60 IN A 10.10.29.44 +-biganswer.big. 60 IN A 10.10.29.45 +-biganswer.big. 60 IN A 10.10.29.46 +-biganswer.big. 60 IN A 10.10.29.47 +-biganswer.big. 60 IN A 10.10.29.48 +-biganswer.big. 60 IN A 10.10.29.49 +-biganswer.big. 60 IN A 10.10.29.50 +-biganswer.big. 60 IN A 10.10.30.1 +-biganswer.big. 60 IN A 10.10.30.2 +-biganswer.big. 60 IN A 10.10.30.3 +-biganswer.big. 60 IN A 10.10.30.4 +-biganswer.big. 60 IN A 10.10.30.5 +-biganswer.big. 60 IN A 10.10.30.6 +-biganswer.big. 60 IN A 10.10.30.7 +-biganswer.big. 60 IN A 10.10.30.8 +-biganswer.big. 60 IN A 10.10.30.9 +-biganswer.big. 60 IN A 10.10.30.10 +-biganswer.big. 60 IN A 10.10.30.11 +-biganswer.big. 60 IN A 10.10.30.12 +-biganswer.big. 60 IN A 10.10.30.13 +-biganswer.big. 60 IN A 10.10.30.14 +-biganswer.big. 60 IN A 10.10.30.15 +-biganswer.big. 60 IN A 10.10.30.16 +-biganswer.big. 60 IN A 10.10.30.17 +-biganswer.big. 60 IN A 10.10.30.18 +-biganswer.big. 60 IN A 10.10.30.19 +-biganswer.big. 60 IN A 10.10.30.20 +-biganswer.big. 60 IN A 10.10.30.21 +-biganswer.big. 60 IN A 10.10.30.22 +-biganswer.big. 60 IN A 10.10.30.23 +-biganswer.big. 60 IN A 10.10.30.24 +-biganswer.big. 60 IN A 10.10.30.25 +-biganswer.big. 60 IN A 10.10.30.26 +-biganswer.big. 60 IN A 10.10.30.27 +-biganswer.big. 60 IN A 10.10.30.28 +-biganswer.big. 60 IN A 10.10.30.29 +-biganswer.big. 60 IN A 10.10.30.30 +-biganswer.big. 60 IN A 10.10.30.31 +-biganswer.big. 60 IN A 10.10.30.32 +-biganswer.big. 60 IN A 10.10.30.33 +-biganswer.big. 60 IN A 10.10.30.34 +-biganswer.big. 60 IN A 10.10.30.35 +-biganswer.big. 60 IN A 10.10.30.36 +-biganswer.big. 60 IN A 10.10.30.37 +-biganswer.big. 60 IN A 10.10.30.38 +-biganswer.big. 60 IN A 10.10.30.39 +-biganswer.big. 60 IN A 10.10.30.40 +-biganswer.big. 60 IN A 10.10.30.41 +-biganswer.big. 60 IN A 10.10.30.42 +-biganswer.big. 60 IN A 10.10.30.43 +-biganswer.big. 60 IN A 10.10.30.44 +-biganswer.big. 60 IN A 10.10.30.45 +-biganswer.big. 60 IN A 10.10.30.46 +-biganswer.big. 60 IN A 10.10.30.47 +-biganswer.big. 60 IN A 10.10.30.48 +-biganswer.big. 60 IN A 10.10.30.49 +-biganswer.big. 60 IN A 10.10.30.50 +-biganswer.big. 60 IN A 10.10.31.1 +-biganswer.big. 60 IN A 10.10.31.2 +-biganswer.big. 60 IN A 10.10.31.3 +-biganswer.big. 60 IN A 10.10.31.4 +-biganswer.big. 60 IN A 10.10.31.5 +-biganswer.big. 60 IN A 10.10.31.6 +-biganswer.big. 60 IN A 10.10.31.7 +-biganswer.big. 60 IN A 10.10.31.8 +-biganswer.big. 60 IN A 10.10.31.9 +-biganswer.big. 60 IN A 10.10.31.10 +-biganswer.big. 60 IN A 10.10.31.11 +-biganswer.big. 60 IN A 10.10.31.12 +-biganswer.big. 60 IN A 10.10.31.13 +-biganswer.big. 60 IN A 10.10.31.14 +-biganswer.big. 60 IN A 10.10.31.15 +-biganswer.big. 60 IN A 10.10.31.16 +-biganswer.big. 60 IN A 10.10.31.17 +-biganswer.big. 60 IN A 10.10.31.18 +-biganswer.big. 60 IN A 10.10.31.19 +-biganswer.big. 60 IN A 10.10.31.20 +-biganswer.big. 60 IN A 10.10.31.21 +-biganswer.big. 60 IN A 10.10.31.22 +-biganswer.big. 60 IN A 10.10.31.23 +-biganswer.big. 60 IN A 10.10.31.24 +-biganswer.big. 60 IN A 10.10.31.25 +-biganswer.big. 60 IN A 10.10.31.26 +-biganswer.big. 60 IN A 10.10.31.27 +-biganswer.big. 60 IN A 10.10.31.28 +-biganswer.big. 60 IN A 10.10.31.29 +-biganswer.big. 60 IN A 10.10.31.30 +-biganswer.big. 60 IN A 10.10.31.31 +-biganswer.big. 60 IN A 10.10.31.32 +-biganswer.big. 60 IN A 10.10.31.33 +-biganswer.big. 60 IN A 10.10.31.34 +-biganswer.big. 60 IN A 10.10.31.35 +-biganswer.big. 60 IN A 10.10.31.36 +-biganswer.big. 60 IN A 10.10.31.37 +-biganswer.big. 60 IN A 10.10.31.38 +-biganswer.big. 60 IN A 10.10.31.39 +-biganswer.big. 60 IN A 10.10.31.40 +-biganswer.big. 60 IN A 10.10.31.41 +-biganswer.big. 60 IN A 10.10.31.42 +-biganswer.big. 60 IN A 10.10.31.43 +-biganswer.big. 60 IN A 10.10.31.44 +-biganswer.big. 60 IN A 10.10.31.45 +-biganswer.big. 60 IN A 10.10.31.46 +-biganswer.big. 60 IN A 10.10.31.47 +-biganswer.big. 60 IN A 10.10.31.48 +-biganswer.big. 60 IN A 10.10.31.49 +-biganswer.big. 60 IN A 10.10.31.50 +-biganswer.big. 60 IN A 10.10.32.1 +-biganswer.big. 60 IN A 10.10.32.2 +-biganswer.big. 60 IN A 10.10.32.3 +-biganswer.big. 60 IN A 10.10.32.4 +-biganswer.big. 60 IN A 10.10.32.5 +-biganswer.big. 60 IN A 10.10.32.6 +-biganswer.big. 60 IN A 10.10.32.7 +-biganswer.big. 60 IN A 10.10.32.8 +-biganswer.big. 60 IN A 10.10.32.9 +-biganswer.big. 60 IN A 10.10.32.10 +-biganswer.big. 60 IN A 10.10.32.11 +-biganswer.big. 60 IN A 10.10.32.12 +-biganswer.big. 60 IN A 10.10.32.13 +-biganswer.big. 60 IN A 10.10.32.14 +-biganswer.big. 60 IN A 10.10.32.15 +-biganswer.big. 60 IN A 10.10.32.16 +-biganswer.big. 60 IN A 10.10.32.17 +-biganswer.big. 60 IN A 10.10.32.18 +-biganswer.big. 60 IN A 10.10.32.19 +-biganswer.big. 60 IN A 10.10.32.20 +-biganswer.big. 60 IN A 10.10.32.21 +-biganswer.big. 60 IN A 10.10.32.22 +-biganswer.big. 60 IN A 10.10.32.23 +-biganswer.big. 60 IN A 10.10.32.24 +-biganswer.big. 60 IN A 10.10.32.25 +-biganswer.big. 60 IN A 10.10.32.26 +-biganswer.big. 60 IN A 10.10.32.27 +-biganswer.big. 60 IN A 10.10.32.28 +-biganswer.big. 60 IN A 10.10.32.29 +-biganswer.big. 60 IN A 10.10.32.30 +-biganswer.big. 60 IN A 10.10.32.31 +-biganswer.big. 60 IN A 10.10.32.32 +-biganswer.big. 60 IN A 10.10.32.33 +-biganswer.big. 60 IN A 10.10.32.34 +-biganswer.big. 60 IN A 10.10.32.35 +-biganswer.big. 60 IN A 10.10.32.36 +-biganswer.big. 60 IN A 10.10.32.37 +-biganswer.big. 60 IN A 10.10.32.38 +-biganswer.big. 60 IN A 10.10.32.39 +-biganswer.big. 60 IN A 10.10.32.40 +-biganswer.big. 60 IN A 10.10.32.41 +-biganswer.big. 60 IN A 10.10.32.42 +-biganswer.big. 60 IN A 10.10.32.43 +-biganswer.big. 60 IN A 10.10.32.44 +-biganswer.big. 60 IN A 10.10.32.45 +-biganswer.big. 60 IN A 10.10.32.46 +-biganswer.big. 60 IN A 10.10.32.47 +-biganswer.big. 60 IN A 10.10.32.48 +-biganswer.big. 60 IN A 10.10.32.49 +-biganswer.big. 60 IN A 10.10.32.50 +-biganswer.big. 60 IN A 10.10.33.1 +-biganswer.big. 60 IN A 10.10.33.2 +-biganswer.big. 60 IN A 10.10.33.3 +-biganswer.big. 60 IN A 10.10.33.4 +-biganswer.big. 60 IN A 10.10.33.5 +-biganswer.big. 60 IN A 10.10.33.6 +-biganswer.big. 60 IN A 10.10.33.7 +-biganswer.big. 60 IN A 10.10.33.8 +-biganswer.big. 60 IN A 10.10.33.9 +-biganswer.big. 60 IN A 10.10.33.10 +-biganswer.big. 60 IN A 10.10.33.11 +-biganswer.big. 60 IN A 10.10.33.12 +-biganswer.big. 60 IN A 10.10.33.13 +-biganswer.big. 60 IN A 10.10.33.14 +-biganswer.big. 60 IN A 10.10.33.15 +-biganswer.big. 60 IN A 10.10.33.16 +-biganswer.big. 60 IN A 10.10.33.17 +-biganswer.big. 60 IN A 10.10.33.18 +-biganswer.big. 60 IN A 10.10.33.19 +-biganswer.big. 60 IN A 10.10.33.20 +-biganswer.big. 60 IN A 10.10.33.21 +-biganswer.big. 60 IN A 10.10.33.22 +-biganswer.big. 60 IN A 10.10.33.23 +-biganswer.big. 60 IN A 10.10.33.24 +-biganswer.big. 60 IN A 10.10.33.25 +-biganswer.big. 60 IN A 10.10.33.26 +-biganswer.big. 60 IN A 10.10.33.27 +-biganswer.big. 60 IN A 10.10.33.28 +-biganswer.big. 60 IN A 10.10.33.29 +-biganswer.big. 60 IN A 10.10.33.30 +-biganswer.big. 60 IN A 10.10.33.31 +-biganswer.big. 60 IN A 10.10.33.32 +-biganswer.big. 60 IN A 10.10.33.33 +-biganswer.big. 60 IN A 10.10.33.34 +-biganswer.big. 60 IN A 10.10.33.35 +-biganswer.big. 60 IN A 10.10.33.36 +-biganswer.big. 60 IN A 10.10.33.37 +-biganswer.big. 60 IN A 10.10.33.38 +-biganswer.big. 60 IN A 10.10.33.39 +-biganswer.big. 60 IN A 10.10.33.40 +-biganswer.big. 60 IN A 10.10.33.41 +-biganswer.big. 60 IN A 10.10.33.42 +-biganswer.big. 60 IN A 10.10.33.43 +-biganswer.big. 60 IN A 10.10.33.44 +-biganswer.big. 60 IN A 10.10.33.45 +-biganswer.big. 60 IN A 10.10.33.46 +-biganswer.big. 60 IN A 10.10.33.47 +-biganswer.big. 60 IN A 10.10.33.48 +-biganswer.big. 60 IN A 10.10.33.49 +-biganswer.big. 60 IN A 10.10.33.50 +-biganswer.big. 60 IN A 10.10.34.1 +-biganswer.big. 60 IN A 10.10.34.2 +-biganswer.big. 60 IN A 10.10.34.3 +-biganswer.big. 60 IN A 10.10.34.4 +-biganswer.big. 60 IN A 10.10.34.5 +-biganswer.big. 60 IN A 10.10.34.6 +-biganswer.big. 60 IN A 10.10.34.7 +-biganswer.big. 60 IN A 10.10.34.8 +-biganswer.big. 60 IN A 10.10.34.9 +-biganswer.big. 60 IN A 10.10.34.10 +-biganswer.big. 60 IN A 10.10.34.11 +-biganswer.big. 60 IN A 10.10.34.12 +-biganswer.big. 60 IN A 10.10.34.13 +-biganswer.big. 60 IN A 10.10.34.14 +-biganswer.big. 60 IN A 10.10.34.15 +-biganswer.big. 60 IN A 10.10.34.16 +-biganswer.big. 60 IN A 10.10.34.17 +-biganswer.big. 60 IN A 10.10.34.18 +-biganswer.big. 60 IN A 10.10.34.19 +-biganswer.big. 60 IN A 10.10.34.20 +-biganswer.big. 60 IN A 10.10.34.21 +-biganswer.big. 60 IN A 10.10.34.22 +-biganswer.big. 60 IN A 10.10.34.23 +-biganswer.big. 60 IN A 10.10.34.24 +-biganswer.big. 60 IN A 10.10.34.25 +-biganswer.big. 60 IN A 10.10.34.26 +-biganswer.big. 60 IN A 10.10.34.27 +-biganswer.big. 60 IN A 10.10.34.28 +-biganswer.big. 60 IN A 10.10.34.29 +-biganswer.big. 60 IN A 10.10.34.30 +-biganswer.big. 60 IN A 10.10.34.31 +-biganswer.big. 60 IN A 10.10.34.32 +-biganswer.big. 60 IN A 10.10.34.33 +-biganswer.big. 60 IN A 10.10.34.34 +-biganswer.big. 60 IN A 10.10.34.35 +-biganswer.big. 60 IN A 10.10.34.36 +-biganswer.big. 60 IN A 10.10.34.37 +-biganswer.big. 60 IN A 10.10.34.38 +-biganswer.big. 60 IN A 10.10.34.39 +-biganswer.big. 60 IN A 10.10.34.40 +-biganswer.big. 60 IN A 10.10.34.41 +-biganswer.big. 60 IN A 10.10.34.42 +-biganswer.big. 60 IN A 10.10.34.43 +-biganswer.big. 60 IN A 10.10.34.44 +-biganswer.big. 60 IN A 10.10.34.45 +-biganswer.big. 60 IN A 10.10.34.46 +-biganswer.big. 60 IN A 10.10.34.47 +-biganswer.big. 60 IN A 10.10.34.48 +-biganswer.big. 60 IN A 10.10.34.49 +-biganswer.big. 60 IN A 10.10.34.50 +-biganswer.big. 60 IN A 10.10.35.1 +-biganswer.big. 60 IN A 10.10.35.2 +-biganswer.big. 60 IN A 10.10.35.3 +-biganswer.big. 60 IN A 10.10.35.4 +-biganswer.big. 60 IN A 10.10.35.5 +-biganswer.big. 60 IN A 10.10.35.6 +-biganswer.big. 60 IN A 10.10.35.7 +-biganswer.big. 60 IN A 10.10.35.8 +-biganswer.big. 60 IN A 10.10.35.9 +-biganswer.big. 60 IN A 10.10.35.10 +-biganswer.big. 60 IN A 10.10.35.11 +-biganswer.big. 60 IN A 10.10.35.12 +-biganswer.big. 60 IN A 10.10.35.13 +-biganswer.big. 60 IN A 10.10.35.14 +-biganswer.big. 60 IN A 10.10.35.15 +-biganswer.big. 60 IN A 10.10.35.16 +-biganswer.big. 60 IN A 10.10.35.17 +-biganswer.big. 60 IN A 10.10.35.18 +-biganswer.big. 60 IN A 10.10.35.19 +-biganswer.big. 60 IN A 10.10.35.20 +-biganswer.big. 60 IN A 10.10.35.21 +-biganswer.big. 60 IN A 10.10.35.22 +-biganswer.big. 60 IN A 10.10.35.23 +-biganswer.big. 60 IN A 10.10.35.24 +-biganswer.big. 60 IN A 10.10.35.25 +-biganswer.big. 60 IN A 10.10.35.26 +-biganswer.big. 60 IN A 10.10.35.27 +-biganswer.big. 60 IN A 10.10.35.28 +-biganswer.big. 60 IN A 10.10.35.29 +-biganswer.big. 60 IN A 10.10.35.30 +-biganswer.big. 60 IN A 10.10.35.31 +-biganswer.big. 60 IN A 10.10.35.32 +-biganswer.big. 60 IN A 10.10.35.33 +-biganswer.big. 60 IN A 10.10.35.34 +-biganswer.big. 60 IN A 10.10.35.35 +-biganswer.big. 60 IN A 10.10.35.36 +-biganswer.big. 60 IN A 10.10.35.37 +-biganswer.big. 60 IN A 10.10.35.38 +-biganswer.big. 60 IN A 10.10.35.39 +-biganswer.big. 60 IN A 10.10.35.40 +-biganswer.big. 60 IN A 10.10.35.41 +-biganswer.big. 60 IN A 10.10.35.42 +-biganswer.big. 60 IN A 10.10.35.43 +-biganswer.big. 60 IN A 10.10.35.44 +-biganswer.big. 60 IN A 10.10.35.45 +-biganswer.big. 60 IN A 10.10.35.46 +-biganswer.big. 60 IN A 10.10.35.47 +-biganswer.big. 60 IN A 10.10.35.48 +-biganswer.big. 60 IN A 10.10.35.49 +-biganswer.big. 60 IN A 10.10.35.50 +-biganswer.big. 60 IN A 10.10.36.1 +-biganswer.big. 60 IN A 10.10.36.2 +-biganswer.big. 60 IN A 10.10.36.3 +-biganswer.big. 60 IN A 10.10.36.4 +-biganswer.big. 60 IN A 10.10.36.5 +-biganswer.big. 60 IN A 10.10.36.6 +-biganswer.big. 60 IN A 10.10.36.7 +-biganswer.big. 60 IN A 10.10.36.8 +-biganswer.big. 60 IN A 10.10.36.9 +-biganswer.big. 60 IN A 10.10.36.10 +-biganswer.big. 60 IN A 10.10.36.11 +-biganswer.big. 60 IN A 10.10.36.12 +-biganswer.big. 60 IN A 10.10.36.13 +-biganswer.big. 60 IN A 10.10.36.14 +-biganswer.big. 60 IN A 10.10.36.15 +-biganswer.big. 60 IN A 10.10.36.16 +-biganswer.big. 60 IN A 10.10.36.17 +-biganswer.big. 60 IN A 10.10.36.18 +-biganswer.big. 60 IN A 10.10.36.19 +-biganswer.big. 60 IN A 10.10.36.20 +-biganswer.big. 60 IN A 10.10.36.21 +-biganswer.big. 60 IN A 10.10.36.22 +-biganswer.big. 60 IN A 10.10.36.23 +-biganswer.big. 60 IN A 10.10.36.24 +-biganswer.big. 60 IN A 10.10.36.25 +-biganswer.big. 60 IN A 10.10.36.26 +-biganswer.big. 60 IN A 10.10.36.27 +-biganswer.big. 60 IN A 10.10.36.28 +-biganswer.big. 60 IN A 10.10.36.29 +-biganswer.big. 60 IN A 10.10.36.30 +-biganswer.big. 60 IN A 10.10.36.31 +-biganswer.big. 60 IN A 10.10.36.32 +-biganswer.big. 60 IN A 10.10.36.33 +-biganswer.big. 60 IN A 10.10.36.34 +-biganswer.big. 60 IN A 10.10.36.35 +-biganswer.big. 60 IN A 10.10.36.36 +-biganswer.big. 60 IN A 10.10.36.37 +-biganswer.big. 60 IN A 10.10.36.38 +-biganswer.big. 60 IN A 10.10.36.39 +-biganswer.big. 60 IN A 10.10.36.40 +-biganswer.big. 60 IN A 10.10.36.41 +-biganswer.big. 60 IN A 10.10.36.42 +-biganswer.big. 60 IN A 10.10.36.43 +-biganswer.big. 60 IN A 10.10.36.44 +-biganswer.big. 60 IN A 10.10.36.45 +-biganswer.big. 60 IN A 10.10.36.46 +-biganswer.big. 60 IN A 10.10.36.47 +-biganswer.big. 60 IN A 10.10.36.48 +-biganswer.big. 60 IN A 10.10.36.49 +-biganswer.big. 60 IN A 10.10.36.50 +-biganswer.big. 60 IN A 10.10.37.1 +-biganswer.big. 60 IN A 10.10.37.2 +-biganswer.big. 60 IN A 10.10.37.3 +-biganswer.big. 60 IN A 10.10.37.4 +-biganswer.big. 60 IN A 10.10.37.5 +-biganswer.big. 60 IN A 10.10.37.6 +-biganswer.big. 60 IN A 10.10.37.7 +-biganswer.big. 60 IN A 10.10.37.8 +-biganswer.big. 60 IN A 10.10.37.9 +-biganswer.big. 60 IN A 10.10.37.10 +-biganswer.big. 60 IN A 10.10.37.11 +-biganswer.big. 60 IN A 10.10.37.12 +-biganswer.big. 60 IN A 10.10.37.13 +-biganswer.big. 60 IN A 10.10.37.14 +-biganswer.big. 60 IN A 10.10.37.15 +-biganswer.big. 60 IN A 10.10.37.16 +-biganswer.big. 60 IN A 10.10.37.17 +-biganswer.big. 60 IN A 10.10.37.18 +-biganswer.big. 60 IN A 10.10.37.19 +-biganswer.big. 60 IN A 10.10.37.20 +-biganswer.big. 60 IN A 10.10.37.21 +-biganswer.big. 60 IN A 10.10.37.22 +-biganswer.big. 60 IN A 10.10.37.23 +-biganswer.big. 60 IN A 10.10.37.24 +-biganswer.big. 60 IN A 10.10.37.25 +-biganswer.big. 60 IN A 10.10.37.26 +-biganswer.big. 60 IN A 10.10.37.27 +-biganswer.big. 60 IN A 10.10.37.28 +-biganswer.big. 60 IN A 10.10.37.29 +-biganswer.big. 60 IN A 10.10.37.30 +-biganswer.big. 60 IN A 10.10.37.31 +-biganswer.big. 60 IN A 10.10.37.32 +-biganswer.big. 60 IN A 10.10.37.33 +-biganswer.big. 60 IN A 10.10.37.34 +-biganswer.big. 60 IN A 10.10.37.35 +-biganswer.big. 60 IN A 10.10.37.36 +-biganswer.big. 60 IN A 10.10.37.37 +-biganswer.big. 60 IN A 10.10.37.38 +-biganswer.big. 60 IN A 10.10.37.39 +-biganswer.big. 60 IN A 10.10.37.40 +-biganswer.big. 60 IN A 10.10.37.41 +-biganswer.big. 60 IN A 10.10.37.42 +-biganswer.big. 60 IN A 10.10.37.43 +-biganswer.big. 60 IN A 10.10.37.44 +-biganswer.big. 60 IN A 10.10.37.45 +-biganswer.big. 60 IN A 10.10.37.46 +-biganswer.big. 60 IN A 10.10.37.47 +-biganswer.big. 60 IN A 10.10.37.48 +-biganswer.big. 60 IN A 10.10.37.49 +-biganswer.big. 60 IN A 10.10.37.50 +-biganswer.big. 60 IN A 10.10.38.1 +-biganswer.big. 60 IN A 10.10.38.2 +-biganswer.big. 60 IN A 10.10.38.3 +-biganswer.big. 60 IN A 10.10.38.4 +-biganswer.big. 60 IN A 10.10.38.5 +-biganswer.big. 60 IN A 10.10.38.6 +-biganswer.big. 60 IN A 10.10.38.7 +-biganswer.big. 60 IN A 10.10.38.8 +-biganswer.big. 60 IN A 10.10.38.9 +-biganswer.big. 60 IN A 10.10.38.10 +-biganswer.big. 60 IN A 10.10.38.11 +-biganswer.big. 60 IN A 10.10.38.12 +-biganswer.big. 60 IN A 10.10.38.13 +-biganswer.big. 60 IN A 10.10.38.14 +-biganswer.big. 60 IN A 10.10.38.15 +-biganswer.big. 60 IN A 10.10.38.16 +-biganswer.big. 60 IN A 10.10.38.17 +-biganswer.big. 60 IN A 10.10.38.18 +-biganswer.big. 60 IN A 10.10.38.19 +-biganswer.big. 60 IN A 10.10.38.20 +-biganswer.big. 60 IN A 10.10.38.21 +-biganswer.big. 60 IN A 10.10.38.22 +-biganswer.big. 60 IN A 10.10.38.23 +-biganswer.big. 60 IN A 10.10.38.24 +-biganswer.big. 60 IN A 10.10.38.25 +-biganswer.big. 60 IN A 10.10.38.26 +-biganswer.big. 60 IN A 10.10.38.27 +-biganswer.big. 60 IN A 10.10.38.28 +-biganswer.big. 60 IN A 10.10.38.29 +-biganswer.big. 60 IN A 10.10.38.30 +-biganswer.big. 60 IN A 10.10.38.31 +-biganswer.big. 60 IN A 10.10.38.32 +-biganswer.big. 60 IN A 10.10.38.33 +-biganswer.big. 60 IN A 10.10.38.34 +-biganswer.big. 60 IN A 10.10.38.35 +-biganswer.big. 60 IN A 10.10.38.36 +-biganswer.big. 60 IN A 10.10.38.37 +-biganswer.big. 60 IN A 10.10.38.38 +-biganswer.big. 60 IN A 10.10.38.39 +-biganswer.big. 60 IN A 10.10.38.40 +-biganswer.big. 60 IN A 10.10.38.41 +-biganswer.big. 60 IN A 10.10.38.42 +-biganswer.big. 60 IN A 10.10.38.43 +-biganswer.big. 60 IN A 10.10.38.44 +-biganswer.big. 60 IN A 10.10.38.45 +-biganswer.big. 60 IN A 10.10.38.46 +-biganswer.big. 60 IN A 10.10.38.47 +-biganswer.big. 60 IN A 10.10.38.48 +-biganswer.big. 60 IN A 10.10.38.49 +-biganswer.big. 60 IN A 10.10.38.50 +-biganswer.big. 60 IN A 10.10.39.1 +-biganswer.big. 60 IN A 10.10.39.2 +-biganswer.big. 60 IN A 10.10.39.3 +-biganswer.big. 60 IN A 10.10.39.4 +-biganswer.big. 60 IN A 10.10.39.5 +-biganswer.big. 60 IN A 10.10.39.6 +-biganswer.big. 60 IN A 10.10.39.7 +-biganswer.big. 60 IN A 10.10.39.8 +-biganswer.big. 60 IN A 10.10.39.9 +-biganswer.big. 60 IN A 10.10.39.10 +-biganswer.big. 60 IN A 10.10.39.11 +-biganswer.big. 60 IN A 10.10.39.12 +-biganswer.big. 60 IN A 10.10.39.13 +-biganswer.big. 60 IN A 10.10.39.14 +-biganswer.big. 60 IN A 10.10.39.15 +-biganswer.big. 60 IN A 10.10.39.16 +-biganswer.big. 60 IN A 10.10.39.17 +-biganswer.big. 60 IN A 10.10.39.18 +-biganswer.big. 60 IN A 10.10.39.19 +-biganswer.big. 60 IN A 10.10.39.20 +-biganswer.big. 60 IN A 10.10.39.21 +-biganswer.big. 60 IN A 10.10.39.22 +-biganswer.big. 60 IN A 10.10.39.23 +-biganswer.big. 60 IN A 10.10.39.24 +-biganswer.big. 60 IN A 10.10.39.25 +-biganswer.big. 60 IN A 10.10.39.26 +-biganswer.big. 60 IN A 10.10.39.27 +-biganswer.big. 60 IN A 10.10.39.28 +-biganswer.big. 60 IN A 10.10.39.29 +-biganswer.big. 60 IN A 10.10.39.30 +-biganswer.big. 60 IN A 10.10.39.31 +-biganswer.big. 60 IN A 10.10.39.32 +-biganswer.big. 60 IN A 10.10.39.33 +-biganswer.big. 60 IN A 10.10.39.34 +-biganswer.big. 60 IN A 10.10.39.35 +-biganswer.big. 60 IN A 10.10.39.36 +-biganswer.big. 60 IN A 10.10.39.37 +-biganswer.big. 60 IN A 10.10.39.38 +-biganswer.big. 60 IN A 10.10.39.39 +-biganswer.big. 60 IN A 10.10.39.40 +-biganswer.big. 60 IN A 10.10.39.41 +-biganswer.big. 60 IN A 10.10.39.42 +-biganswer.big. 60 IN A 10.10.39.43 +-biganswer.big. 60 IN A 10.10.39.44 +-biganswer.big. 60 IN A 10.10.39.45 +-biganswer.big. 60 IN A 10.10.39.46 +-biganswer.big. 60 IN A 10.10.39.47 +-biganswer.big. 60 IN A 10.10.39.48 +-biganswer.big. 60 IN A 10.10.39.49 +-biganswer.big. 60 IN A 10.10.39.50 +-biganswer.big. 60 IN A 10.10.40.1 +-biganswer.big. 60 IN A 10.10.40.2 +-biganswer.big. 60 IN A 10.10.40.3 +-biganswer.big. 60 IN A 10.10.40.4 +-biganswer.big. 60 IN A 10.10.40.5 +-biganswer.big. 60 IN A 10.10.40.6 +-biganswer.big. 60 IN A 10.10.40.7 +-biganswer.big. 60 IN A 10.10.40.8 +-biganswer.big. 60 IN A 10.10.40.9 +-biganswer.big. 60 IN A 10.10.40.10 +-biganswer.big. 60 IN A 10.10.40.11 +-biganswer.big. 60 IN A 10.10.40.12 +-biganswer.big. 60 IN A 10.10.40.13 +-biganswer.big. 60 IN A 10.10.40.14 +-biganswer.big. 60 IN A 10.10.40.15 +-biganswer.big. 60 IN A 10.10.40.16 +-biganswer.big. 60 IN A 10.10.40.17 +-biganswer.big. 60 IN A 10.10.40.18 +-biganswer.big. 60 IN A 10.10.40.19 +-biganswer.big. 60 IN A 10.10.40.20 +-biganswer.big. 60 IN A 10.10.40.21 +-biganswer.big. 60 IN A 10.10.40.22 +-biganswer.big. 60 IN A 10.10.40.23 +-biganswer.big. 60 IN A 10.10.40.24 +-biganswer.big. 60 IN A 10.10.40.25 +-biganswer.big. 60 IN A 10.10.40.26 +-biganswer.big. 60 IN A 10.10.40.27 +-biganswer.big. 60 IN A 10.10.40.28 +-biganswer.big. 60 IN A 10.10.40.29 +-biganswer.big. 60 IN A 10.10.40.30 +-biganswer.big. 60 IN A 10.10.40.31 +-biganswer.big. 60 IN A 10.10.40.32 +-biganswer.big. 60 IN A 10.10.40.33 +-biganswer.big. 60 IN A 10.10.40.34 +-biganswer.big. 60 IN A 10.10.40.35 +-biganswer.big. 60 IN A 10.10.40.36 +-biganswer.big. 60 IN A 10.10.40.37 +-biganswer.big. 60 IN A 10.10.40.38 +-biganswer.big. 60 IN A 10.10.40.39 +-biganswer.big. 60 IN A 10.10.40.40 +-biganswer.big. 60 IN A 10.10.40.41 +-biganswer.big. 60 IN A 10.10.40.42 +-biganswer.big. 60 IN A 10.10.40.43 +-biganswer.big. 60 IN A 10.10.40.44 +-biganswer.big. 60 IN A 10.10.40.45 +-biganswer.big. 60 IN A 10.10.40.46 +-biganswer.big. 60 IN A 10.10.40.47 +-biganswer.big. 60 IN A 10.10.40.48 +-biganswer.big. 60 IN A 10.10.40.49 +-biganswer.big. 60 IN A 10.10.40.50 +-biganswer.big. 60 IN A 10.10.41.1 +-biganswer.big. 60 IN A 10.10.41.2 +-biganswer.big. 60 IN A 10.10.41.3 +-biganswer.big. 60 IN A 10.10.41.4 +-biganswer.big. 60 IN A 10.10.41.5 +-biganswer.big. 60 IN A 10.10.41.6 +-biganswer.big. 60 IN A 10.10.41.7 +-biganswer.big. 60 IN A 10.10.41.8 +-biganswer.big. 60 IN A 10.10.41.9 +-biganswer.big. 60 IN A 10.10.41.10 +-biganswer.big. 60 IN A 10.10.41.11 +-biganswer.big. 60 IN A 10.10.41.12 +-biganswer.big. 60 IN A 10.10.41.13 +-biganswer.big. 60 IN A 10.10.41.14 +-biganswer.big. 60 IN A 10.10.41.15 +-biganswer.big. 60 IN A 10.10.41.16 +-biganswer.big. 60 IN A 10.10.41.17 +-biganswer.big. 60 IN A 10.10.41.18 +-biganswer.big. 60 IN A 10.10.41.19 +-biganswer.big. 60 IN A 10.10.41.20 +-biganswer.big. 60 IN A 10.10.41.21 +-biganswer.big. 60 IN A 10.10.41.22 +-biganswer.big. 60 IN A 10.10.41.23 +-biganswer.big. 60 IN A 10.10.41.24 +-biganswer.big. 60 IN A 10.10.41.25 +-biganswer.big. 60 IN A 10.10.41.26 +-biganswer.big. 60 IN A 10.10.41.27 +-biganswer.big. 60 IN A 10.10.41.28 +-biganswer.big. 60 IN A 10.10.41.29 +-biganswer.big. 60 IN A 10.10.41.30 +-biganswer.big. 60 IN A 10.10.41.31 +-biganswer.big. 60 IN A 10.10.41.32 +-biganswer.big. 60 IN A 10.10.41.33 +-biganswer.big. 60 IN A 10.10.41.34 +-biganswer.big. 60 IN A 10.10.41.35 +-biganswer.big. 60 IN A 10.10.41.36 +-biganswer.big. 60 IN A 10.10.41.37 +-biganswer.big. 60 IN A 10.10.41.38 +-biganswer.big. 60 IN A 10.10.41.39 +-biganswer.big. 60 IN A 10.10.41.40 +-biganswer.big. 60 IN A 10.10.41.41 +-biganswer.big. 60 IN A 10.10.41.42 +-biganswer.big. 60 IN A 10.10.41.43 +-biganswer.big. 60 IN A 10.10.41.44 +-biganswer.big. 60 IN A 10.10.41.45 +-biganswer.big. 60 IN A 10.10.41.46 +-biganswer.big. 60 IN A 10.10.41.47 +-biganswer.big. 60 IN A 10.10.41.48 +-biganswer.big. 60 IN A 10.10.41.49 +-biganswer.big. 60 IN A 10.10.41.50 +-biganswer.big. 60 IN A 10.10.42.1 +-biganswer.big. 60 IN A 10.10.42.2 +-biganswer.big. 60 IN A 10.10.42.3 +-biganswer.big. 60 IN A 10.10.42.4 +-biganswer.big. 60 IN A 10.10.42.5 +-biganswer.big. 60 IN A 10.10.42.6 +-biganswer.big. 60 IN A 10.10.42.7 +-biganswer.big. 60 IN A 10.10.42.8 +-biganswer.big. 60 IN A 10.10.42.9 +-biganswer.big. 60 IN A 10.10.42.10 +-biganswer.big. 60 IN A 10.10.42.11 +-biganswer.big. 60 IN A 10.10.42.12 +-biganswer.big. 60 IN A 10.10.42.13 +-biganswer.big. 60 IN A 10.10.42.14 +-biganswer.big. 60 IN A 10.10.42.15 +-biganswer.big. 60 IN A 10.10.42.16 +-biganswer.big. 60 IN A 10.10.42.17 +-biganswer.big. 60 IN A 10.10.42.18 +-biganswer.big. 60 IN A 10.10.42.19 +-biganswer.big. 60 IN A 10.10.42.20 +-biganswer.big. 60 IN A 10.10.42.21 +-biganswer.big. 60 IN A 10.10.42.22 +-biganswer.big. 60 IN A 10.10.42.23 +-biganswer.big. 60 IN A 10.10.42.24 +-biganswer.big. 60 IN A 10.10.42.25 +-biganswer.big. 60 IN A 10.10.42.26 +-biganswer.big. 60 IN A 10.10.42.27 +-biganswer.big. 60 IN A 10.10.42.28 +-biganswer.big. 60 IN A 10.10.42.29 +-biganswer.big. 60 IN A 10.10.42.30 +-biganswer.big. 60 IN A 10.10.42.31 +-biganswer.big. 60 IN A 10.10.42.32 +-biganswer.big. 60 IN A 10.10.42.33 +-biganswer.big. 60 IN A 10.10.42.34 +-biganswer.big. 60 IN A 10.10.42.35 +-biganswer.big. 60 IN A 10.10.42.36 +-biganswer.big. 60 IN A 10.10.42.37 +-biganswer.big. 60 IN A 10.10.42.38 +-biganswer.big. 60 IN A 10.10.42.39 +-biganswer.big. 60 IN A 10.10.42.40 +-biganswer.big. 60 IN A 10.10.42.41 +-biganswer.big. 60 IN A 10.10.42.42 +-biganswer.big. 60 IN A 10.10.42.43 +-biganswer.big. 60 IN A 10.10.42.44 +-biganswer.big. 60 IN A 10.10.42.45 +-biganswer.big. 60 IN A 10.10.42.46 +-biganswer.big. 60 IN A 10.10.42.47 +-biganswer.big. 60 IN A 10.10.42.48 +-biganswer.big. 60 IN A 10.10.42.49 +-biganswer.big. 60 IN A 10.10.42.50 +-biganswer.big. 60 IN A 10.10.43.1 +-biganswer.big. 60 IN A 10.10.43.2 +-biganswer.big. 60 IN A 10.10.43.3 +-biganswer.big. 60 IN A 10.10.43.4 +-biganswer.big. 60 IN A 10.10.43.5 +-biganswer.big. 60 IN A 10.10.43.6 +-biganswer.big. 60 IN A 10.10.43.7 +-biganswer.big. 60 IN A 10.10.43.8 +-biganswer.big. 60 IN A 10.10.43.9 +-biganswer.big. 60 IN A 10.10.43.10 +-biganswer.big. 60 IN A 10.10.43.11 +-biganswer.big. 60 IN A 10.10.43.12 +-biganswer.big. 60 IN A 10.10.43.13 +-biganswer.big. 60 IN A 10.10.43.14 +-biganswer.big. 60 IN A 10.10.43.15 +-biganswer.big. 60 IN A 10.10.43.16 +-biganswer.big. 60 IN A 10.10.43.17 +-biganswer.big. 60 IN A 10.10.43.18 +-biganswer.big. 60 IN A 10.10.43.19 +-biganswer.big. 60 IN A 10.10.43.20 +-biganswer.big. 60 IN A 10.10.43.21 +-biganswer.big. 60 IN A 10.10.43.22 +-biganswer.big. 60 IN A 10.10.43.23 +-biganswer.big. 60 IN A 10.10.43.24 +-biganswer.big. 60 IN A 10.10.43.25 +-biganswer.big. 60 IN A 10.10.43.26 +-biganswer.big. 60 IN A 10.10.43.27 +-biganswer.big. 60 IN A 10.10.43.28 +-biganswer.big. 60 IN A 10.10.43.29 +-biganswer.big. 60 IN A 10.10.43.30 +-biganswer.big. 60 IN A 10.10.43.31 +-biganswer.big. 60 IN A 10.10.43.32 +-biganswer.big. 60 IN A 10.10.43.33 +-biganswer.big. 60 IN A 10.10.43.34 +-biganswer.big. 60 IN A 10.10.43.35 +-biganswer.big. 60 IN A 10.10.43.36 +-biganswer.big. 60 IN A 10.10.43.37 +-biganswer.big. 60 IN A 10.10.43.38 +-biganswer.big. 60 IN A 10.10.43.39 +-biganswer.big. 60 IN A 10.10.43.40 +-biganswer.big. 60 IN A 10.10.43.41 +-biganswer.big. 60 IN A 10.10.43.42 +-biganswer.big. 60 IN A 10.10.43.43 +-biganswer.big. 60 IN A 10.10.43.44 +-biganswer.big. 60 IN A 10.10.43.45 +-biganswer.big. 60 IN A 10.10.43.46 +-biganswer.big. 60 IN A 10.10.43.47 +-biganswer.big. 60 IN A 10.10.43.48 +-biganswer.big. 60 IN A 10.10.43.49 +-biganswer.big. 60 IN A 10.10.43.50 +-biganswer.big. 60 IN A 10.10.44.1 +-biganswer.big. 60 IN A 10.10.44.2 +-biganswer.big. 60 IN A 10.10.44.3 +-biganswer.big. 60 IN A 10.10.44.4 +-biganswer.big. 60 IN A 10.10.44.5 +-biganswer.big. 60 IN A 10.10.44.6 +-biganswer.big. 60 IN A 10.10.44.7 +-biganswer.big. 60 IN A 10.10.44.8 +-biganswer.big. 60 IN A 10.10.44.9 +-biganswer.big. 60 IN A 10.10.44.10 +-biganswer.big. 60 IN A 10.10.44.11 +-biganswer.big. 60 IN A 10.10.44.12 +-biganswer.big. 60 IN A 10.10.44.13 +-biganswer.big. 60 IN A 10.10.44.14 +-biganswer.big. 60 IN A 10.10.44.15 +-biganswer.big. 60 IN A 10.10.44.16 +-biganswer.big. 60 IN A 10.10.44.17 +-biganswer.big. 60 IN A 10.10.44.18 +-biganswer.big. 60 IN A 10.10.44.19 +-biganswer.big. 60 IN A 10.10.44.20 +-biganswer.big. 60 IN A 10.10.44.21 +-biganswer.big. 60 IN A 10.10.44.22 +-biganswer.big. 60 IN A 10.10.44.23 +-biganswer.big. 60 IN A 10.10.44.24 +-biganswer.big. 60 IN A 10.10.44.25 +-biganswer.big. 60 IN A 10.10.44.26 +-biganswer.big. 60 IN A 10.10.44.27 +-biganswer.big. 60 IN A 10.10.44.28 +-biganswer.big. 60 IN A 10.10.44.29 +-biganswer.big. 60 IN A 10.10.44.30 +-biganswer.big. 60 IN A 10.10.44.31 +-biganswer.big. 60 IN A 10.10.44.32 +-biganswer.big. 60 IN A 10.10.44.33 +-biganswer.big. 60 IN A 10.10.44.34 +-biganswer.big. 60 IN A 10.10.44.35 +-biganswer.big. 60 IN A 10.10.44.36 +-biganswer.big. 60 IN A 10.10.44.37 +-biganswer.big. 60 IN A 10.10.44.38 +-biganswer.big. 60 IN A 10.10.44.39 +-biganswer.big. 60 IN A 10.10.44.40 +-biganswer.big. 60 IN A 10.10.44.41 +-biganswer.big. 60 IN A 10.10.44.42 +-biganswer.big. 60 IN A 10.10.44.43 +-biganswer.big. 60 IN A 10.10.44.44 +-biganswer.big. 60 IN A 10.10.44.45 +-biganswer.big. 60 IN A 10.10.44.46 +-biganswer.big. 60 IN A 10.10.44.47 +-biganswer.big. 60 IN A 10.10.44.48 +-biganswer.big. 60 IN A 10.10.44.49 +-biganswer.big. 60 IN A 10.10.44.50 +-biganswer.big. 60 IN A 10.10.45.1 +-biganswer.big. 60 IN A 10.10.45.2 +-biganswer.big. 60 IN A 10.10.45.3 +-biganswer.big. 60 IN A 10.10.45.4 +-biganswer.big. 60 IN A 10.10.45.5 +-biganswer.big. 60 IN A 10.10.45.6 +-biganswer.big. 60 IN A 10.10.45.7 +-biganswer.big. 60 IN A 10.10.45.8 +-biganswer.big. 60 IN A 10.10.45.9 +-biganswer.big. 60 IN A 10.10.45.10 +-biganswer.big. 60 IN A 10.10.45.11 +-biganswer.big. 60 IN A 10.10.45.12 +-biganswer.big. 60 IN A 10.10.45.13 +-biganswer.big. 60 IN A 10.10.45.14 +-biganswer.big. 60 IN A 10.10.45.15 +-biganswer.big. 60 IN A 10.10.45.16 +-biganswer.big. 60 IN A 10.10.45.17 +-biganswer.big. 60 IN A 10.10.45.18 +-biganswer.big. 60 IN A 10.10.45.19 +-biganswer.big. 60 IN A 10.10.45.20 +-biganswer.big. 60 IN A 10.10.45.21 +-biganswer.big. 60 IN A 10.10.45.22 +-biganswer.big. 60 IN A 10.10.45.23 +-biganswer.big. 60 IN A 10.10.45.24 +-biganswer.big. 60 IN A 10.10.45.25 +-biganswer.big. 60 IN A 10.10.45.26 +-biganswer.big. 60 IN A 10.10.45.27 +-biganswer.big. 60 IN A 10.10.45.28 +-biganswer.big. 60 IN A 10.10.45.29 +-biganswer.big. 60 IN A 10.10.45.30 +-biganswer.big. 60 IN A 10.10.45.31 +-biganswer.big. 60 IN A 10.10.45.32 +-biganswer.big. 60 IN A 10.10.45.33 +-biganswer.big. 60 IN A 10.10.45.34 +-biganswer.big. 60 IN A 10.10.45.35 +-biganswer.big. 60 IN A 10.10.45.36 +-biganswer.big. 60 IN A 10.10.45.37 +-biganswer.big. 60 IN A 10.10.45.38 +-biganswer.big. 60 IN A 10.10.45.39 +-biganswer.big. 60 IN A 10.10.45.40 +-biganswer.big. 60 IN A 10.10.45.41 +-biganswer.big. 60 IN A 10.10.45.42 +-biganswer.big. 60 IN A 10.10.45.43 +-biganswer.big. 60 IN A 10.10.45.44 +-biganswer.big. 60 IN A 10.10.45.45 +-biganswer.big. 60 IN A 10.10.45.46 +-biganswer.big. 60 IN A 10.10.45.47 +-biganswer.big. 60 IN A 10.10.45.48 +-biganswer.big. 60 IN A 10.10.45.49 +-biganswer.big. 60 IN A 10.10.45.50 +-biganswer.big. 60 IN A 10.10.46.1 +-biganswer.big. 60 IN A 10.10.46.2 +-biganswer.big. 60 IN A 10.10.46.3 +-biganswer.big. 60 IN A 10.10.46.4 +-biganswer.big. 60 IN A 10.10.46.5 +-biganswer.big. 60 IN A 10.10.46.6 +-biganswer.big. 60 IN A 10.10.46.7 +-biganswer.big. 60 IN A 10.10.46.8 +-biganswer.big. 60 IN A 10.10.46.9 +-biganswer.big. 60 IN A 10.10.46.10 +-biganswer.big. 60 IN A 10.10.46.11 +-biganswer.big. 60 IN A 10.10.46.12 +-biganswer.big. 60 IN A 10.10.46.13 +-biganswer.big. 60 IN A 10.10.46.14 +-biganswer.big. 60 IN A 10.10.46.15 +-biganswer.big. 60 IN A 10.10.46.16 +-biganswer.big. 60 IN A 10.10.46.17 +-biganswer.big. 60 IN A 10.10.46.18 +-biganswer.big. 60 IN A 10.10.46.19 +-biganswer.big. 60 IN A 10.10.46.20 +-biganswer.big. 60 IN A 10.10.46.21 +-biganswer.big. 60 IN A 10.10.46.22 +-biganswer.big. 60 IN A 10.10.46.23 +-biganswer.big. 60 IN A 10.10.46.24 +-biganswer.big. 60 IN A 10.10.46.25 +-biganswer.big. 60 IN A 10.10.46.26 +-biganswer.big. 60 IN A 10.10.46.27 +-biganswer.big. 60 IN A 10.10.46.28 +-biganswer.big. 60 IN A 10.10.46.29 +-biganswer.big. 60 IN A 10.10.46.30 +-biganswer.big. 60 IN A 10.10.46.31 +-biganswer.big. 60 IN A 10.10.46.32 +-biganswer.big. 60 IN A 10.10.46.33 +-biganswer.big. 60 IN A 10.10.46.34 +-biganswer.big. 60 IN A 10.10.46.35 +-biganswer.big. 60 IN A 10.10.46.36 +-biganswer.big. 60 IN A 10.10.46.37 +-biganswer.big. 60 IN A 10.10.46.38 +-biganswer.big. 60 IN A 10.10.46.39 +-biganswer.big. 60 IN A 10.10.46.40 +-biganswer.big. 60 IN A 10.10.46.41 +-biganswer.big. 60 IN A 10.10.46.42 +-biganswer.big. 60 IN A 10.10.46.43 +-biganswer.big. 60 IN A 10.10.46.44 +-biganswer.big. 60 IN A 10.10.46.45 +-biganswer.big. 60 IN A 10.10.46.46 +-biganswer.big. 60 IN A 10.10.46.47 +-biganswer.big. 60 IN A 10.10.46.48 +-biganswer.big. 60 IN A 10.10.46.49 +-biganswer.big. 60 IN A 10.10.46.50 +-biganswer.big. 60 IN A 10.10.47.1 +-biganswer.big. 60 IN A 10.10.47.2 +-biganswer.big. 60 IN A 10.10.47.3 +-biganswer.big. 60 IN A 10.10.47.4 +-biganswer.big. 60 IN A 10.10.47.5 +-biganswer.big. 60 IN A 10.10.47.6 +-biganswer.big. 60 IN A 10.10.47.7 +-biganswer.big. 60 IN A 10.10.47.8 +-biganswer.big. 60 IN A 10.10.47.9 +-biganswer.big. 60 IN A 10.10.47.10 +-biganswer.big. 60 IN A 10.10.47.11 +-biganswer.big. 60 IN A 10.10.47.12 +-biganswer.big. 60 IN A 10.10.47.13 +-biganswer.big. 60 IN A 10.10.47.14 +-biganswer.big. 60 IN A 10.10.47.15 +-biganswer.big. 60 IN A 10.10.47.16 +-biganswer.big. 60 IN A 10.10.47.17 +-biganswer.big. 60 IN A 10.10.47.18 +-biganswer.big. 60 IN A 10.10.47.19 +-biganswer.big. 60 IN A 10.10.47.20 +-biganswer.big. 60 IN A 10.10.47.21 +-biganswer.big. 60 IN A 10.10.47.22 +-biganswer.big. 60 IN A 10.10.47.23 +-biganswer.big. 60 IN A 10.10.47.24 +-biganswer.big. 60 IN A 10.10.47.25 +-biganswer.big. 60 IN A 10.10.47.26 +-biganswer.big. 60 IN A 10.10.47.27 +-biganswer.big. 60 IN A 10.10.47.28 +-biganswer.big. 60 IN A 10.10.47.29 +-biganswer.big. 60 IN A 10.10.47.30 +-biganswer.big. 60 IN A 10.10.47.31 +-biganswer.big. 60 IN A 10.10.47.32 +-biganswer.big. 60 IN A 10.10.47.33 +-biganswer.big. 60 IN A 10.10.47.34 +-biganswer.big. 60 IN A 10.10.47.35 +-biganswer.big. 60 IN A 10.10.47.36 +-biganswer.big. 60 IN A 10.10.47.37 +-biganswer.big. 60 IN A 10.10.47.38 +-biganswer.big. 60 IN A 10.10.47.39 +-biganswer.big. 60 IN A 10.10.47.40 +-biganswer.big. 60 IN A 10.10.47.41 +-biganswer.big. 60 IN A 10.10.47.42 +-biganswer.big. 60 IN A 10.10.47.43 +-biganswer.big. 60 IN A 10.10.47.44 +-biganswer.big. 60 IN A 10.10.47.45 +-biganswer.big. 60 IN A 10.10.47.46 +-biganswer.big. 60 IN A 10.10.47.47 +-biganswer.big. 60 IN A 10.10.47.48 +-biganswer.big. 60 IN A 10.10.47.49 +-biganswer.big. 60 IN A 10.10.47.50 +-biganswer.big. 60 IN A 10.10.48.1 +-biganswer.big. 60 IN A 10.10.48.2 +-biganswer.big. 60 IN A 10.10.48.3 +-biganswer.big. 60 IN A 10.10.48.4 +-biganswer.big. 60 IN A 10.10.48.5 +-biganswer.big. 60 IN A 10.10.48.6 +-biganswer.big. 60 IN A 10.10.48.7 +-biganswer.big. 60 IN A 10.10.48.8 +-biganswer.big. 60 IN A 10.10.48.9 +-biganswer.big. 60 IN A 10.10.48.10 +-biganswer.big. 60 IN A 10.10.48.11 +-biganswer.big. 60 IN A 10.10.48.12 +-biganswer.big. 60 IN A 10.10.48.13 +-biganswer.big. 60 IN A 10.10.48.14 +-biganswer.big. 60 IN A 10.10.48.15 +-biganswer.big. 60 IN A 10.10.48.16 +-biganswer.big. 60 IN A 10.10.48.17 +-biganswer.big. 60 IN A 10.10.48.18 +-biganswer.big. 60 IN A 10.10.48.19 +-biganswer.big. 60 IN A 10.10.48.20 +-biganswer.big. 60 IN A 10.10.48.21 +-biganswer.big. 60 IN A 10.10.48.22 +-biganswer.big. 60 IN A 10.10.48.23 +-biganswer.big. 60 IN A 10.10.48.24 +-biganswer.big. 60 IN A 10.10.48.25 +-biganswer.big. 60 IN A 10.10.48.26 +-biganswer.big. 60 IN A 10.10.48.27 +-biganswer.big. 60 IN A 10.10.48.28 +-biganswer.big. 60 IN A 10.10.48.29 +-biganswer.big. 60 IN A 10.10.48.30 +-biganswer.big. 60 IN A 10.10.48.31 +-biganswer.big. 60 IN A 10.10.48.32 +-biganswer.big. 60 IN A 10.10.48.33 +-biganswer.big. 60 IN A 10.10.48.34 +-biganswer.big. 60 IN A 10.10.48.35 +-biganswer.big. 60 IN A 10.10.48.36 +-biganswer.big. 60 IN A 10.10.48.37 +-biganswer.big. 60 IN A 10.10.48.38 +-biganswer.big. 60 IN A 10.10.48.39 +-biganswer.big. 60 IN A 10.10.48.40 +-biganswer.big. 60 IN A 10.10.48.41 +-biganswer.big. 60 IN A 10.10.48.42 +-biganswer.big. 60 IN A 10.10.48.43 +-biganswer.big. 60 IN A 10.10.48.44 +-biganswer.big. 60 IN A 10.10.48.45 +-biganswer.big. 60 IN A 10.10.48.46 +-biganswer.big. 60 IN A 10.10.48.47 +-biganswer.big. 60 IN A 10.10.48.48 +-biganswer.big. 60 IN A 10.10.48.49 +-biganswer.big. 60 IN A 10.10.48.50 +-biganswer.big. 60 IN A 10.10.49.1 +-biganswer.big. 60 IN A 10.10.49.2 +-biganswer.big. 60 IN A 10.10.49.3 +-biganswer.big. 60 IN A 10.10.49.4 +-biganswer.big. 60 IN A 10.10.49.5 +-biganswer.big. 60 IN A 10.10.49.6 +-biganswer.big. 60 IN A 10.10.49.7 +-biganswer.big. 60 IN A 10.10.49.8 +-biganswer.big. 60 IN A 10.10.49.9 +-biganswer.big. 60 IN A 10.10.49.10 +-biganswer.big. 60 IN A 10.10.49.11 +-biganswer.big. 60 IN A 10.10.49.12 +-biganswer.big. 60 IN A 10.10.49.13 +-biganswer.big. 60 IN A 10.10.49.14 +-biganswer.big. 60 IN A 10.10.49.15 +-biganswer.big. 60 IN A 10.10.49.16 +-biganswer.big. 60 IN A 10.10.49.17 +-biganswer.big. 60 IN A 10.10.49.18 +-biganswer.big. 60 IN A 10.10.49.19 +-biganswer.big. 60 IN A 10.10.49.20 +-biganswer.big. 60 IN A 10.10.49.21 +-biganswer.big. 60 IN A 10.10.49.22 +-biganswer.big. 60 IN A 10.10.49.23 +-biganswer.big. 60 IN A 10.10.49.24 +-biganswer.big. 60 IN A 10.10.49.25 +-biganswer.big. 60 IN A 10.10.49.26 +-biganswer.big. 60 IN A 10.10.49.27 +-biganswer.big. 60 IN A 10.10.49.28 +-biganswer.big. 60 IN A 10.10.49.29 +-biganswer.big. 60 IN A 10.10.49.30 +-biganswer.big. 60 IN A 10.10.49.31 +-biganswer.big. 60 IN A 10.10.49.32 +-biganswer.big. 60 IN A 10.10.49.33 +-biganswer.big. 60 IN A 10.10.49.34 +-biganswer.big. 60 IN A 10.10.49.35 +-biganswer.big. 60 IN A 10.10.49.36 +-biganswer.big. 60 IN A 10.10.49.37 +-biganswer.big. 60 IN A 10.10.49.38 +-biganswer.big. 60 IN A 10.10.49.39 +-biganswer.big. 60 IN A 10.10.49.40 +-biganswer.big. 60 IN A 10.10.49.41 +-biganswer.big. 60 IN A 10.10.49.42 +-biganswer.big. 60 IN A 10.10.49.43 +-biganswer.big. 60 IN A 10.10.49.44 +-biganswer.big. 60 IN A 10.10.49.45 +-biganswer.big. 60 IN A 10.10.49.46 +-biganswer.big. 60 IN A 10.10.49.47 +-biganswer.big. 60 IN A 10.10.49.48 +-biganswer.big. 60 IN A 10.10.49.49 +-biganswer.big. 60 IN A 10.10.49.50 +-biganswer.big. 60 IN A 10.10.50.1 +-biganswer.big. 60 IN A 10.10.50.2 +-biganswer.big. 60 IN A 10.10.50.3 +-biganswer.big. 60 IN A 10.10.50.4 +-biganswer.big. 60 IN A 10.10.50.5 +-biganswer.big. 60 IN A 10.10.50.6 +-biganswer.big. 60 IN A 10.10.50.7 +-biganswer.big. 60 IN A 10.10.50.8 +-biganswer.big. 60 IN A 10.10.50.9 +-biganswer.big. 60 IN A 10.10.50.10 +-biganswer.big. 60 IN A 10.10.50.11 +-biganswer.big. 60 IN A 10.10.50.12 +-biganswer.big. 60 IN A 10.10.50.13 +-biganswer.big. 60 IN A 10.10.50.14 +-biganswer.big. 60 IN A 10.10.50.15 +-biganswer.big. 60 IN A 10.10.50.16 +-biganswer.big. 60 IN A 10.10.50.17 +-biganswer.big. 60 IN A 10.10.50.18 +-biganswer.big. 60 IN A 10.10.50.19 +-biganswer.big. 60 IN A 10.10.50.20 +-biganswer.big. 60 IN A 10.10.50.21 +-biganswer.big. 60 IN A 10.10.50.22 +-biganswer.big. 60 IN A 10.10.50.23 +-biganswer.big. 60 IN A 10.10.50.24 +-biganswer.big. 60 IN A 10.10.50.25 +-biganswer.big. 60 IN A 10.10.50.26 +-biganswer.big. 60 IN A 10.10.50.27 +-biganswer.big. 60 IN A 10.10.50.28 +-biganswer.big. 60 IN A 10.10.50.29 +-biganswer.big. 60 IN A 10.10.50.30 +-biganswer.big. 60 IN A 10.10.50.31 +-biganswer.big. 60 IN A 10.10.50.32 +-biganswer.big. 60 IN A 10.10.50.33 +-biganswer.big. 60 IN A 10.10.50.34 +-biganswer.big. 60 IN A 10.10.50.35 +-biganswer.big. 60 IN A 10.10.50.36 +-biganswer.big. 60 IN A 10.10.50.37 +-biganswer.big. 60 IN A 10.10.50.38 +-biganswer.big. 60 IN A 10.10.50.39 +-biganswer.big. 60 IN A 10.10.50.40 +-biganswer.big. 60 IN A 10.10.50.41 +-biganswer.big. 60 IN A 10.10.50.42 +-biganswer.big. 60 IN A 10.10.50.43 +-biganswer.big. 60 IN A 10.10.50.44 +-biganswer.big. 60 IN A 10.10.50.45 +-biganswer.big. 60 IN A 10.10.50.46 +-biganswer.big. 60 IN A 10.10.50.47 +-biganswer.big. 60 IN A 10.10.50.48 +-biganswer.big. 60 IN A 10.10.50.49 +-biganswer.big. 60 IN A 10.10.50.50 ++big. IN SOA ns.big. hostmaster.ns.big. 1 0 0 0 60 ++big. IN NS ns.big. ++ns.big. IN A 10.53.0.1 ++ ++biganswer.big. IN A 10.10.1.1 ++biganswer.big. IN A 10.10.1.2 ++biganswer.big. IN A 10.10.1.3 ++biganswer.big. IN A 10.10.1.4 ++biganswer.big. IN A 10.10.1.5 ++biganswer.big. IN A 10.10.1.6 ++biganswer.big. IN A 10.10.1.7 ++biganswer.big. IN A 10.10.1.8 ++biganswer.big. IN A 10.10.1.9 ++biganswer.big. IN A 10.10.1.10 ++biganswer.big. IN A 10.10.1.11 ++biganswer.big. IN A 10.10.1.12 ++biganswer.big. IN A 10.10.1.13 ++biganswer.big. IN A 10.10.1.14 ++biganswer.big. IN A 10.10.1.15 ++biganswer.big. IN A 10.10.1.16 ++biganswer.big. IN A 10.10.1.17 ++biganswer.big. IN A 10.10.1.18 ++biganswer.big. IN A 10.10.1.19 ++biganswer.big. IN A 10.10.1.20 ++biganswer.big. IN A 10.10.1.21 ++biganswer.big. IN A 10.10.1.22 ++biganswer.big. IN A 10.10.1.23 ++biganswer.big. IN A 10.10.1.24 ++biganswer.big. IN A 10.10.1.25 ++biganswer.big. IN A 10.10.1.26 ++biganswer.big. IN A 10.10.1.27 ++biganswer.big. IN A 10.10.1.28 ++biganswer.big. IN A 10.10.1.29 ++biganswer.big. IN A 10.10.1.30 ++biganswer.big. IN A 10.10.1.31 ++biganswer.big. IN A 10.10.1.32 ++biganswer.big. IN A 10.10.1.33 ++biganswer.big. IN A 10.10.1.34 ++biganswer.big. IN A 10.10.1.35 ++biganswer.big. IN A 10.10.1.36 ++biganswer.big. IN A 10.10.1.37 ++biganswer.big. IN A 10.10.1.38 ++biganswer.big. IN A 10.10.1.39 ++biganswer.big. IN A 10.10.1.40 ++biganswer.big. IN A 10.10.1.41 ++biganswer.big. IN A 10.10.1.42 ++biganswer.big. IN A 10.10.1.43 ++biganswer.big. IN A 10.10.1.44 ++biganswer.big. IN A 10.10.1.45 ++biganswer.big. IN A 10.10.1.46 ++biganswer.big. IN A 10.10.1.47 ++biganswer.big. IN A 10.10.1.48 ++biganswer.big. IN A 10.10.1.49 ++biganswer.big. IN A 10.10.1.50 ++biganswer.big. IN A 10.10.2.1 ++biganswer.big. IN A 10.10.2.2 ++biganswer.big. IN A 10.10.2.3 ++biganswer.big. IN A 10.10.2.4 ++biganswer.big. IN A 10.10.2.5 ++biganswer.big. IN A 10.10.2.6 ++biganswer.big. IN A 10.10.2.7 ++biganswer.big. IN A 10.10.2.8 ++biganswer.big. IN A 10.10.2.9 ++biganswer.big. IN A 10.10.2.10 ++biganswer.big. IN A 10.10.2.11 ++biganswer.big. IN A 10.10.2.12 ++biganswer.big. IN A 10.10.2.13 ++biganswer.big. IN A 10.10.2.14 ++biganswer.big. IN A 10.10.2.15 ++biganswer.big. IN A 10.10.2.16 ++biganswer.big. IN A 10.10.2.17 ++biganswer.big. IN A 10.10.2.18 ++biganswer.big. IN A 10.10.2.19 ++biganswer.big. IN A 10.10.2.20 ++biganswer.big. IN A 10.10.2.21 ++biganswer.big. IN A 10.10.2.22 ++biganswer.big. IN A 10.10.2.23 ++biganswer.big. IN A 10.10.2.24 ++biganswer.big. IN A 10.10.2.25 ++biganswer.big. IN A 10.10.2.26 ++biganswer.big. IN A 10.10.2.27 ++biganswer.big. IN A 10.10.2.28 ++biganswer.big. IN A 10.10.2.29 ++biganswer.big. IN A 10.10.2.30 ++biganswer.big. IN A 10.10.2.31 ++biganswer.big. IN A 10.10.2.32 ++biganswer.big. IN A 10.10.2.33 ++biganswer.big. IN A 10.10.2.34 ++biganswer.big. IN A 10.10.2.35 ++biganswer.big. IN A 10.10.2.36 ++biganswer.big. IN A 10.10.2.37 ++biganswer.big. IN A 10.10.2.38 ++biganswer.big. IN A 10.10.2.39 ++biganswer.big. IN A 10.10.2.40 ++biganswer.big. IN A 10.10.2.41 ++biganswer.big. IN A 10.10.2.42 ++biganswer.big. IN A 10.10.2.43 ++biganswer.big. IN A 10.10.2.44 ++biganswer.big. IN A 10.10.2.45 ++biganswer.big. IN A 10.10.2.46 ++biganswer.big. IN A 10.10.2.47 ++biganswer.big. IN A 10.10.2.48 ++biganswer.big. IN A 10.10.2.49 ++biganswer.big. IN A 10.10.2.50 ++biganswer.big. IN A 10.10.3.1 ++biganswer.big. IN A 10.10.3.2 ++biganswer.big. IN A 10.10.3.3 ++biganswer.big. IN A 10.10.3.4 ++biganswer.big. IN A 10.10.3.5 ++biganswer.big. IN A 10.10.3.6 ++biganswer.big. IN A 10.10.3.7 ++biganswer.big. IN A 10.10.3.8 ++biganswer.big. IN A 10.10.3.9 ++biganswer.big. IN A 10.10.3.10 ++biganswer.big. IN A 10.10.3.11 ++biganswer.big. IN A 10.10.3.12 ++biganswer.big. IN A 10.10.3.13 ++biganswer.big. IN A 10.10.3.14 ++biganswer.big. IN A 10.10.3.15 ++biganswer.big. IN A 10.10.3.16 ++biganswer.big. IN A 10.10.3.17 ++biganswer.big. IN A 10.10.3.18 ++biganswer.big. IN A 10.10.3.19 ++biganswer.big. IN A 10.10.3.20 ++biganswer.big. IN A 10.10.3.21 ++biganswer.big. IN A 10.10.3.22 ++biganswer.big. IN A 10.10.3.23 ++biganswer.big. IN A 10.10.3.24 ++biganswer.big. IN A 10.10.3.25 ++biganswer.big. IN A 10.10.3.26 ++biganswer.big. IN A 10.10.3.27 ++biganswer.big. IN A 10.10.3.28 ++biganswer.big. IN A 10.10.3.29 ++biganswer.big. IN A 10.10.3.30 ++biganswer.big. IN A 10.10.3.31 ++biganswer.big. IN A 10.10.3.32 ++biganswer.big. IN A 10.10.3.33 ++biganswer.big. IN A 10.10.3.34 ++biganswer.big. IN A 10.10.3.35 ++biganswer.big. IN A 10.10.3.36 ++biganswer.big. IN A 10.10.3.37 ++biganswer.big. IN A 10.10.3.38 ++biganswer.big. IN A 10.10.3.39 ++biganswer.big. IN A 10.10.3.40 ++biganswer.big. IN A 10.10.3.41 ++biganswer.big. IN A 10.10.3.42 ++biganswer.big. IN A 10.10.3.43 ++biganswer.big. IN A 10.10.3.44 ++biganswer.big. IN A 10.10.3.45 ++biganswer.big. IN A 10.10.3.46 ++biganswer.big. IN A 10.10.3.47 ++biganswer.big. IN A 10.10.3.48 ++biganswer.big. IN A 10.10.3.49 ++biganswer.big. IN A 10.10.3.50 ++biganswer.big. IN A 10.10.4.1 ++biganswer.big. IN A 10.10.4.2 ++biganswer.big. IN A 10.10.4.3 ++biganswer.big. IN A 10.10.4.4 ++biganswer.big. IN A 10.10.4.5 ++biganswer.big. IN A 10.10.4.6 ++biganswer.big. IN A 10.10.4.7 ++biganswer.big. IN A 10.10.4.8 ++biganswer.big. IN A 10.10.4.9 ++biganswer.big. IN A 10.10.4.10 ++biganswer.big. IN A 10.10.4.11 ++biganswer.big. IN A 10.10.4.12 ++biganswer.big. IN A 10.10.4.13 ++biganswer.big. IN A 10.10.4.14 ++biganswer.big. IN A 10.10.4.15 ++biganswer.big. IN A 10.10.4.16 ++biganswer.big. IN A 10.10.4.17 ++biganswer.big. IN A 10.10.4.18 ++biganswer.big. IN A 10.10.4.19 ++biganswer.big. IN A 10.10.4.20 ++biganswer.big. IN A 10.10.4.21 ++biganswer.big. IN A 10.10.4.22 ++biganswer.big. IN A 10.10.4.23 ++biganswer.big. IN A 10.10.4.24 ++biganswer.big. IN A 10.10.4.25 ++biganswer.big. IN A 10.10.4.26 ++biganswer.big. IN A 10.10.4.27 ++biganswer.big. IN A 10.10.4.28 ++biganswer.big. IN A 10.10.4.29 ++biganswer.big. IN A 10.10.4.30 ++biganswer.big. IN A 10.10.4.31 ++biganswer.big. IN A 10.10.4.32 ++biganswer.big. IN A 10.10.4.33 ++biganswer.big. IN A 10.10.4.34 ++biganswer.big. IN A 10.10.4.35 ++biganswer.big. IN A 10.10.4.36 ++biganswer.big. IN A 10.10.4.37 ++biganswer.big. IN A 10.10.4.38 ++biganswer.big. IN A 10.10.4.39 ++biganswer.big. IN A 10.10.4.40 ++biganswer.big. IN A 10.10.4.41 ++biganswer.big. IN A 10.10.4.42 ++biganswer.big. IN A 10.10.4.43 ++biganswer.big. IN A 10.10.4.44 ++biganswer.big. IN A 10.10.4.45 ++biganswer.big. IN A 10.10.4.46 ++biganswer.big. IN A 10.10.4.47 ++biganswer.big. IN A 10.10.4.48 ++biganswer.big. IN A 10.10.4.49 ++biganswer.big. IN A 10.10.4.50 ++biganswer.big. IN A 10.10.5.1 ++biganswer.big. IN A 10.10.5.2 ++biganswer.big. IN A 10.10.5.3 ++biganswer.big. IN A 10.10.5.4 ++biganswer.big. IN A 10.10.5.5 ++biganswer.big. IN A 10.10.5.6 ++biganswer.big. IN A 10.10.5.7 ++biganswer.big. IN A 10.10.5.8 ++biganswer.big. IN A 10.10.5.9 ++biganswer.big. IN A 10.10.5.10 ++biganswer.big. IN A 10.10.5.11 ++biganswer.big. IN A 10.10.5.12 ++biganswer.big. IN A 10.10.5.13 ++biganswer.big. IN A 10.10.5.14 ++biganswer.big. IN A 10.10.5.15 ++biganswer.big. IN A 10.10.5.16 ++biganswer.big. IN A 10.10.5.17 ++biganswer.big. IN A 10.10.5.18 ++biganswer.big. IN A 10.10.5.19 ++biganswer.big. IN A 10.10.5.20 ++biganswer.big. IN A 10.10.5.21 ++biganswer.big. IN A 10.10.5.22 ++biganswer.big. IN A 10.10.5.23 ++biganswer.big. IN A 10.10.5.24 ++biganswer.big. IN A 10.10.5.25 ++biganswer.big. IN A 10.10.5.26 ++biganswer.big. IN A 10.10.5.27 ++biganswer.big. IN A 10.10.5.28 ++biganswer.big. IN A 10.10.5.29 ++biganswer.big. IN A 10.10.5.30 ++biganswer.big. IN A 10.10.5.31 ++biganswer.big. IN A 10.10.5.32 ++biganswer.big. IN A 10.10.5.33 ++biganswer.big. IN A 10.10.5.34 ++biganswer.big. IN A 10.10.5.35 ++biganswer.big. IN A 10.10.5.36 ++biganswer.big. IN A 10.10.5.37 ++biganswer.big. IN A 10.10.5.38 ++biganswer.big. IN A 10.10.5.39 ++biganswer.big. IN A 10.10.5.40 ++biganswer.big. IN A 10.10.5.41 ++biganswer.big. IN A 10.10.5.42 ++biganswer.big. IN A 10.10.5.43 ++biganswer.big. IN A 10.10.5.44 ++biganswer.big. IN A 10.10.5.45 ++biganswer.big. IN A 10.10.5.46 ++biganswer.big. IN A 10.10.5.47 ++biganswer.big. IN A 10.10.5.48 ++biganswer.big. IN A 10.10.5.49 ++biganswer.big. IN A 10.10.5.50 ++biganswer.big. IN A 10.10.6.1 ++biganswer.big. IN A 10.10.6.2 ++biganswer.big. IN A 10.10.6.3 ++biganswer.big. IN A 10.10.6.4 ++biganswer.big. IN A 10.10.6.5 ++biganswer.big. IN A 10.10.6.6 ++biganswer.big. IN A 10.10.6.7 ++biganswer.big. IN A 10.10.6.8 ++biganswer.big. IN A 10.10.6.9 ++biganswer.big. IN A 10.10.6.10 ++biganswer.big. IN A 10.10.6.11 ++biganswer.big. IN A 10.10.6.12 ++biganswer.big. IN A 10.10.6.13 ++biganswer.big. IN A 10.10.6.14 ++biganswer.big. IN A 10.10.6.15 ++biganswer.big. IN A 10.10.6.16 ++biganswer.big. IN A 10.10.6.17 ++biganswer.big. IN A 10.10.6.18 ++biganswer.big. IN A 10.10.6.19 ++biganswer.big. IN A 10.10.6.20 ++biganswer.big. IN A 10.10.6.21 ++biganswer.big. IN A 10.10.6.22 ++biganswer.big. IN A 10.10.6.23 ++biganswer.big. IN A 10.10.6.24 ++biganswer.big. IN A 10.10.6.25 ++biganswer.big. IN A 10.10.6.26 ++biganswer.big. IN A 10.10.6.27 ++biganswer.big. IN A 10.10.6.28 ++biganswer.big. IN A 10.10.6.29 ++biganswer.big. IN A 10.10.6.30 ++biganswer.big. IN A 10.10.6.31 ++biganswer.big. IN A 10.10.6.32 ++biganswer.big. IN A 10.10.6.33 ++biganswer.big. IN A 10.10.6.34 ++biganswer.big. IN A 10.10.6.35 ++biganswer.big. IN A 10.10.6.36 ++biganswer.big. IN A 10.10.6.37 ++biganswer.big. IN A 10.10.6.38 ++biganswer.big. IN A 10.10.6.39 ++biganswer.big. IN A 10.10.6.40 ++biganswer.big. IN A 10.10.6.41 ++biganswer.big. IN A 10.10.6.42 ++biganswer.big. IN A 10.10.6.43 ++biganswer.big. IN A 10.10.6.44 ++biganswer.big. IN A 10.10.6.45 ++biganswer.big. IN A 10.10.6.46 ++biganswer.big. IN A 10.10.6.47 ++biganswer.big. IN A 10.10.6.48 ++biganswer.big. IN A 10.10.6.49 ++biganswer.big. IN A 10.10.6.50 ++biganswer.big. IN A 10.10.7.1 ++biganswer.big. IN A 10.10.7.2 ++biganswer.big. IN A 10.10.7.3 ++biganswer.big. IN A 10.10.7.4 ++biganswer.big. IN A 10.10.7.5 ++biganswer.big. IN A 10.10.7.6 ++biganswer.big. IN A 10.10.7.7 ++biganswer.big. IN A 10.10.7.8 ++biganswer.big. IN A 10.10.7.9 ++biganswer.big. IN A 10.10.7.10 ++biganswer.big. IN A 10.10.7.11 ++biganswer.big. IN A 10.10.7.12 ++biganswer.big. IN A 10.10.7.13 ++biganswer.big. IN A 10.10.7.14 ++biganswer.big. IN A 10.10.7.15 ++biganswer.big. IN A 10.10.7.16 ++biganswer.big. IN A 10.10.7.17 ++biganswer.big. IN A 10.10.7.18 ++biganswer.big. IN A 10.10.7.19 ++biganswer.big. IN A 10.10.7.20 ++biganswer.big. IN A 10.10.7.21 ++biganswer.big. IN A 10.10.7.22 ++biganswer.big. IN A 10.10.7.23 ++biganswer.big. IN A 10.10.7.24 ++biganswer.big. IN A 10.10.7.25 ++biganswer.big. IN A 10.10.7.26 ++biganswer.big. IN A 10.10.7.27 ++biganswer.big. IN A 10.10.7.28 ++biganswer.big. IN A 10.10.7.29 ++biganswer.big. IN A 10.10.7.30 ++biganswer.big. IN A 10.10.7.31 ++biganswer.big. IN A 10.10.7.32 ++biganswer.big. IN A 10.10.7.33 ++biganswer.big. IN A 10.10.7.34 ++biganswer.big. IN A 10.10.7.35 ++biganswer.big. IN A 10.10.7.36 ++biganswer.big. IN A 10.10.7.37 ++biganswer.big. IN A 10.10.7.38 ++biganswer.big. IN A 10.10.7.39 ++biganswer.big. IN A 10.10.7.40 ++biganswer.big. IN A 10.10.7.41 ++biganswer.big. IN A 10.10.7.42 ++biganswer.big. IN A 10.10.7.43 ++biganswer.big. IN A 10.10.7.44 ++biganswer.big. IN A 10.10.7.45 ++biganswer.big. IN A 10.10.7.46 ++biganswer.big. IN A 10.10.7.47 ++biganswer.big. IN A 10.10.7.48 ++biganswer.big. IN A 10.10.7.49 ++biganswer.big. IN A 10.10.7.50 ++biganswer.big. IN A 10.10.8.1 ++biganswer.big. IN A 10.10.8.2 ++biganswer.big. IN A 10.10.8.3 ++biganswer.big. IN A 10.10.8.4 ++biganswer.big. IN A 10.10.8.5 ++biganswer.big. IN A 10.10.8.6 ++biganswer.big. IN A 10.10.8.7 ++biganswer.big. IN A 10.10.8.8 ++biganswer.big. IN A 10.10.8.9 ++biganswer.big. IN A 10.10.8.10 ++biganswer.big. IN A 10.10.8.11 ++biganswer.big. IN A 10.10.8.12 ++biganswer.big. IN A 10.10.8.13 ++biganswer.big. IN A 10.10.8.14 ++biganswer.big. IN A 10.10.8.15 ++biganswer.big. IN A 10.10.8.16 ++biganswer.big. IN A 10.10.8.17 ++biganswer.big. IN A 10.10.8.18 ++biganswer.big. IN A 10.10.8.19 ++biganswer.big. IN A 10.10.8.20 ++biganswer.big. IN A 10.10.8.21 ++biganswer.big. IN A 10.10.8.22 ++biganswer.big. IN A 10.10.8.23 ++biganswer.big. IN A 10.10.8.24 ++biganswer.big. IN A 10.10.8.25 ++biganswer.big. IN A 10.10.8.26 ++biganswer.big. IN A 10.10.8.27 ++biganswer.big. IN A 10.10.8.28 ++biganswer.big. IN A 10.10.8.29 ++biganswer.big. IN A 10.10.8.30 ++biganswer.big. IN A 10.10.8.31 ++biganswer.big. IN A 10.10.8.32 ++biganswer.big. IN A 10.10.8.33 ++biganswer.big. IN A 10.10.8.34 ++biganswer.big. IN A 10.10.8.35 ++biganswer.big. IN A 10.10.8.36 ++biganswer.big. IN A 10.10.8.37 ++biganswer.big. IN A 10.10.8.38 ++biganswer.big. IN A 10.10.8.39 ++biganswer.big. IN A 10.10.8.40 ++biganswer.big. IN A 10.10.8.41 ++biganswer.big. IN A 10.10.8.42 ++biganswer.big. IN A 10.10.8.43 ++biganswer.big. IN A 10.10.8.44 ++biganswer.big. IN A 10.10.8.45 ++biganswer.big. IN A 10.10.8.46 ++biganswer.big. IN A 10.10.8.47 ++biganswer.big. IN A 10.10.8.48 ++biganswer.big. IN A 10.10.8.49 ++biganswer.big. IN A 10.10.8.50 ++biganswer.big. IN A 10.10.9.1 ++biganswer.big. IN A 10.10.9.2 ++biganswer.big. IN A 10.10.9.3 ++biganswer.big. IN A 10.10.9.4 ++biganswer.big. IN A 10.10.9.5 ++biganswer.big. IN A 10.10.9.6 ++biganswer.big. IN A 10.10.9.7 ++biganswer.big. IN A 10.10.9.8 ++biganswer.big. IN A 10.10.9.9 ++biganswer.big. IN A 10.10.9.10 ++biganswer.big. IN A 10.10.9.11 ++biganswer.big. IN A 10.10.9.12 ++biganswer.big. IN A 10.10.9.13 ++biganswer.big. IN A 10.10.9.14 ++biganswer.big. IN A 10.10.9.15 ++biganswer.big. IN A 10.10.9.16 ++biganswer.big. IN A 10.10.9.17 ++biganswer.big. IN A 10.10.9.18 ++biganswer.big. IN A 10.10.9.19 ++biganswer.big. IN A 10.10.9.20 ++biganswer.big. IN A 10.10.9.21 ++biganswer.big. IN A 10.10.9.22 ++biganswer.big. IN A 10.10.9.23 ++biganswer.big. IN A 10.10.9.24 ++biganswer.big. IN A 10.10.9.25 ++biganswer.big. IN A 10.10.9.26 ++biganswer.big. IN A 10.10.9.27 ++biganswer.big. IN A 10.10.9.28 ++biganswer.big. IN A 10.10.9.29 ++biganswer.big. IN A 10.10.9.30 ++biganswer.big. IN A 10.10.9.31 ++biganswer.big. IN A 10.10.9.32 ++biganswer.big. IN A 10.10.9.33 ++biganswer.big. IN A 10.10.9.34 ++biganswer.big. IN A 10.10.9.35 ++biganswer.big. IN A 10.10.9.36 ++biganswer.big. IN A 10.10.9.37 ++biganswer.big. IN A 10.10.9.38 ++biganswer.big. IN A 10.10.9.39 ++biganswer.big. IN A 10.10.9.40 ++biganswer.big. IN A 10.10.9.41 ++biganswer.big. IN A 10.10.9.42 ++biganswer.big. IN A 10.10.9.43 ++biganswer.big. IN A 10.10.9.44 ++biganswer.big. IN A 10.10.9.45 ++biganswer.big. IN A 10.10.9.46 ++biganswer.big. IN A 10.10.9.47 ++biganswer.big. IN A 10.10.9.48 ++biganswer.big. IN A 10.10.9.49 ++biganswer.big. IN A 10.10.9.50 ++biganswer.big. IN A 10.10.10.1 ++biganswer.big. IN A 10.10.10.2 ++biganswer.big. IN A 10.10.10.3 ++biganswer.big. IN A 10.10.10.4 ++biganswer.big. IN A 10.10.10.5 ++biganswer.big. IN A 10.10.10.6 ++biganswer.big. IN A 10.10.10.7 ++biganswer.big. IN A 10.10.10.8 ++biganswer.big. IN A 10.10.10.9 ++biganswer.big. IN A 10.10.10.10 ++biganswer.big. IN A 10.10.10.11 ++biganswer.big. IN A 10.10.10.12 ++biganswer.big. IN A 10.10.10.13 ++biganswer.big. IN A 10.10.10.14 ++biganswer.big. IN A 10.10.10.15 ++biganswer.big. IN A 10.10.10.16 ++biganswer.big. IN A 10.10.10.17 ++biganswer.big. IN A 10.10.10.18 ++biganswer.big. IN A 10.10.10.19 ++biganswer.big. IN A 10.10.10.20 ++biganswer.big. IN A 10.10.10.21 ++biganswer.big. IN A 10.10.10.22 ++biganswer.big. IN A 10.10.10.23 ++biganswer.big. IN A 10.10.10.24 ++biganswer.big. IN A 10.10.10.25 ++biganswer.big. IN A 10.10.10.26 ++biganswer.big. IN A 10.10.10.27 ++biganswer.big. IN A 10.10.10.28 ++biganswer.big. IN A 10.10.10.29 ++biganswer.big. IN A 10.10.10.30 ++biganswer.big. IN A 10.10.10.31 ++biganswer.big. IN A 10.10.10.32 ++biganswer.big. IN A 10.10.10.33 ++biganswer.big. IN A 10.10.10.34 ++biganswer.big. IN A 10.10.10.35 ++biganswer.big. IN A 10.10.10.36 ++biganswer.big. IN A 10.10.10.37 ++biganswer.big. IN A 10.10.10.38 ++biganswer.big. IN A 10.10.10.39 ++biganswer.big. IN A 10.10.10.40 ++biganswer.big. IN A 10.10.10.41 ++biganswer.big. IN A 10.10.10.42 ++biganswer.big. IN A 10.10.10.43 ++biganswer.big. IN A 10.10.10.44 ++biganswer.big. IN A 10.10.10.45 ++biganswer.big. IN A 10.10.10.46 ++biganswer.big. IN A 10.10.10.47 ++biganswer.big. IN A 10.10.10.48 ++biganswer.big. IN A 10.10.10.49 ++biganswer.big. IN A 10.10.10.50 ++biganswer.big. IN A 10.10.11.1 ++biganswer.big. IN A 10.10.11.2 ++biganswer.big. IN A 10.10.11.3 ++biganswer.big. IN A 10.10.11.4 ++biganswer.big. IN A 10.10.11.5 ++biganswer.big. IN A 10.10.11.6 ++biganswer.big. IN A 10.10.11.7 ++biganswer.big. IN A 10.10.11.8 ++biganswer.big. IN A 10.10.11.9 ++biganswer.big. IN A 10.10.11.10 ++biganswer.big. IN A 10.10.11.11 ++biganswer.big. IN A 10.10.11.12 ++biganswer.big. IN A 10.10.11.13 ++biganswer.big. IN A 10.10.11.14 ++biganswer.big. IN A 10.10.11.15 ++biganswer.big. IN A 10.10.11.16 ++biganswer.big. IN A 10.10.11.17 ++biganswer.big. IN A 10.10.11.18 ++biganswer.big. IN A 10.10.11.19 ++biganswer.big. IN A 10.10.11.20 ++biganswer.big. IN A 10.10.11.21 ++biganswer.big. IN A 10.10.11.22 ++biganswer.big. IN A 10.10.11.23 ++biganswer.big. IN A 10.10.11.24 ++biganswer.big. IN A 10.10.11.25 ++biganswer.big. IN A 10.10.11.26 ++biganswer.big. IN A 10.10.11.27 ++biganswer.big. IN A 10.10.11.28 ++biganswer.big. IN A 10.10.11.29 ++biganswer.big. IN A 10.10.11.30 ++biganswer.big. IN A 10.10.11.31 ++biganswer.big. IN A 10.10.11.32 ++biganswer.big. IN A 10.10.11.33 ++biganswer.big. IN A 10.10.11.34 ++biganswer.big. IN A 10.10.11.35 ++biganswer.big. IN A 10.10.11.36 ++biganswer.big. IN A 10.10.11.37 ++biganswer.big. IN A 10.10.11.38 ++biganswer.big. IN A 10.10.11.39 ++biganswer.big. IN A 10.10.11.40 ++biganswer.big. IN A 10.10.11.41 ++biganswer.big. IN A 10.10.11.42 ++biganswer.big. IN A 10.10.11.43 ++biganswer.big. IN A 10.10.11.44 ++biganswer.big. IN A 10.10.11.45 ++biganswer.big. IN A 10.10.11.46 ++biganswer.big. IN A 10.10.11.47 ++biganswer.big. IN A 10.10.11.48 ++biganswer.big. IN A 10.10.11.49 ++biganswer.big. IN A 10.10.11.50 ++biganswer.big. IN A 10.10.12.1 ++biganswer.big. IN A 10.10.12.2 ++biganswer.big. IN A 10.10.12.3 ++biganswer.big. IN A 10.10.12.4 ++biganswer.big. IN A 10.10.12.5 ++biganswer.big. IN A 10.10.12.6 ++biganswer.big. IN A 10.10.12.7 ++biganswer.big. IN A 10.10.12.8 ++biganswer.big. IN A 10.10.12.9 ++biganswer.big. IN A 10.10.12.10 ++biganswer.big. IN A 10.10.12.11 ++biganswer.big. IN A 10.10.12.12 ++biganswer.big. IN A 10.10.12.13 ++biganswer.big. IN A 10.10.12.14 ++biganswer.big. IN A 10.10.12.15 ++biganswer.big. IN A 10.10.12.16 ++biganswer.big. IN A 10.10.12.17 ++biganswer.big. IN A 10.10.12.18 ++biganswer.big. IN A 10.10.12.19 ++biganswer.big. IN A 10.10.12.20 ++biganswer.big. IN A 10.10.12.21 ++biganswer.big. IN A 10.10.12.22 ++biganswer.big. IN A 10.10.12.23 ++biganswer.big. IN A 10.10.12.24 ++biganswer.big. IN A 10.10.12.25 ++biganswer.big. IN A 10.10.12.26 ++biganswer.big. IN A 10.10.12.27 ++biganswer.big. IN A 10.10.12.28 ++biganswer.big. IN A 10.10.12.29 ++biganswer.big. IN A 10.10.12.30 ++biganswer.big. IN A 10.10.12.31 ++biganswer.big. IN A 10.10.12.32 ++biganswer.big. IN A 10.10.12.33 ++biganswer.big. IN A 10.10.12.34 ++biganswer.big. IN A 10.10.12.35 ++biganswer.big. IN A 10.10.12.36 ++biganswer.big. IN A 10.10.12.37 ++biganswer.big. IN A 10.10.12.38 ++biganswer.big. IN A 10.10.12.39 ++biganswer.big. IN A 10.10.12.40 ++biganswer.big. IN A 10.10.12.41 ++biganswer.big. IN A 10.10.12.42 ++biganswer.big. IN A 10.10.12.43 ++biganswer.big. IN A 10.10.12.44 ++biganswer.big. IN A 10.10.12.45 ++biganswer.big. IN A 10.10.12.46 ++biganswer.big. IN A 10.10.12.47 ++biganswer.big. IN A 10.10.12.48 ++biganswer.big. IN A 10.10.12.49 ++biganswer.big. IN A 10.10.12.50 ++biganswer.big. IN A 10.10.13.1 ++biganswer.big. IN A 10.10.13.2 ++biganswer.big. IN A 10.10.13.3 ++biganswer.big. IN A 10.10.13.4 ++biganswer.big. IN A 10.10.13.5 ++biganswer.big. IN A 10.10.13.6 ++biganswer.big. IN A 10.10.13.7 ++biganswer.big. IN A 10.10.13.8 ++biganswer.big. IN A 10.10.13.9 ++biganswer.big. IN A 10.10.13.10 ++biganswer.big. IN A 10.10.13.11 ++biganswer.big. IN A 10.10.13.12 ++biganswer.big. IN A 10.10.13.13 ++biganswer.big. IN A 10.10.13.14 ++biganswer.big. IN A 10.10.13.15 ++biganswer.big. IN A 10.10.13.16 ++biganswer.big. IN A 10.10.13.17 ++biganswer.big. IN A 10.10.13.18 ++biganswer.big. IN A 10.10.13.19 ++biganswer.big. IN A 10.10.13.20 ++biganswer.big. IN A 10.10.13.21 ++biganswer.big. IN A 10.10.13.22 ++biganswer.big. IN A 10.10.13.23 ++biganswer.big. IN A 10.10.13.24 ++biganswer.big. IN A 10.10.13.25 ++biganswer.big. IN A 10.10.13.26 ++biganswer.big. IN A 10.10.13.27 ++biganswer.big. IN A 10.10.13.28 ++biganswer.big. IN A 10.10.13.29 ++biganswer.big. IN A 10.10.13.30 ++biganswer.big. IN A 10.10.13.31 ++biganswer.big. IN A 10.10.13.32 ++biganswer.big. IN A 10.10.13.33 ++biganswer.big. IN A 10.10.13.34 ++biganswer.big. IN A 10.10.13.35 ++biganswer.big. IN A 10.10.13.36 ++biganswer.big. IN A 10.10.13.37 ++biganswer.big. IN A 10.10.13.38 ++biganswer.big. IN A 10.10.13.39 ++biganswer.big. IN A 10.10.13.40 ++biganswer.big. IN A 10.10.13.41 ++biganswer.big. IN A 10.10.13.42 ++biganswer.big. IN A 10.10.13.43 ++biganswer.big. IN A 10.10.13.44 ++biganswer.big. IN A 10.10.13.45 ++biganswer.big. IN A 10.10.13.46 ++biganswer.big. IN A 10.10.13.47 ++biganswer.big. IN A 10.10.13.48 ++biganswer.big. IN A 10.10.13.49 ++biganswer.big. IN A 10.10.13.50 ++biganswer.big. IN A 10.10.14.1 ++biganswer.big. IN A 10.10.14.2 ++biganswer.big. IN A 10.10.14.3 ++biganswer.big. IN A 10.10.14.4 ++biganswer.big. IN A 10.10.14.5 ++biganswer.big. IN A 10.10.14.6 ++biganswer.big. IN A 10.10.14.7 ++biganswer.big. IN A 10.10.14.8 ++biganswer.big. IN A 10.10.14.9 ++biganswer.big. IN A 10.10.14.10 ++biganswer.big. IN A 10.10.14.11 ++biganswer.big. IN A 10.10.14.12 ++biganswer.big. IN A 10.10.14.13 ++biganswer.big. IN A 10.10.14.14 ++biganswer.big. IN A 10.10.14.15 ++biganswer.big. IN A 10.10.14.16 ++biganswer.big. IN A 10.10.14.17 ++biganswer.big. IN A 10.10.14.18 ++biganswer.big. IN A 10.10.14.19 ++biganswer.big. IN A 10.10.14.20 ++biganswer.big. IN A 10.10.14.21 ++biganswer.big. IN A 10.10.14.22 ++biganswer.big. IN A 10.10.14.23 ++biganswer.big. IN A 10.10.14.24 ++biganswer.big. IN A 10.10.14.25 ++biganswer.big. IN A 10.10.14.26 ++biganswer.big. IN A 10.10.14.27 ++biganswer.big. IN A 10.10.14.28 ++biganswer.big. IN A 10.10.14.29 ++biganswer.big. IN A 10.10.14.30 ++biganswer.big. IN A 10.10.14.31 ++biganswer.big. IN A 10.10.14.32 ++biganswer.big. IN A 10.10.14.33 ++biganswer.big. IN A 10.10.14.34 ++biganswer.big. IN A 10.10.14.35 ++biganswer.big. IN A 10.10.14.36 ++biganswer.big. IN A 10.10.14.37 ++biganswer.big. IN A 10.10.14.38 ++biganswer.big. IN A 10.10.14.39 ++biganswer.big. IN A 10.10.14.40 ++biganswer.big. IN A 10.10.14.41 ++biganswer.big. IN A 10.10.14.42 ++biganswer.big. IN A 10.10.14.43 ++biganswer.big. IN A 10.10.14.44 ++biganswer.big. IN A 10.10.14.45 ++biganswer.big. IN A 10.10.14.46 ++biganswer.big. IN A 10.10.14.47 ++biganswer.big. IN A 10.10.14.48 ++biganswer.big. IN A 10.10.14.49 ++biganswer.big. IN A 10.10.14.50 ++biganswer.big. IN A 10.10.15.1 ++biganswer.big. IN A 10.10.15.2 ++biganswer.big. IN A 10.10.15.3 ++biganswer.big. IN A 10.10.15.4 ++biganswer.big. IN A 10.10.15.5 ++biganswer.big. IN A 10.10.15.6 ++biganswer.big. IN A 10.10.15.7 ++biganswer.big. IN A 10.10.15.8 ++biganswer.big. IN A 10.10.15.9 ++biganswer.big. IN A 10.10.15.10 ++biganswer.big. IN A 10.10.15.11 ++biganswer.big. IN A 10.10.15.12 ++biganswer.big. IN A 10.10.15.13 ++biganswer.big. IN A 10.10.15.14 ++biganswer.big. IN A 10.10.15.15 ++biganswer.big. IN A 10.10.15.16 ++biganswer.big. IN A 10.10.15.17 ++biganswer.big. IN A 10.10.15.18 ++biganswer.big. IN A 10.10.15.19 ++biganswer.big. IN A 10.10.15.20 ++biganswer.big. IN A 10.10.15.21 ++biganswer.big. IN A 10.10.15.22 ++biganswer.big. IN A 10.10.15.23 ++biganswer.big. IN A 10.10.15.24 ++biganswer.big. IN A 10.10.15.25 ++biganswer.big. IN A 10.10.15.26 ++biganswer.big. IN A 10.10.15.27 ++biganswer.big. IN A 10.10.15.28 ++biganswer.big. IN A 10.10.15.29 ++biganswer.big. IN A 10.10.15.30 ++biganswer.big. IN A 10.10.15.31 ++biganswer.big. IN A 10.10.15.32 ++biganswer.big. IN A 10.10.15.33 ++biganswer.big. IN A 10.10.15.34 ++biganswer.big. IN A 10.10.15.35 ++biganswer.big. IN A 10.10.15.36 ++biganswer.big. IN A 10.10.15.37 ++biganswer.big. IN A 10.10.15.38 ++biganswer.big. IN A 10.10.15.39 ++biganswer.big. IN A 10.10.15.40 ++biganswer.big. IN A 10.10.15.41 ++biganswer.big. IN A 10.10.15.42 ++biganswer.big. IN A 10.10.15.43 ++biganswer.big. IN A 10.10.15.44 ++biganswer.big. IN A 10.10.15.45 ++biganswer.big. IN A 10.10.15.46 ++biganswer.big. IN A 10.10.15.47 ++biganswer.big. IN A 10.10.15.48 ++biganswer.big. IN A 10.10.15.49 ++biganswer.big. IN A 10.10.15.50 ++biganswer.big. IN A 10.10.16.1 ++biganswer.big. IN A 10.10.16.2 ++biganswer.big. IN A 10.10.16.3 ++biganswer.big. IN A 10.10.16.4 ++biganswer.big. IN A 10.10.16.5 ++biganswer.big. IN A 10.10.16.6 ++biganswer.big. IN A 10.10.16.7 ++biganswer.big. IN A 10.10.16.8 ++biganswer.big. IN A 10.10.16.9 ++biganswer.big. IN A 10.10.16.10 ++biganswer.big. IN A 10.10.16.11 ++biganswer.big. IN A 10.10.16.12 ++biganswer.big. IN A 10.10.16.13 ++biganswer.big. IN A 10.10.16.14 ++biganswer.big. IN A 10.10.16.15 ++biganswer.big. IN A 10.10.16.16 ++biganswer.big. IN A 10.10.16.17 ++biganswer.big. IN A 10.10.16.18 ++biganswer.big. IN A 10.10.16.19 ++biganswer.big. IN A 10.10.16.20 ++biganswer.big. IN A 10.10.16.21 ++biganswer.big. IN A 10.10.16.22 ++biganswer.big. IN A 10.10.16.23 ++biganswer.big. IN A 10.10.16.24 ++biganswer.big. IN A 10.10.16.25 ++biganswer.big. IN A 10.10.16.26 ++biganswer.big. IN A 10.10.16.27 ++biganswer.big. IN A 10.10.16.28 ++biganswer.big. IN A 10.10.16.29 ++biganswer.big. IN A 10.10.16.30 ++biganswer.big. IN A 10.10.16.31 ++biganswer.big. IN A 10.10.16.32 ++biganswer.big. IN A 10.10.16.33 ++biganswer.big. IN A 10.10.16.34 ++biganswer.big. IN A 10.10.16.35 ++biganswer.big. IN A 10.10.16.36 ++biganswer.big. IN A 10.10.16.37 ++biganswer.big. IN A 10.10.16.38 ++biganswer.big. IN A 10.10.16.39 ++biganswer.big. IN A 10.10.16.40 ++biganswer.big. IN A 10.10.16.41 ++biganswer.big. IN A 10.10.16.42 ++biganswer.big. IN A 10.10.16.43 ++biganswer.big. IN A 10.10.16.44 ++biganswer.big. IN A 10.10.16.45 ++biganswer.big. IN A 10.10.16.46 ++biganswer.big. IN A 10.10.16.47 ++biganswer.big. IN A 10.10.16.48 ++biganswer.big. IN A 10.10.16.49 ++biganswer.big. IN A 10.10.16.50 ++biganswer.big. IN A 10.10.17.1 ++biganswer.big. IN A 10.10.17.2 ++biganswer.big. IN A 10.10.17.3 ++biganswer.big. IN A 10.10.17.4 ++biganswer.big. IN A 10.10.17.5 ++biganswer.big. IN A 10.10.17.6 ++biganswer.big. IN A 10.10.17.7 ++biganswer.big. IN A 10.10.17.8 ++biganswer.big. IN A 10.10.17.9 ++biganswer.big. IN A 10.10.17.10 ++biganswer.big. IN A 10.10.17.11 ++biganswer.big. IN A 10.10.17.12 ++biganswer.big. IN A 10.10.17.13 ++biganswer.big. IN A 10.10.17.14 ++biganswer.big. IN A 10.10.17.15 ++biganswer.big. IN A 10.10.17.16 ++biganswer.big. IN A 10.10.17.17 ++biganswer.big. IN A 10.10.17.18 ++biganswer.big. IN A 10.10.17.19 ++biganswer.big. IN A 10.10.17.20 ++biganswer.big. IN A 10.10.17.21 ++biganswer.big. IN A 10.10.17.22 ++biganswer.big. IN A 10.10.17.23 ++biganswer.big. IN A 10.10.17.24 ++biganswer.big. IN A 10.10.17.25 ++biganswer.big. IN A 10.10.17.26 ++biganswer.big. IN A 10.10.17.27 ++biganswer.big. IN A 10.10.17.28 ++biganswer.big. IN A 10.10.17.29 ++biganswer.big. IN A 10.10.17.30 ++biganswer.big. IN A 10.10.17.31 ++biganswer.big. IN A 10.10.17.32 ++biganswer.big. IN A 10.10.17.33 ++biganswer.big. IN A 10.10.17.34 ++biganswer.big. IN A 10.10.17.35 ++biganswer.big. IN A 10.10.17.36 ++biganswer.big. IN A 10.10.17.37 ++biganswer.big. IN A 10.10.17.38 ++biganswer.big. IN A 10.10.17.39 ++biganswer.big. IN A 10.10.17.40 ++biganswer.big. IN A 10.10.17.41 ++biganswer.big. IN A 10.10.17.42 ++biganswer.big. IN A 10.10.17.43 ++biganswer.big. IN A 10.10.17.44 ++biganswer.big. IN A 10.10.17.45 ++biganswer.big. IN A 10.10.17.46 ++biganswer.big. IN A 10.10.17.47 ++biganswer.big. IN A 10.10.17.48 ++biganswer.big. IN A 10.10.17.49 ++biganswer.big. IN A 10.10.17.50 ++biganswer.big. IN A 10.10.18.1 ++biganswer.big. IN A 10.10.18.2 ++biganswer.big. IN A 10.10.18.3 ++biganswer.big. IN A 10.10.18.4 ++biganswer.big. IN A 10.10.18.5 ++biganswer.big. IN A 10.10.18.6 ++biganswer.big. IN A 10.10.18.7 ++biganswer.big. IN A 10.10.18.8 ++biganswer.big. IN A 10.10.18.9 ++biganswer.big. IN A 10.10.18.10 ++biganswer.big. IN A 10.10.18.11 ++biganswer.big. IN A 10.10.18.12 ++biganswer.big. IN A 10.10.18.13 ++biganswer.big. IN A 10.10.18.14 ++biganswer.big. IN A 10.10.18.15 ++biganswer.big. IN A 10.10.18.16 ++biganswer.big. IN A 10.10.18.17 ++biganswer.big. IN A 10.10.18.18 ++biganswer.big. IN A 10.10.18.19 ++biganswer.big. IN A 10.10.18.20 ++biganswer.big. IN A 10.10.18.21 ++biganswer.big. IN A 10.10.18.22 ++biganswer.big. IN A 10.10.18.23 ++biganswer.big. IN A 10.10.18.24 ++biganswer.big. IN A 10.10.18.25 ++biganswer.big. IN A 10.10.18.26 ++biganswer.big. IN A 10.10.18.27 ++biganswer.big. IN A 10.10.18.28 ++biganswer.big. IN A 10.10.18.29 ++biganswer.big. IN A 10.10.18.30 ++biganswer.big. IN A 10.10.18.31 ++biganswer.big. IN A 10.10.18.32 ++biganswer.big. IN A 10.10.18.33 ++biganswer.big. IN A 10.10.18.34 ++biganswer.big. IN A 10.10.18.35 ++biganswer.big. IN A 10.10.18.36 ++biganswer.big. IN A 10.10.18.37 ++biganswer.big. IN A 10.10.18.38 ++biganswer.big. IN A 10.10.18.39 ++biganswer.big. IN A 10.10.18.40 ++biganswer.big. IN A 10.10.18.41 ++biganswer.big. IN A 10.10.18.42 ++biganswer.big. IN A 10.10.18.43 ++biganswer.big. IN A 10.10.18.44 ++biganswer.big. IN A 10.10.18.45 ++biganswer.big. IN A 10.10.18.46 ++biganswer.big. IN A 10.10.18.47 ++biganswer.big. IN A 10.10.18.48 ++biganswer.big. IN A 10.10.18.49 ++biganswer.big. IN A 10.10.18.50 ++biganswer.big. IN A 10.10.19.1 ++biganswer.big. IN A 10.10.19.2 ++biganswer.big. IN A 10.10.19.3 ++biganswer.big. IN A 10.10.19.4 ++biganswer.big. IN A 10.10.19.5 ++biganswer.big. IN A 10.10.19.6 ++biganswer.big. IN A 10.10.19.7 ++biganswer.big. IN A 10.10.19.8 ++biganswer.big. IN A 10.10.19.9 ++biganswer.big. IN A 10.10.19.10 ++biganswer.big. IN A 10.10.19.11 ++biganswer.big. IN A 10.10.19.12 ++biganswer.big. IN A 10.10.19.13 ++biganswer.big. IN A 10.10.19.14 ++biganswer.big. IN A 10.10.19.15 ++biganswer.big. IN A 10.10.19.16 ++biganswer.big. IN A 10.10.19.17 ++biganswer.big. IN A 10.10.19.18 ++biganswer.big. IN A 10.10.19.19 ++biganswer.big. IN A 10.10.19.20 ++biganswer.big. IN A 10.10.19.21 ++biganswer.big. IN A 10.10.19.22 ++biganswer.big. IN A 10.10.19.23 ++biganswer.big. IN A 10.10.19.24 ++biganswer.big. IN A 10.10.19.25 ++biganswer.big. IN A 10.10.19.26 ++biganswer.big. IN A 10.10.19.27 ++biganswer.big. IN A 10.10.19.28 ++biganswer.big. IN A 10.10.19.29 ++biganswer.big. IN A 10.10.19.30 ++biganswer.big. IN A 10.10.19.31 ++biganswer.big. IN A 10.10.19.32 ++biganswer.big. IN A 10.10.19.33 ++biganswer.big. IN A 10.10.19.34 ++biganswer.big. IN A 10.10.19.35 ++biganswer.big. IN A 10.10.19.36 ++biganswer.big. IN A 10.10.19.37 ++biganswer.big. IN A 10.10.19.38 ++biganswer.big. IN A 10.10.19.39 ++biganswer.big. IN A 10.10.19.40 ++biganswer.big. IN A 10.10.19.41 ++biganswer.big. IN A 10.10.19.42 ++biganswer.big. IN A 10.10.19.43 ++biganswer.big. IN A 10.10.19.44 ++biganswer.big. IN A 10.10.19.45 ++biganswer.big. IN A 10.10.19.46 ++biganswer.big. IN A 10.10.19.47 ++biganswer.big. IN A 10.10.19.48 ++biganswer.big. IN A 10.10.19.49 ++biganswer.big. IN A 10.10.19.50 ++biganswer.big. IN A 10.10.20.1 ++biganswer.big. IN A 10.10.20.2 ++biganswer.big. IN A 10.10.20.3 ++biganswer.big. IN A 10.10.20.4 ++biganswer.big. IN A 10.10.20.5 ++biganswer.big. IN A 10.10.20.6 ++biganswer.big. IN A 10.10.20.7 ++biganswer.big. IN A 10.10.20.8 ++biganswer.big. IN A 10.10.20.9 ++biganswer.big. IN A 10.10.20.10 ++biganswer.big. IN A 10.10.20.11 ++biganswer.big. IN A 10.10.20.12 ++biganswer.big. IN A 10.10.20.13 ++biganswer.big. IN A 10.10.20.14 ++biganswer.big. IN A 10.10.20.15 ++biganswer.big. IN A 10.10.20.16 ++biganswer.big. IN A 10.10.20.17 ++biganswer.big. IN A 10.10.20.18 ++biganswer.big. IN A 10.10.20.19 ++biganswer.big. IN A 10.10.20.20 ++biganswer.big. IN A 10.10.20.21 ++biganswer.big. IN A 10.10.20.22 ++biganswer.big. IN A 10.10.20.23 ++biganswer.big. IN A 10.10.20.24 ++biganswer.big. IN A 10.10.20.25 ++biganswer.big. IN A 10.10.20.26 ++biganswer.big. IN A 10.10.20.27 ++biganswer.big. IN A 10.10.20.28 ++biganswer.big. IN A 10.10.20.29 ++biganswer.big. IN A 10.10.20.30 ++biganswer.big. IN A 10.10.20.31 ++biganswer.big. IN A 10.10.20.32 ++biganswer.big. IN A 10.10.20.33 ++biganswer.big. IN A 10.10.20.34 ++biganswer.big. IN A 10.10.20.35 ++biganswer.big. IN A 10.10.20.36 ++biganswer.big. IN A 10.10.20.37 ++biganswer.big. IN A 10.10.20.38 ++biganswer.big. IN A 10.10.20.39 ++biganswer.big. IN A 10.10.20.40 ++biganswer.big. IN A 10.10.20.41 ++biganswer.big. IN A 10.10.20.42 ++biganswer.big. IN A 10.10.20.43 ++biganswer.big. IN A 10.10.20.44 ++biganswer.big. IN A 10.10.20.45 ++biganswer.big. IN A 10.10.20.46 ++biganswer.big. IN A 10.10.20.47 ++biganswer.big. IN A 10.10.20.48 ++biganswer.big. IN A 10.10.20.49 ++biganswer.big. IN A 10.10.20.50 ++biganswer.big. IN A 10.10.21.1 ++biganswer.big. IN A 10.10.21.2 ++biganswer.big. IN A 10.10.21.3 ++biganswer.big. IN A 10.10.21.4 ++biganswer.big. IN A 10.10.21.5 ++biganswer.big. IN A 10.10.21.6 ++biganswer.big. IN A 10.10.21.7 ++biganswer.big. IN A 10.10.21.8 ++biganswer.big. IN A 10.10.21.9 ++biganswer.big. IN A 10.10.21.10 ++biganswer.big. IN A 10.10.21.11 ++biganswer.big. IN A 10.10.21.12 ++biganswer.big. IN A 10.10.21.13 ++biganswer.big. IN A 10.10.21.14 ++biganswer.big. IN A 10.10.21.15 ++biganswer.big. IN A 10.10.21.16 ++biganswer.big. IN A 10.10.21.17 ++biganswer.big. IN A 10.10.21.18 ++biganswer.big. IN A 10.10.21.19 ++biganswer.big. IN A 10.10.21.20 ++biganswer.big. IN A 10.10.21.21 ++biganswer.big. IN A 10.10.21.22 ++biganswer.big. IN A 10.10.21.23 ++biganswer.big. IN A 10.10.21.24 ++biganswer.big. IN A 10.10.21.25 ++biganswer.big. IN A 10.10.21.26 ++biganswer.big. IN A 10.10.21.27 ++biganswer.big. IN A 10.10.21.28 ++biganswer.big. IN A 10.10.21.29 ++biganswer.big. IN A 10.10.21.30 ++biganswer.big. IN A 10.10.21.31 ++biganswer.big. IN A 10.10.21.32 ++biganswer.big. IN A 10.10.21.33 ++biganswer.big. IN A 10.10.21.34 ++biganswer.big. IN A 10.10.21.35 ++biganswer.big. IN A 10.10.21.36 ++biganswer.big. IN A 10.10.21.37 ++biganswer.big. IN A 10.10.21.38 ++biganswer.big. IN A 10.10.21.39 ++biganswer.big. IN A 10.10.21.40 ++biganswer.big. IN A 10.10.21.41 ++biganswer.big. IN A 10.10.21.42 ++biganswer.big. IN A 10.10.21.43 ++biganswer.big. IN A 10.10.21.44 ++biganswer.big. IN A 10.10.21.45 ++biganswer.big. IN A 10.10.21.46 ++biganswer.big. IN A 10.10.21.47 ++biganswer.big. IN A 10.10.21.48 ++biganswer.big. IN A 10.10.21.49 ++biganswer.big. IN A 10.10.21.50 ++biganswer.big. IN A 10.10.22.1 ++biganswer.big. IN A 10.10.22.2 ++biganswer.big. IN A 10.10.22.3 ++biganswer.big. IN A 10.10.22.4 ++biganswer.big. IN A 10.10.22.5 ++biganswer.big. IN A 10.10.22.6 ++biganswer.big. IN A 10.10.22.7 ++biganswer.big. IN A 10.10.22.8 ++biganswer.big. IN A 10.10.22.9 ++biganswer.big. IN A 10.10.22.10 ++biganswer.big. IN A 10.10.22.11 ++biganswer.big. IN A 10.10.22.12 ++biganswer.big. IN A 10.10.22.13 ++biganswer.big. IN A 10.10.22.14 ++biganswer.big. IN A 10.10.22.15 ++biganswer.big. IN A 10.10.22.16 ++biganswer.big. IN A 10.10.22.17 ++biganswer.big. IN A 10.10.22.18 ++biganswer.big. IN A 10.10.22.19 ++biganswer.big. IN A 10.10.22.20 ++biganswer.big. IN A 10.10.22.21 ++biganswer.big. IN A 10.10.22.22 ++biganswer.big. IN A 10.10.22.23 ++biganswer.big. IN A 10.10.22.24 ++biganswer.big. IN A 10.10.22.25 ++biganswer.big. IN A 10.10.22.26 ++biganswer.big. IN A 10.10.22.27 ++biganswer.big. IN A 10.10.22.28 ++biganswer.big. IN A 10.10.22.29 ++biganswer.big. IN A 10.10.22.30 ++biganswer.big. IN A 10.10.22.31 ++biganswer.big. IN A 10.10.22.32 ++biganswer.big. IN A 10.10.22.33 ++biganswer.big. IN A 10.10.22.34 ++biganswer.big. IN A 10.10.22.35 ++biganswer.big. IN A 10.10.22.36 ++biganswer.big. IN A 10.10.22.37 ++biganswer.big. IN A 10.10.22.38 ++biganswer.big. IN A 10.10.22.39 ++biganswer.big. IN A 10.10.22.40 ++biganswer.big. IN A 10.10.22.41 ++biganswer.big. IN A 10.10.22.42 ++biganswer.big. IN A 10.10.22.43 ++biganswer.big. IN A 10.10.22.44 ++biganswer.big. IN A 10.10.22.45 ++biganswer.big. IN A 10.10.22.46 ++biganswer.big. IN A 10.10.22.47 ++biganswer.big. IN A 10.10.22.48 ++biganswer.big. IN A 10.10.22.49 ++biganswer.big. IN A 10.10.22.50 ++biganswer.big. IN A 10.10.23.1 ++biganswer.big. IN A 10.10.23.2 ++biganswer.big. IN A 10.10.23.3 ++biganswer.big. IN A 10.10.23.4 ++biganswer.big. IN A 10.10.23.5 ++biganswer.big. IN A 10.10.23.6 ++biganswer.big. IN A 10.10.23.7 ++biganswer.big. IN A 10.10.23.8 ++biganswer.big. IN A 10.10.23.9 ++biganswer.big. IN A 10.10.23.10 ++biganswer.big. IN A 10.10.23.11 ++biganswer.big. IN A 10.10.23.12 ++biganswer.big. IN A 10.10.23.13 ++biganswer.big. IN A 10.10.23.14 ++biganswer.big. IN A 10.10.23.15 ++biganswer.big. IN A 10.10.23.16 ++biganswer.big. IN A 10.10.23.17 ++biganswer.big. IN A 10.10.23.18 ++biganswer.big. IN A 10.10.23.19 ++biganswer.big. IN A 10.10.23.20 ++biganswer.big. IN A 10.10.23.21 ++biganswer.big. IN A 10.10.23.22 ++biganswer.big. IN A 10.10.23.23 ++biganswer.big. IN A 10.10.23.24 ++biganswer.big. IN A 10.10.23.25 ++biganswer.big. IN A 10.10.23.26 ++biganswer.big. IN A 10.10.23.27 ++biganswer.big. IN A 10.10.23.28 ++biganswer.big. IN A 10.10.23.29 ++biganswer.big. IN A 10.10.23.30 ++biganswer.big. IN A 10.10.23.31 ++biganswer.big. IN A 10.10.23.32 ++biganswer.big. IN A 10.10.23.33 ++biganswer.big. IN A 10.10.23.34 ++biganswer.big. IN A 10.10.23.35 ++biganswer.big. IN A 10.10.23.36 ++biganswer.big. IN A 10.10.23.37 ++biganswer.big. IN A 10.10.23.38 ++biganswer.big. IN A 10.10.23.39 ++biganswer.big. IN A 10.10.23.40 ++biganswer.big. IN A 10.10.23.41 ++biganswer.big. IN A 10.10.23.42 ++biganswer.big. IN A 10.10.23.43 ++biganswer.big. IN A 10.10.23.44 ++biganswer.big. IN A 10.10.23.45 ++biganswer.big. IN A 10.10.23.46 ++biganswer.big. IN A 10.10.23.47 ++biganswer.big. IN A 10.10.23.48 ++biganswer.big. IN A 10.10.23.49 ++biganswer.big. IN A 10.10.23.50 ++biganswer.big. IN A 10.10.24.1 ++biganswer.big. IN A 10.10.24.2 ++biganswer.big. IN A 10.10.24.3 ++biganswer.big. IN A 10.10.24.4 ++biganswer.big. IN A 10.10.24.5 ++biganswer.big. IN A 10.10.24.6 ++biganswer.big. IN A 10.10.24.7 ++biganswer.big. IN A 10.10.24.8 ++biganswer.big. IN A 10.10.24.9 ++biganswer.big. IN A 10.10.24.10 ++biganswer.big. IN A 10.10.24.11 ++biganswer.big. IN A 10.10.24.12 ++biganswer.big. IN A 10.10.24.13 ++biganswer.big. IN A 10.10.24.14 ++biganswer.big. IN A 10.10.24.15 ++biganswer.big. IN A 10.10.24.16 ++biganswer.big. IN A 10.10.24.17 ++biganswer.big. IN A 10.10.24.18 ++biganswer.big. IN A 10.10.24.19 ++biganswer.big. IN A 10.10.24.20 ++biganswer.big. IN A 10.10.24.21 ++biganswer.big. IN A 10.10.24.22 ++biganswer.big. IN A 10.10.24.23 ++biganswer.big. IN A 10.10.24.24 ++biganswer.big. IN A 10.10.24.25 ++biganswer.big. IN A 10.10.24.26 ++biganswer.big. IN A 10.10.24.27 ++biganswer.big. IN A 10.10.24.28 ++biganswer.big. IN A 10.10.24.29 ++biganswer.big. IN A 10.10.24.30 ++biganswer.big. IN A 10.10.24.31 ++biganswer.big. IN A 10.10.24.32 ++biganswer.big. IN A 10.10.24.33 ++biganswer.big. IN A 10.10.24.34 ++biganswer.big. IN A 10.10.24.35 ++biganswer.big. IN A 10.10.24.36 ++biganswer.big. IN A 10.10.24.37 ++biganswer.big. IN A 10.10.24.38 ++biganswer.big. IN A 10.10.24.39 ++biganswer.big. IN A 10.10.24.40 ++biganswer.big. IN A 10.10.24.41 ++biganswer.big. IN A 10.10.24.42 ++biganswer.big. IN A 10.10.24.43 ++biganswer.big. IN A 10.10.24.44 ++biganswer.big. IN A 10.10.24.45 ++biganswer.big. IN A 10.10.24.46 ++biganswer.big. IN A 10.10.24.47 ++biganswer.big. IN A 10.10.24.48 ++biganswer.big. IN A 10.10.24.49 ++biganswer.big. IN A 10.10.24.50 ++biganswer.big. IN A 10.10.25.1 ++biganswer.big. IN A 10.10.25.2 ++biganswer.big. IN A 10.10.25.3 ++biganswer.big. IN A 10.10.25.4 ++biganswer.big. IN A 10.10.25.5 ++biganswer.big. IN A 10.10.25.6 ++biganswer.big. IN A 10.10.25.7 ++biganswer.big. IN A 10.10.25.8 ++biganswer.big. IN A 10.10.25.9 ++biganswer.big. IN A 10.10.25.10 ++biganswer.big. IN A 10.10.25.11 ++biganswer.big. IN A 10.10.25.12 ++biganswer.big. IN A 10.10.25.13 ++biganswer.big. IN A 10.10.25.14 ++biganswer.big. IN A 10.10.25.15 ++biganswer.big. IN A 10.10.25.16 ++biganswer.big. IN A 10.10.25.17 ++biganswer.big. IN A 10.10.25.18 ++biganswer.big. IN A 10.10.25.19 ++biganswer.big. IN A 10.10.25.20 ++biganswer.big. IN A 10.10.25.21 ++biganswer.big. IN A 10.10.25.22 ++biganswer.big. IN A 10.10.25.23 ++biganswer.big. IN A 10.10.25.24 ++biganswer.big. IN A 10.10.25.25 ++biganswer.big. IN A 10.10.25.26 ++biganswer.big. IN A 10.10.25.27 ++biganswer.big. IN A 10.10.25.28 ++biganswer.big. IN A 10.10.25.29 ++biganswer.big. IN A 10.10.25.30 ++biganswer.big. IN A 10.10.25.31 ++biganswer.big. IN A 10.10.25.32 ++biganswer.big. IN A 10.10.25.33 ++biganswer.big. IN A 10.10.25.34 ++biganswer.big. IN A 10.10.25.35 ++biganswer.big. IN A 10.10.25.36 ++biganswer.big. IN A 10.10.25.37 ++biganswer.big. IN A 10.10.25.38 ++biganswer.big. IN A 10.10.25.39 ++biganswer.big. IN A 10.10.25.40 ++biganswer.big. IN A 10.10.25.41 ++biganswer.big. IN A 10.10.25.42 ++biganswer.big. IN A 10.10.25.43 ++biganswer.big. IN A 10.10.25.44 ++biganswer.big. IN A 10.10.25.45 ++biganswer.big. IN A 10.10.25.46 ++biganswer.big. IN A 10.10.25.47 ++biganswer.big. IN A 10.10.25.48 ++biganswer.big. IN A 10.10.25.49 ++biganswer.big. IN A 10.10.25.50 ++biganswer.big. IN A 10.10.26.1 ++biganswer.big. IN A 10.10.26.2 ++biganswer.big. IN A 10.10.26.3 ++biganswer.big. IN A 10.10.26.4 ++biganswer.big. IN A 10.10.26.5 ++biganswer.big. IN A 10.10.26.6 ++biganswer.big. IN A 10.10.26.7 ++biganswer.big. IN A 10.10.26.8 ++biganswer.big. IN A 10.10.26.9 ++biganswer.big. IN A 10.10.26.10 ++biganswer.big. IN A 10.10.26.11 ++biganswer.big. IN A 10.10.26.12 ++biganswer.big. IN A 10.10.26.13 ++biganswer.big. IN A 10.10.26.14 ++biganswer.big. IN A 10.10.26.15 ++biganswer.big. IN A 10.10.26.16 ++biganswer.big. IN A 10.10.26.17 ++biganswer.big. IN A 10.10.26.18 ++biganswer.big. IN A 10.10.26.19 ++biganswer.big. IN A 10.10.26.20 ++biganswer.big. IN A 10.10.26.21 ++biganswer.big. IN A 10.10.26.22 ++biganswer.big. IN A 10.10.26.23 ++biganswer.big. IN A 10.10.26.24 ++biganswer.big. IN A 10.10.26.25 ++biganswer.big. IN A 10.10.26.26 ++biganswer.big. IN A 10.10.26.27 ++biganswer.big. IN A 10.10.26.28 ++biganswer.big. IN A 10.10.26.29 ++biganswer.big. IN A 10.10.26.30 ++biganswer.big. IN A 10.10.26.31 ++biganswer.big. IN A 10.10.26.32 ++biganswer.big. IN A 10.10.26.33 ++biganswer.big. IN A 10.10.26.34 ++biganswer.big. IN A 10.10.26.35 ++biganswer.big. IN A 10.10.26.36 ++biganswer.big. IN A 10.10.26.37 ++biganswer.big. IN A 10.10.26.38 ++biganswer.big. IN A 10.10.26.39 ++biganswer.big. IN A 10.10.26.40 ++biganswer.big. IN A 10.10.26.41 ++biganswer.big. IN A 10.10.26.42 ++biganswer.big. IN A 10.10.26.43 ++biganswer.big. IN A 10.10.26.44 ++biganswer.big. IN A 10.10.26.45 ++biganswer.big. IN A 10.10.26.46 ++biganswer.big. IN A 10.10.26.47 ++biganswer.big. IN A 10.10.26.48 ++biganswer.big. IN A 10.10.26.49 ++biganswer.big. IN A 10.10.26.50 ++biganswer.big. IN A 10.10.27.1 ++biganswer.big. IN A 10.10.27.2 ++biganswer.big. IN A 10.10.27.3 ++biganswer.big. IN A 10.10.27.4 ++biganswer.big. IN A 10.10.27.5 ++biganswer.big. IN A 10.10.27.6 ++biganswer.big. IN A 10.10.27.7 ++biganswer.big. IN A 10.10.27.8 ++biganswer.big. IN A 10.10.27.9 ++biganswer.big. IN A 10.10.27.10 ++biganswer.big. IN A 10.10.27.11 ++biganswer.big. IN A 10.10.27.12 ++biganswer.big. IN A 10.10.27.13 ++biganswer.big. IN A 10.10.27.14 ++biganswer.big. IN A 10.10.27.15 ++biganswer.big. IN A 10.10.27.16 ++biganswer.big. IN A 10.10.27.17 ++biganswer.big. IN A 10.10.27.18 ++biganswer.big. IN A 10.10.27.19 ++biganswer.big. IN A 10.10.27.20 ++biganswer.big. IN A 10.10.27.21 ++biganswer.big. IN A 10.10.27.22 ++biganswer.big. IN A 10.10.27.23 ++biganswer.big. IN A 10.10.27.24 ++biganswer.big. IN A 10.10.27.25 ++biganswer.big. IN A 10.10.27.26 ++biganswer.big. IN A 10.10.27.27 ++biganswer.big. IN A 10.10.27.28 ++biganswer.big. IN A 10.10.27.29 ++biganswer.big. IN A 10.10.27.30 ++biganswer.big. IN A 10.10.27.31 ++biganswer.big. IN A 10.10.27.32 ++biganswer.big. IN A 10.10.27.33 ++biganswer.big. IN A 10.10.27.34 ++biganswer.big. IN A 10.10.27.35 ++biganswer.big. IN A 10.10.27.36 ++biganswer.big. IN A 10.10.27.37 ++biganswer.big. IN A 10.10.27.38 ++biganswer.big. IN A 10.10.27.39 ++biganswer.big. IN A 10.10.27.40 ++biganswer.big. IN A 10.10.27.41 ++biganswer.big. IN A 10.10.27.42 ++biganswer.big. IN A 10.10.27.43 ++biganswer.big. IN A 10.10.27.44 ++biganswer.big. IN A 10.10.27.45 ++biganswer.big. IN A 10.10.27.46 ++biganswer.big. IN A 10.10.27.47 ++biganswer.big. IN A 10.10.27.48 ++biganswer.big. IN A 10.10.27.49 ++biganswer.big. IN A 10.10.27.50 ++biganswer.big. IN A 10.10.28.1 ++biganswer.big. IN A 10.10.28.2 ++biganswer.big. IN A 10.10.28.3 ++biganswer.big. IN A 10.10.28.4 ++biganswer.big. IN A 10.10.28.5 ++biganswer.big. IN A 10.10.28.6 ++biganswer.big. IN A 10.10.28.7 ++biganswer.big. IN A 10.10.28.8 ++biganswer.big. IN A 10.10.28.9 ++biganswer.big. IN A 10.10.28.10 ++biganswer.big. IN A 10.10.28.11 ++biganswer.big. IN A 10.10.28.12 ++biganswer.big. IN A 10.10.28.13 ++biganswer.big. IN A 10.10.28.14 ++biganswer.big. IN A 10.10.28.15 ++biganswer.big. IN A 10.10.28.16 ++biganswer.big. IN A 10.10.28.17 ++biganswer.big. IN A 10.10.28.18 ++biganswer.big. IN A 10.10.28.19 ++biganswer.big. IN A 10.10.28.20 ++biganswer.big. IN A 10.10.28.21 ++biganswer.big. IN A 10.10.28.22 ++biganswer.big. IN A 10.10.28.23 ++biganswer.big. IN A 10.10.28.24 ++biganswer.big. IN A 10.10.28.25 ++biganswer.big. IN A 10.10.28.26 ++biganswer.big. IN A 10.10.28.27 ++biganswer.big. IN A 10.10.28.28 ++biganswer.big. IN A 10.10.28.29 ++biganswer.big. IN A 10.10.28.30 ++biganswer.big. IN A 10.10.28.31 ++biganswer.big. IN A 10.10.28.32 ++biganswer.big. IN A 10.10.28.33 ++biganswer.big. IN A 10.10.28.34 ++biganswer.big. IN A 10.10.28.35 ++biganswer.big. IN A 10.10.28.36 ++biganswer.big. IN A 10.10.28.37 ++biganswer.big. IN A 10.10.28.38 ++biganswer.big. IN A 10.10.28.39 ++biganswer.big. IN A 10.10.28.40 ++biganswer.big. IN A 10.10.28.41 ++biganswer.big. IN A 10.10.28.42 ++biganswer.big. IN A 10.10.28.43 ++biganswer.big. IN A 10.10.28.44 ++biganswer.big. IN A 10.10.28.45 ++biganswer.big. IN A 10.10.28.46 ++biganswer.big. IN A 10.10.28.47 ++biganswer.big. IN A 10.10.28.48 ++biganswer.big. IN A 10.10.28.49 ++biganswer.big. IN A 10.10.28.50 ++biganswer.big. IN A 10.10.29.1 ++biganswer.big. IN A 10.10.29.2 ++biganswer.big. IN A 10.10.29.3 ++biganswer.big. IN A 10.10.29.4 ++biganswer.big. IN A 10.10.29.5 ++biganswer.big. IN A 10.10.29.6 ++biganswer.big. IN A 10.10.29.7 ++biganswer.big. IN A 10.10.29.8 ++biganswer.big. IN A 10.10.29.9 ++biganswer.big. IN A 10.10.29.10 ++biganswer.big. IN A 10.10.29.11 ++biganswer.big. IN A 10.10.29.12 ++biganswer.big. IN A 10.10.29.13 ++biganswer.big. IN A 10.10.29.14 ++biganswer.big. IN A 10.10.29.15 ++biganswer.big. IN A 10.10.29.16 ++biganswer.big. IN A 10.10.29.17 ++biganswer.big. IN A 10.10.29.18 ++biganswer.big. IN A 10.10.29.19 ++biganswer.big. IN A 10.10.29.20 ++biganswer.big. IN A 10.10.29.21 ++biganswer.big. IN A 10.10.29.22 ++biganswer.big. IN A 10.10.29.23 ++biganswer.big. IN A 10.10.29.24 ++biganswer.big. IN A 10.10.29.25 ++biganswer.big. IN A 10.10.29.26 ++biganswer.big. IN A 10.10.29.27 ++biganswer.big. IN A 10.10.29.28 ++biganswer.big. IN A 10.10.29.29 ++biganswer.big. IN A 10.10.29.30 ++biganswer.big. IN A 10.10.29.31 ++biganswer.big. IN A 10.10.29.32 ++biganswer.big. IN A 10.10.29.33 ++biganswer.big. IN A 10.10.29.34 ++biganswer.big. IN A 10.10.29.35 ++biganswer.big. IN A 10.10.29.36 ++biganswer.big. IN A 10.10.29.37 ++biganswer.big. IN A 10.10.29.38 ++biganswer.big. IN A 10.10.29.39 ++biganswer.big. IN A 10.10.29.40 ++biganswer.big. IN A 10.10.29.41 ++biganswer.big. IN A 10.10.29.42 ++biganswer.big. IN A 10.10.29.43 ++biganswer.big. IN A 10.10.29.44 ++biganswer.big. IN A 10.10.29.45 ++biganswer.big. IN A 10.10.29.46 ++biganswer.big. IN A 10.10.29.47 ++biganswer.big. IN A 10.10.29.48 ++biganswer.big. IN A 10.10.29.49 ++biganswer.big. IN A 10.10.29.50 ++biganswer.big. IN A 10.10.30.1 ++biganswer.big. IN A 10.10.30.2 ++biganswer.big. IN A 10.10.30.3 ++biganswer.big. IN A 10.10.30.4 ++biganswer.big. IN A 10.10.30.5 ++biganswer.big. IN A 10.10.30.6 ++biganswer.big. IN A 10.10.30.7 ++biganswer.big. IN A 10.10.30.8 ++biganswer.big. IN A 10.10.30.9 ++biganswer.big. IN A 10.10.30.10 ++biganswer.big. IN A 10.10.30.11 ++biganswer.big. IN A 10.10.30.12 ++biganswer.big. IN A 10.10.30.13 ++biganswer.big. IN A 10.10.30.14 ++biganswer.big. IN A 10.10.30.15 ++biganswer.big. IN A 10.10.30.16 ++biganswer.big. IN A 10.10.30.17 ++biganswer.big. IN A 10.10.30.18 ++biganswer.big. IN A 10.10.30.19 ++biganswer.big. IN A 10.10.30.20 ++biganswer.big. IN A 10.10.30.21 ++biganswer.big. IN A 10.10.30.22 ++biganswer.big. IN A 10.10.30.23 ++biganswer.big. IN A 10.10.30.24 ++biganswer.big. IN A 10.10.30.25 ++biganswer.big. IN A 10.10.30.26 ++biganswer.big. IN A 10.10.30.27 ++biganswer.big. IN A 10.10.30.28 ++biganswer.big. IN A 10.10.30.29 ++biganswer.big. IN A 10.10.30.30 ++biganswer.big. IN A 10.10.30.31 ++biganswer.big. IN A 10.10.30.32 ++biganswer.big. IN A 10.10.30.33 ++biganswer.big. IN A 10.10.30.34 ++biganswer.big. IN A 10.10.30.35 ++biganswer.big. IN A 10.10.30.36 ++biganswer.big. IN A 10.10.30.37 ++biganswer.big. IN A 10.10.30.38 ++biganswer.big. IN A 10.10.30.39 ++biganswer.big. IN A 10.10.30.40 ++biganswer.big. IN A 10.10.30.41 ++biganswer.big. IN A 10.10.30.42 ++biganswer.big. IN A 10.10.30.43 ++biganswer.big. IN A 10.10.30.44 ++biganswer.big. IN A 10.10.30.45 ++biganswer.big. IN A 10.10.30.46 ++biganswer.big. IN A 10.10.30.47 ++biganswer.big. IN A 10.10.30.48 ++biganswer.big. IN A 10.10.30.49 ++biganswer.big. IN A 10.10.30.50 ++biganswer.big. IN A 10.10.31.1 ++biganswer.big. IN A 10.10.31.2 ++biganswer.big. IN A 10.10.31.3 ++biganswer.big. IN A 10.10.31.4 ++biganswer.big. IN A 10.10.31.5 ++biganswer.big. IN A 10.10.31.6 ++biganswer.big. IN A 10.10.31.7 ++biganswer.big. IN A 10.10.31.8 ++biganswer.big. IN A 10.10.31.9 ++biganswer.big. IN A 10.10.31.10 ++biganswer.big. IN A 10.10.31.11 ++biganswer.big. IN A 10.10.31.12 ++biganswer.big. IN A 10.10.31.13 ++biganswer.big. IN A 10.10.31.14 ++biganswer.big. IN A 10.10.31.15 ++biganswer.big. IN A 10.10.31.16 ++biganswer.big. IN A 10.10.31.17 ++biganswer.big. IN A 10.10.31.18 ++biganswer.big. IN A 10.10.31.19 ++biganswer.big. IN A 10.10.31.20 ++biganswer.big. IN A 10.10.31.21 ++biganswer.big. IN A 10.10.31.22 ++biganswer.big. IN A 10.10.31.23 ++biganswer.big. IN A 10.10.31.24 ++biganswer.big. IN A 10.10.31.25 ++biganswer.big. IN A 10.10.31.26 ++biganswer.big. IN A 10.10.31.27 ++biganswer.big. IN A 10.10.31.28 ++biganswer.big. IN A 10.10.31.29 ++biganswer.big. IN A 10.10.31.30 ++biganswer.big. IN A 10.10.31.31 ++biganswer.big. IN A 10.10.31.32 ++biganswer.big. IN A 10.10.31.33 ++biganswer.big. IN A 10.10.31.34 ++biganswer.big. IN A 10.10.31.35 ++biganswer.big. IN A 10.10.31.36 ++biganswer.big. IN A 10.10.31.37 ++biganswer.big. IN A 10.10.31.38 ++biganswer.big. IN A 10.10.31.39 ++biganswer.big. IN A 10.10.31.40 ++biganswer.big. IN A 10.10.31.41 ++biganswer.big. IN A 10.10.31.42 ++biganswer.big. IN A 10.10.31.43 ++biganswer.big. IN A 10.10.31.44 ++biganswer.big. IN A 10.10.31.45 ++biganswer.big. IN A 10.10.31.46 ++biganswer.big. IN A 10.10.31.47 ++biganswer.big. IN A 10.10.31.48 ++biganswer.big. IN A 10.10.31.49 ++biganswer.big. IN A 10.10.31.50 ++biganswer.big. IN A 10.10.32.1 ++biganswer.big. IN A 10.10.32.2 ++biganswer.big. IN A 10.10.32.3 ++biganswer.big. IN A 10.10.32.4 ++biganswer.big. IN A 10.10.32.5 ++biganswer.big. IN A 10.10.32.6 ++biganswer.big. IN A 10.10.32.7 ++biganswer.big. IN A 10.10.32.8 ++biganswer.big. IN A 10.10.32.9 ++biganswer.big. IN A 10.10.32.10 ++biganswer.big. IN A 10.10.32.11 ++biganswer.big. IN A 10.10.32.12 ++biganswer.big. IN A 10.10.32.13 ++biganswer.big. IN A 10.10.32.14 ++biganswer.big. IN A 10.10.32.15 ++biganswer.big. IN A 10.10.32.16 ++biganswer.big. IN A 10.10.32.17 ++biganswer.big. IN A 10.10.32.18 ++biganswer.big. IN A 10.10.32.19 ++biganswer.big. IN A 10.10.32.20 ++biganswer.big. IN A 10.10.32.21 ++biganswer.big. IN A 10.10.32.22 ++biganswer.big. IN A 10.10.32.23 ++biganswer.big. IN A 10.10.32.24 ++biganswer.big. IN A 10.10.32.25 ++biganswer.big. IN A 10.10.32.26 ++biganswer.big. IN A 10.10.32.27 ++biganswer.big. IN A 10.10.32.28 ++biganswer.big. IN A 10.10.32.29 ++biganswer.big. IN A 10.10.32.30 ++biganswer.big. IN A 10.10.32.31 ++biganswer.big. IN A 10.10.32.32 ++biganswer.big. IN A 10.10.32.33 ++biganswer.big. IN A 10.10.32.34 ++biganswer.big. IN A 10.10.32.35 ++biganswer.big. IN A 10.10.32.36 ++biganswer.big. IN A 10.10.32.37 ++biganswer.big. IN A 10.10.32.38 ++biganswer.big. IN A 10.10.32.39 ++biganswer.big. IN A 10.10.32.40 ++biganswer.big. IN A 10.10.32.41 ++biganswer.big. IN A 10.10.32.42 ++biganswer.big. IN A 10.10.32.43 ++biganswer.big. IN A 10.10.32.44 ++biganswer.big. IN A 10.10.32.45 ++biganswer.big. IN A 10.10.32.46 ++biganswer.big. IN A 10.10.32.47 ++biganswer.big. IN A 10.10.32.48 ++biganswer.big. IN A 10.10.32.49 ++biganswer.big. IN A 10.10.32.50 ++biganswer.big. IN A 10.10.33.1 ++biganswer.big. IN A 10.10.33.2 ++biganswer.big. IN A 10.10.33.3 ++biganswer.big. IN A 10.10.33.4 ++biganswer.big. IN A 10.10.33.5 ++biganswer.big. IN A 10.10.33.6 ++biganswer.big. IN A 10.10.33.7 ++biganswer.big. IN A 10.10.33.8 ++biganswer.big. IN A 10.10.33.9 ++biganswer.big. IN A 10.10.33.10 ++biganswer.big. IN A 10.10.33.11 ++biganswer.big. IN A 10.10.33.12 ++biganswer.big. IN A 10.10.33.13 ++biganswer.big. IN A 10.10.33.14 ++biganswer.big. IN A 10.10.33.15 ++biganswer.big. IN A 10.10.33.16 ++biganswer.big. IN A 10.10.33.17 ++biganswer.big. IN A 10.10.33.18 ++biganswer.big. IN A 10.10.33.19 ++biganswer.big. IN A 10.10.33.20 ++biganswer.big. IN A 10.10.33.21 ++biganswer.big. IN A 10.10.33.22 ++biganswer.big. IN A 10.10.33.23 ++biganswer.big. IN A 10.10.33.24 ++biganswer.big. IN A 10.10.33.25 ++biganswer.big. IN A 10.10.33.26 ++biganswer.big. IN A 10.10.33.27 ++biganswer.big. IN A 10.10.33.28 ++biganswer.big. IN A 10.10.33.29 ++biganswer.big. IN A 10.10.33.30 ++biganswer.big. IN A 10.10.33.31 ++biganswer.big. IN A 10.10.33.32 ++biganswer.big. IN A 10.10.33.33 ++biganswer.big. IN A 10.10.33.34 ++biganswer.big. IN A 10.10.33.35 ++biganswer.big. IN A 10.10.33.36 ++biganswer.big. IN A 10.10.33.37 ++biganswer.big. IN A 10.10.33.38 ++biganswer.big. IN A 10.10.33.39 ++biganswer.big. IN A 10.10.33.40 ++biganswer.big. IN A 10.10.33.41 ++biganswer.big. IN A 10.10.33.42 ++biganswer.big. IN A 10.10.33.43 ++biganswer.big. IN A 10.10.33.44 ++biganswer.big. IN A 10.10.33.45 ++biganswer.big. IN A 10.10.33.46 ++biganswer.big. IN A 10.10.33.47 ++biganswer.big. IN A 10.10.33.48 ++biganswer.big. IN A 10.10.33.49 ++biganswer.big. IN A 10.10.33.50 ++biganswer.big. IN A 10.10.34.1 ++biganswer.big. IN A 10.10.34.2 ++biganswer.big. IN A 10.10.34.3 ++biganswer.big. IN A 10.10.34.4 ++biganswer.big. IN A 10.10.34.5 ++biganswer.big. IN A 10.10.34.6 ++biganswer.big. IN A 10.10.34.7 ++biganswer.big. IN A 10.10.34.8 ++biganswer.big. IN A 10.10.34.9 ++biganswer.big. IN A 10.10.34.10 ++biganswer.big. IN A 10.10.34.11 ++biganswer.big. IN A 10.10.34.12 ++biganswer.big. IN A 10.10.34.13 ++biganswer.big. IN A 10.10.34.14 ++biganswer.big. IN A 10.10.34.15 ++biganswer.big. IN A 10.10.34.16 ++biganswer.big. IN A 10.10.34.17 ++biganswer.big. IN A 10.10.34.18 ++biganswer.big. IN A 10.10.34.19 ++biganswer.big. IN A 10.10.34.20 ++biganswer.big. IN A 10.10.34.21 ++biganswer.big. IN A 10.10.34.22 ++biganswer.big. IN A 10.10.34.23 ++biganswer.big. IN A 10.10.34.24 ++biganswer.big. IN A 10.10.34.25 ++biganswer.big. IN A 10.10.34.26 ++biganswer.big. IN A 10.10.34.27 ++biganswer.big. IN A 10.10.34.28 ++biganswer.big. IN A 10.10.34.29 ++biganswer.big. IN A 10.10.34.30 ++biganswer.big. IN A 10.10.34.31 ++biganswer.big. IN A 10.10.34.32 ++biganswer.big. IN A 10.10.34.33 ++biganswer.big. IN A 10.10.34.34 ++biganswer.big. IN A 10.10.34.35 ++biganswer.big. IN A 10.10.34.36 ++biganswer.big. IN A 10.10.34.37 ++biganswer.big. IN A 10.10.34.38 ++biganswer.big. IN A 10.10.34.39 ++biganswer.big. IN A 10.10.34.40 ++biganswer.big. IN A 10.10.34.41 ++biganswer.big. IN A 10.10.34.42 ++biganswer.big. IN A 10.10.34.43 ++biganswer.big. IN A 10.10.34.44 ++biganswer.big. IN A 10.10.34.45 ++biganswer.big. IN A 10.10.34.46 ++biganswer.big. IN A 10.10.34.47 ++biganswer.big. IN A 10.10.34.48 ++biganswer.big. IN A 10.10.34.49 ++biganswer.big. IN A 10.10.34.50 ++biganswer.big. IN A 10.10.35.1 ++biganswer.big. IN A 10.10.35.2 ++biganswer.big. IN A 10.10.35.3 ++biganswer.big. IN A 10.10.35.4 ++biganswer.big. IN A 10.10.35.5 ++biganswer.big. IN A 10.10.35.6 ++biganswer.big. IN A 10.10.35.7 ++biganswer.big. IN A 10.10.35.8 ++biganswer.big. IN A 10.10.35.9 ++biganswer.big. IN A 10.10.35.10 ++biganswer.big. IN A 10.10.35.11 ++biganswer.big. IN A 10.10.35.12 ++biganswer.big. IN A 10.10.35.13 ++biganswer.big. IN A 10.10.35.14 ++biganswer.big. IN A 10.10.35.15 ++biganswer.big. IN A 10.10.35.16 ++biganswer.big. IN A 10.10.35.17 ++biganswer.big. IN A 10.10.35.18 ++biganswer.big. IN A 10.10.35.19 ++biganswer.big. IN A 10.10.35.20 ++biganswer.big. IN A 10.10.35.21 ++biganswer.big. IN A 10.10.35.22 ++biganswer.big. IN A 10.10.35.23 ++biganswer.big. IN A 10.10.35.24 ++biganswer.big. IN A 10.10.35.25 ++biganswer.big. IN A 10.10.35.26 ++biganswer.big. IN A 10.10.35.27 ++biganswer.big. IN A 10.10.35.28 ++biganswer.big. IN A 10.10.35.29 ++biganswer.big. IN A 10.10.35.30 ++biganswer.big. IN A 10.10.35.31 ++biganswer.big. IN A 10.10.35.32 ++biganswer.big. IN A 10.10.35.33 ++biganswer.big. IN A 10.10.35.34 ++biganswer.big. IN A 10.10.35.35 ++biganswer.big. IN A 10.10.35.36 ++biganswer.big. IN A 10.10.35.37 ++biganswer.big. IN A 10.10.35.38 ++biganswer.big. IN A 10.10.35.39 ++biganswer.big. IN A 10.10.35.40 ++biganswer.big. IN A 10.10.35.41 ++biganswer.big. IN A 10.10.35.42 ++biganswer.big. IN A 10.10.35.43 ++biganswer.big. IN A 10.10.35.44 ++biganswer.big. IN A 10.10.35.45 ++biganswer.big. IN A 10.10.35.46 ++biganswer.big. IN A 10.10.35.47 ++biganswer.big. IN A 10.10.35.48 ++biganswer.big. IN A 10.10.35.49 ++biganswer.big. IN A 10.10.35.50 ++biganswer.big. IN A 10.10.36.1 ++biganswer.big. IN A 10.10.36.2 ++biganswer.big. IN A 10.10.36.3 ++biganswer.big. IN A 10.10.36.4 ++biganswer.big. IN A 10.10.36.5 ++biganswer.big. IN A 10.10.36.6 ++biganswer.big. IN A 10.10.36.7 ++biganswer.big. IN A 10.10.36.8 ++biganswer.big. IN A 10.10.36.9 ++biganswer.big. IN A 10.10.36.10 ++biganswer.big. IN A 10.10.36.11 ++biganswer.big. IN A 10.10.36.12 ++biganswer.big. IN A 10.10.36.13 ++biganswer.big. IN A 10.10.36.14 ++biganswer.big. IN A 10.10.36.15 ++biganswer.big. IN A 10.10.36.16 ++biganswer.big. IN A 10.10.36.17 ++biganswer.big. IN A 10.10.36.18 ++biganswer.big. IN A 10.10.36.19 ++biganswer.big. IN A 10.10.36.20 ++biganswer.big. IN A 10.10.36.21 ++biganswer.big. IN A 10.10.36.22 ++biganswer.big. IN A 10.10.36.23 ++biganswer.big. IN A 10.10.36.24 ++biganswer.big. IN A 10.10.36.25 ++biganswer.big. IN A 10.10.36.26 ++biganswer.big. IN A 10.10.36.27 ++biganswer.big. IN A 10.10.36.28 ++biganswer.big. IN A 10.10.36.29 ++biganswer.big. IN A 10.10.36.30 ++biganswer.big. IN A 10.10.36.31 ++biganswer.big. IN A 10.10.36.32 ++biganswer.big. IN A 10.10.36.33 ++biganswer.big. IN A 10.10.36.34 ++biganswer.big. IN A 10.10.36.35 ++biganswer.big. IN A 10.10.36.36 ++biganswer.big. IN A 10.10.36.37 ++biganswer.big. IN A 10.10.36.38 ++biganswer.big. IN A 10.10.36.39 ++biganswer.big. IN A 10.10.36.40 ++biganswer.big. IN A 10.10.36.41 ++biganswer.big. IN A 10.10.36.42 ++biganswer.big. IN A 10.10.36.43 ++biganswer.big. IN A 10.10.36.44 ++biganswer.big. IN A 10.10.36.45 ++biganswer.big. IN A 10.10.36.46 ++biganswer.big. IN A 10.10.36.47 ++biganswer.big. IN A 10.10.36.48 ++biganswer.big. IN A 10.10.36.49 ++biganswer.big. IN A 10.10.36.50 ++biganswer.big. IN A 10.10.37.1 ++biganswer.big. IN A 10.10.37.2 ++biganswer.big. IN A 10.10.37.3 ++biganswer.big. IN A 10.10.37.4 ++biganswer.big. IN A 10.10.37.5 ++biganswer.big. IN A 10.10.37.6 ++biganswer.big. IN A 10.10.37.7 ++biganswer.big. IN A 10.10.37.8 ++biganswer.big. IN A 10.10.37.9 ++biganswer.big. IN A 10.10.37.10 ++biganswer.big. IN A 10.10.37.11 ++biganswer.big. IN A 10.10.37.12 ++biganswer.big. IN A 10.10.37.13 ++biganswer.big. IN A 10.10.37.14 ++biganswer.big. IN A 10.10.37.15 ++biganswer.big. IN A 10.10.37.16 ++biganswer.big. IN A 10.10.37.17 ++biganswer.big. IN A 10.10.37.18 ++biganswer.big. IN A 10.10.37.19 ++biganswer.big. IN A 10.10.37.20 ++biganswer.big. IN A 10.10.37.21 ++biganswer.big. IN A 10.10.37.22 ++biganswer.big. IN A 10.10.37.23 ++biganswer.big. IN A 10.10.37.24 ++biganswer.big. IN A 10.10.37.25 ++biganswer.big. IN A 10.10.37.26 ++biganswer.big. IN A 10.10.37.27 ++biganswer.big. IN A 10.10.37.28 ++biganswer.big. IN A 10.10.37.29 ++biganswer.big. IN A 10.10.37.30 ++biganswer.big. IN A 10.10.37.31 ++biganswer.big. IN A 10.10.37.32 ++biganswer.big. IN A 10.10.37.33 ++biganswer.big. IN A 10.10.37.34 ++biganswer.big. IN A 10.10.37.35 ++biganswer.big. IN A 10.10.37.36 ++biganswer.big. IN A 10.10.37.37 ++biganswer.big. IN A 10.10.37.38 ++biganswer.big. IN A 10.10.37.39 ++biganswer.big. IN A 10.10.37.40 ++biganswer.big. IN A 10.10.37.41 ++biganswer.big. IN A 10.10.37.42 ++biganswer.big. IN A 10.10.37.43 ++biganswer.big. IN A 10.10.37.44 ++biganswer.big. IN A 10.10.37.45 ++biganswer.big. IN A 10.10.37.46 ++biganswer.big. IN A 10.10.37.47 ++biganswer.big. IN A 10.10.37.48 ++biganswer.big. IN A 10.10.37.49 ++biganswer.big. IN A 10.10.37.50 ++biganswer.big. IN A 10.10.38.1 ++biganswer.big. IN A 10.10.38.2 ++biganswer.big. IN A 10.10.38.3 ++biganswer.big. IN A 10.10.38.4 ++biganswer.big. IN A 10.10.38.5 ++biganswer.big. IN A 10.10.38.6 ++biganswer.big. IN A 10.10.38.7 ++biganswer.big. IN A 10.10.38.8 ++biganswer.big. IN A 10.10.38.9 ++biganswer.big. IN A 10.10.38.10 ++biganswer.big. IN A 10.10.38.11 ++biganswer.big. IN A 10.10.38.12 ++biganswer.big. IN A 10.10.38.13 ++biganswer.big. IN A 10.10.38.14 ++biganswer.big. IN A 10.10.38.15 ++biganswer.big. IN A 10.10.38.16 ++biganswer.big. IN A 10.10.38.17 ++biganswer.big. IN A 10.10.38.18 ++biganswer.big. IN A 10.10.38.19 ++biganswer.big. IN A 10.10.38.20 ++biganswer.big. IN A 10.10.38.21 ++biganswer.big. IN A 10.10.38.22 ++biganswer.big. IN A 10.10.38.23 ++biganswer.big. IN A 10.10.38.24 ++biganswer.big. IN A 10.10.38.25 ++biganswer.big. IN A 10.10.38.26 ++biganswer.big. IN A 10.10.38.27 ++biganswer.big. IN A 10.10.38.28 ++biganswer.big. IN A 10.10.38.29 ++biganswer.big. IN A 10.10.38.30 ++biganswer.big. IN A 10.10.38.31 ++biganswer.big. IN A 10.10.38.32 ++biganswer.big. IN A 10.10.38.33 ++biganswer.big. IN A 10.10.38.34 ++biganswer.big. IN A 10.10.38.35 ++biganswer.big. IN A 10.10.38.36 ++biganswer.big. IN A 10.10.38.37 ++biganswer.big. IN A 10.10.38.38 ++biganswer.big. IN A 10.10.38.39 ++biganswer.big. IN A 10.10.38.40 ++biganswer.big. IN A 10.10.38.41 ++biganswer.big. IN A 10.10.38.42 ++biganswer.big. IN A 10.10.38.43 ++biganswer.big. IN A 10.10.38.44 ++biganswer.big. IN A 10.10.38.45 ++biganswer.big. IN A 10.10.38.46 ++biganswer.big. IN A 10.10.38.47 ++biganswer.big. IN A 10.10.38.48 ++biganswer.big. IN A 10.10.38.49 ++biganswer.big. IN A 10.10.38.50 ++biganswer.big. IN A 10.10.39.1 ++biganswer.big. IN A 10.10.39.2 ++biganswer.big. IN A 10.10.39.3 ++biganswer.big. IN A 10.10.39.4 ++biganswer.big. IN A 10.10.39.5 ++biganswer.big. IN A 10.10.39.6 ++biganswer.big. IN A 10.10.39.7 ++biganswer.big. IN A 10.10.39.8 ++biganswer.big. IN A 10.10.39.9 ++biganswer.big. IN A 10.10.39.10 ++biganswer.big. IN A 10.10.39.11 ++biganswer.big. IN A 10.10.39.12 ++biganswer.big. IN A 10.10.39.13 ++biganswer.big. IN A 10.10.39.14 ++biganswer.big. IN A 10.10.39.15 ++biganswer.big. IN A 10.10.39.16 ++biganswer.big. IN A 10.10.39.17 ++biganswer.big. IN A 10.10.39.18 ++biganswer.big. IN A 10.10.39.19 ++biganswer.big. IN A 10.10.39.20 ++biganswer.big. IN A 10.10.39.21 ++biganswer.big. IN A 10.10.39.22 ++biganswer.big. IN A 10.10.39.23 ++biganswer.big. IN A 10.10.39.24 ++biganswer.big. IN A 10.10.39.25 ++biganswer.big. IN A 10.10.39.26 ++biganswer.big. IN A 10.10.39.27 ++biganswer.big. IN A 10.10.39.28 ++biganswer.big. IN A 10.10.39.29 ++biganswer.big. IN A 10.10.39.30 ++biganswer.big. IN A 10.10.39.31 ++biganswer.big. IN A 10.10.39.32 ++biganswer.big. IN A 10.10.39.33 ++biganswer.big. IN A 10.10.39.34 ++biganswer.big. IN A 10.10.39.35 ++biganswer.big. IN A 10.10.39.36 ++biganswer.big. IN A 10.10.39.37 ++biganswer.big. IN A 10.10.39.38 ++biganswer.big. IN A 10.10.39.39 ++biganswer.big. IN A 10.10.39.40 ++biganswer.big. IN A 10.10.39.41 ++biganswer.big. IN A 10.10.39.42 ++biganswer.big. IN A 10.10.39.43 ++biganswer.big. IN A 10.10.39.44 ++biganswer.big. IN A 10.10.39.45 ++biganswer.big. IN A 10.10.39.46 ++biganswer.big. IN A 10.10.39.47 ++biganswer.big. IN A 10.10.39.48 ++biganswer.big. IN A 10.10.39.49 ++biganswer.big. IN A 10.10.39.50 ++biganswer.big. IN A 10.10.40.1 ++biganswer.big. IN A 10.10.40.2 ++biganswer.big. IN A 10.10.40.3 ++biganswer.big. IN A 10.10.40.4 ++biganswer.big. IN A 10.10.40.5 ++biganswer.big. IN A 10.10.40.6 ++biganswer.big. IN A 10.10.40.7 ++biganswer.big. IN A 10.10.40.8 ++biganswer.big. IN A 10.10.40.9 ++biganswer.big. IN A 10.10.40.10 ++biganswer.big. IN A 10.10.40.11 ++biganswer.big. IN A 10.10.40.12 ++biganswer.big. IN A 10.10.40.13 ++biganswer.big. IN A 10.10.40.14 ++biganswer.big. IN A 10.10.40.15 ++biganswer.big. IN A 10.10.40.16 ++biganswer.big. IN A 10.10.40.17 ++biganswer.big. IN A 10.10.40.18 ++biganswer.big. IN A 10.10.40.19 ++biganswer.big. IN A 10.10.40.20 ++biganswer.big. IN A 10.10.40.21 ++biganswer.big. IN A 10.10.40.22 ++biganswer.big. IN A 10.10.40.23 ++biganswer.big. IN A 10.10.40.24 ++biganswer.big. IN A 10.10.40.25 ++biganswer.big. IN A 10.10.40.26 ++biganswer.big. IN A 10.10.40.27 ++biganswer.big. IN A 10.10.40.28 ++biganswer.big. IN A 10.10.40.29 ++biganswer.big. IN A 10.10.40.30 ++biganswer.big. IN A 10.10.40.31 ++biganswer.big. IN A 10.10.40.32 ++biganswer.big. IN A 10.10.40.33 ++biganswer.big. IN A 10.10.40.34 ++biganswer.big. IN A 10.10.40.35 ++biganswer.big. IN A 10.10.40.36 ++biganswer.big. IN A 10.10.40.37 ++biganswer.big. IN A 10.10.40.38 ++biganswer.big. IN A 10.10.40.39 ++biganswer.big. IN A 10.10.40.40 ++biganswer.big. IN A 10.10.40.41 ++biganswer.big. IN A 10.10.40.42 ++biganswer.big. IN A 10.10.40.43 ++biganswer.big. IN A 10.10.40.44 ++biganswer.big. IN A 10.10.40.45 ++biganswer.big. IN A 10.10.40.46 ++biganswer.big. IN A 10.10.40.47 ++biganswer.big. IN A 10.10.40.48 ++biganswer.big. IN A 10.10.40.49 ++biganswer.big. IN A 10.10.40.50 ++biganswer.big. IN A 10.10.41.1 ++biganswer.big. IN A 10.10.41.2 ++biganswer.big. IN A 10.10.41.3 ++biganswer.big. IN A 10.10.41.4 ++biganswer.big. IN A 10.10.41.5 ++biganswer.big. IN A 10.10.41.6 ++biganswer.big. IN A 10.10.41.7 ++biganswer.big. IN A 10.10.41.8 ++biganswer.big. IN A 10.10.41.9 ++biganswer.big. IN A 10.10.41.10 ++biganswer.big. IN A 10.10.41.11 ++biganswer.big. IN A 10.10.41.12 ++biganswer.big. IN A 10.10.41.13 ++biganswer.big. IN A 10.10.41.14 ++biganswer.big. IN A 10.10.41.15 ++biganswer.big. IN A 10.10.41.16 ++biganswer.big. IN A 10.10.41.17 ++biganswer.big. IN A 10.10.41.18 ++biganswer.big. IN A 10.10.41.19 ++biganswer.big. IN A 10.10.41.20 ++biganswer.big. IN A 10.10.41.21 ++biganswer.big. IN A 10.10.41.22 ++biganswer.big. IN A 10.10.41.23 ++biganswer.big. IN A 10.10.41.24 ++biganswer.big. IN A 10.10.41.25 ++biganswer.big. IN A 10.10.41.26 ++biganswer.big. IN A 10.10.41.27 ++biganswer.big. IN A 10.10.41.28 ++biganswer.big. IN A 10.10.41.29 ++biganswer.big. IN A 10.10.41.30 ++biganswer.big. IN A 10.10.41.31 ++biganswer.big. IN A 10.10.41.32 ++biganswer.big. IN A 10.10.41.33 ++biganswer.big. IN A 10.10.41.34 ++biganswer.big. IN A 10.10.41.35 ++biganswer.big. IN A 10.10.41.36 ++biganswer.big. IN A 10.10.41.37 ++biganswer.big. IN A 10.10.41.38 ++biganswer.big. IN A 10.10.41.39 ++biganswer.big. IN A 10.10.41.40 ++biganswer.big. IN A 10.10.41.41 ++biganswer.big. IN A 10.10.41.42 ++biganswer.big. IN A 10.10.41.43 ++biganswer.big. IN A 10.10.41.44 ++biganswer.big. IN A 10.10.41.45 ++biganswer.big. IN A 10.10.41.46 ++biganswer.big. IN A 10.10.41.47 ++biganswer.big. IN A 10.10.41.48 ++biganswer.big. IN A 10.10.41.49 ++biganswer.big. IN A 10.10.41.50 ++biganswer.big. IN A 10.10.42.1 ++biganswer.big. IN A 10.10.42.2 ++biganswer.big. IN A 10.10.42.3 ++biganswer.big. IN A 10.10.42.4 ++biganswer.big. IN A 10.10.42.5 ++biganswer.big. IN A 10.10.42.6 ++biganswer.big. IN A 10.10.42.7 ++biganswer.big. IN A 10.10.42.8 ++biganswer.big. IN A 10.10.42.9 ++biganswer.big. IN A 10.10.42.10 ++biganswer.big. IN A 10.10.42.11 ++biganswer.big. IN A 10.10.42.12 ++biganswer.big. IN A 10.10.42.13 ++biganswer.big. IN A 10.10.42.14 ++biganswer.big. IN A 10.10.42.15 ++biganswer.big. IN A 10.10.42.16 ++biganswer.big. IN A 10.10.42.17 ++biganswer.big. IN A 10.10.42.18 ++biganswer.big. IN A 10.10.42.19 ++biganswer.big. IN A 10.10.42.20 ++biganswer.big. IN A 10.10.42.21 ++biganswer.big. IN A 10.10.42.22 ++biganswer.big. IN A 10.10.42.23 ++biganswer.big. IN A 10.10.42.24 ++biganswer.big. IN A 10.10.42.25 ++biganswer.big. IN A 10.10.42.26 ++biganswer.big. IN A 10.10.42.27 ++biganswer.big. IN A 10.10.42.28 ++biganswer.big. IN A 10.10.42.29 ++biganswer.big. IN A 10.10.42.30 ++biganswer.big. IN A 10.10.42.31 ++biganswer.big. IN A 10.10.42.32 ++biganswer.big. IN A 10.10.42.33 ++biganswer.big. IN A 10.10.42.34 ++biganswer.big. IN A 10.10.42.35 ++biganswer.big. IN A 10.10.42.36 ++biganswer.big. IN A 10.10.42.37 ++biganswer.big. IN A 10.10.42.38 ++biganswer.big. IN A 10.10.42.39 ++biganswer.big. IN A 10.10.42.40 ++biganswer.big. IN A 10.10.42.41 ++biganswer.big. IN A 10.10.42.42 ++biganswer.big. IN A 10.10.42.43 ++biganswer.big. IN A 10.10.42.44 ++biganswer.big. IN A 10.10.42.45 ++biganswer.big. IN A 10.10.42.46 ++biganswer.big. IN A 10.10.42.47 ++biganswer.big. IN A 10.10.42.48 ++biganswer.big. IN A 10.10.42.49 ++biganswer.big. IN A 10.10.42.50 ++biganswer.big. IN A 10.10.43.1 ++biganswer.big. IN A 10.10.43.2 ++biganswer.big. IN A 10.10.43.3 ++biganswer.big. IN A 10.10.43.4 ++biganswer.big. IN A 10.10.43.5 ++biganswer.big. IN A 10.10.43.6 ++biganswer.big. IN A 10.10.43.7 ++biganswer.big. IN A 10.10.43.8 ++biganswer.big. IN A 10.10.43.9 ++biganswer.big. IN A 10.10.43.10 ++biganswer.big. IN A 10.10.43.11 ++biganswer.big. IN A 10.10.43.12 ++biganswer.big. IN A 10.10.43.13 ++biganswer.big. IN A 10.10.43.14 ++biganswer.big. IN A 10.10.43.15 ++biganswer.big. IN A 10.10.43.16 ++biganswer.big. IN A 10.10.43.17 ++biganswer.big. IN A 10.10.43.18 ++biganswer.big. IN A 10.10.43.19 ++biganswer.big. IN A 10.10.43.20 ++biganswer.big. IN A 10.10.43.21 ++biganswer.big. IN A 10.10.43.22 ++biganswer.big. IN A 10.10.43.23 ++biganswer.big. IN A 10.10.43.24 ++biganswer.big. IN A 10.10.43.25 ++biganswer.big. IN A 10.10.43.26 ++biganswer.big. IN A 10.10.43.27 ++biganswer.big. IN A 10.10.43.28 ++biganswer.big. IN A 10.10.43.29 ++biganswer.big. IN A 10.10.43.30 ++biganswer.big. IN A 10.10.43.31 ++biganswer.big. IN A 10.10.43.32 ++biganswer.big. IN A 10.10.43.33 ++biganswer.big. IN A 10.10.43.34 ++biganswer.big. IN A 10.10.43.35 ++biganswer.big. IN A 10.10.43.36 ++biganswer.big. IN A 10.10.43.37 ++biganswer.big. IN A 10.10.43.38 ++biganswer.big. IN A 10.10.43.39 ++biganswer.big. IN A 10.10.43.40 ++biganswer.big. IN A 10.10.43.41 ++biganswer.big. IN A 10.10.43.42 ++biganswer.big. IN A 10.10.43.43 ++biganswer.big. IN A 10.10.43.44 ++biganswer.big. IN A 10.10.43.45 ++biganswer.big. IN A 10.10.43.46 ++biganswer.big. IN A 10.10.43.47 ++biganswer.big. IN A 10.10.43.48 ++biganswer.big. IN A 10.10.43.49 ++biganswer.big. IN A 10.10.43.50 ++biganswer.big. IN A 10.10.44.1 ++biganswer.big. IN A 10.10.44.2 ++biganswer.big. IN A 10.10.44.3 ++biganswer.big. IN A 10.10.44.4 ++biganswer.big. IN A 10.10.44.5 ++biganswer.big. IN A 10.10.44.6 ++biganswer.big. IN A 10.10.44.7 ++biganswer.big. IN A 10.10.44.8 ++biganswer.big. IN A 10.10.44.9 ++biganswer.big. IN A 10.10.44.10 ++biganswer.big. IN A 10.10.44.11 ++biganswer.big. IN A 10.10.44.12 ++biganswer.big. IN A 10.10.44.13 ++biganswer.big. IN A 10.10.44.14 ++biganswer.big. IN A 10.10.44.15 ++biganswer.big. IN A 10.10.44.16 ++biganswer.big. IN A 10.10.44.17 ++biganswer.big. IN A 10.10.44.18 ++biganswer.big. IN A 10.10.44.19 ++biganswer.big. IN A 10.10.44.20 ++biganswer.big. IN A 10.10.44.21 ++biganswer.big. IN A 10.10.44.22 ++biganswer.big. IN A 10.10.44.23 ++biganswer.big. IN A 10.10.44.24 ++biganswer.big. IN A 10.10.44.25 ++biganswer.big. IN A 10.10.44.26 ++biganswer.big. IN A 10.10.44.27 ++biganswer.big. IN A 10.10.44.28 ++biganswer.big. IN A 10.10.44.29 ++biganswer.big. IN A 10.10.44.30 ++biganswer.big. IN A 10.10.44.31 ++biganswer.big. IN A 10.10.44.32 ++biganswer.big. IN A 10.10.44.33 ++biganswer.big. IN A 10.10.44.34 ++biganswer.big. IN A 10.10.44.35 ++biganswer.big. IN A 10.10.44.36 ++biganswer.big. IN A 10.10.44.37 ++biganswer.big. IN A 10.10.44.38 ++biganswer.big. IN A 10.10.44.39 ++biganswer.big. IN A 10.10.44.40 ++biganswer.big. IN A 10.10.44.41 ++biganswer.big. IN A 10.10.44.42 ++biganswer.big. IN A 10.10.44.43 ++biganswer.big. IN A 10.10.44.44 ++biganswer.big. IN A 10.10.44.45 ++biganswer.big. IN A 10.10.44.46 ++biganswer.big. IN A 10.10.44.47 ++biganswer.big. IN A 10.10.44.48 ++biganswer.big. IN A 10.10.44.49 ++biganswer.big. IN A 10.10.44.50 ++biganswer.big. IN A 10.10.45.1 ++biganswer.big. IN A 10.10.45.2 ++biganswer.big. IN A 10.10.45.3 ++biganswer.big. IN A 10.10.45.4 ++biganswer.big. IN A 10.10.45.5 ++biganswer.big. IN A 10.10.45.6 ++biganswer.big. IN A 10.10.45.7 ++biganswer.big. IN A 10.10.45.8 ++biganswer.big. IN A 10.10.45.9 ++biganswer.big. IN A 10.10.45.10 ++biganswer.big. IN A 10.10.45.11 ++biganswer.big. IN A 10.10.45.12 ++biganswer.big. IN A 10.10.45.13 ++biganswer.big. IN A 10.10.45.14 ++biganswer.big. IN A 10.10.45.15 ++biganswer.big. IN A 10.10.45.16 ++biganswer.big. IN A 10.10.45.17 ++biganswer.big. IN A 10.10.45.18 ++biganswer.big. IN A 10.10.45.19 ++biganswer.big. IN A 10.10.45.20 ++biganswer.big. IN A 10.10.45.21 ++biganswer.big. IN A 10.10.45.22 ++biganswer.big. IN A 10.10.45.23 ++biganswer.big. IN A 10.10.45.24 ++biganswer.big. IN A 10.10.45.25 ++biganswer.big. IN A 10.10.45.26 ++biganswer.big. IN A 10.10.45.27 ++biganswer.big. IN A 10.10.45.28 ++biganswer.big. IN A 10.10.45.29 ++biganswer.big. IN A 10.10.45.30 ++biganswer.big. IN A 10.10.45.31 ++biganswer.big. IN A 10.10.45.32 ++biganswer.big. IN A 10.10.45.33 ++biganswer.big. IN A 10.10.45.34 ++biganswer.big. IN A 10.10.45.35 ++biganswer.big. IN A 10.10.45.36 ++biganswer.big. IN A 10.10.45.37 ++biganswer.big. IN A 10.10.45.38 ++biganswer.big. IN A 10.10.45.39 ++biganswer.big. IN A 10.10.45.40 ++biganswer.big. IN A 10.10.45.41 ++biganswer.big. IN A 10.10.45.42 ++biganswer.big. IN A 10.10.45.43 ++biganswer.big. IN A 10.10.45.44 ++biganswer.big. IN A 10.10.45.45 ++biganswer.big. IN A 10.10.45.46 ++biganswer.big. IN A 10.10.45.47 ++biganswer.big. IN A 10.10.45.48 ++biganswer.big. IN A 10.10.45.49 ++biganswer.big. IN A 10.10.45.50 ++biganswer.big. IN A 10.10.46.1 ++biganswer.big. IN A 10.10.46.2 ++biganswer.big. IN A 10.10.46.3 ++biganswer.big. IN A 10.10.46.4 ++biganswer.big. IN A 10.10.46.5 ++biganswer.big. IN A 10.10.46.6 ++biganswer.big. IN A 10.10.46.7 ++biganswer.big. IN A 10.10.46.8 ++biganswer.big. IN A 10.10.46.9 ++biganswer.big. IN A 10.10.46.10 ++biganswer.big. IN A 10.10.46.11 ++biganswer.big. IN A 10.10.46.12 ++biganswer.big. IN A 10.10.46.13 ++biganswer.big. IN A 10.10.46.14 ++biganswer.big. IN A 10.10.46.15 ++biganswer.big. IN A 10.10.46.16 ++biganswer.big. IN A 10.10.46.17 ++biganswer.big. IN A 10.10.46.18 ++biganswer.big. IN A 10.10.46.19 ++biganswer.big. IN A 10.10.46.20 ++biganswer.big. IN A 10.10.46.21 ++biganswer.big. IN A 10.10.46.22 ++biganswer.big. IN A 10.10.46.23 ++biganswer.big. IN A 10.10.46.24 ++biganswer.big. IN A 10.10.46.25 ++biganswer.big. IN A 10.10.46.26 ++biganswer.big. IN A 10.10.46.27 ++biganswer.big. IN A 10.10.46.28 ++biganswer.big. IN A 10.10.46.29 ++biganswer.big. IN A 10.10.46.30 ++biganswer.big. IN A 10.10.46.31 ++biganswer.big. IN A 10.10.46.32 ++biganswer.big. IN A 10.10.46.33 ++biganswer.big. IN A 10.10.46.34 ++biganswer.big. IN A 10.10.46.35 ++biganswer.big. IN A 10.10.46.36 ++biganswer.big. IN A 10.10.46.37 ++biganswer.big. IN A 10.10.46.38 ++biganswer.big. IN A 10.10.46.39 ++biganswer.big. IN A 10.10.46.40 ++biganswer.big. IN A 10.10.46.41 ++biganswer.big. IN A 10.10.46.42 ++biganswer.big. IN A 10.10.46.43 ++biganswer.big. IN A 10.10.46.44 ++biganswer.big. IN A 10.10.46.45 ++biganswer.big. IN A 10.10.46.46 ++biganswer.big. IN A 10.10.46.47 ++biganswer.big. IN A 10.10.46.48 ++biganswer.big. IN A 10.10.46.49 ++biganswer.big. IN A 10.10.46.50 ++biganswer.big. IN A 10.10.47.1 ++biganswer.big. IN A 10.10.47.2 ++biganswer.big. IN A 10.10.47.3 ++biganswer.big. IN A 10.10.47.4 ++biganswer.big. IN A 10.10.47.5 ++biganswer.big. IN A 10.10.47.6 ++biganswer.big. IN A 10.10.47.7 ++biganswer.big. IN A 10.10.47.8 ++biganswer.big. IN A 10.10.47.9 ++biganswer.big. IN A 10.10.47.10 ++biganswer.big. IN A 10.10.47.11 ++biganswer.big. IN A 10.10.47.12 ++biganswer.big. IN A 10.10.47.13 ++biganswer.big. IN A 10.10.47.14 ++biganswer.big. IN A 10.10.47.15 ++biganswer.big. IN A 10.10.47.16 ++biganswer.big. IN A 10.10.47.17 ++biganswer.big. IN A 10.10.47.18 ++biganswer.big. IN A 10.10.47.19 ++biganswer.big. IN A 10.10.47.20 ++biganswer.big. IN A 10.10.47.21 ++biganswer.big. IN A 10.10.47.22 ++biganswer.big. IN A 10.10.47.23 ++biganswer.big. IN A 10.10.47.24 ++biganswer.big. IN A 10.10.47.25 ++biganswer.big. IN A 10.10.47.26 ++biganswer.big. IN A 10.10.47.27 ++biganswer.big. IN A 10.10.47.28 ++biganswer.big. IN A 10.10.47.29 ++biganswer.big. IN A 10.10.47.30 ++biganswer.big. IN A 10.10.47.31 ++biganswer.big. IN A 10.10.47.32 ++biganswer.big. IN A 10.10.47.33 ++biganswer.big. IN A 10.10.47.34 ++biganswer.big. IN A 10.10.47.35 ++biganswer.big. IN A 10.10.47.36 ++biganswer.big. IN A 10.10.47.37 ++biganswer.big. IN A 10.10.47.38 ++biganswer.big. IN A 10.10.47.39 ++biganswer.big. IN A 10.10.47.40 ++biganswer.big. IN A 10.10.47.41 ++biganswer.big. IN A 10.10.47.42 ++biganswer.big. IN A 10.10.47.43 ++biganswer.big. IN A 10.10.47.44 ++biganswer.big. IN A 10.10.47.45 ++biganswer.big. IN A 10.10.47.46 ++biganswer.big. IN A 10.10.47.47 ++biganswer.big. IN A 10.10.47.48 ++biganswer.big. IN A 10.10.47.49 ++biganswer.big. IN A 10.10.47.50 ++biganswer.big. IN A 10.10.48.1 ++biganswer.big. IN A 10.10.48.2 ++biganswer.big. IN A 10.10.48.3 ++biganswer.big. IN A 10.10.48.4 ++biganswer.big. IN A 10.10.48.5 ++biganswer.big. IN A 10.10.48.6 ++biganswer.big. IN A 10.10.48.7 ++biganswer.big. IN A 10.10.48.8 ++biganswer.big. IN A 10.10.48.9 ++biganswer.big. IN A 10.10.48.10 ++biganswer.big. IN A 10.10.48.11 ++biganswer.big. IN A 10.10.48.12 ++biganswer.big. IN A 10.10.48.13 ++biganswer.big. IN A 10.10.48.14 ++biganswer.big. IN A 10.10.48.15 ++biganswer.big. IN A 10.10.48.16 ++biganswer.big. IN A 10.10.48.17 ++biganswer.big. IN A 10.10.48.18 ++biganswer.big. IN A 10.10.48.19 ++biganswer.big. IN A 10.10.48.20 ++biganswer.big. IN A 10.10.48.21 ++biganswer.big. IN A 10.10.48.22 ++biganswer.big. IN A 10.10.48.23 ++biganswer.big. IN A 10.10.48.24 ++biganswer.big. IN A 10.10.48.25 ++biganswer.big. IN A 10.10.48.26 ++biganswer.big. IN A 10.10.48.27 ++biganswer.big. IN A 10.10.48.28 ++biganswer.big. IN A 10.10.48.29 ++biganswer.big. IN A 10.10.48.30 ++biganswer.big. IN A 10.10.48.31 ++biganswer.big. IN A 10.10.48.32 ++biganswer.big. IN A 10.10.48.33 ++biganswer.big. IN A 10.10.48.34 ++biganswer.big. IN A 10.10.48.35 ++biganswer.big. IN A 10.10.48.36 ++biganswer.big. IN A 10.10.48.37 ++biganswer.big. IN A 10.10.48.38 ++biganswer.big. IN A 10.10.48.39 ++biganswer.big. IN A 10.10.48.40 ++biganswer.big. IN A 10.10.48.41 ++biganswer.big. IN A 10.10.48.42 ++biganswer.big. IN A 10.10.48.43 ++biganswer.big. IN A 10.10.48.44 ++biganswer.big. IN A 10.10.48.45 ++biganswer.big. IN A 10.10.48.46 ++biganswer.big. IN A 10.10.48.47 ++biganswer.big. IN A 10.10.48.48 ++biganswer.big. IN A 10.10.48.49 ++biganswer.big. IN A 10.10.48.50 ++biganswer.big. IN A 10.10.49.1 ++biganswer.big. IN A 10.10.49.2 ++biganswer.big. IN A 10.10.49.3 ++biganswer.big. IN A 10.10.49.4 ++biganswer.big. IN A 10.10.49.5 ++biganswer.big. IN A 10.10.49.6 ++biganswer.big. IN A 10.10.49.7 ++biganswer.big. IN A 10.10.49.8 ++biganswer.big. IN A 10.10.49.9 ++biganswer.big. IN A 10.10.49.10 ++biganswer.big. IN A 10.10.49.11 ++biganswer.big. IN A 10.10.49.12 ++biganswer.big. IN A 10.10.49.13 ++biganswer.big. IN A 10.10.49.14 ++biganswer.big. IN A 10.10.49.15 ++biganswer.big. IN A 10.10.49.16 ++biganswer.big. IN A 10.10.49.17 ++biganswer.big. IN A 10.10.49.18 ++biganswer.big. IN A 10.10.49.19 ++biganswer.big. IN A 10.10.49.20 ++biganswer.big. IN A 10.10.49.21 ++biganswer.big. IN A 10.10.49.22 ++biganswer.big. IN A 10.10.49.23 ++biganswer.big. IN A 10.10.49.24 ++biganswer.big. IN A 10.10.49.25 ++biganswer.big. IN A 10.10.49.26 ++biganswer.big. IN A 10.10.49.27 ++biganswer.big. IN A 10.10.49.28 ++biganswer.big. IN A 10.10.49.29 ++biganswer.big. IN A 10.10.49.30 ++biganswer.big. IN A 10.10.49.31 ++biganswer.big. IN A 10.10.49.32 ++biganswer.big. IN A 10.10.49.33 ++biganswer.big. IN A 10.10.49.34 ++biganswer.big. IN A 10.10.49.35 ++biganswer.big. IN A 10.10.49.36 ++biganswer.big. IN A 10.10.49.37 ++biganswer.big. IN A 10.10.49.38 ++biganswer.big. IN A 10.10.49.39 ++biganswer.big. IN A 10.10.49.40 ++biganswer.big. IN A 10.10.49.41 ++biganswer.big. IN A 10.10.49.42 ++biganswer.big. IN A 10.10.49.43 ++biganswer.big. IN A 10.10.49.44 ++biganswer.big. IN A 10.10.49.45 ++biganswer.big. IN A 10.10.49.46 ++biganswer.big. IN A 10.10.49.47 ++biganswer.big. IN A 10.10.49.48 ++biganswer.big. IN A 10.10.49.49 ++biganswer.big. IN A 10.10.49.50 ++biganswer.big. IN A 10.10.50.1 ++biganswer.big. IN A 10.10.50.2 ++biganswer.big. IN A 10.10.50.3 ++biganswer.big. IN A 10.10.50.4 ++biganswer.big. IN A 10.10.50.5 ++biganswer.big. IN A 10.10.50.6 ++biganswer.big. IN A 10.10.50.7 ++biganswer.big. IN A 10.10.50.8 ++biganswer.big. IN A 10.10.50.9 ++biganswer.big. IN A 10.10.50.10 ++biganswer.big. IN A 10.10.50.11 ++biganswer.big. IN A 10.10.50.12 ++biganswer.big. IN A 10.10.50.13 ++biganswer.big. IN A 10.10.50.14 ++biganswer.big. IN A 10.10.50.15 ++biganswer.big. IN A 10.10.50.16 ++biganswer.big. IN A 10.10.50.17 ++biganswer.big. IN A 10.10.50.18 ++biganswer.big. IN A 10.10.50.19 ++biganswer.big. IN A 10.10.50.20 ++biganswer.big. IN A 10.10.50.21 ++biganswer.big. IN A 10.10.50.22 ++biganswer.big. IN A 10.10.50.23 ++biganswer.big. IN A 10.10.50.24 ++biganswer.big. IN A 10.10.50.25 ++biganswer.big. IN A 10.10.50.26 ++biganswer.big. IN A 10.10.50.27 ++biganswer.big. IN A 10.10.50.28 ++biganswer.big. IN A 10.10.50.29 ++biganswer.big. IN A 10.10.50.30 ++biganswer.big. IN A 10.10.50.31 ++biganswer.big. IN A 10.10.50.32 ++biganswer.big. IN A 10.10.50.33 ++biganswer.big. IN A 10.10.50.34 ++biganswer.big. IN A 10.10.50.35 ++biganswer.big. IN A 10.10.50.36 ++biganswer.big. IN A 10.10.50.37 ++biganswer.big. IN A 10.10.50.38 ++biganswer.big. IN A 10.10.50.39 ++biganswer.big. IN A 10.10.50.40 ++biganswer.big. IN A 10.10.50.41 ++biganswer.big. IN A 10.10.50.42 ++biganswer.big. IN A 10.10.50.43 ++biganswer.big. IN A 10.10.50.44 ++biganswer.big. IN A 10.10.50.45 ++biganswer.big. IN A 10.10.50.46 ++biganswer.big. IN A 10.10.50.47 ++biganswer.big. IN A 10.10.50.48 ++biganswer.big. IN A 10.10.50.49 ++biganswer.big. IN A 10.10.50.50 ++ ++manytypes.big. IN TYPE65280 \# 0 ++manytypes.big. IN TYPE65281 \# 0 ++manytypes.big. IN TYPE65282 \# 0 ++manytypes.big. IN TYPE65283 \# 0 ++manytypes.big. IN TYPE65284 \# 0 ++manytypes.big. IN TYPE65285 \# 0 ++manytypes.big. IN TYPE65286 \# 0 ++manytypes.big. IN TYPE65287 \# 0 ++manytypes.big. IN TYPE65288 \# 0 ++manytypes.big. IN TYPE65289 \# 0 ++manytypes.big. IN TYPE65290 \# 0 ++manytypes.big. IN TYPE65291 \# 0 ++manytypes.big. IN TYPE65292 \# 0 ++manytypes.big. IN TYPE65293 \# 0 ++manytypes.big. IN TYPE65294 \# 0 ++manytypes.big. IN TYPE65295 \# 0 ++manytypes.big. IN TYPE65296 \# 0 ++manytypes.big. IN TYPE65297 \# 0 ++manytypes.big. IN TYPE65298 \# 0 ++manytypes.big. IN TYPE65299 \# 0 ++manytypes.big. IN TYPE65300 \# 0 ++manytypes.big. IN TYPE65301 \# 0 ++manytypes.big. IN TYPE65302 \# 0 ++manytypes.big. IN TYPE65303 \# 0 ++manytypes.big. IN TYPE65304 \# 0 ++manytypes.big. IN TYPE65305 \# 0 ++manytypes.big. IN TYPE65306 \# 0 ++manytypes.big. IN TYPE65307 \# 0 ++manytypes.big. IN TYPE65308 \# 0 ++manytypes.big. IN TYPE65309 \# 0 ++manytypes.big. IN TYPE65310 \# 0 ++manytypes.big. IN TYPE65311 \# 0 ++manytypes.big. IN TYPE65312 \# 0 ++manytypes.big. IN TYPE65313 \# 0 ++manytypes.big. IN TYPE65314 \# 0 ++manytypes.big. IN TYPE65315 \# 0 ++manytypes.big. IN TYPE65316 \# 0 ++manytypes.big. IN TYPE65317 \# 0 ++manytypes.big. IN TYPE65318 \# 0 ++manytypes.big. IN TYPE65319 \# 0 ++manytypes.big. IN TYPE65320 \# 0 ++manytypes.big. IN TYPE65321 \# 0 ++manytypes.big. IN TYPE65322 \# 0 ++manytypes.big. IN TYPE65323 \# 0 ++manytypes.big. IN TYPE65324 \# 0 ++manytypes.big. IN TYPE65325 \# 0 ++manytypes.big. IN TYPE65326 \# 0 ++manytypes.big. IN TYPE65327 \# 0 ++manytypes.big. IN TYPE65328 \# 0 ++manytypes.big. IN TYPE65329 \# 0 ++manytypes.big. IN TYPE65330 \# 0 ++manytypes.big. IN TYPE65331 \# 0 ++manytypes.big. IN TYPE65332 \# 0 ++manytypes.big. IN TYPE65333 \# 0 ++manytypes.big. IN TYPE65334 \# 0 ++manytypes.big. IN TYPE65335 \# 0 ++manytypes.big. IN TYPE65336 \# 0 ++manytypes.big. IN TYPE65337 \# 0 ++manytypes.big. IN TYPE65338 \# 0 ++manytypes.big. IN TYPE65339 \# 0 ++manytypes.big. IN TYPE65340 \# 0 ++manytypes.big. IN TYPE65341 \# 0 ++manytypes.big. IN TYPE65342 \# 0 ++manytypes.big. IN TYPE65343 \# 0 ++manytypes.big. IN TYPE65344 \# 0 ++manytypes.big. IN TYPE65345 \# 0 ++manytypes.big. IN TYPE65346 \# 0 ++manytypes.big. IN TYPE65347 \# 0 ++manytypes.big. IN TYPE65348 \# 0 ++manytypes.big. IN TYPE65349 \# 0 ++manytypes.big. IN TYPE65350 \# 0 ++manytypes.big. IN TYPE65351 \# 0 ++manytypes.big. IN TYPE65352 \# 0 ++manytypes.big. IN TYPE65353 \# 0 ++manytypes.big. IN TYPE65354 \# 0 ++manytypes.big. IN TYPE65355 \# 0 ++manytypes.big. IN TYPE65356 \# 0 ++manytypes.big. IN TYPE65357 \# 0 ++manytypes.big. IN TYPE65358 \# 0 ++manytypes.big. IN TYPE65359 \# 0 ++manytypes.big. IN TYPE65360 \# 0 ++manytypes.big. IN TYPE65361 \# 0 ++manytypes.big. IN TYPE65362 \# 0 ++manytypes.big. IN TYPE65363 \# 0 ++manytypes.big. IN TYPE65364 \# 0 ++manytypes.big. IN TYPE65365 \# 0 ++manytypes.big. IN TYPE65366 \# 0 ++manytypes.big. IN TYPE65367 \# 0 ++manytypes.big. IN TYPE65368 \# 0 ++manytypes.big. IN TYPE65369 \# 0 ++manytypes.big. IN TYPE65370 \# 0 ++manytypes.big. IN TYPE65371 \# 0 ++manytypes.big. IN TYPE65372 \# 0 ++manytypes.big. IN TYPE65373 \# 0 ++manytypes.big. IN TYPE65374 \# 0 ++manytypes.big. IN TYPE65375 \# 0 ++manytypes.big. IN TYPE65376 \# 0 ++manytypes.big. IN TYPE65377 \# 0 ++manytypes.big. IN TYPE65378 \# 0 ++manytypes.big. IN TYPE65379 \# 0 ++manytypes.big. IN TYPE65380 \# 0 ++manytypes.big. IN TYPE65381 \# 0 ++manytypes.big. IN TYPE65382 \# 0 ++manytypes.big. IN TYPE65383 \# 0 ++manytypes.big. IN TYPE65384 \# 0 ++manytypes.big. IN TYPE65385 \# 0 ++manytypes.big. IN TYPE65386 \# 0 ++manytypes.big. IN TYPE65387 \# 0 ++manytypes.big. IN TYPE65388 \# 0 ++manytypes.big. IN TYPE65389 \# 0 ++manytypes.big. IN TYPE65390 \# 0 ++manytypes.big. IN TYPE65391 \# 0 ++manytypes.big. IN TYPE65392 \# 0 ++manytypes.big. IN TYPE65393 \# 0 ++manytypes.big. IN TYPE65394 \# 0 ++manytypes.big. IN TYPE65395 \# 0 ++manytypes.big. IN TYPE65396 \# 0 ++manytypes.big. IN TYPE65397 \# 0 ++manytypes.big. IN TYPE65398 \# 0 ++manytypes.big. IN TYPE65399 \# 0 ++manytypes.big. IN TYPE65400 \# 0 ++manytypes.big. IN TYPE65401 \# 0 ++manytypes.big. IN TYPE65402 \# 0 ++manytypes.big. IN TYPE65403 \# 0 ++manytypes.big. IN TYPE65404 \# 0 ++manytypes.big. IN TYPE65405 \# 0 ++manytypes.big. IN TYPE65406 \# 0 ++manytypes.big. IN TYPE65407 \# 0 ++manytypes.big. IN TYPE65408 \# 0 ++manytypes.big. IN TYPE65409 \# 0 ++manytypes.big. IN TYPE65410 \# 0 ++manytypes.big. IN TYPE65411 \# 0 ++manytypes.big. IN TYPE65412 \# 0 ++manytypes.big. IN TYPE65413 \# 0 ++manytypes.big. IN TYPE65414 \# 0 ++manytypes.big. IN TYPE65415 \# 0 ++manytypes.big. IN TYPE65416 \# 0 ++manytypes.big. IN TYPE65417 \# 0 ++manytypes.big. IN TYPE65418 \# 0 ++manytypes.big. IN TYPE65419 \# 0 ++manytypes.big. IN TYPE65420 \# 0 ++manytypes.big. IN TYPE65421 \# 0 ++manytypes.big. IN TYPE65422 \# 0 ++manytypes.big. IN TYPE65423 \# 0 ++manytypes.big. IN TYPE65424 \# 0 ++manytypes.big. IN TYPE65425 \# 0 ++manytypes.big. IN TYPE65426 \# 0 ++manytypes.big. IN TYPE65427 \# 0 ++manytypes.big. IN TYPE65428 \# 0 ++manytypes.big. IN TYPE65429 \# 0 ++manytypes.big. IN TYPE65430 \# 0 ++manytypes.big. IN TYPE65431 \# 0 ++manytypes.big. IN TYPE65432 \# 0 ++manytypes.big. IN TYPE65433 \# 0 ++manytypes.big. IN TYPE65434 \# 0 ++manytypes.big. IN TYPE65435 \# 0 ++manytypes.big. IN TYPE65436 \# 0 ++manytypes.big. IN TYPE65437 \# 0 ++manytypes.big. IN TYPE65438 \# 0 ++manytypes.big. IN TYPE65439 \# 0 ++manytypes.big. IN TYPE65440 \# 0 ++manytypes.big. IN TYPE65441 \# 0 ++manytypes.big. IN TYPE65442 \# 0 ++manytypes.big. IN TYPE65443 \# 0 ++manytypes.big. IN TYPE65444 \# 0 ++manytypes.big. IN TYPE65445 \# 0 ++manytypes.big. IN TYPE65446 \# 0 ++manytypes.big. IN TYPE65447 \# 0 ++manytypes.big. IN TYPE65448 \# 0 ++manytypes.big. IN TYPE65449 \# 0 ++manytypes.big. IN TYPE65450 \# 0 ++manytypes.big. IN TYPE65451 \# 0 ++manytypes.big. IN TYPE65452 \# 0 ++manytypes.big. IN TYPE65453 \# 0 ++manytypes.big. IN TYPE65454 \# 0 ++manytypes.big. IN TYPE65455 \# 0 ++manytypes.big. IN TYPE65456 \# 0 ++manytypes.big. IN TYPE65457 \# 0 ++manytypes.big. IN TYPE65458 \# 0 ++manytypes.big. IN TYPE65459 \# 0 ++manytypes.big. IN TYPE65460 \# 0 ++manytypes.big. IN TYPE65461 \# 0 ++manytypes.big. IN TYPE65462 \# 0 ++manytypes.big. IN TYPE65463 \# 0 ++manytypes.big. IN TYPE65464 \# 0 ++manytypes.big. IN TYPE65465 \# 0 ++manytypes.big. IN TYPE65466 \# 0 ++manytypes.big. IN TYPE65467 \# 0 ++manytypes.big. IN TYPE65468 \# 0 ++manytypes.big. IN TYPE65469 \# 0 ++manytypes.big. IN TYPE65470 \# 0 ++manytypes.big. IN TYPE65471 \# 0 ++manytypes.big. IN TYPE65472 \# 0 ++manytypes.big. IN TYPE65473 \# 0 ++manytypes.big. IN TYPE65474 \# 0 ++manytypes.big. IN TYPE65475 \# 0 ++manytypes.big. IN TYPE65476 \# 0 ++manytypes.big. IN TYPE65477 \# 0 ++manytypes.big. IN TYPE65478 \# 0 ++manytypes.big. IN TYPE65479 \# 0 ++manytypes.big. IN TYPE65480 \# 0 ++manytypes.big. IN TYPE65481 \# 0 ++manytypes.big. IN TYPE65482 \# 0 ++manytypes.big. IN TYPE65483 \# 0 ++manytypes.big. IN TYPE65484 \# 0 ++manytypes.big. IN TYPE65485 \# 0 ++manytypes.big. IN TYPE65486 \# 0 ++manytypes.big. IN TYPE65487 \# 0 ++manytypes.big. IN TYPE65488 \# 0 ++manytypes.big. IN TYPE65489 \# 0 ++manytypes.big. IN TYPE65490 \# 0 ++manytypes.big. IN TYPE65491 \# 0 ++manytypes.big. IN TYPE65492 \# 0 ++manytypes.big. IN TYPE65493 \# 0 ++manytypes.big. IN TYPE65494 \# 0 ++manytypes.big. IN TYPE65495 \# 0 ++manytypes.big. IN TYPE65496 \# 0 ++manytypes.big. IN TYPE65497 \# 0 ++manytypes.big. IN TYPE65498 \# 0 ++manytypes.big. IN TYPE65499 \# 0 ++manytypes.big. IN TYPE65500 \# 0 ++manytypes.big. IN TYPE65501 \# 0 ++manytypes.big. IN TYPE65502 \# 0 ++manytypes.big. IN TYPE65503 \# 0 ++manytypes.big. IN TYPE65504 \# 0 ++manytypes.big. IN TYPE65505 \# 0 ++manytypes.big. IN TYPE65506 \# 0 ++manytypes.big. IN TYPE65507 \# 0 ++manytypes.big. IN TYPE65508 \# 0 ++manytypes.big. IN TYPE65509 \# 0 ++manytypes.big. IN TYPE65510 \# 0 ++manytypes.big. IN TYPE65511 \# 0 ++manytypes.big. IN TYPE65512 \# 0 ++manytypes.big. IN TYPE65513 \# 0 ++manytypes.big. IN TYPE65514 \# 0 ++manytypes.big. IN TYPE65515 \# 0 ++manytypes.big. IN TYPE65516 \# 0 ++manytypes.big. IN TYPE65517 \# 0 ++manytypes.big. IN TYPE65518 \# 0 ++manytypes.big. IN TYPE65519 \# 0 ++manytypes.big. IN TYPE65520 \# 0 ++manytypes.big. IN TYPE65521 \# 0 ++manytypes.big. IN TYPE65522 \# 0 ++manytypes.big. IN TYPE65523 \# 0 ++manytypes.big. IN TYPE65524 \# 0 ++manytypes.big. IN TYPE65525 \# 0 ++manytypes.big. IN TYPE65526 \# 0 ++manytypes.big. IN TYPE65527 \# 0 ++manytypes.big. IN TYPE65528 \# 0 ++manytypes.big. IN TYPE65529 \# 0 ++manytypes.big. IN TYPE65530 \# 0 ++manytypes.big. IN TYPE65531 \# 0 ++manytypes.big. IN TYPE65532 \# 0 ++manytypes.big. IN TYPE65533 \# 0 ++manytypes.big. IN TYPE65534 \# 0 ++manytypes.big. IN A 10.53.0.1 +diff --git a/bin/tests/system/reclimit/ns1/named.conf.in b/bin/tests/system/reclimit/ns1/named.conf.in +index e6c3c38214..a32c79110a 100644 +--- a/bin/tests/system/reclimit/ns1/named.conf.in ++++ b/bin/tests/system/reclimit/ns1/named.conf.in +@@ -21,6 +21,7 @@ options { + recursion no; + dnssec-validation no; + max-records-per-type 0; ++ max-types-per-name 0; + }; + + zone "." { type primary; file "root.db"; }; +@@ -29,3 +30,8 @@ zone "big." { + type primary; + file "big.db"; + }; ++ ++zone "signed." { ++ type primary; ++ file "signed.db.signed"; ++}; +diff --git a/bin/tests/system/reclimit/ns1/root.db b/bin/tests/system/reclimit/ns1/root.db +index 569abd5ee5..d0aa5296bf 100644 +--- a/bin/tests/system/reclimit/ns1/root.db ++++ b/bin/tests/system/reclimit/ns1/root.db +@@ -18,5 +18,8 @@ direct.example.net. 60 IN A 10.53.0.2 + example.com. 60 IN NS direct.example.com. + direct.example.com. 60 IN A 10.53.0.4 + +-big. in NS ns.big. ++big. IN NS ns.big. + ns.big. 60 IN A 10.53.0.1 ++ ++signed. IN NS ns.signed. ++ns.signed. 60 IN A 10.53.0.1 +diff --git a/bin/tests/system/reclimit/ns3/named5.conf.in b/bin/tests/system/reclimit/ns3/named5.conf.in +index 56f704a3c0..7cf0633a00 100644 +--- a/bin/tests/system/reclimit/ns3/named5.conf.in ++++ b/bin/tests/system/reclimit/ns3/named5.conf.in +@@ -26,6 +26,7 @@ options { + recursion yes; + dnssec-validation yes; + max-records-per-type 0; ++ max-types-per-name 10; + }; + + trust-anchors { }; +diff --git a/bin/tests/system/reclimit/ns3/named6.conf.in b/bin/tests/system/reclimit/ns3/named6.conf.in +new file mode 100644 +index 0000000000..e1607e275d +--- /dev/null ++++ b/bin/tests/system/reclimit/ns3/named6.conf.in +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) Internet Systems Consortium, Inc. ("ISC") ++ * ++ * SPDX-License-Identifier: MPL-2.0 ++ * ++ * This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, you can obtain one at https://mozilla.org/MPL/2.0/. ++ * ++ * See the COPYRIGHT file distributed with this work for additional ++ * information regarding copyright ownership. ++ */ ++ ++options { ++ directory "."; ++ query-source address 10.53.0.3; ++ notify-source 10.53.0.3; ++ transfer-source 10.53.0.3; ++ port @PORT@; ++ pid-file "named.pid"; ++ listen-on { 10.53.0.3; }; ++ listen-on-v6 { none; }; ++ servfail-ttl 0; ++ qname-minimization disabled; ++ max-recursion-depth 12; ++ recursion yes; ++ dnssec-validation yes; ++ max-records-per-type 0; ++ max-types-per-name 0; ++}; ++ ++trust-anchors { }; ++ ++key rndc_key { ++ secret "1234abcd8765"; ++ algorithm @DEFAULT_HMAC@; ++}; ++ ++controls { ++ inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; ++}; ++ ++zone "." { type hint; file "hints.db"; }; +diff --git a/bin/tests/system/reclimit/setup.sh b/bin/tests/system/reclimit/setup.sh +index 6800532acf..ca20192b69 100644 +--- a/bin/tests/system/reclimit/setup.sh ++++ b/bin/tests/system/reclimit/setup.sh +@@ -14,3 +14,8 @@ SYSTEMTESTTOP=.. + + copy_setports ns1/named.conf.in ns1/named.conf + copy_setports ns3/named1.conf.in ns3/named.conf ++ ++sed -e s/big[.]/signed./g ns1/signed.db ++$KEYGEN -K ns1 -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -f KSK signed >/dev/null 2>&1 ++$KEYGEN -K ns1 -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" signed >/dev/null 2>&1 ++$SIGNER -K ns1 -S -f ns1/signed.db.signed -o signed ns1/signed.db >/dev/null +diff --git a/bin/tests/system/reclimit/tests.sh b/bin/tests/system/reclimit/tests.sh +index f76f955a60..ba574ad27a 100644 +--- a/bin/tests/system/reclimit/tests.sh ++++ b/bin/tests/system/reclimit/tests.sh +@@ -12,7 +12,9 @@ + SYSTEMTESTTOP=.. + . $SYSTEMTESTTOP/conf.sh + +-DIGOPTS="-p ${PORT}" ++dig_with_opts() { ++ $DIG -p "${PORT}" +retries=0 "$@" ++} + + status=0 + n=0 +@@ -23,6 +25,10 @@ ns3_reset() { + $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p ${CONTROLPORT} flush | sed 's/^/I:ns3 /' + } + ++ns3_flush() { ++ $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p ${CONTROLPORT} flush | sed 's/^/I:ns3 /' ++} ++ + ns3_sends_aaaa_queries() { + if grep "started AAAA fetch" ns3/named.run >/dev/null; then + return 0 +@@ -63,12 +69,12 @@ echo_i "attempt excessive-depth lookup ($n)" + ret=0 + echo "1000" > ans2/ans.limit + echo "1000" > ans4/ans.limit +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect1.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect1.example.org >dig.out.1.test$n || ret=1 + grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 + check_query_count dig.out.2.test$n dig.out.4.test$n 27 14 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` +@@ -79,12 +85,12 @@ ret=0 + echo "12" > ans2/ans.limit + echo "12" > ans4/ans.limit + ns3_reset ns3/named1.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect2.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect2.example.org >dig.out.1.test$n || ret=1 + grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 + check_query_count dig.out.2.test$n dig.out.4.test$n 50 26 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` +@@ -96,12 +102,12 @@ echo_i "attempt excessive-depth lookup ($n)" + ret=0 + echo "12" > ans2/ans.limit + ns3_reset ns3/named2.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect3.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect3.example.org >dig.out.1.test$n || ret=1 + grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 + check_query_count dig.out.2.test$n dig.out.4.test$n 13 7 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` +@@ -112,12 +118,12 @@ ret=0 + echo "5" > ans2/ans.limit + echo "5" > ans4/ans.limit + ns3_reset ns3/named2.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect4.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect4.example.org >dig.out.1.test$n || ret=1 + grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 + check_query_count dig.out.2.test$n dig.out.4.test$n 22 12 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` +@@ -130,14 +136,14 @@ ret=0 + echo "13" > ans2/ans.limit + echo "13" > ans4/ans.limit + ns3_reset ns3/named3.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect5.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect5.example.org >dig.out.1.test$n || ret=1 + if ns3_sends_aaaa_queries; then + grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 + fi +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 + eval count=`cat dig.out.2.test$n` + [ $count -le 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } + if [ $ret != 0 ]; then echo_i "failed"; fi +@@ -148,10 +154,10 @@ echo_i "attempt permissible lookup ($n)" + ret=0 + echo "12" > ans2/ans.limit + ns3_reset ns3/named3.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect6.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect6.example.org >dig.out.1.test$n || ret=1 + grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 + eval count=`cat dig.out.2.test$n` + [ $count -le 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } + if [ $ret != 0 ]; then echo_i "failed"; fi +@@ -164,12 +170,12 @@ echo_i "attempt excessive-queries lookup ($n)" + ret=0 + echo "11" > ans2/ans.limit + ns3_reset ns3/named4.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect7.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect7.example.org >dig.out.1.test$n || ret=1 + if ns3_sends_aaaa_queries; then + grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 + fi +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 + eval count=`cat dig.out.2.test$n` + [ $count -le 40 ] || { ret=1; echo_i "count ($count) !<= 40"; } + if [ $ret != 0 ]; then echo_i "failed"; fi +@@ -180,10 +186,10 @@ echo_i "attempt permissible lookup ($n)" + ret=0 + echo "9" > ans2/ans.limit + ns3_reset ns3/named4.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS @10.53.0.3 indirect8.example.org > dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts @10.53.0.3 indirect8.example.org >dig.out.1.test$n || ret=1 + grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 + eval count=`cat dig.out.2.test$n` + [ $count -le 40 ] || { ret=1; echo_i "count ($count) !<= 40"; } + if [ $ret != 0 ]; then echo_i "failed"; fi +@@ -193,12 +199,12 @@ n=`expr $n + 1` + echo_i "attempting NS explosion ($n)" + ret=0 + ns3_reset ns3/named4.conf.in +-$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 +-$DIG $DIGOPTS +short @10.53.0.3 ns1.1.example.net > dig.out.1.test$n || ret=1 +-$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 ++dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 ++dig_with_opts +short @10.53.0.3 ns1.1.example.net >dig.out.1.test$n || ret=1 ++dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 + eval count=`cat dig.out.2.test$n` + [ $count -lt 50 ] || ret=1 +-$DIG $DIGOPTS +short @10.53.0.7 count txt > dig.out.3.test$n || ret=1 ++dig_with_opts +short @10.53.0.7 count txt >dig.out.3.test$n || ret=1 + eval count=`cat dig.out.3.test$n` + [ $count -lt 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } + if [ $ret != 0 ]; then echo_i "failed"; fi +@@ -207,13 +213,254 @@ status=`expr $status + $ret` + n=$((n + 1)) + echo_i "checking RRset that exceeds max-records-per-type ($n)" + ret=0 +-$DIG $DIGOPTS @10.53.0.3 biganswer.big >dig.out.1.test$n || ret=1 ++dig_with_opts @10.53.0.3 biganswer.big >dig.out.1.test$n || ret=1 + grep 'status: SERVFAIL' dig.out.1.test$n >/dev/null || ret=1 + ns3_reset ns3/named5.conf.in +-$DIG $DIGOPTS @10.53.0.3 biganswer.big >dig.out.2.test$n || ret=1 ++dig_with_opts @10.53.0.3 biganswer.big >dig.out.2.test$n || ret=1 + grep 'status: NOERROR' dig.out.2.test$n >/dev/null || ret=1 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=$((status + ret)) + ++check_manytypes() ( ++ i=$1 ++ name=$2 ++ type=$3 ++ expected=$4 ++ exname=$5 ++ extype=$6 ++ ttl=$7 ++ neq_ttl=$8 ++ ++ if ! dig_with_opts @10.53.0.3 IN "$type" "$name" >"dig.out.$i.$type.test$n"; then ++ exit 1 ++ fi ++ ++ if ! grep 'status: '"${expected}"'' "dig.out.$i.$type.test$n" >/dev/null; then ++ exit 1 ++ fi ++ ++ if [ -n "$ttl" ] && ! grep -q "^$exname.[[:space:]]*${ttl}[[:space:]]*IN[[:space:]]*$extype" "dig.out.$i.$type.test$n"; then ++ exit 1 ++ fi ++ ++ if [ -n "${neq_ttl}" ] && grep -q "^$exname.[[:space:]]*${neq_ttl}[[:space:]]*IN[[:space:]]*$type" "dig.out.$i.$type.test$n"; then ++ exit 1 ++ fi ++ ++ exit 0 ++) ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that priority names under the max-types-per-name limit get cached ($n)" ++ ++# Query for NXDOMAIN for items on our priority list - these should get cached ++for rrtype in AAAA MX NS; do ++ check_manytypes 1 manytypes.big "${rrtype}" NOERROR big SOA 60 || ret=1 ++done ++# Wait at least 1 second ++for rrtype in AAAA MX NS; do ++ check_manytypes 2 manytypes.big "${rrtype}" NOERROR big SOA "" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++ns3_flush ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that NXDOMAIN names under the max-types-per-name limit get cached ($n)" ++ ++# Query for 10 NXDOMAIN types ++for ntype in $(seq 65270 65279); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR big SOA 60 || ret=1 ++done ++# Wait at least 1 second ++sleep 1 ++# Query for 10 NXDOMAIN types again - these should be cached ++for ntype in $(seq 65270 65279); do ++ check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR big SOA "" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that existing names under the max-types-per-name limit get cached ($n)" ++ ++# Limited to 10 types - these should be cached and the previous record should be evicted ++for ntype in $(seq 65280 65289); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 ++done ++# Wait at least one second ++sleep 1 ++# Limited to 10 types - these should be cached ++for ntype in $(seq 65280 65289); do ++ check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that NXDOMAIN names over the max-types-per-name limit don't get cached ($n)" ++ ++# Query for 10 NXDOMAIN types ++for ntype in $(seq 65270 65279); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR big SOA 0 || ret=1 ++done ++# Wait at least 1 second ++sleep 1 ++# Query for 10 NXDOMAIN types again - these should not be cached ++for ntype in $(seq 65270 65279); do ++ check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR big SOA 0 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that priority NXDOMAIN names over the max-types-per-name limit get cached ($n)" ++ ++# Query for NXDOMAIN for items on our priority list - these should get cached ++for rrtype in AAAA MX NS; do ++ check_manytypes 1 manytypes.big "${rrtype}" NOERROR big SOA 60 || ret=1 ++done ++# Wait at least 1 second ++for rrtype in AAAA MX NS; do ++ check_manytypes 2 manytypes.big "${rrtype}" NOERROR big SOA "" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that priority name over the max-types-per-name get cached ($n)" ++ ++# Query for an item on our priority list - it should get cached ++check_manytypes 1 manytypes.big "A" NOERROR manytypes.big A 60 || ret=1 ++# Wait at least 1 second ++sleep 1 ++# Query the same name again - it should be in the cache ++check_manytypes 2 manytypes.big "A" NOERROR big manytypes.A "" 60 || ret=1 ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++ns3_flush ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that priority name over the max-types-per-name don't get evicted ($n)" ++ ++# Query for an item on our priority list - it should get cached ++check_manytypes 1 manytypes.big "A" NOERROR manytypes.big A 60 || ret=1 ++# Query for 10 more types - this should not evict A record ++for ntype in $(seq 65280 65289); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big || ret=1 ++done ++# Wait at least 1 second ++sleep 1 ++# Query the same name again - it should be in the cache ++check_manytypes 2 manytypes.big "A" NOERROR manytypes.big A "" 60 || ret=1 ++# This one was first in the list and should have been evicted ++check_manytypes 2 manytypes.big "TYPE65280" NOERROR manytypes.big TYPE65280 60 || ret=1 ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++ns3_flush ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that non-priority types cause eviction ($n)" ++ ++# Everything on top of that will cause the cache eviction ++for ntype in $(seq 65280 65299); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 ++done ++# Wait at least one second ++sleep 1 ++# These should have TTL != 60 now ++for ntype in $(seq 65290 65299); do ++ check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 ++done ++# These should have been evicted ++for ntype in $(seq 65280 65289); do ++ check_manytypes 3 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 ++done ++# These should have been evicted by the previous block ++for ntype in $(seq 65290 65299); do ++ check_manytypes 4 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++ns3_flush ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that signed names under the max-types-per-name limit get cached ($n)" ++ ++# Go through the 10 items, this should result in 20 items (type + rrsig(type)) ++for ntype in $(seq 65280 65289); do ++ check_manytypes 1 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 ++done ++ ++# Wait at least one second ++sleep 1 ++ ++# These should have TTL != 60 now ++for ntype in $(seq 65285 65289); do ++ check_manytypes 2 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" "" 60 || ret=1 ++done ++ ++# These should have been evicted ++for ntype in $(seq 65280 65284); do ++ check_manytypes 3 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 ++done ++ ++# These should have been evicted by the previous block ++for ntype in $(seq 65285 65289); do ++ check_manytypes 4 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++if [ $status -ne 0 ]; then exit 1; fi ++ ++n=$((n + 1)) ++ret=0 ++echo_i "checking that lifting the limit will allow everything to get cached ($n)" ++ ++# Lift the limit ++ns3_reset ns3/named6.conf.in ++ ++for ntype in $(seq 65280 65534); do ++ check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 ++done ++# Wait at least one second ++sleep 1 ++for ntype in $(seq 65280 65534); do ++ check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 ++done ++ ++if [ $ret -ne 0 ]; then echo_i "failed"; fi ++status=$((status + ret)) ++ + echo_i "exit status: $status" + [ $status -eq 0 ] || exit 1 +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737-types.patch b/SOURCES/bind-9.16-CVE-2024-1737-types.patch new file mode 100644 index 0000000..e7e1b07 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737-types.patch @@ -0,0 +1,582 @@ +From a1c95d5fa479ac722f0cf758c494a37ffe1508c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Sat, 25 May 2024 11:46:56 +0200 +Subject: [PATCH] Add a limit to the number of RR types for single name + +Previously, the number of RR types for a single owner name was limited +only by the maximum number of the types (64k). As the data structure +that holds the RR types for the database node is just a linked list, and +there are places where we just walk through the whole list (again and +again), adding a large number of RR types for a single owner named with +would slow down processing of such name (database node). + +Add a configurable limit to cap the number of the RR types for a single +owner. This is enforced at the database (rbtdb, qpzone, qpcache) level +and configured with new max-types-per-name configuration option that +can be configured globally, per-view and per-zone. + +(cherry picked from commit 00d16211d6368b99f070c1182d8c76b3798ca1db) +(cherry picked from commit 89f1779bc28b27adbd00325b974ede7a683f8632) + +fix a memory leak that could occur when signing + +when signatures were not added because of too many types already +existing at a node, the diff was not being cleaned up; this led to +a memory leak being reported at shutdown. + +(cherry picked from commit 2825bdb1ae5be801e7ed603ba2455ed9a308f1f7) +(cherry picked from commit a080317de0efb7f6ffa12415a863729d416007d5) + +Be smarter about refusing to add many RR types to the database + +Instead of outright refusing to add new RR types to the cache, be a bit +smarter: + +1. If the new header type is in our priority list, we always add either + positive or negative entry at the beginning of the list. + +2. If the new header type is negative entry, and we are over the limit, + we mark it as ancient immediately, so it gets evicted from the cache + as soon as possible. + +3. Otherwise add the new header after the priority headers (or at the + head of the list). + +4. If we are over the limit, evict the last entry on the normal header + list. + +(cherry picked from commit 57cd34441a1b4ecc9874a4a106c2c95b8d7a3120) +(cherry picked from commit 92a680a3ef708281267e4fd7b1e62b57c929447b) + +Log error when update fails + +The new "too many records" error can make an update fail without the +error being logged. This commit fixes that. + +(cherry picked from commit 558923e5405894cf976d102f0d246a28bdbb400c) +(cherry picked from commit d72adf4b927d83a2a0ff8e431b911ec1df7aeb88) +--- + bin/named/config.c | 1 + + bin/named/server.c | 9 +++++++++ + bin/named/zoneconf.c | 8 ++++++++ + bin/tests/system/dyndb/driver/db.c | 3 ++- + doc/arm/reference.rst | 12 ++++++++++++ + lib/dns/cache.c | 12 ++++++++++++ + lib/dns/db.c | 9 +++++++++ + lib/dns/dnsrps.c | 3 ++- + lib/dns/ecdb.c | 3 ++- + lib/dns/include/dns/cache.h | 6 ++++++ + lib/dns/include/dns/db.h | 11 +++++++++++ + lib/dns/include/dns/view.h | 7 +++++++ + lib/dns/include/dns/zone.h | 13 +++++++++++++ + lib/dns/rbtdb.c | 28 +++++++++++++++++----------- + lib/dns/sdb.c | 3 ++- + lib/dns/sdlz.c | 3 ++- + lib/dns/view.c | 10 ++++++++++ + lib/dns/zone.c | 16 ++++++++++++++++ + lib/isccfg/namedconf.c | 3 +++ + lib/ns/update.c | 15 ++++++++++++--- + 20 files changed, 156 insertions(+), 19 deletions(-) + +diff --git a/bin/named/config.c b/bin/named/config.c +index 9cba6f588b..c9888ada65 100644 +--- a/bin/named/config.c ++++ b/bin/named/config.c +@@ -218,6 +218,7 @@ options {\n\ + max-records-per-type 100;\n\ + max-refresh-time 2419200; /* 4 weeks */\n\ + max-retry-time 1209600; /* 2 weeks */\n\ ++ max-types-per-name 100;\n\ + max-transfer-idle-in 60;\n\ + max-transfer-idle-out 60;\n\ + max-transfer-time-in 120;\n\ +diff --git a/bin/named/server.c b/bin/named/server.c +index 7bf5f2664d..4cc69b54a1 100644 +--- a/bin/named/server.c ++++ b/bin/named/server.c +@@ -5427,6 +5427,15 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config, + INSIST(result == ISC_R_SUCCESS); + dns_view_setmaxrrperset(view, cfg_obj_asuint32(obj)); + ++ /* ++ * This is used for the cache and also as a default value ++ * for zone databases. ++ */ ++ obj = NULL; ++ result = named_config_get(maps, "max-types-per-name", &obj); ++ INSIST(result == ISC_R_SUCCESS); ++ dns_view_setmaxtypepername(view, cfg_obj_asuint32(obj)); ++ + obj = NULL; + result = named_config_get(maps, "max-recursion-depth", &obj); + INSIST(result == ISC_R_SUCCESS); +diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c +index ae5cc656ee..f6e8c64866 100644 +--- a/bin/named/zoneconf.c ++++ b/bin/named/zoneconf.c +@@ -1100,6 +1100,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, + dns_zone_setmaxrrperset(zone, 0); + } + ++ obj = NULL; ++ result = named_config_get(maps, "max-types-per-name", &obj); ++ INSIST(result == ISC_R_SUCCESS && obj != NULL); ++ dns_zone_setmaxtypepername(mayberaw, cfg_obj_asuint32(obj)); ++ if (zone != mayberaw) { ++ dns_zone_setmaxtypepername(zone, 0); ++ } ++ + if (raw != NULL && filename != NULL) { + #define SIGNED ".signed" + size_t signedlen = strlen(filename) + sizeof(SIGNED); +diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c +index 6725a3bacd..c95fc8212b 100644 +--- a/bin/tests/system/dyndb/driver/db.c ++++ b/bin/tests/system/dyndb/driver/db.c +@@ -593,7 +593,8 @@ static dns_dbmethods_t sampledb_methods = { + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ +- NULL /* setmaxrrperset */ ++ NULL, /* setmaxrrperset */ ++ NULL /* setmaxtypepername */ + }; + + /* Auxiliary driver functions. */ +diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst +index b1983ef30d..a8a3c7911d 100644 +--- a/doc/arm/reference.rst ++++ b/doc/arm/reference.rst +@@ -2902,6 +2902,18 @@ system. + a failure. If set to 0, there is no cap on RRset size. The default is + 100. + ++``max-types-per-name`` ++ This sets the maximum number of resource record types that can be stored ++ for a single owner name in a database. When configured in ``options`` ++ or ``view``, it controls the cache database, and also sets ++ the default value for zone databases, which can be overridden by setting ++ it at the ``zone`` level ++ ++ If set to a positive value, any attempt to cache or to add to a zone an owner ++ name with more than the specified number of resource record types will result ++ in a failure. If set to 0, there is no cap on RR types number. The default is ++ 100. ++ + ``recursive-clients`` + This sets the maximum number (a "hard quota") of simultaneous recursive lookups + the server performs on behalf of clients. The default is +diff --git a/lib/dns/cache.c b/lib/dns/cache.c +index 9f0412dbe7..0b474fc313 100644 +--- a/lib/dns/cache.c ++++ b/lib/dns/cache.c +@@ -150,6 +150,7 @@ struct dns_cache { + /* Access to the on-disk cache file is also locked by 'filelock'. */ + + uint32_t maxrrperset; ++ uint32_t maxtypepername; + }; + + /*** +@@ -178,6 +179,7 @@ cache_create_db(dns_cache_t *cache, dns_db_t **db) { + if (result == ISC_R_SUCCESS) { + dns_db_setservestalettl(*db, cache->serve_stale_ttl); + dns_db_setmaxrrperset(*db, cache->maxrrperset); ++ dns_db_setmaxtypepername(*db, cache->maxtypepername); + } + return (result); + } +@@ -1290,6 +1292,16 @@ dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value) { + } + } + ++void ++dns_cache_setmaxtypepername(dns_cache_t *cache, uint32_t value) { ++ REQUIRE(VALID_CACHE(cache)); ++ ++ cache->maxtypepername = value; ++ if (cache->db != NULL) { ++ dns_db_setmaxtypepername(cache->db, value); ++ } ++} ++ + /* + * XXX: Much of the following code has been copied in from statschannel.c. + * We should refactor this into a generic function in stats.c that can be +diff --git a/lib/dns/db.c b/lib/dns/db.c +index 8439265a7f..18583d41c2 100644 +--- a/lib/dns/db.c ++++ b/lib/dns/db.c +@@ -1131,3 +1131,12 @@ dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) { + (db->methods->setmaxrrperset)(db, value); + } + } ++ ++void ++dns_db_setmaxtypepername(dns_db_t *db, uint32_t value) { ++ REQUIRE(DNS_DB_VALID(db)); ++ ++ if (db->methods->setmaxtypepername != NULL) { ++ (db->methods->setmaxtypepername)(db, value); ++ } ++} +diff --git a/lib/dns/dnsrps.c b/lib/dns/dnsrps.c +index 539090d1bd..e1a1b21a8b 100644 +--- a/lib/dns/dnsrps.c ++++ b/lib/dns/dnsrps.c +@@ -971,7 +971,8 @@ static dns_dbmethods_t rpsdb_db_methods = { + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ +- NULL /* setmaxrrperset */ ++ NULL, /* setmaxrrperset */ ++ NULL /* setmaxtypepername */ + }; + + static dns_rdatasetmethods_t rpsdb_rdataset_methods = { +diff --git a/lib/dns/ecdb.c b/lib/dns/ecdb.c +index bab5da5503..27d03b4e3a 100644 +--- a/lib/dns/ecdb.c ++++ b/lib/dns/ecdb.c +@@ -560,7 +560,8 @@ static dns_dbmethods_t ecdb_methods = { + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ +- NULL /* setmaxrrperset */ ++ NULL, /* setmaxrrperset */ ++ NULL /* setmaxtypepername */ + }; + + static isc_result_t +diff --git a/lib/dns/include/dns/cache.h b/lib/dns/include/dns/cache.h +index 3fa2a891e0..72de21600a 100644 +--- a/lib/dns/include/dns/cache.h ++++ b/lib/dns/include/dns/cache.h +@@ -343,6 +343,12 @@ dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value); + * Set the maximum resource records per RRSet that can be cached. + */ + ++void ++dns_cache_setmaxtypepername(dns_cache_t *cache, uint32_t value); ++/*%< ++ * Set the maximum resource record types per owner name that can be cached. ++ */ ++ + #ifdef HAVE_LIBXML2 + int + dns_cache_renderxml(dns_cache_t *cache, void *writer0); +diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h +index 732bfe473d..411881d48a 100644 +--- a/lib/dns/include/dns/db.h ++++ b/lib/dns/include/dns/db.h +@@ -183,6 +183,7 @@ typedef struct dns_dbmethods { + isc_result_t (*setgluecachestats)(dns_db_t *db, isc_stats_t *stats); + isc_result_t (*adjusthashsize)(dns_db_t *db, size_t size); + void (*setmaxrrperset)(dns_db_t *db, uint32_t value); ++ void (*setmaxtypepername)(dns_db_t *db, uint32_t value); + } dns_dbmethods_t; + + typedef isc_result_t (*dns_dbcreatefunc_t)(isc_mem_t *mctx, +@@ -1791,6 +1792,16 @@ dns_db_setmaxrrperset(dns_db_t *db, uint32_t value); + * is nonzero, then any subsequent attempt to add an rdataset with + * more than 'value' RRs will return ISC_R_NOSPACE. + */ ++ ++void ++dns_db_setmaxtypepername(dns_db_t *db, uint32_t value); ++/*%< ++ * Set the maximum permissible number of RR types per owner name. ++ * ++ * If 'value' is nonzero, then any subsequent attempt to add an rdataset with a ++ * RR type that would exceed the number of already stored RR types will return ++ * ISC_R_NOSPACE. ++ */ + ISC_LANG_ENDDECLS + + #endif /* DNS_DB_H */ +diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h +index 0d502f4dd2..0a72f58e98 100644 +--- a/lib/dns/include/dns/view.h ++++ b/lib/dns/include/dns/view.h +@@ -187,6 +187,7 @@ struct dns_view { + uint32_t fail_ttl; + dns_badcache_t *failcache; + uint32_t maxrrperset; ++ uint32_t maxtypepername; + + /* + * Configurable data for server use only, +@@ -1346,6 +1347,12 @@ dns_view_setmaxrrperset(dns_view_t *view, uint32_t value); + * Set the maximum resource records per RRSet that can be cached. + */ + ++void ++dns_view_setmaxtypepername(dns_view_t *view, uint32_t value); ++/*%< ++ * Set the maximum resource record types per owner name that can be cached. ++ */ ++ + ISC_LANG_ENDDECLS + + #endif /* DNS_VIEW_H */ +diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h +index e902043357..6fca11f3fd 100644 +--- a/lib/dns/include/dns/zone.h ++++ b/lib/dns/include/dns/zone.h +@@ -356,6 +356,19 @@ dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t maxrrperset); + *\li void + */ + ++void ++dns_zone_setmaxtypepername(dns_zone_t *zone, uint32_t maxtypepername); ++/*%< ++ * Sets the maximum number of resource record types per owner name ++ * permitted in a zone. 0 implies unlimited. ++ * ++ * Requires: ++ *\li 'zone' to be valid initialised zone. ++ * ++ * Returns: ++ *\li void ++ */ ++ + void + dns_zone_setmaxttl(dns_zone_t *zone, uint32_t maxttl); + /*%< +diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c +index ca71bb9c03..ed5015c2d4 100644 +--- a/lib/dns/rbtdb.c ++++ b/lib/dns/rbtdb.c +@@ -483,6 +483,7 @@ struct dns_rbtdb { + rbtdb_serial_t least_serial; + rbtdb_serial_t next_serial; + uint32_t maxrrperset; ++ uint32_t maxtypepername; + rbtdb_version_t *current_version; + rbtdb_version_t *future_version; + rbtdb_versionlist_t open_versions; +@@ -6222,19 +6223,13 @@ update_recordsandxfrsize(bool add, rbtdb_version_t *rbtversion, + RWUNLOCK(&rbtversion->rwlock, isc_rwlocktype_write); + } + +-#ifndef DNS_RBTDB_MAX_RTYPES +-#define DNS_RBTDB_MAX_RTYPES 100 +-#endif /* DNS_RBTDB_MAX_RTYPES */ +- + static bool + overmaxtype(dns_rbtdb_t *rbtdb, uint32_t ntypes) { +- UNUSED(rbtdb); +- +- if (DNS_RBTDB_MAX_RTYPES == 0) { ++ if (rbtdb->maxtypepername == 0) { + return (false); + } + +- return (ntypes >= DNS_RBTDB_MAX_RTYPES); ++ return (ntypes >= rbtdb->maxtypepername); + } + + static bool +@@ -6794,7 +6789,7 @@ find_header: + if (!IS_CACHE(rbtdb) && overmaxtype(rbtdb, ntypes)) { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); +- return (ISC_R_QUOTA); ++ return (DNS_R_TOOMANYRECORDS); + } + + newheader->down = NULL; +@@ -8623,6 +8618,15 @@ setmaxrrperset(dns_db_t *db, uint32_t maxrrperset) { + rbtdb->maxrrperset = maxrrperset; + } + ++static void ++setmaxtypepername(dns_db_t *db, uint32_t maxtypepername) { ++ dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; ++ ++ REQUIRE(VALID_RBTDB(rbtdb)); ++ ++ rbtdb->maxtypepername = maxtypepername; ++} ++ + static dns_stats_t * + getrrsetstats(dns_db_t *db) { + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; +@@ -8747,7 +8751,8 @@ static dns_dbmethods_t zone_methods = { attach, + NULL, /* getservestalerefresh */ + setgluecachestats, + adjusthashsize, +- setmaxrrperset }; ++ setmaxrrperset, ++ setmaxtypepername }; + + static dns_dbmethods_t cache_methods = { attach, + detach, +@@ -8800,7 +8805,8 @@ static dns_dbmethods_t cache_methods = { attach, + getservestalerefresh, + NULL, + adjusthashsize, +- setmaxrrperset }; ++ setmaxrrperset, ++ setmaxtypepername }; + + isc_result_t + dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type, +diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c +index 84cd324fb4..77a5834b76 100644 +--- a/lib/dns/sdb.c ++++ b/lib/dns/sdb.c +@@ -1313,7 +1313,8 @@ static dns_dbmethods_t sdb_methods = { + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ +- NULL /* setmaxrrperset */ ++ NULL, /* setmaxrrperset */ ++ NULL /* setmaxtypepername */ + }; + + static isc_result_t +diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c +index 60a1d23b3b..418a4a14ee 100644 +--- a/lib/dns/sdlz.c ++++ b/lib/dns/sdlz.c +@@ -1285,7 +1285,8 @@ static dns_dbmethods_t sdlzdb_methods = { + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ +- NULL /* setmaxrrperset */ ++ NULL, /* setmaxrrperset */ ++ NULL /* setmaxtypepername */ + }; + + /* +diff --git a/lib/dns/view.c b/lib/dns/view.c +index a672aa8bc8..98579f03d9 100644 +--- a/lib/dns/view.c ++++ b/lib/dns/view.c +@@ -871,6 +871,7 @@ dns_view_setcache(dns_view_t *view, dns_cache_t *cache, bool shared) { + INSIST(DNS_DB_VALID(view->cachedb)); + + dns_cache_setmaxrrperset(view->cache, view->maxrrperset); ++ dns_cache_setmaxtypepername(view->cache, view->maxtypepername); + } + + bool +@@ -2555,3 +2556,12 @@ dns_view_setmaxrrperset(dns_view_t *view, uint32_t value) { + dns_cache_setmaxrrperset(view->cache, value); + } + } ++ ++void ++dns_view_setmaxtypepername(dns_view_t *view, uint32_t value) { ++ REQUIRE(DNS_VIEW_VALID(view)); ++ view->maxtypepername = value; ++ if (view->cache != NULL) { ++ dns_cache_setmaxtypepername(view->cache, value); ++ } ++} +diff --git a/lib/dns/zone.c b/lib/dns/zone.c +index 5c8d97ed18..e1fb9ab50b 100644 +--- a/lib/dns/zone.c ++++ b/lib/dns/zone.c +@@ -277,6 +277,7 @@ struct dns_zone { + + uint32_t maxrecords; + uint32_t maxrrperset; ++ uint32_t maxtypepername; + + isc_sockaddr_t *masters; + isc_dscp_t *masterdscps; +@@ -9959,6 +9960,7 @@ cleanup: + } + + dns_diff_clear(&_sig_diff); ++ dns_diff_clear(&post_diff); + + for (i = 0; i < nkeys; i++) { + dst_key_free(&zone_keys[i]); +@@ -12168,6 +12170,16 @@ dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t val) { + } + } + ++void ++dns_zone_setmaxtypepername(dns_zone_t *zone, uint32_t val) { ++ REQUIRE(DNS_ZONE_VALID(zone)); ++ ++ zone->maxtypepername = val; ++ if (zone->db != NULL) { ++ dns_db_setmaxtypepername(zone->db, val); ++ } ++} ++ + static bool + notify_isqueued(dns_zone_t *zone, unsigned int flags, dns_name_t *name, + isc_sockaddr_t *addr, dns_tsigkey_t *key) { +@@ -14573,6 +14585,8 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { + } + dns_db_settask(stub->db, zone->task); + dns_db_setmaxrrperset(stub->db, zone->maxrrperset); ++ dns_db_setmaxtypepername(stub->db, ++ zone->maxtypepername); + } + + result = dns_db_newversion(stub->db, &stub->version); +@@ -17295,6 +17309,7 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, bool dump) { + zone_attachdb(zone, db); + dns_db_settask(zone->db, zone->task); + dns_db_setmaxrrperset(zone->db, zone->maxrrperset); ++ dns_db_setmaxtypepername(zone->db, zone->maxtypepername); + DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED | DNS_ZONEFLG_NEEDNOTIFY); + return (ISC_R_SUCCESS); + +@@ -23444,6 +23459,7 @@ dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp) { + + dns_db_settask(db, zone->task); + dns_db_setmaxrrperset(db, zone->maxrrperset); ++ dns_db_setmaxtypepername(db, zone->maxtypepername); + + *dbp = db; + +diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c +index dce30537dd..ac9fc2af5e 100644 +--- a/lib/isccfg/namedconf.c ++++ b/lib/isccfg/namedconf.c +@@ -2239,6 +2239,9 @@ static cfg_clausedef_t zone_clauses[] = { + { "max-records-per-type", &cfg_type_uint32, + CFG_ZONE_PRIMARY | CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | + CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, ++ { "max-types-per-name", &cfg_type_uint32, ++ CFG_ZONE_PRIMARY | CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | ++ CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, + { "max-refresh-time", &cfg_type_uint32, + CFG_ZONE_SECONDARY | CFG_ZONE_MIRROR | CFG_ZONE_STUB }, + { "max-retry-time", &cfg_type_uint32, +diff --git a/lib/ns/update.c b/lib/ns/update.c +index c5ce1eaf09..0e0bdc9c03 100644 +--- a/lib/ns/update.c ++++ b/lib/ns/update.c +@@ -3112,9 +3112,18 @@ update_action(isc_task_t *task, isc_event_t *event) { + dns_diff_clear(&ctx.add_diff); + goto failure; + } +- CHECK(update_one_rr(db, ver, &diff, +- DNS_DIFFOP_ADD, +- name, ttl, &rdata)); ++ result = update_one_rr( ++ db, ver, &diff, DNS_DIFFOP_ADD, ++ name, ttl, &rdata); ++ if (result != ISC_R_SUCCESS) { ++ update_log(client, zone, ++ LOGLEVEL_PROTOCOL, ++ "adding an RR " ++ "failed: %s", ++ isc_result_totext( ++ result)); ++ goto failure; ++ } + } + } + } else if (update_class == dns_rdataclass_any) { +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1737.patch b/SOURCES/bind-9.16-CVE-2024-1737.patch new file mode 100644 index 0000000..692e129 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1737.patch @@ -0,0 +1,364 @@ +From c5357835c98b7b028f8a041b6976bb335c9a4056 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= +Date: Fri, 1 Mar 2024 08:26:07 +0100 +Subject: [PATCH] Add a limit to the number of RRs in RRSets + +Previously, the number of RRs in the RRSets were internally unlimited. +As the data structure that holds the RRs is just a linked list, and +there are places where we just walk through all of the RRs, adding an +RRSet with huge number of RRs inside would slow down processing of said +RRSets. + +The fix for end-of-life branches make the limit compile-time only for +simplicity and the limit can be changed at the compile time by adding +following define to CFLAGS: + + -DDNS_RDATASET_MAX_RECORDS= + +(cherry picked from commit c5c4d00c38530390c9e1ae4c98b65fbbadfe9e5e) +(cherry picked from commit fdabf4b9570a60688f9f7d1e88d885f7a3718bca) + +Add a limit to the number of RR types for single name + +Previously, the number of RR types for a single owner name was limited +only by the maximum number of the types (64k). As the data structure +that holds the RR types for the database node is just a linked list, and +there are places where we just walk through the whole list (again and +again), adding a large number of RR types for a single owner named with +would slow down processing of such name (database node). + +Add a hard-coded limit (100) to cap the number of the RR types for a single +owner. The limit can be changed at the compile time by adding following +define to CFLAGS: + + -DDNS_RBTDB_MAX_RTYPES= + +(cherry picked from commit dfcadc2085c8844b5836aff2b5ea51fb60c34868) + +Optimize the slabheader placement for certain RRTypes + +Mark the infrastructure RRTypes as "priority" types and place them at +the beginning of the rdataslab header data graph. The non-priority +types either go right after the priority types (if any). + +(cherry picked from commit 3ac482be7fd058d284e89873021339579fad0615) +(cherry picked from commit 8ef414a7f38a04cfc11df44adaedaf3126fa3878) + +Expand the list of the priority types + +Add HTTPS, SVCB, SRV, PTR, NAPTR, DNSKEY and TXT records to the list of +the priority types that are put at the beginning of the slabheader list +for faster access and to avoid eviction when there are more types than +the max-types-per-name limit. + +(cherry picked from commit b27c6bcce894786a8e082eafd59eccbf6f2731cb) +(cherry picked from commit d56d2a32b861e81c2aaaabd309c4c58b629ede32) + +Make the resolver qtype ANY test order agnostic + +Instead of relying on a specific order of the RR types in the databases +pick the first RR type as returned from the cache. + +(cherry picked from commit 58f660cf2b800963fa649bc9823a626009db3a7e) +(cherry picked from commit c5ebda6deb0997dc520b26fa0639891459de5cb6) + +Be smarter about refusing to add many RR types to the database + +Instead of outright refusing to add new RR types to the cache, be a bit +smarter: + +1. If the new header type is in our priority list, we always add either + positive or negative entry at the beginning of the list. + +2. If the new header type is negative entry, and we are over the limit, + we mark it as ancient immediately, so it gets evicted from the cache + as soon as possible. + +3. Otherwise add the new header after the priority headers (or at the + head of the list). + +4. If we are over the limit, evict the last entry on the normal header + list. + +(cherry picked from commit 57cd34441a1b4ecc9874a4a106c2c95b8d7a3120) +(cherry picked from commit 26c9da5f2857b72077c17e06ac79f068c63782cc) +--- + bin/tests/system/resolver/tests.sh | 9 ++- + configure | 2 +- + configure.ac | 2 +- + lib/dns/rbtdb.c | 125 ++++++++++++++++++++++++++++- + lib/dns/rdataslab.c | 12 +++ + 5 files changed, 144 insertions(+), 6 deletions(-) + +diff --git a/bin/tests/system/resolver/tests.sh b/bin/tests/system/resolver/tests.sh +index 6c69c1104e..bd997a61a4 100755 +--- a/bin/tests/system/resolver/tests.sh ++++ b/bin/tests/system/resolver/tests.sh +@@ -553,15 +553,20 @@ n=`expr $n + 1` + echo_i "check prefetch qtype * (${n})" + ret=0 + $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.1.${n} || ret=1 +-ttl1=`awk '/"A" "short" "ttl"/ { print $2 - 3 }' dig.out.1.${n}` ++ttl1=$(awk '/^fetchall.tld/ { print $2 - 3; exit }' dig.out.1.${n}) + # sleep so we are in prefetch range + sleep ${ttl1:-0} + # trigger prefetch + $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.2.${n} || ret=1 +-ttl2=`awk '/"A" "short" "ttl"/ { print $2 }' dig.out.2.${n}` ++ttl2=$(awk '/^fetchall.tld/ { print $2; exit }' dig.out.2.${n}) + sleep 1 + # check that the nameserver is still alive + $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.3.${n} || ret=1 ++# note that only the first record is prefetched, ++# because of the order of the records in the cache ++$DIG $DIGOPTS @10.53.0.5 fetchall.tld any >dig.out.3.${n} || ret=1 ++ttl3=$(awk '/^fetchall.tld/ { print $2; exit }' dig.out.3.${n}) ++test "${ttl3:-0}" -gt "${ttl2:-1}" || ret=1 + if [ $ret != 0 ]; then echo_i "failed"; fi + status=`expr $status + $ret` + +diff --git a/configure b/configure +index ed2d4869e5..be0f60eaba 100755 +--- a/configure ++++ b/configure +@@ -12295,7 +12295,7 @@ fi + + XTARGETS= + if test "$enable_developer" = "yes"; then : +- STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1" ++ STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1 -DDNS_RDATASET_MAX_RECORDS=5000 -DDNS_RBTDB_MAX_RTYPES=5000" + test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes + test "${enable_querytrace+set}" = set || enable_querytrace=yes + test "${with_cmocka+set}" = set || with_cmocka=yes +diff --git a/configure.ac b/configure.ac +index 287de41369..3ff4bdd135 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -94,7 +94,7 @@ AC_ARG_ENABLE([developer], + + XTARGETS= + AS_IF([test "$enable_developer" = "yes"], +- [STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1" ++ [STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1 -DDNS_RDATASET_MAX_RECORDS=5000 -DDNS_RBTDB_MAX_RTYPES=5000" + test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes + test "${enable_querytrace+set}" = set || enable_querytrace=yes + test "${with_cmocka+set}" = set || with_cmocka=yes +diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c +index 2707507bd7..e840c0665d 100644 +--- a/lib/dns/rbtdb.c ++++ b/lib/dns/rbtdb.c +@@ -967,6 +967,48 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) { + } + } + ++static bool ++prio_type(rbtdb_rdatatype_t type) { ++ switch (type) { ++ case dns_rdatatype_soa: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_soa): ++ case dns_rdatatype_a: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_a): ++ case dns_rdatatype_mx: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_mx): ++ case dns_rdatatype_aaaa: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_aaaa): ++ case dns_rdatatype_nsec: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec): ++ case dns_rdatatype_nsec3: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec3): ++ case dns_rdatatype_ns: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns): ++ case dns_rdatatype_ds: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ds): ++ case dns_rdatatype_cname: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname): ++ case dns_rdatatype_dname: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname): ++ case dns_rdatatype_svcb: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_svcb): ++ case dns_rdatatype_https: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_https): ++ case dns_rdatatype_dnskey: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dnskey): ++ case dns_rdatatype_srv: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_srv): ++ case dns_rdatatype_txt: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_txt): ++ case dns_rdatatype_ptr: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ptr): ++ case dns_rdatatype_naptr: ++ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_naptr): ++ return (true); ++ } ++ return (false); ++} ++ + /*% + * These functions allow the heap code to rank the priority of each + * element. It returns true if v1 happens "sooner" than v2. +@@ -6179,6 +6221,30 @@ update_recordsandxfrsize(bool add, rbtdb_version_t *rbtversion, + RWUNLOCK(&rbtversion->rwlock, isc_rwlocktype_write); + } + ++#ifndef DNS_RBTDB_MAX_RTYPES ++#define DNS_RBTDB_MAX_RTYPES 100 ++#endif /* DNS_RBTDB_MAX_RTYPES */ ++ ++static bool ++overmaxtype(dns_rbtdb_t *rbtdb, uint32_t ntypes) { ++ UNUSED(rbtdb); ++ ++ if (DNS_RBTDB_MAX_RTYPES == 0) { ++ return (false); ++ } ++ ++ return (ntypes >= DNS_RBTDB_MAX_RTYPES); ++} ++ ++static bool ++prio_header(rdatasetheader_t *header) { ++ if (NEGATIVE(header) && prio_type(RBTDB_RDATATYPE_EXT(header->type))) { ++ return (true); ++ } ++ ++ return (prio_type(header->type)); ++} ++ + /* + * write lock on rbtnode must be held. + */ +@@ -6190,6 +6256,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, + rbtdb_changed_t *changed = NULL; + rdatasetheader_t *topheader = NULL, *topheader_prev = NULL; + rdatasetheader_t *header = NULL, *sigheader = NULL; ++ rdatasetheader_t *prioheader = NULL, *expireheader = NULL; + unsigned char *merged = NULL; + isc_result_t result; + bool header_nx; +@@ -6199,6 +6266,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, + rbtdb_rdatatype_t negtype, sigtype; + dns_trust_t trust; + int idx; ++ uint32_t ntypes = 0; + + /* + * Add an rdatasetheader_t to a node. +@@ -6272,6 +6340,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, + topheader = topheader->next) { + if (topheader->type == sigtype) { + sigheader = topheader; ++ break; + } + } + negtype = RBTDB_RDATATYPE_VALUE(covers, 0); +@@ -6331,6 +6400,15 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, + + for (topheader = rbtnode->data; topheader != NULL; + topheader = topheader->next) { ++ if (IS_CACHE(rbtdb) && ACTIVE(topheader, now)) { ++ ++ntypes; ++ expireheader = topheader; ++ } else if (!IS_CACHE(rbtdb)) { ++ ++ntypes; ++ } ++ if (prio_header(topheader)) { ++ prioheader = topheader; ++ } + if (topheader->type == newheader->type || + topheader->type == negtype) { + break; +@@ -6712,9 +6790,52 @@ find_header: + /* + * No rdatasets of the given type exist at the node. + */ +- newheader->next = rbtnode->data; ++ if (!IS_CACHE(rbtdb) && overmaxtype(rbtdb, ntypes)) { ++ free_rdataset(rbtdb, rbtdb->common.mctx, ++ newheader); ++ return (ISC_R_QUOTA); ++ } ++ + newheader->down = NULL; +- rbtnode->data = newheader; ++ ++ if (prio_header(newheader)) { ++ /* This is a priority type, prepend it */ ++ newheader->next = rbtnode->data; ++ rbtnode->data = newheader; ++ } else if (prioheader != NULL) { ++ /* Append after the priority headers */ ++ newheader->next = prioheader->next; ++ prioheader->next = newheader; ++ } else { ++ /* There were no priority headers */ ++ newheader->next = rbtnode->data; ++ rbtnode->data = newheader; ++ } ++ ++ if (IS_CACHE(rbtdb) && overmaxtype(rbtdb, ntypes)) { ++ if (expireheader == NULL) { ++ expireheader = newheader; ++ } ++ if (NEGATIVE(newheader) && ++ !prio_header(newheader)) ++ { ++ /* ++ * Add the new non-priority negative ++ * header to the database only ++ * temporarily. ++ */ ++ expireheader = newheader; ++ } ++ ++ set_ttl(rbtdb, expireheader, 0); ++ mark_header_ancient(rbtdb, expireheader); ++ /* ++ * FIXME: In theory, we should mark the RRSIG ++ * and the header at the same time, but there is ++ * no direct link between those two header, so ++ * we would have to check the whole list again. ++ */ ++ } + } + } + +diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c +index 1d5e88f745..dda903819a 100644 +--- a/lib/dns/rdataslab.c ++++ b/lib/dns/rdataslab.c +@@ -110,6 +110,10 @@ fillin_offsets(unsigned char *offsetbase, unsigned int *offsettable, + } + #endif /* if DNS_RDATASET_FIXED */ + ++#ifndef DNS_RDATASET_MAX_RECORDS ++#define DNS_RDATASET_MAX_RECORDS 100 ++#endif /* DNS_RDATASET_MAX_RECORDS */ ++ + isc_result_t + dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, + isc_region_t *region, unsigned int reservelen) { +@@ -154,6 +158,10 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, + return (ISC_R_SUCCESS); + } + ++ if (nitems > DNS_RDATASET_MAX_RECORDS) { ++ return (DNS_R_TOOMANYRECORDS); ++ } ++ + if (nitems > 0xffff) { + return (ISC_R_NOSPACE); + } +@@ -520,6 +528,10 @@ dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, + #endif /* if DNS_RDATASET_FIXED */ + INSIST(ocount > 0 && ncount > 0); + ++ if (ocount + ncount > DNS_RDATASET_MAX_RECORDS) { ++ return (DNS_R_TOOMANYRECORDS); ++ } ++ + #if DNS_RDATASET_FIXED + oncount = ncount; + #endif /* if DNS_RDATASET_FIXED */ +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-CVE-2024-1975.patch b/SOURCES/bind-9.16-CVE-2024-1975.patch new file mode 100644 index 0000000..def3ed4 --- /dev/null +++ b/SOURCES/bind-9.16-CVE-2024-1975.patch @@ -0,0 +1,318 @@ +From 34e92fc88943beeba76aa4e408951cb46d8cdb53 Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Tue, 16 Jul 2024 19:49:09 +0200 +Subject: [PATCH] Resolve CVE-2024-1975 + +6404. [security] Remove SIG(0) support from named as a countermeasure + for CVE-2024-1975. [GL #4480] + +Resolves: CVE-2024-1975 +--- + bin/tests/system/tsiggss/authsock.pl | 5 ++ + bin/tests/system/tsiggss/tests.sh | 12 ++-- + bin/tests/system/upforwd/tests.sh | 21 +++--- + doc/arm/general.rst | 6 +- + doc/arm/reference.rst | 4 +- + doc/arm/security.rst | 4 +- + lib/dns/message.c | 97 ++-------------------------- + lib/ns/client.c | 7 ++ + 8 files changed, 43 insertions(+), 113 deletions(-) + +diff --git a/bin/tests/system/tsiggss/authsock.pl b/bin/tests/system/tsiggss/authsock.pl +index ab3833d..0b231ee 100644 +--- a/bin/tests/system/tsiggss/authsock.pl ++++ b/bin/tests/system/tsiggss/authsock.pl +@@ -31,6 +31,10 @@ if (!defined($path)) { + exit(1); + } + ++# Enable output autoflush so that it's not lost when the parent sends TERM. ++select STDOUT; ++$| = 1; ++ + unlink($path); + my $server = IO::Socket::UNIX->new(Local => $path, Type => SOCK_STREAM, Listen => 8) or + die "unable to create socket $path"; +@@ -53,6 +57,7 @@ if ($timeout != 0) { + } + + while (my $client = $server->accept()) { ++ printf("accept()\n"); + $client->recv(my $buf, 8, 0); + my ($version, $req_len) = unpack('N N', $buf); + +diff --git a/bin/tests/system/tsiggss/tests.sh b/bin/tests/system/tsiggss/tests.sh +index 632bb87..7977e49 100644 +--- a/bin/tests/system/tsiggss/tests.sh ++++ b/bin/tests/system/tsiggss/tests.sh +@@ -116,7 +116,7 @@ status=$((status+ret)) + + echo_i "testing external update policy (CNAME) with auth sock ($n)" + ret=0 +-$PERL ./authsock.pl --type=CNAME --path=ns1/auth.sock --pidfile=authsock.pid --timeout=120 > /dev/null 2>&1 & ++$PERL ./authsock.pl --type=CNAME --path=ns1/auth.sock --pidfile=authsock.pid --timeout=120 >authsock.log 2>&1 & + sleep 1 + test_update $n testcname.example.nil. CNAME "86400 CNAME testdenied.example.nil" "testdenied" || ret=1 + n=$((n+1)) +@@ -130,17 +130,19 @@ n=$((n+1)) + if [ "$ret" -ne 0 ]; then echo_i "failed"; fi + status=$((status+ret)) + +-echo_i "testing external policy with SIG(0) key ($n)" ++echo_i "testing external policy with unsupported SIG(0) key ($n)" + ret=0 +-$NSUPDATE -k ns1/Kkey.example.nil.*.private < /dev/null 2>&1 || ret=1 ++$NSUPDATE -d -k ns1/Kkey.example.nil.*.private <nsupdate.out${n} 2>&1 || true ++debug + server 10.53.0.1 ${PORT} + zone example.nil + update add fred.example.nil 120 cname foo.bar. + send + END + output=`$DIG $DIGOPTS +short cname fred.example.nil.` +-[ -n "$output" ] || ret=1 +-[ $ret -eq 0 ] || echo_i "failed" ++# update must have failed - SIG(0) signer is not supported ++[ -n "$output" ] && ret=1 ++grep -F "signer=key.example.nil" authsock.log >/dev/null && ret=1 + n=$((n+1)) + if [ "$ret" -ne 0 ]; then echo_i "failed"; fi + status=$((status+ret)) +diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh +index 20fc46f..c8fd54b 100644 +--- a/bin/tests/system/upforwd/tests.sh ++++ b/bin/tests/system/upforwd/tests.sh +@@ -224,19 +224,22 @@ fi + + if test -f keyname + then +- echo_i "checking update forwarding to with sig0 ($n)" ++ echo_i "checking update forwarding to with sig0 (expected to fail) ($n)" + ret=0 + keyname=`cat keyname` +- $NSUPDATE -k $keyname.private -- - <nsupdate.out.$n 2>&1 && ret=1 + $DIG -p ${PORT} unsigned.example2 A @10.53.0.1 > dig.out.ns1.test$n +- grep "status: NOERROR" dig.out.ns1.test$n > /dev/null || ret=1 ++ grep "status: NOERROR" dig.out.ns1.test$n >/dev/null && ret=1 + if [ $ret != 0 ] ; then echo_i "failed"; fi + status=`expr $status + $ret` + n=`expr $n + 1` +diff --git a/doc/arm/general.rst b/doc/arm/general.rst +index 225576b..0766dfe 100644 +--- a/doc/arm/general.rst ++++ b/doc/arm/general.rst +@@ -534,10 +534,8 @@ than a non-authoritative response. This is considered a feature. + [2] CLASS ANY queries are not supported. This is considered a + feature. + +-[3] When receiving a query signed with a SIG(0), the server is +-only able to verify the signature if it has the key in its local +-authoritative data; it cannot do recursion or validation to +-retrieve unknown keys. ++[3] Support for SIG(0) message verification was removed ++as part of the mitigation of CVE-2024-1975. + + [4] Compliance is with loading and serving of A6 records only. A6 records were moved + to the experimental category by :rfc:`3363`. +diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst +index d4ee9d2..ad7ff27 100644 +--- a/doc/arm/reference.rst ++++ b/doc/arm/reference.rst +@@ -5789,7 +5789,7 @@ The ``update-policy`` clause allows more fine-grained control over which + updates are allowed. It specifies a set of rules, in which each rule + either grants or denies permission for one or more names in the zone to + be updated by one or more identities. Identity is determined by the key +-that signed the update request, using either TSIG or SIG(0). In most ++that signed the update request, using either TSIG. In most + cases, ``update-policy`` rules only apply to key-based identities. There + is no way to specify update permissions based on the client source address. + +@@ -5846,7 +5846,7 @@ field), and the type of the record to be updated matches the ``types`` + field. Details for each rule type are described below. + + The ``identity`` field must be set to a fully qualified domain name. In +-most cases, this represents the name of the TSIG or SIG(0) key that ++most cases, this represents the name of the TSIG key that + must be used to sign the update request. If the specified name is a + wildcard, it is subject to DNS wildcard expansion, and the rule may + apply to multiple identities. When a TKEY exchange has been used to +diff --git a/doc/arm/security.rst b/doc/arm/security.rst +index f7c8bd3..e3abfd1 100644 +--- a/doc/arm/security.rst ++++ b/doc/arm/security.rst +@@ -32,7 +32,7 @@ Limiting access to the server by outside parties can help prevent + spoofing and denial of service (DoS) attacks against the server. + + ACLs match clients on the basis of up to three characteristics: 1) The +-client's IP address; 2) the TSIG or SIG(0) key that was used to sign the ++client's IP address; 2) the TSIG key that was used to sign the + request, if any; and 3) an address prefix encoded in an EDNS + Client-Subnet option, if any. + +@@ -73,7 +73,7 @@ and no queries at all from the networks specified in ``bogusnets``. + + In addition to network addresses and prefixes, which are matched against + the source address of the DNS request, ACLs may include ``key`` +-elements, which specify the name of a TSIG or SIG(0) key. ++elements, which specify the name of a TSIG key. + + When BIND 9 is built with GeoIP support, ACLs can also be used for + geographic access restrictions. This is done by specifying an ACL +diff --git a/lib/dns/message.c b/lib/dns/message.c +index 1993b2e..04315bc 100644 +--- a/lib/dns/message.c ++++ b/lib/dns/message.c +@@ -3287,109 +3287,24 @@ dns_message_dumpsig(dns_message_t *msg, char *txt1) { + + isc_result_t + dns_message_checksig(dns_message_t *msg, dns_view_t *view) { +- isc_buffer_t b, msgb; ++ isc_buffer_t msgb; + + REQUIRE(DNS_MESSAGE_VALID(msg)); + +- if (msg->tsigkey == NULL && msg->tsig == NULL && msg->sig0 == NULL) { ++ if (msg->tsigkey == NULL && msg->tsig == NULL) { + return (ISC_R_SUCCESS); + } + + INSIST(msg->saved.base != NULL); + isc_buffer_init(&msgb, msg->saved.base, msg->saved.length); + isc_buffer_add(&msgb, msg->saved.length); +- if (msg->tsigkey != NULL || msg->tsig != NULL) { + #ifdef SKAN_MSG_DEBUG +- dns_message_dumpsig(msg, "dns_message_checksig#1"); ++ dns_message_dumpsig(msg, "dns_message_checksig#1"); + #endif /* ifdef SKAN_MSG_DEBUG */ +- if (view != NULL) { +- return (dns_view_checksig(view, &msgb, msg)); +- } else { +- return (dns_tsig_verify(&msgb, msg, NULL, NULL)); +- } ++ if (view != NULL) { ++ return (dns_view_checksig(view, &msgb, msg)); + } else { +- dns_rdata_t rdata = DNS_RDATA_INIT; +- dns_rdata_sig_t sig; +- dns_rdataset_t keyset; +- isc_result_t result; +- +- result = dns_rdataset_first(msg->sig0); +- INSIST(result == ISC_R_SUCCESS); +- dns_rdataset_current(msg->sig0, &rdata); +- +- /* +- * This can occur when the message is a dynamic update, since +- * the rdata length checking is relaxed. This should not +- * happen in a well-formed message, since the SIG(0) is only +- * looked for in the additional section, and the dynamic update +- * meta-records are in the prerequisite and update sections. +- */ +- if (rdata.length == 0) { +- return (ISC_R_UNEXPECTEDEND); +- } +- +- result = dns_rdata_tostruct(&rdata, &sig, msg->mctx); +- if (result != ISC_R_SUCCESS) { +- return (result); +- } +- +- dns_rdataset_init(&keyset); +- if (view == NULL) { +- return (DNS_R_KEYUNAUTHORIZED); +- } +- result = dns_view_simplefind(view, &sig.signer, +- dns_rdatatype_key /* SIG(0) */, 0, +- 0, false, &keyset, NULL); +- +- if (result != ISC_R_SUCCESS) { +- /* XXXBEW Should possibly create a fetch here */ +- result = DNS_R_KEYUNAUTHORIZED; +- goto freesig; +- } else if (keyset.trust < dns_trust_secure) { +- /* XXXBEW Should call a validator here */ +- result = DNS_R_KEYUNAUTHORIZED; +- goto freesig; +- } +- result = dns_rdataset_first(&keyset); +- INSIST(result == ISC_R_SUCCESS); +- for (; result == ISC_R_SUCCESS; +- result = dns_rdataset_next(&keyset)) { +- dst_key_t *key = NULL; +- +- dns_rdata_reset(&rdata); +- dns_rdataset_current(&keyset, &rdata); +- isc_buffer_init(&b, rdata.data, rdata.length); +- isc_buffer_add(&b, rdata.length); +- +- result = dst_key_fromdns(&sig.signer, rdata.rdclass, &b, +- view->mctx, &key); +- if (result != ISC_R_SUCCESS) { +- continue; +- } +- if (dst_key_alg(key) != sig.algorithm || +- dst_key_id(key) != sig.keyid || +- !(dst_key_proto(key) == DNS_KEYPROTO_DNSSEC || +- dst_key_proto(key) == DNS_KEYPROTO_ANY)) +- { +- dst_key_free(&key); +- continue; +- } +- result = dns_dnssec_verifymessage(&msgb, msg, key); +- dst_key_free(&key); +- if (result == ISC_R_SUCCESS) { +- break; +- } +- } +- if (result == ISC_R_NOMORE) { +- result = DNS_R_KEYUNAUTHORIZED; +- } +- +- freesig: +- if (dns_rdataset_isassociated(&keyset)) { +- dns_rdataset_disassociate(&keyset); +- } +- dns_rdata_freestruct(&sig); +- return (result); ++ return (dns_tsig_verify(&msgb, msg, NULL, NULL)); + } + } + +diff --git a/lib/ns/client.c b/lib/ns/client.c +index 967e21b..87b8a18 100644 +--- a/lib/ns/client.c ++++ b/lib/ns/client.c +@@ -2060,6 +2060,13 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult, + ns_client_log(client, DNS_LOGCATEGORY_SECURITY, + NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3), + "request is signed by a nonauthoritative key"); ++ } else if (result == DNS_R_NOTVERIFIEDYET && ++ client->message->sig0 != NULL) ++ { ++ ns_client_log(client, DNS_LOGCATEGORY_SECURITY, ++ NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3), ++ "request has a SIG(0) signature but its support " ++ "was removed (CVE-2024-1975)"); + } else { + char tsigrcode[64]; + isc_buffer_t b; +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-isc-mempool-attach.patch b/SOURCES/bind-9.16-isc-mempool-attach.patch new file mode 100644 index 0000000..f3cfcce --- /dev/null +++ b/SOURCES/bind-9.16-isc-mempool-attach.patch @@ -0,0 +1,40 @@ +From d249889a9c18df7792ca3cd8d97897e4fb5824b5 Mon Sep 17 00:00:00 2001 +From: Aram Sargsyan +Date: Wed, 31 Aug 2022 12:30:38 +0000 +Subject: [PATCH] Add mctx attach/detach when creating/destroying a memory pool + +This should make sure that the memory context is not destroyed +before the memory pool, which is using the context. + +(cherry picked from commit e97c3eea954e055634b72c21325d2611e960ee94) +--- + lib/isc/mem.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/lib/isc/mem.c b/lib/isc/mem.c +index f84d300..33ece7a 100644 +--- a/lib/isc/mem.c ++++ b/lib/isc/mem.c +@@ -1656,7 +1656,8 @@ isc_mempool_create(isc_mem_t *mctx0, size_t size, isc_mempool_t **mpctxp) { + mpctx->common.impmagic = MEMPOOL_MAGIC; + mpctx->common.magic = ISCAPI_MPOOL_MAGIC; + mpctx->lock = NULL; +- mpctx->mctx = mctx; ++ mpctx->mctx = NULL; ++ isc_mem_attach((isc_mem_t *)mctx, (isc_mem_t **)&mpctx->mctx); + /* + * Mempools are stored as a linked list of element. + */ +@@ -1765,7 +1766,8 @@ isc_mempool_destroy(isc_mempool_t **mpctxp) { + mpctx->common.impmagic = 0; + mpctx->common.magic = 0; + +- isc_mem_put((isc_mem_t *)mpctx->mctx, mpctx, sizeof(isc__mempool_t)); ++ isc_mem_putanddetach((isc_mem_t **)&mpctx->mctx, mpctx, ++ sizeof(isc__mempool_t)); + + if (lock != NULL) { + UNLOCK(lock); +-- +2.43.2 + diff --git a/SOURCES/bind-9.16-isc_hp-CVE-2023-50387.patch b/SOURCES/bind-9.16-isc_hp-CVE-2023-50387.patch new file mode 100644 index 0000000..806e29e --- /dev/null +++ b/SOURCES/bind-9.16-isc_hp-CVE-2023-50387.patch @@ -0,0 +1,66 @@ +From 103b09187466b2afbff7e204d166d21e2fbb057c Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Wed, 21 Feb 2024 11:54:27 +0100 +Subject: [PATCH] Downstream specific changes related to KeyTrap + +Fix for CVE-2023-50387 introduced new additional thread. But because +isc_hp functions were removed from later bind 9.16 release, their +changes did not contain increase of hazard pointers max thread limit. +To prevent obscure memory corruption increase thread max size. + +In addition place at least few INSISTs to check this is catched before +random memory overwrites begins. It would be quite difficult to track +without any check. +--- + lib/isc/hp.c | 3 +++ + lib/isc/managers.c | 5 +++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/isc/hp.c b/lib/isc/hp.c +index 92d160b..5f9bbf7 100644 +--- a/lib/isc/hp.c ++++ b/lib/isc/hp.c +@@ -138,6 +138,7 @@ isc_hp_destroy(isc_hp_t *hp) { + + void + isc_hp_clear(isc_hp_t *hp) { ++ INSIST(tid() < isc__hp_max_threads); + for (int i = 0; i < hp->max_hps; i++) { + atomic_store_release(&hp->hp[tid()][i], 0); + } +@@ -152,6 +153,7 @@ uintptr_t + isc_hp_protect(isc_hp_t *hp, int ihp, atomic_uintptr_t *atom) { + uintptr_t n = 0; + uintptr_t ret; ++ INSIST(tid() < isc__hp_max_threads); + while ((ret = atomic_load(atom)) != n) { + atomic_store(&hp->hp[tid()][ihp], ret); + n = ret; +@@ -173,6 +175,7 @@ isc_hp_protect_release(isc_hp_t *hp, int ihp, atomic_uintptr_t ptr) { + + void + isc_hp_retire(isc_hp_t *hp, uintptr_t ptr) { ++ INSIST(tid() < isc__hp_max_threads); + hp->rl[tid()]->list[hp->rl[tid()]->size++] = ptr; + INSIST(hp->rl[tid()]->size < isc__hp_max_retired); + +diff --git a/lib/isc/managers.c b/lib/isc/managers.c +index c39a650..3bdca99 100644 +--- a/lib/isc/managers.c ++++ b/lib/isc/managers.c +@@ -25,9 +25,10 @@ isc_managers_create(isc_mem_t *mctx, size_t workers, size_t quantum, + + /* + * We have ncpus network threads, ncpus old network threads - make +- * it 4x just to be on the safe side. ++ * it 4x just to be on the safe side. One additional for slow netmgr ++ * thread. + */ +- isc_hp_init(4 * workers); ++ isc_hp_init(5 * workers); + + REQUIRE(netmgrp != NULL && *netmgrp == NULL); + isc__netmgr_create(mctx, workers, &netmgr); +-- +2.43.2 + diff --git a/SOURCES/bind-9.16-isc_hp-additional.patch b/SOURCES/bind-9.16-isc_hp-additional.patch new file mode 100644 index 0000000..63c633e --- /dev/null +++ b/SOURCES/bind-9.16-isc_hp-additional.patch @@ -0,0 +1,34 @@ +From beeb4527b25c8d48842bbc78f100b716df118699 Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Tue, 9 Jul 2024 16:06:02 +0200 +Subject: [PATCH] Increase even further hazard pointers after KeyTrap + +Extends even more change Downstream specific changes related to KeyTrap, +which added safety guards into hazard pointers. Because it seems they +are not still enough. Add fixed base to accomodate common threads like +main app thread and ldap worker threads. Multiply one more, just to be +sure. We do not want to hit maximal limit again. +--- + lib/isc/managers.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/lib/isc/managers.c b/lib/isc/managers.c +index 3bdca99..fffff78 100644 +--- a/lib/isc/managers.c ++++ b/lib/isc/managers.c +@@ -26,9 +26,10 @@ isc_managers_create(isc_mem_t *mctx, size_t workers, size_t quantum, + /* + * We have ncpus network threads, ncpus old network threads - make + * it 4x just to be on the safe side. One additional for slow netmgr +- * thread. ++ * thread. One extra to be safe. Add base for main application thread ++ * or bind-dyndb-ldap worker threads. + */ +- isc_hp_init(5 * workers); ++ isc_hp_init(6 + 6 * workers); + + REQUIRE(netmgrp != NULL && *netmgrp == NULL); + isc__netmgr_create(mctx, workers, &netmgr); +-- +2.45.2 + diff --git a/SOURCES/bind-9.16-system-test-cds.patch b/SOURCES/bind-9.16-system-test-cds.patch new file mode 100644 index 0000000..cf8fcbb --- /dev/null +++ b/SOURCES/bind-9.16-system-test-cds.patch @@ -0,0 +1,33 @@ +From 7cc9fd1870e5264abd885ed2c419034945121d0f Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Mon, 19 Feb 2024 22:13:52 +0100 +Subject: [PATCH] Define variants to empty values + +DNSSEC_VARIANT and NAMED_VARIANT are special Red Hat modifications to +allow testing or alternative rebuilds, with support for pkcs11 or sdb. +But undefined value breaks some tests, so define them to empty values. +That means normal build variant. + +Required to pass upstream test suite cds test correctly. +--- + bin/tests/system/conf.sh.in | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in +index 7b2b309..c2d6526 100644 +--- a/bin/tests/system/conf.sh.in ++++ b/bin/tests/system/conf.sh.in +@@ -24,6 +24,10 @@ TMPDIR=${TMPDIR:-/tmp} + # This is not the windows build. + CYGWIN="" + ++# RH specific, allow variants testing ++: ${DNSSEC_VARIANT:=} ++: ${NAMED_VARIANT:=} ++ + # Load common values shared between windows and unix/linux. + . $TOP/bin/tests/system/conf.sh.common + +-- +2.43.2 + diff --git a/SOURCES/bind-9.18-CVE-2024-4076.patch b/SOURCES/bind-9.18-CVE-2024-4076.patch new file mode 100644 index 0000000..2e12135 --- /dev/null +++ b/SOURCES/bind-9.18-CVE-2024-4076.patch @@ -0,0 +1,29 @@ +From 274463c5b71db87a615694889da23837ba48db9a Mon Sep 17 00:00:00 2001 +From: Petr Mensik +Date: Tue, 16 Jul 2024 19:49:26 +0200 +Subject: [PATCH] Resolve CVE-2024-4076 + +6403. [security] qctx-zversion was not being cleared when it should have + been leading to an assertion failure if it needed to be + reused. (CVE-2024-4076) [GL #4507] + +Resolves: CVE-2024-4076 +--- + lib/ns/query.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/ns/query.c b/lib/ns/query.c +index 537d332..be4cbb6 100644 +--- a/lib/ns/query.c ++++ b/lib/ns/query.c +@@ -5325,6 +5325,7 @@ qctx_freedata(query_ctx_t *qctx) { + ns_client_releasename(qctx->client, &qctx->zfname); + dns_db_detachnode(qctx->zdb, &qctx->znode); + dns_db_detach(&qctx->zdb); ++ qctx->zversion = NULL; + } + + if (qctx->event != NULL && !qctx->client->nodetach) { +-- +2.45.2 + diff --git a/SPECS/bind.spec b/SPECS/bind.spec index b65c723..1901dde 100644 --- a/SPECS/bind.spec +++ b/SPECS/bind.spec @@ -33,6 +33,9 @@ %{_libdir}/bind %{_libdir}/named %{_datadir}/GeoIP /proc/sys/net/ipv4 %global selinuxbooleans named_write_master_zones=1 + +# BIND 9.16 does not work with fortify 3 level, make builds work on Fedora +%global _fortify_level 2 ## The order of libs is important. See lib/Makefile.in for details %define bind_export_libs isc dns isccfg irs %{!?_export_dir:%global _export_dir /bind9-export/} @@ -51,7 +54,7 @@ Summary: The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) serv Name: bind License: MPLv2.0 Version: 9.16.23 -Release: 15%{?dist} +Release: 24%{?dist} Epoch: 32 Url: https://www.isc.org/downloads/bind/ # @@ -135,6 +138,42 @@ Patch191: bind-9.16-CVE-2023-2911-3.patch Patch192: bind-9.16-CVE-2023-3341.patch # https://gitlab.isc.org/isc-projects/bind9/commit/8924adca613ca9daea63786563cce6fdbd742c56 Patch193: bind-9.16-update-b.root-servers.net.patch +Patch194: bind-9.16-CVE-2023-4408.patch +Patch195: bind-9.16-CVE-2023-5517.patch +Patch196: bind-9.16-CVE-2023-5679.patch +Patch197: bind-9.16-CVE-2023-6516.patch +Patch198: bind-9.16-CVE-2023-50387.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/f493a8394102b0aeb101d5dc2f963004c8741175 +Patch199: bind-9.16-CVE-2023-4408-test1.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/b9c10a194da3358204f5ba7d91e55332db435614 +Patch200: bind-9.16-CVE-2023-4408-test2.patch +# Downstream only change, fixes patch 171 +Patch201: bind-9.16-system-test-cds.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/32779aba8a0a5f852c611f44ecbeab5aab633e34 +Patch202: bind-9.16-isc-mempool-attach.patch +# Downstream only change, complements patch 198 +Patch203: bind-9.16-isc_hp-CVE-2023-50387.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/1237d73cd1120b146ee699bbae7b2fe837cf2f98 +Patch204: bind-9.16-CVE-2023-6516-test.patch +Patch205: bind-9.16-isc_hp-additional.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/26c9da5f2857b72077c17e06ac79f068c63782cc +# https://gitlab.isc.org/isc-projects/bind9/commit/c5ebda6deb0997dc520b26fa0639891459de5cb6 +# https://gitlab.isc.org/isc-projects/bind9/commit/d56d2a32b861e81c2aaaabd309c4c58b629ede32 +# https://gitlab.isc.org/isc-projects/bind9/commit/dfcadc2085c8844b5836aff2b5ea51fb60c34868 +# https://gitlab.isc.org/isc-projects/bind9/commit/fdabf4b9570a60688f9f7d1e88d885f7a3718bca +# https://gitlab.isc.org/isc-projects/bind9/commit/8ef414a7f38a04cfc11df44adaedaf3126fa3878 +Patch206: bind-9.16-CVE-2024-1975.patch +Patch207: bind-9.16-CVE-2024-1737.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/a61be8eef0ee0ca8fd8036ccb61c6f9b728158ce +Patch208: bind-9.18-CVE-2024-4076.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/2f2f0a900b9baf5e6eba02a82e2fe9e967dc1760 +Patch210: bind-9.16-CVE-2024-1737-records.patch +Patch211: bind-9.16-CVE-2024-1737-records-test.patch +# https://gitlab.isc.org/isc-projects/bind9/commit/3f1826f2f78792e95f56da7af3a35c46b4d6d9af +Patch212: bind-9.16-CVE-2024-1737-types.patch +Patch213: bind-9.16-CVE-2024-1737-types-test.patch +# backport issue fix +Patch214: bind-9.16-CVE-2024-1737-records-test2.patch %{?systemd_ordering} Requires: coreutils @@ -148,6 +187,9 @@ Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires(post): ((policycoreutils-python-utils and libselinux-utils) if (selinux-policy-targeted or selinux-policy-mls)) Requires(post): ((selinux-policy and selinux-policy-base) if (selinux-policy-targeted or selinux-policy-mls)) Recommends: bind-utils bind-dnssec-utils +# Fixes of CVE-2023-50387 and CVE-2023-50868 caused ABI change +# Enforce updated rebuild is accepted only +Conflicts: bind-dyndb-ldap < 11.9-9 BuildRequires: gcc, make BuildRequires: openssl-devel, libtool, autoconf, pkgconfig, libcap-devel BuildRequires: libidn2-devel, libxml2-devel @@ -174,6 +216,7 @@ BuildRequires: softhsm %if %{with SYSTEMTEST} # bin/tests/system dependencies BuildRequires: perl(Net::DNS) perl(Net::DNS::Nameserver) perl(Time::HiRes) perl(Getopt::Long) +BuildRequires: python-dns # manual configuration requires this tool BuildRequires: iproute %endif @@ -456,6 +499,26 @@ in HTML and PDF format. %patch191 -p1 -b .CVE-2023-2911-3 %patch192 -p1 -b .CVE-2023-3341 %patch193 -p1 -b .b.root-servers.net +%patch194 -p1 -b .CVE-2023-4408 +%patch195 -p1 -b .CVE-2023-5517 +%patch196 -p1 -b .CVE-2023-5679 +%patch197 -p1 -b .CVE-2023-6516 +%patch198 -p1 -b .CVE-2023-50387 +%patch199 -p1 +%patch200 -p1 +%patch201 -p1 -b .test-variant-def +%patch202 -p1 -b .mempool-attach +%patch203 -p1 -b .isc_hp-CVE-2023-50387 +%patch204 -p1 -b .CVE-2023-6516-test +%patch205 -p1 -b .RHEL-39131 +%patch206 -p1 -b .CVE-2024-1975 +%patch207 -p1 -b .CVE-2024-1737 +%patch208 -p1 -b .CVE-2024-4076 +%patch210 -p1 -b .CVE-2024-1737-records +%patch211 -p1 -b .CVE-2024-1737-records-test +%patch212 -p1 -b .CVE-2024-1737-types +%patch213 -p1 -b .CVE-2024-1737-types-test +%patch214 -p1 -b .CVE-2024-1737-records-test2 %if %{with PKCS11} %patch135 -p1 -b .config-pkcs11 @@ -556,6 +619,11 @@ export LIBDIR_SUFFIX --enable-fixed-rrset \ --enable-full-report \ ; + +%if 0%{?bind_skip_parsetab} + sed -e 's/^TARGETS =/& #/' -i bin/python/isc/Makefile +%endif + %if %{with DNSTAP} pushd lib SRCLIB="../../../lib" @@ -1179,6 +1247,44 @@ fi; %endif %changelog +* Fri Aug 09 2024 Petr Menšík - 32:9.16.23-24 +- Minor fix of reclimit test backport (CVE-2024-1737) + +* Wed Aug 07 2024 Petr Menšík - 32:9.16.23-23 +- Backport addition of max-records-per-type and max-records-per-type options + +* Thu Jul 18 2024 Petr Menšík - 32:9.16.23-22 +- Resolve CVE-2024-1975 +- Resolve CVE-2024-1737 +- Resolve CVE-2024-4076 +- Add ability to change runtime limits for max types and records per name + +* Tue Jul 09 2024 Petr Menšík - 32:9.16.23-21 +- Increase size of hazard pointer array (RHEL-39131) + +* Tue May 28 2024 Petr Menšík - 32:9.16.23-20 +- Ensure bind CVE fixes hits public Stream repository + +* Fri Apr 12 2024 Petr Menšík - 32:9.11.36-19 +- Ensure incompatible bind-dyndb-ldap is not accepted + +* Mon Mar 25 2024 Petr Menšík - 32:9.16.23-18 +- Prevent crashing at masterformat system test (CVE-2023-6516) + +* Mon Feb 19 2024 Petr Menšík - 32:9.16.23-17 +- Import tests for large DNS messages fix +- Add downstream change complementing CVE-2023-50387 + +* Mon Feb 12 2024 Petr Menšík - 32:9.16.23-16 +- Prevent increased CPU load on large DNS messages (CVE-2023-4408) +- Prevent assertion failure when nxdomain-redirect is used with + RFC 1918 reverse zones (CVE-2023-5517) +- Prevent assertion failure if DNS64 and serve-stale is used (CVE-2023-5679) +- Specific recursive query patterns may lead to an out-of-memory + condition (CVE-2023-6516) +- Prevent increased CPU consumption in DNSSEC validator (CVE-2023-50387 + CVE-2023-50868) + * Thu Dec 07 2023 Petr Menšík - 32:9.16.23-15 - Update addresses of b.root-servers.net (RHEL-18188)