From 1762437121c91c6972d3fb8c22266d0c8d837f0c Mon Sep 17 00:00:00 2001 From: PMunch Date: Thu, 17 Oct 2019 15:10:33 +0200 Subject: [PATCH 01/38] Add dynamic library support --- Makefile.in | 26 +++- config.h.in | 3 + configure | 35 +++++ configure.ac | 22 +++ dynlibmod/dynlibmod.c | 236 ++++++++++++++++++++++++++++++++ dynlibmod/dynlibmod.h | 71 ++++++++++ dynlibmod/examples/helloworld.c | 45 ++++++ services/modstack.c | 9 ++ util/config_file.c | 4 + util/config_file.h | 3 + util/configlexer.lex | 2 + util/configparser.y | 18 ++- util/fptr_wlist.c | 21 +++ 13 files changed, 490 insertions(+), 5 deletions(-) create mode 100644 dynlibmod/dynlibmod.c create mode 100644 dynlibmod/dynlibmod.h create mode 100644 dynlibmod/examples/helloworld.c diff --git a/Makefile.in b/Makefile.in index d9d4fe7ad..21367eec3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,6 +25,7 @@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ DNSCRYPT_SRC=@DNSCRYPT_SRC@ DNSCRYPT_OBJ=@DNSCRYPT_OBJ@ +WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ @@ -87,6 +88,12 @@ LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=i INSTALL=$(SHELL) $(srcdir)/install-sh +DYNLIBMOD_SRC=dynlibmod/dynlibmod.c +DYNLIBMOD_OBJ=@DYNLIBMOD_OBJ@ +DYNLIBMOD_HEADER=@DYNLIBMOD_HEADER@ +DYNLIBMOD_EXTRALIBS=@DYNLIBMOD_EXTRALIBS@ + + #pythonmod.c is not here, it is mentioned by itself in its own rules, #makedepend fails on missing interface.h otherwise. PYTHONMOD_SRC=pythonmod/pythonmod_utils.c @@ -139,7 +146,7 @@ autotrust.lo val_anchor.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ -$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo +$(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo @@ -326,7 +333,7 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK) $(LINK_LIB) $(UBSYMS) -o $@ $(LIBUNBOUND_OBJ_LINK) -rpath $(libdir) $(SSLLIB) $(LIBS) unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) @@ -453,6 +460,7 @@ clean: rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h rm -f $(ALL_SRC:.c=.lint) rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py + rm -f libunbound.a rm -rf autom4te.cache .libs build doc/html doc/xml realclean: clean @@ -622,6 +630,7 @@ depend: -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \ + -e 's?$$(srcdir)/dynlibmod/dynlibmod.h?$$(DYNLIBMOD_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) @@ -783,7 +792,7 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ - $(srcdir)/ipset/ipset.h + $(srcdir)/ipset/ipset.h $(srcdir)/dynlibmod/dynlibmod.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -865,7 +874,8 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h $(PYTHONMOD_HEADER) \ $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \ - $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h + $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h \ + $(srcdir)/dynlibmod/dynlibmod.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h @@ -1072,6 +1082,14 @@ dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer. dnstap/dnstap.pb-c.h dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ +dynlibmod.lo dynlibmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h \ + $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h\ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ diff --git a/config.h.in b/config.h.in index d8ec50a6d..a07b970bc 100644 --- a/config.h.in +++ b/config.h.in @@ -836,6 +836,9 @@ /* Define if you want Python module. */ #undef WITH_PYTHONMODULE +/* Define if you want dynamic library module. */ +#undef WITH_DYNLIBMODULE + /* Define if you want PyUnbound. */ #undef WITH_PYUNBOUND diff --git a/configure b/configure index 4e222879e..41984f652 100755 --- a/configure +++ b/configure @@ -697,6 +697,10 @@ PYTHON_LDFLAGS PYTHON_CPPFLAGS PYTHON PYTHON_VERSION +DYNLIBMOD_EXTRALIBS +DYNLIBMOD_HEADER +DYNLIBMOD_OBJ +WITH_DYNLIBMODULE PTHREAD_CFLAGS_ONLY PTHREAD_CFLAGS PTHREAD_LIBS @@ -851,6 +855,7 @@ enable_alloc_nonregional with_pthreads with_solaris_threads with_syslog_facility +with_dynlibmodule with_pyunbound with_pythonmodule enable_swig_version_check @@ -1607,6 +1612,8 @@ Optional Packages: --with-solaris-threads use solaris native thread library. --with-syslog-facility=LOCAL0 - LOCAL7 set SYSLOG_FACILITY, default DAEMON + --with-dynlibmodule build dynamic library module, or + --without-dynlibmodule to disable it. (default=no) --with-pyunbound build PyUnbound, or --without-pyunbound to skip it. (default=no) --with-pythonmodule build Python module, or --without-pythonmodule to @@ -17123,6 +17130,34 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# Check for dynamic library module + +# Check whether --with-dynlibmodule was given. +if test "${with_dynlibmodule+set}" = set; then : + withval=$with_dynlibmodule; +else + withval="no" +fi + + +if test x_$withval != x_no; then + +$as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h + + WITH_DYNLIBMODULE=yes + + DYNLIBMOD_OBJ="dynlibmod.lo" + + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + +fi + # Check for PyUnbound # Check whether --with-pyunbound was given. diff --git a/configure.ac b/configure.ac index 216a78c65..7d108d002 100644 --- a/configure.ac +++ b/configure.ac @@ -616,6 +616,28 @@ case "${UNBOUND_SYSLOG_FACILITY}" in esac AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON]) +# Check for dynamic library module +AC_ARG_WITH(dynlibmodule, + AC_HELP_STRING([--with-dynlibmodule], + [build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), + [], [ withval="no" ]) + +if test x_$withval != x_no; then + AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.]) + WITH_DYNLIBMODULE=yes + AC_SUBST(WITH_DYNLIBMODULE) + DYNLIBMOD_OBJ="dynlibmod.lo" + AC_SUBST(DYNLIBMOD_OBJ) + DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' + AC_SUBST(DYNLIBMOD_HEADER) + if test $on_mingw = "no"; then + DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic" + else + DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a" + fi + AC_SUBST(DYNLIBMOD_EXTRALIBS) +fi + # Check for PyUnbound AC_ARG_WITH(pyunbound, AC_HELP_STRING([--with-pyunbound], diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c new file mode 100644 index 000000000..47d315306 --- /dev/null +++ b/dynlibmod/dynlibmod.c @@ -0,0 +1,236 @@ +#include "config.h" +#include "util/module.h" +#include "util/config_file.h" +#include "dynlibmod/dynlibmod.h" + +#if HAVE_WINDOWS_H +#include +#define __DYNSYM FARPROC +#define __LOADSYM GetProcAddress +void log_dlerror() { + DWORD dwLastError = GetLastError(); + LPSTR MessageBuffer; + DWORD dwBufferLength; + DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM ; + if(dwBufferLength = FormatMessageA( + dwFormatFlags, + NULL, // module to get message from (NULL == system) + dwLastError, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language + (LPSTR) &MessageBuffer, + 0, + NULL + )) + { + DWORD dwBytesWritten; + + // + // Output message string on stderr. + // + log_info("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); + //WriteFile( + // GetStdHandle(STD_ERROR_HANDLE), + // MessageBuffer, + // dwBufferLength, + // &dwBytesWritten, + // NULL + // ); + + // + // Free the buffer allocated by the system. + // + LocalFree(MessageBuffer); + } + +} +#else +#include +#define __DYNSYM void* +#define __LOADSYM dlsym +void log_dlerror() { + log_err("dynlibmod: %s", dlerror()); +} +#endif + +/** + * Global state for the module. + */ + +typedef int (*func_init_t)(int, struct config_file*); +typedef int (*func_deinit_t)(int); +typedef int (*func_operate_t)(int, enum module_ev event, struct module_qstate* qstate, void*); +typedef int (*func_inform_t)(int, struct module_qstate* qstate, struct module_qstate* super, void*); +struct dynlibmod_env { + + /** Dynamic library filename. */ + const char* fname; + + /** Module init function */ + func_init_t func_init; + /** Module deinit function */ + func_deinit_t func_deinit; + /** Module operate function */ + func_operate_t func_operate; + /** Module super_inform function */ + func_inform_t func_inform; + + /** Module qstate. */ + struct module_qstate* qstate; +}; + +struct dynlibmod_qstate { + + /** Module per query data. */ + void* data; +}; + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id) { + struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); + if (!de) + { + log_err("dynlibmod: malloc failure"); + return 0; + } + + env->modinfo[id] = (void*) de; + + de->fname = env->cfg->dynlib_file; + if (de->fname == NULL || de->fname[0] == 0) { + log_err("dynlibmod: no dynamic library given."); + return 0; + } + log_info("Trying to load library %s", de->fname); +#ifndef HAVE_WINDOWS_H + void* dynamic_library = dlopen(de->fname, RTLD_LAZY | RTLD_GLOBAL); +#else + HMODULE dynamic_library = LoadLibrary(de->fname); +#endif + if (dynamic_library == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load dynamic library."); + return 0; + } else { + __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); + if (initializer == NULL) { + log_err("dynlibmod: unable to load init procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_init = (func_init_t) initializer; + } + __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); + if (deinitializer == NULL) { + log_err("dynlibmod: unable to load deinit procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_deinit = (func_deinit_t) deinitializer; + } + __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); + if (operate == NULL) { + log_err("dynlibmod: unable to load operate procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_operate = (func_operate_t) operate; + } + __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); + if (inform == NULL) { + log_err("dynlibmod: unable to load inform_super procedure from dynamic library."); +#ifndef HAVE_WINDOWS_H + log_err("dynlibmod: %s", dlerror()); +#endif + return 0; + } else { + de->func_inform = (func_inform_t) inform; + } + } + de->func_init(id, env->cfg); + return 1; +} + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id) { + struct dynlibmod_env* de = env->modinfo[id]; + if(de == NULL) + return; + de->func_deinit(id); + de->fname = NULL; + free(de); +} + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + + void * data = dq == NULL ? NULL : dq->data; + int ret = de->func_operate(id, event, qstate, data); + if (ret != 1) { + log_err("dynlibmod: dynamic library returned bad code from operate %d.", ret); + qstate->ext_state[id] = module_error; + } +} + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { + struct dynlibmod_env* de = qstate->env->modinfo[id]; + struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + + void * data = dq == NULL ? NULL : dq->data; + int ret = de->func_inform(id, qstate, super, data); + if (ret != 1) { + log_err("dynlibmod: dynamic library returned bad code from inform_super %d.", ret); + qstate->ext_state[id] = module_error; + } +} + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id) { + struct dynlibmod_qstate* dq; + if (qstate == NULL) + return; + + dq = (struct dynlibmod_qstate*)qstate->minfo[id]; + verbose(VERB_ALGO, "dynlibmod: clear, id: %d, dq:%p", id, dq); + if(dq != NULL) { + /* Free qstate */ + free(dq); + } + + qstate->minfo[id] = NULL; +} + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id) { + struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id]; + verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); + if(!de) + return 0; + return sizeof(*de); +} + +/** + * The module function block + */ +static struct module_func_block dynlibmod_block = { + "dynlib", + &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super, + &dynlibmod_clear, &dynlibmod_get_mem +}; + +struct module_func_block* dynlibmod_get_funcblock(void) +{ + return &dynlibmod_block; +} diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h new file mode 100644 index 000000000..ac5d737b4 --- /dev/null +++ b/dynlibmod/dynlibmod.h @@ -0,0 +1,71 @@ +/* + * dynlibmod.h: module header file + * + * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) + * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the organization nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +/** + * \file + * Dynamic loading module for unbound. Loads dynamic library. + */ +#ifndef DYNLIBMOD_H +#define DYNLIBMOD_H +#include "util/module.h" +#include "services/outbound_list.h" + +/** + * Get the module function block. + * @return: function block with function pointers to module methods. + */ +struct module_func_block* dynlibmod_get_funcblock(void); + +/** dynlib module init */ +int dynlibmod_init(struct module_env* env, int id); + +/** dynlib module deinit */ +void dynlibmod_deinit(struct module_env* env, int id); + +/** dynlib module operate on a query */ +void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound); + +/** dynlib module */ +void dynlibmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super); + +/** dynlib module cleanup query state */ +void dynlibmod_clear(struct module_qstate* qstate, int id); + +/** dynlib module alloc size routine */ +size_t dynlibmod_get_mem(struct module_env* env, int id); + +#endif /* DYNLIBMOD_H */ diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c new file mode 100644 index 000000000..76c1df215 --- /dev/null +++ b/dynlibmod/examples/helloworld.c @@ -0,0 +1,45 @@ +/* + * This is an example to show how dynamic libraries can be made to work with + * unbound. To build a .so file simply run: + * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c + * And to build for windows, first make unbound with the --with-dynlibmod + * switch, then use this command: + * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic -o helloworld.dll helloworld.c -L../.. -l:libunbound.a + * to cross-compile a 64-bit Windows DLL. + */ + +#include "../../config.h" +#include "../../util/module.h" + +#ifdef HAVE_WINDOWS_H +#define EXPORT __declspec(dllexport) +#else +#define EXPORT +#endif + +EXPORT int init(int id, struct config_file* cfg) { + log_info("Hello world from init"); + return 1; +} + +EXPORT int deinit(int id) { + log_info("Hello world from deinit"); + return 1; +} + +EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, void* data) { + log_info("Hello world from operate"); + if (event == module_event_new || event == module_event_pass) { + qstate->ext_state[id] = module_wait_module; + } else if (event == module_event_moddone) { + qstate->ext_state[id] = module_finished; + } else { + qstate->ext_state[id] = module_error; + } + return 1; +} + +EXPORT int inform_super(int id, struct module_qstate* qstate, struct module_qstate* super, void* data) { + log_info("Hello world from inform_super"); + return 1; +} diff --git a/services/modstack.c b/services/modstack.c index 68e592814..a600549b1 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -51,6 +51,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -140,6 +143,9 @@ module_list_avail(void) #ifdef WITH_PYTHONMODULE "python", #endif +#ifdef WITH_DYNLIBMODULE + "dynlib", +#endif #ifdef USE_CACHEDB "cachedb", #endif @@ -171,6 +177,9 @@ module_funcs_avail(void) #ifdef WITH_PYTHONMODULE &pythonmod_get_funcblock, #endif +#ifdef WITH_DYNLIBMODULE + &dynlibmod_get_funcblock, +#endif #ifdef USE_CACHEDB &cachedb_get_funcblock, #endif diff --git a/util/config_file.c b/util/config_file.c index 119b22238..7a8fb0bbc 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -264,6 +264,7 @@ config_create(void) cfg->unblock_lan_zones = 0; cfg->insecure_lan_zones = 0; cfg->python_script = NULL; + cfg->dynlib_file = NULL; cfg->remote_control_enable = 0; cfg->control_ifs.first = NULL; cfg->control_ifs.last = NULL; @@ -610,6 +611,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STRLIST("python-script:", python_script) + else S_STR("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when @@ -1062,6 +1064,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_LST(opt, "python-script", python_script) + else O_STR(opt, "dynlib-file", dynlib_file) else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check) else O_DEC(opt, "ip-ratelimit", ip_ratelimit) else O_DEC(opt, "ratelimit", ratelimit) @@ -1398,6 +1401,7 @@ config_delete(struct config_file* cfg) free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); + free(cfg->dynlib_file); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); diff --git a/util/config_file.h b/util/config_file.h index b3ef930a0..6706ab08b 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -439,6 +439,9 @@ struct config_file { /** Python script file */ struct config_strlist* python_script; + /** Dynamic library file */ + char* dynlib_file; + /** Use systemd socket activation. */ int use_systemd; diff --git a/util/configlexer.lex b/util/configlexer.lex index a86ddf55d..1010dcda9 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -404,6 +404,8 @@ control-key-file{COLON} { YDVAR(1, VAR_CONTROL_KEY_FILE) } control-cert-file{COLON} { YDVAR(1, VAR_CONTROL_CERT_FILE) } python-script{COLON} { YDVAR(1, VAR_PYTHON_SCRIPT) } python{COLON} { YDVAR(0, VAR_PYTHON) } +dynlib-file{COLON} { YDVAR(1, VAR_DYNLIB_FILE) } +dynlib{COLON} { YDVAR(0, VAR_DYNLIB) } domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) } minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) } rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } diff --git a/util/configparser.y b/util/configparser.y index 10227a2ff..5f58d75b3 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -168,6 +168,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES %token VAR_TLS_SESSION_TICKET_KEYS %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 +%token VAR_DYNLIB VAR_DYNLIB_FILE %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -175,7 +176,7 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | - ipsetstart contents_ipset | authstart contents_auth + ipsetstart contents_ipset | authstart contents_auth | dynlibstart contents_dl ; /* server: declaration */ @@ -2741,6 +2742,21 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) yyerror("out of memory"); } +dynlibstart: VAR_DYNLIB + { + OUTYY(("\nP(dynlib:)\n")); + } + ; +contents_dl: contents_dl content_dl + | ; +content_dl: dl_file + ; +dl_file: VAR_DYNLIB_FILE STRING_ARG + { + OUTYY(("P(dynlib-file:%s)\n", $2)); + free(cfg_parser->cfg->dynlib_file); + cfg_parser->cfg->dynlib_file = $2; + } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index f5da501de..20eaeb137 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -81,6 +81,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef WITH_DYNLIBMODULE +#include "dynlibmod/dynlibmod.h" +#endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif @@ -379,6 +382,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_init) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_init) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; #endif @@ -404,6 +410,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_deinit) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_deinit) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; #endif @@ -430,6 +439,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_operate) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_operate) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; #endif @@ -456,6 +468,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)( #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_inform_super) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_inform_super) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; #endif @@ -482,6 +497,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_clear) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_clear) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; #endif @@ -507,6 +525,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_get_mem) return 1; #endif +#ifdef WITH_DYNLIBMODULE + else if(fptr == &dynlibmod_get_mem) return 1; +#endif #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; #endif From 8eeb910e3d07f1a1b1f540ffc0fc34c5c2097f8f Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 21 Oct 2019 14:20:33 +0200 Subject: [PATCH 02/38] Improve dynlib module and add documentation Dynamic library module is now only a thin wrapper that loads dynamic libraries and forwards all function calls directly to the loaded module. This meant adding get_mem and clear, and get_mem calls have been added in the expected places. Documentation has also been added to the example.conf and the unbound.conf manpage. --- daemon/remote.c | 10 +++ doc/example.conf.in | 10 +++ doc/unbound.conf.5.in | 20 ++++- dynlibmod/dynlibmod.c | 135 ++++++++++++++------------------ dynlibmod/dynlibmod.h | 3 +- dynlibmod/examples/helloworld.c | 21 +++-- libunbound/unbound.h | 1 + smallapp/unbound-control.c | 3 + util/shm_side/shm_main.c | 4 + 9 files changed, 119 insertions(+), 88 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 1689154f5..21ab2f3bc 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -803,6 +803,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, size_t dnscrypt_shared_secret = 0; size_t dnscrypt_nonce = 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + size_t dynlib = 0; +#endif /* WITH_DYNLIBMODULE */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val = mod_get_mem(&worker->env, "validator"); @@ -821,6 +824,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache); } #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + dynlib = mod_get_mem(&worker->env, "dynlib"); +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; @@ -848,6 +854,10 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ +#ifdef WITH_DYNLIBMODULE + if(!print_longnum(ssl, "mem.mod.dynlibmod"SQ, dynlib)) + return 0; +#endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.streamwait"SQ, (size_t)s->svr.mem_stream_wait)) return 0; diff --git a/doc/example.conf.in b/doc/example.conf.in index 9d8edbf9e..ab6b43baa 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -837,6 +837,16 @@ python: # Script file to load # python-script: "@UNBOUND_SHARE_DIR@/ubmodule-tst.py" +# Dynamic library config section. To enable: +# o use --with-dynlibmodule to configure before compiling. +# o list dynlib in the module-config string (above) to enable. +# It can be placed anywhere, the dynlib module is only a very thin wrapper +# to load modules dynamically. +# o and give a dynlib-file to run. +dynlib: + # Script file to load + # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" + # Remote control config section. remote-control: # Enable remote control with unbound-control(8) here. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index b7ff72326..434467995 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -940,7 +940,9 @@ EDNS client subnet support the default is "subnetcache validator iterator". Most modules that need to be listed here have to be listed at the beginning of the line. The cachedb module has to be listed just before the iterator. The python module can be listed in different places, it then processes the -output of the module it is just before. +output of the module it is just before. The dynlib module can be listed pretty +much anywhere, it is only a very thin wrapper that allows dynamic libraries to +run in its place. .TP .B trust\-anchor\-file: \fI File with trusted keys for validation. Both DS and DNSKEY entries can appear @@ -1782,6 +1784,22 @@ directory. .B python\-script: \fI\fR The script file to load. Repeat this option for every python module instance added to the \fBmodule\-config:\fR option. +.SS "Dynamic Library Module Options" +.LP +The +.B dynlib: +clause gives the settings for the \fIdynlib\fR(1) module. This module is only +a very small wrapper that allows dynamic modules to be loaded on runtime +instead of being compiled into the application. To enable the dynlib module it +has to be compiled into the daemon, and the word "dynlib" has to be put in the +\fBmodule\-config:\fR option. +.LP +The \fBdynlib\-file:\fR path should be specified as an absolute path relative +to the new path set by \fBchroot:\fR option, or as a relative path to the +working directory. +.TP +.B dynlib\-file: \fI\fR +The dynamic library file to load. .SS "DNS64 Module Options" .LP The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 47d315306..3592f7de7 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -5,6 +5,7 @@ #if HAVE_WINDOWS_H #include +#define __DYNMOD HMODULE #define __DYNSYM FARPROC #define __LOADSYM GetProcAddress void log_dlerror() { @@ -25,43 +26,39 @@ void log_dlerror() { )) { DWORD dwBytesWritten; - - // - // Output message string on stderr. - // - log_info("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); - //WriteFile( - // GetStdHandle(STD_ERROR_HANDLE), - // MessageBuffer, - // dwBufferLength, - // &dwBytesWritten, - // NULL - // ); - - // - // Free the buffer allocated by the system. - // + log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); } } +HMODULE open_library(const char* fname) { + return LoadLibrary(fname); +} #else #include +#define __DYNMOD void* #define __DYNSYM void* #define __LOADSYM dlsym void log_dlerror() { log_err("dynlibmod: %s", dlerror()); } +void* open_library(const char* fname) { + return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); +} #endif + /** * Global state for the module. */ -typedef int (*func_init_t)(int, struct config_file*); -typedef int (*func_deinit_t)(int); -typedef int (*func_operate_t)(int, enum module_ev event, struct module_qstate* qstate, void*); -typedef int (*func_inform_t)(int, struct module_qstate* qstate, struct module_qstate* super, void*); +typedef void (*func_init_t)(struct module_env*, int); +typedef void (*func_deinit_t)(struct module_env*, int); +typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); +typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); +typedef void (*func_clear_t)(struct module_qstate*, int); +typedef size_t (*func_get_mem_t)(struct module_env*, int); + struct dynlibmod_env { /** Dynamic library filename. */ @@ -75,20 +72,19 @@ struct dynlibmod_env { func_operate_t func_operate; /** Module super_inform function */ func_inform_t func_inform; + /** Module clear function */ + func_clear_t func_clear; + /** Module get_mem function */ + func_get_mem_t func_get_mem; /** Module qstate. */ struct module_qstate* qstate; }; -struct dynlibmod_qstate { - - /** Module per query data. */ - void* data; -}; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); + __DYNMOD dynamic_library; if (!de) { log_err("dynlibmod: malloc failure"); @@ -102,59 +98,63 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod: no dynamic library given."); return 0; } - log_info("Trying to load library %s", de->fname); -#ifndef HAVE_WINDOWS_H - void* dynamic_library = dlopen(de->fname, RTLD_LAZY | RTLD_GLOBAL); -#else - HMODULE dynamic_library = LoadLibrary(de->fname); -#endif + verbose(VERB_ALGO, "dynlibmod: Trying to load library %s", de->fname); + dynamic_library = open_library(de->fname); if (dynamic_library == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load dynamic library."); + log_err("dynlibmod: unable to load dynamic library \"%s\".", de->fname); return 0; } else { __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { - log_err("dynlibmod: unable to load init procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load init procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_init = (func_init_t) initializer; } __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { - log_err("dynlibmod: unable to load deinit procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load deinit procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_deinit = (func_deinit_t) deinitializer; } __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { - log_err("dynlibmod: unable to load operate procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load operate procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_operate = (func_operate_t) operate; } __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { - log_err("dynlibmod: unable to load inform_super procedure from dynamic library."); -#ifndef HAVE_WINDOWS_H - log_err("dynlibmod: %s", dlerror()); -#endif + log_dlerror(); + log_err("dynlibmod: unable to load inform_super procedure from dynamic library \"%s\".", de->fname); return 0; } else { de->func_inform = (func_inform_t) inform; } + __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); + if (clear == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load clear procedure from dynamic library \"%s\".", de->fname); + return 0; + } else { + de->func_clear = (func_clear_t) clear; + } + __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); + if (get_mem == NULL) { + log_dlerror(); + log_err("dynlibmod: unable to load get_mem procedure from dynamic library \"%s\".", de->fname); + return 0; + } else { + de->func_get_mem = (func_get_mem_t) get_mem; + } } - de->func_init(id, env->cfg); + de->func_init(env, id); return 1; } @@ -163,7 +163,7 @@ void dynlibmod_deinit(struct module_env* env, int id) { struct dynlibmod_env* de = env->modinfo[id]; if(de == NULL) return; - de->func_deinit(id); + de->func_deinit(env, id); de->fname = NULL; free(de); } @@ -172,44 +172,23 @@ void dynlibmod_deinit(struct module_env* env, int id) { void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct dynlibmod_env* de = qstate->env->modinfo[id]; - struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - void * data = dq == NULL ? NULL : dq->data; - int ret = de->func_operate(id, event, qstate, data); - if (ret != 1) { - log_err("dynlibmod: dynamic library returned bad code from operate %d.", ret); - qstate->ext_state[id] = module_error; - } + de->func_operate(qstate, event, id, outbound); } /** dynlib module */ void dynlibmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct dynlibmod_env* de = qstate->env->modinfo[id]; - struct dynlibmod_qstate* dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - void * data = dq == NULL ? NULL : dq->data; - int ret = de->func_inform(id, qstate, super, data); - if (ret != 1) { - log_err("dynlibmod: dynamic library returned bad code from inform_super %d.", ret); - qstate->ext_state[id] = module_error; - } + de->func_inform(qstate, id, super); } /** dynlib module cleanup query state */ void dynlibmod_clear(struct module_qstate* qstate, int id) { - struct dynlibmod_qstate* dq; - if (qstate == NULL) - return; + struct dynlibmod_env* de = qstate->env->modinfo[id]; - dq = (struct dynlibmod_qstate*)qstate->minfo[id]; - verbose(VERB_ALGO, "dynlibmod: clear, id: %d, dq:%p", id, dq); - if(dq != NULL) { - /* Free qstate */ - free(dq); - } - - qstate->minfo[id] = NULL; + de->func_clear(qstate, id); } /** dynlib module alloc size routine */ @@ -218,7 +197,9 @@ size_t dynlibmod_get_mem(struct module_env* env, int id) { verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); if(!de) return 0; - return sizeof(*de); + + size_t size = de->func_get_mem(env, id); + return size + sizeof(*de); } /** diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index ac5d737b4..1d826a1c8 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -1,8 +1,7 @@ /* * dynlibmod.h: module header file * - * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) - * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + * Copyright (c) 2019, Peter Munch-Ellingsen (peterme AT peterme.net) * * This software is open source. * diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 76c1df215..6479d8460 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -17,17 +17,15 @@ #define EXPORT #endif -EXPORT int init(int id, struct config_file* cfg) { +EXPORT void init(struct module_env* env, int id) { log_info("Hello world from init"); - return 1; } -EXPORT int deinit(int id) { +EXPORT void deinit(struct module_env* env, int id) { log_info("Hello world from deinit"); - return 1; } -EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, void* data) { +EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { log_info("Hello world from operate"); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; @@ -36,10 +34,17 @@ EXPORT int operate(int id, enum module_ev event, struct module_qstate* qstate, v } else { qstate->ext_state[id] = module_error; } - return 1; } -EXPORT int inform_super(int id, struct module_qstate* qstate, struct module_qstate* super, void* data) { +EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { log_info("Hello world from inform_super"); - return 1; +} + +EXPORT void clear(struct module_qstate* qstate, int id) { + log_info("Hello world from clear"); +} + +EXPORT size_t get_mem(struct module_env* env, int id) { + log_info("Hello world from get_mem"); + return 0; } diff --git a/libunbound/unbound.h b/libunbound/unbound.h index 682ba5530..0527d7b7d 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -641,6 +641,7 @@ struct ub_shm_stat_info { long long respip; long long dnscrypt_shared_secret; long long dnscrypt_nonce; + long long dynlib; } mem; }; diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 01e2385fa..c074b782f 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -261,6 +261,9 @@ static void print_mem(struct ub_shm_stat_info* shm_stat, #ifdef USE_IPSECMOD PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod); #endif +#ifdef WITH_DYNLIBMODULE + PR_LL("mem.mod.dynlib", shm_stat->mem.dynlib); +#endif #ifdef USE_DNSCRYPT PR_LL("mem.cache.dnscrypt_shared_secret", shm_stat->mem.dnscrypt_shared_secret); diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index a783c099b..0842b9b3b 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -280,6 +280,10 @@ void shm_main_run(struct worker *worker) #ifdef USE_IPSECMOD shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env, "ipsecmod"); +#endif +#ifdef WITH_DYNLIBMODULE + shm_stat->mem.dynlib = (long long)mod_get_mem(&worker->env, + "dynlib"); #endif } From f177dc974c8797f02ed5c37d2b0aa3103a64a708 Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 21 Oct 2019 15:02:03 +0200 Subject: [PATCH 03/38] Add support for multiple dynamic modules Allows the use of multiple dynamic modules. Simply add more "dynlib" entries to the "modules-config" and the same amount of "dynlib-file" entries in the dynlib configuration block. --- doc/example.conf.in | 3 ++- doc/unbound.conf.5.in | 6 ++++-- dynlibmod/dynlibmod.c | 38 ++++++++++++++++++++++++++------------ util/config_file.c | 6 +++--- util/config_file.h | 2 +- util/configparser.y | 4 ++-- 6 files changed, 38 insertions(+), 21 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index ab6b43baa..5820e5e0a 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -842,7 +842,8 @@ python: # o list dynlib in the module-config string (above) to enable. # It can be placed anywhere, the dynlib module is only a very thin wrapper # to load modules dynamically. -# o and give a dynlib-file to run. +# o and give a dynlib-file to run. If more than one dynlib entry is listed in +# the module-config then you need one dynlib-file per instance. dynlib: # Script file to load # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so" diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 434467995..d0583d500 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1792,14 +1792,16 @@ clause gives the settings for the \fIdynlib\fR(1) module. This module is only a very small wrapper that allows dynamic modules to be loaded on runtime instead of being compiled into the application. To enable the dynlib module it has to be compiled into the daemon, and the word "dynlib" has to be put in the -\fBmodule\-config:\fR option. +\fBmodule\-config:\fR option. Multiple instances of dynamic libraries are +supported by adding the word "dynlib" more than once. .LP The \fBdynlib\-file:\fR path should be specified as an absolute path relative to the new path set by \fBchroot:\fR option, or as a relative path to the working directory. .TP .B dynlib\-file: \fI\fR -The dynamic library file to load. +The dynamic library file to load. Repeat this option for every dynlib module +instance added to the \fBmodule\-config:\fR option. .SS "DNS64 Module Options" .LP The dns64 module must be configured in the \fBmodule\-config:\fR "dns64 diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 3592f7de7..54b2a5816 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -81,34 +81,48 @@ struct dynlibmod_env { struct module_qstate* qstate; }; +/** + * counter for dynamic library module instances + * incremeted by dynlibmod_init + */ +int dynlib_mod_count = 0; + /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { + int dynlib_mod_idx = dynlib_mod_count++; + struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); __DYNMOD dynamic_library; if (!de) { - log_err("dynlibmod: malloc failure"); + log_err("dynlibmod[%d]: malloc failure", dynlib_mod_idx); return 0; } env->modinfo[id] = (void*) de; - de->fname = env->cfg->dynlib_file; - if (de->fname == NULL || de->fname[0] == 0) { - log_err("dynlibmod: no dynamic library given."); + de->fname = NULL; + for(int i = dynlib_mod_idx; + i != 0 && cfg_item != NULL; + i--, cfg_item = cfg_item->next) {} + + if (cfg_item == NULL || cfg_item->str == NULL || cfg_item->str[0] == 0) { + log_err("dynlibmod[%d]: no dynamic library given.", dynlib_mod_idx); return 0; + } else { + de->fname = cfg_item->str; } - verbose(VERB_ALGO, "dynlibmod: Trying to load library %s", de->fname); + verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname); dynamic_library = open_library(de->fname); if (dynamic_library == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load init procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_init = (func_init_t) initializer; @@ -116,7 +130,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load deinit procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_deinit = (func_deinit_t) deinitializer; @@ -124,7 +138,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load operate procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_operate = (func_operate_t) operate; @@ -132,7 +146,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load inform_super procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_inform = (func_inform_t) inform; @@ -140,7 +154,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load clear procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_clear = (func_clear_t) clear; @@ -148,7 +162,7 @@ int dynlibmod_init(struct module_env* env, int id) { __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { log_dlerror(); - log_err("dynlibmod: unable to load get_mem procedure from dynamic library \"%s\".", de->fname); + log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { de->func_get_mem = (func_get_mem_t) get_mem; diff --git a/util/config_file.c b/util/config_file.c index 7a8fb0bbc..1afeb46bf 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -611,7 +611,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STRLIST("python-script:", python_script) - else S_STR("dynlib-file:", dynlib_file) + else S_STRLIST("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when @@ -1064,7 +1064,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) else O_LST(opt, "python-script", python_script) - else O_STR(opt, "dynlib-file", dynlib_file) + else O_LST(opt, "dynlib-file", dynlib_file) else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check) else O_DEC(opt, "ip-ratelimit", ip_ratelimit) else O_DEC(opt, "ratelimit", ratelimit) @@ -1401,7 +1401,6 @@ config_delete(struct config_file* cfg) free(cfg->version); free(cfg->module_conf); free(cfg->outgoing_avail_ports); - free(cfg->dynlib_file); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); @@ -1441,6 +1440,7 @@ config_delete(struct config_file* cfg) config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); + config_delstrlist(cfg->dynlib_file); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); diff --git a/util/config_file.h b/util/config_file.h index 6706ab08b..972c70fb8 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -440,7 +440,7 @@ struct config_file { struct config_strlist* python_script; /** Dynamic library file */ - char* dynlib_file; + struct config_strlist* dynlib_file; /** Use systemd socket activation. */ int use_systemd; diff --git a/util/configparser.y b/util/configparser.y index 5f58d75b3..f180f188f 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -2754,8 +2754,8 @@ content_dl: dl_file dl_file: VAR_DYNLIB_FILE STRING_ARG { OUTYY(("P(dynlib-file:%s)\n", $2)); - free(cfg_parser->cfg->dynlib_file); - cfg_parser->cfg->dynlib_file = $2; + if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) + yyerror("out of memory"); } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { From f79811435ba13cab2e397be4918fdd89530dbc86 Mon Sep 17 00:00:00 2001 From: PMunch Date: Tue, 22 Oct 2019 08:42:00 +0200 Subject: [PATCH 04/38] Cleanup some minor things in dynlibmod --- dynlibmod/dynlibmod.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 54b2a5816..977f45047 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -25,12 +25,12 @@ void log_dlerror() { NULL )) { - DWORD dwBytesWritten; log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); } } + HMODULE open_library(const char* fname) { return LoadLibrary(fname); } @@ -42,6 +42,7 @@ HMODULE open_library(const char* fname) { void log_dlerror() { log_err("dynlibmod: %s", dlerror()); } + void* open_library(const char* fname) { return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); } @@ -60,10 +61,8 @@ typedef void (*func_clear_t)(struct module_qstate*, int); typedef size_t (*func_get_mem_t)(struct module_env*, int); struct dynlibmod_env { - /** Dynamic library filename. */ const char* fname; - /** Module init function */ func_init_t func_init; /** Module deinit function */ @@ -76,19 +75,11 @@ struct dynlibmod_env { func_clear_t func_clear; /** Module get_mem function */ func_get_mem_t func_get_mem; - - /** Module qstate. */ - struct module_qstate* qstate; }; -/** - * counter for dynamic library module instances - * incremeted by dynlibmod_init - */ -int dynlib_mod_count = 0; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { + static int dynlib_mod_count; int dynlib_mod_idx = dynlib_mod_count++; struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); From d104d3be2243dbf0d678ee5e939acb78637f58e4 Mon Sep 17 00:00:00 2001 From: PMunch Date: Fri, 1 Nov 2019 10:44:26 +0100 Subject: [PATCH 05/38] Add inplace callback to dynlibmod, improve example This adds the possibility to properly register inplace callbacks in the dynamic library module. It works by creating a wrapper procedure that is available to the dynamic library and will call the given callback through a whitelisted callback function. The dynamic library example has already been improved to include comments and some simple examples on allocating and deallocating memory and registering callbacks. --- dynlibmod/dynlibmod.c | 108 +++++++++++++++++++++++--------- dynlibmod/dynlibmod.h | 67 ++++++++++++++++++++ dynlibmod/examples/helloworld.c | 76 +++++++++++++++++++++- util/fptr_wlist.c | 24 +++++++ 4 files changed, 243 insertions(+), 32 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 977f45047..7c77009d7 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -48,35 +48,6 @@ void* open_library(const char* fname) { } #endif - -/** - * Global state for the module. - */ - -typedef void (*func_init_t)(struct module_env*, int); -typedef void (*func_deinit_t)(struct module_env*, int); -typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); -typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); -typedef void (*func_clear_t)(struct module_qstate*, int); -typedef size_t (*func_get_mem_t)(struct module_env*, int); - -struct dynlibmod_env { - /** Dynamic library filename. */ - const char* fname; - /** Module init function */ - func_init_t func_init; - /** Module deinit function */ - func_deinit_t func_deinit; - /** Module operate function */ - func_operate_t func_operate; - /** Module super_inform function */ - func_inform_t func_inform; - /** Module clear function */ - func_clear_t func_clear; - /** Module get_mem function */ - func_get_mem_t func_get_mem; -}; - /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { static int dynlib_mod_count; @@ -159,6 +130,8 @@ int dynlibmod_init(struct module_env* env, int id) { de->func_get_mem = (func_get_mem_t) get_mem; } } + de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; + de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped; de->func_init(env, id); return 1; } @@ -207,6 +180,83 @@ size_t dynlibmod_get_mem(struct module_env* env, int id) { return size + sizeof(*de); } +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback) { + struct cb_pair* cb_pair = (struct cb_pair*) callback; + ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); +} + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args) { + struct cb_pair* cb_pair = (struct cb_pair*) cb_args; + ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); +} + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id) { + struct cb_pair* cb_pair = malloc(sizeof(struct cb_pair)); + cb_pair->cb = cb; + cb_pair->cb_arg = cbarg; + if(type >= inplace_cb_reply && type <= inplace_cb_reply_servfail) { + return inplace_cb_register(&dynlib_inplace_cb_reply_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query) { + return inplace_cb_register(&dynlib_inplace_cb_query_generic, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_query_response) { + return inplace_cb_register(&dynlib_inplace_cb_query_response, type, (void*) cb_pair, env, id); + } else if(type == inplace_cb_edns_back_parsed) { + return inplace_cb_register(&dynlib_inplace_cb_edns_back_parsed, type, (void*) cb_pair, env, id); + } else { + return 0; + } +} + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id) { + struct inplace_cb* temp = env->inplace_cb_lists[type]; + struct inplace_cb* prev = NULL; + + while(temp) { + if(temp->id == id) { + if(!prev) { + env->inplace_cb_lists[type] = temp->next; + free(temp->cb_arg); + free(temp); + temp = env->inplace_cb_lists[type]; + } + else { + prev->next = temp->next; + free(temp->cb_arg); + free(temp); + temp = prev->next; + } + } + else { + prev = temp; + temp = temp->next; + } + } +} + + /** * The module function block */ diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index 1d826a1c8..a8ba23cc9 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -67,4 +67,71 @@ void dynlibmod_clear(struct module_qstate* qstate, int id); /** dynlib module alloc size routine */ size_t dynlibmod_get_mem(struct module_env* env, int id); +int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, + int id, void* callback); + +int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, + int id, void* cb_args); + +int dynlib_inplace_cb_query_response(struct module_qstate* qstate, + struct dns_msg* response, int id, void* cb_args); + +int +inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, + struct module_env* env, int id); + +void +inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type, + int id); + +struct cb_pair { + void *cb; + void *cb_arg; +}; + +/** + * Global state for the module. + */ + +typedef void (*func_init_t)(struct module_env*, int); +typedef void (*func_deinit_t)(struct module_env*, int); +typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); +typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); +typedef void (*func_clear_t)(struct module_qstate*, int); +typedef size_t (*func_get_mem_t)(struct module_env*, int); +typedef void (*inplace_cb_delete_wrapped_t)(struct module_env*, enum inplace_cb_list_type, int); +typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, void*, struct module_env*, int); + + +struct dynlibmod_env { + /** Dynamic library filename. */ + const char* fname; + /** Module init function */ + func_init_t func_init; + /** Module deinit function */ + func_deinit_t func_deinit; + /** Module operate function */ + func_operate_t func_operate; + /** Module super_inform function */ + func_inform_t func_inform; + /** Module clear function */ + func_clear_t func_clear; + /** Module get_mem function */ + func_get_mem_t func_get_mem; + /** Wrapped inplace callback functions to circumvent callback whitelisting */ + inplace_cb_delete_wrapped_t inplace_cb_delete_wrapped; + inplace_cb_register_wrapped_t inplace_cb_register_wrapped; + /** Pointer to any data the dynamic library might want to keep */ + void *dyn_env; +}; + + #endif /* DYNLIBMOD_H */ diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 6479d8460..3d7708af0 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -4,31 +4,70 @@ * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c * And to build for windows, first make unbound with the --with-dynlibmod * switch, then use this command: - * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic -o helloworld.dll helloworld.c -L../.. -l:libunbound.a + * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic + * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a * to cross-compile a 64-bit Windows DLL. */ #include "../../config.h" #include "../../util/module.h" +#include "../dynlibmod.h" +/* Declare the EXPORT macro that expands to exporting the symbol for DLLs when + * compiling for Windows. All procedures marked with EXPORT in this example are + * called directly by the dynlib module and must be present for the module to + * load correctly. */ #ifdef HAVE_WINDOWS_H #define EXPORT __declspec(dllexport) #else #define EXPORT #endif +/* Forward declare a callback, implemented at the bottom of this file */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback); + +/* Init is called when the module is first loaded. It should be used to set up + * the environment for this module and do any other initialisation required. */ EXPORT void init(struct module_env* env, int id) { log_info("Hello world from init"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_register_wrapped(&reply_callback, + inplace_cb_reply, + NULL, env, id); + struct dynlibmod_env* local_env = env->modinfo[id]; + local_env->dyn_env = NULL; } +/* Deinit is run as the program is shutting down. It should be used to clean up + * the environment and any left over data. */ EXPORT void deinit(struct module_env* env, int id) { log_info("Hello world from deinit"); + struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; + de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id); + if (de->dyn_env != NULL) free(de->dyn_env); } -EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { +/* Operate is called every time a query passes by this module. The event can be + * used to determine which direction in the module chain it came from. */ +EXPORT void operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* entry) { log_info("Hello world from operate"); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env == NULL) { + env->dyn_env = calloc(3, sizeof(int)); + ((int *)env->dyn_env)[0] = 42; + ((int *)env->dyn_env)[1] = 102; + ((int *)env->dyn_env)[2] = 192; + } else { + log_err("Already has data!"); + qstate->ext_state[id] = module_error; + } } else if (event == module_event_moddone) { qstate->ext_state[id] = module_finished; } else { @@ -36,15 +75,46 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, } } -EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { +/* Inform super is called when a query is completed or errors out, but only if + * a sub-query has been registered to it by this module. Look at + * mesh_attach_sub in services/mesh.h to see how this is done. */ +EXPORT void inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super) { log_info("Hello world from inform_super"); } +/* Clear is called once a query is complete and the response has been sent + * back. It is used to clear up any per-query allocations. */ EXPORT void clear(struct module_qstate* qstate, int id) { log_info("Hello world from clear"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + free(env->dyn_env); + env->dyn_env = NULL; + } } +/* Get mem is called when Unbound is printing performance information. This + * only happens explicitly and is only used to show memory usage to the user. */ EXPORT size_t get_mem(struct module_env* env, int id) { log_info("Hello world from get_mem"); return 0; } + +/* The callback that was forward declared earlier. It is registered in the init + * procedure to run when a query is being replied to. */ +int reply_callback(struct query_info* qinfo, + struct module_qstate* qstate, struct reply_info* rep, int rcode, + struct edns_data* edns, struct edns_option** opt_list_out, + struct comm_reply* repinfo, struct regional* region, int id, + void* callback) { + log_info("Hello world from callback"); + struct dynlibmod_env* env = qstate->env->modinfo[id]; + if (env->dyn_env != NULL) { + log_info("Numbers gotten from query: %d, %d, and %d", + ((int *)env->dyn_env)[0], + ((int *)env->dyn_env)[1], + ((int *)env->dyn_env)[2]); + } + return 0; +} diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 20eaeb137..dfd05957f 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -585,18 +585,30 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, if(type == inplace_cb_reply) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_cache) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_local) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_servfail) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } return 0; @@ -611,6 +623,10 @@ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr) #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_query_generic) return 1; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_generic) + return 1; #endif (void)fptr; return 0; @@ -624,6 +640,10 @@ int fptr_whitelist_inplace_cb_edns_back_parsed( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_edns_back_parsed) + return 1; #endif return 0; } @@ -636,6 +656,10 @@ int fptr_whitelist_inplace_cb_query_response( return 1; #else (void)fptr; +#endif +#ifdef WITH_DYNLIBMODULE + if(fptr == &dynlib_inplace_cb_query_response) + return 1; #endif return 0; } From 5eabc429bce05e40f1101e6a0b164e30de4bc9be Mon Sep 17 00:00:00 2001 From: PMunch Date: Mon, 4 Nov 2019 16:03:04 +0100 Subject: [PATCH 06/38] Add "dynlib" prefix to example output, log queries This adds the "dynlib: " prefix to all messages created by the `helloworld.c` dynamic library example. It also adds logging of queries that pass through `operate`. --- dynlibmod/examples/helloworld.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 3d7708af0..d001b3ee8 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -11,6 +11,7 @@ #include "../../config.h" #include "../../util/module.h" +#include "../../sldns/parseutil.h" #include "../dynlibmod.h" /* Declare the EXPORT macro that expands to exporting the symbol for DLLs when @@ -33,7 +34,7 @@ int reply_callback(struct query_info* qinfo, /* Init is called when the module is first loaded. It should be used to set up * the environment for this module and do any other initialisation required. */ EXPORT void init(struct module_env* env, int id) { - log_info("Hello world from init"); + log_info("dynlib: hello world from init"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_register_wrapped(&reply_callback, inplace_cb_reply, @@ -45,7 +46,7 @@ EXPORT void init(struct module_env* env, int id) { /* Deinit is run as the program is shutting down. It should be used to clean up * the environment and any left over data. */ EXPORT void deinit(struct module_env* env, int id) { - log_info("Hello world from deinit"); + log_info("dynlib: hello world from deinit"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id); if (de->dyn_env != NULL) free(de->dyn_env); @@ -55,7 +56,13 @@ EXPORT void deinit(struct module_env* env, int id) { * used to determine which direction in the module chain it came from. */ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) { - log_info("Hello world from operate"); + log_info("dynlib: hello world from operate"); + log_info("dynlib: incoming query: %s %s(%d) %s(%d)", + qstate->qinfo.qname, + sldns_lookup_by_id(sldns_rr_classes, qstate->qinfo.qclass)->name, + qstate->qinfo.qclass, + sldns_rr_descript(qstate->qinfo.qtype)->_name, + qstate->qinfo.qtype); if (event == module_event_new || event == module_event_pass) { qstate->ext_state[id] = module_wait_module; struct dynlibmod_env* env = qstate->env->modinfo[id]; @@ -65,7 +72,7 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, ((int *)env->dyn_env)[1] = 102; ((int *)env->dyn_env)[2] = 192; } else { - log_err("Already has data!"); + log_err("dynlib: already has data!"); qstate->ext_state[id] = module_error; } } else if (event == module_event_moddone) { @@ -80,13 +87,13 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event, * mesh_attach_sub in services/mesh.h to see how this is done. */ EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { - log_info("Hello world from inform_super"); + log_info("dynlib: hello world from inform_super"); } /* Clear is called once a query is complete and the response has been sent * back. It is used to clear up any per-query allocations. */ EXPORT void clear(struct module_qstate* qstate, int id) { - log_info("Hello world from clear"); + log_info("dynlib: hello world from clear"); struct dynlibmod_env* env = qstate->env->modinfo[id]; if (env->dyn_env != NULL) { free(env->dyn_env); @@ -97,7 +104,7 @@ EXPORT void clear(struct module_qstate* qstate, int id) { /* Get mem is called when Unbound is printing performance information. This * only happens explicitly and is only used to show memory usage to the user. */ EXPORT size_t get_mem(struct module_env* env, int id) { - log_info("Hello world from get_mem"); + log_info("dynlib: hello world from get_mem"); return 0; } @@ -108,10 +115,10 @@ int reply_callback(struct query_info* qinfo, struct edns_data* edns, struct edns_option** opt_list_out, struct comm_reply* repinfo, struct regional* region, int id, void* callback) { - log_info("Hello world from callback"); + log_info("dynlib: hello world from callback"); struct dynlibmod_env* env = qstate->env->modinfo[id]; if (env->dyn_env != NULL) { - log_info("Numbers gotten from query: %d, %d, and %d", + log_info("dynlib: numbers gotten from query: %d, %d, and %d", ((int *)env->dyn_env)[0], ((int *)env->dyn_env)[1], ((int *)env->dyn_env)[2]); From 8802509a61bd6eb026811fecf474b207b3f42716 Mon Sep 17 00:00:00 2001 From: PMunch Date: Wed, 20 Nov 2019 15:11:51 +0100 Subject: [PATCH 07/38] Fix return code of init to mirror native modules The return code of the init procedure was just set to be 1 in the dynamic library loading module. This ha been rectified and it will now return whatever is returned from the loaded module. --- dynlibmod/dynlibmod.c | 3 +-- dynlibmod/dynlibmod.h | 2 +- dynlibmod/examples/helloworld.c | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 7c77009d7..5a93a7ce5 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -132,8 +132,7 @@ int dynlibmod_init(struct module_env* env, int id) { } de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped; - de->func_init(env, id); - return 1; + return de->func_init(env, id); } /** dynlib module deinit */ diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index a8ba23cc9..1097db1e7 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -101,7 +101,7 @@ struct cb_pair { * Global state for the module. */ -typedef void (*func_init_t)(struct module_env*, int); +typedef int (*func_init_t)(struct module_env*, int); typedef void (*func_deinit_t)(struct module_env*, int); typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*); typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*); diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index d001b3ee8..2ec50223e 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -33,7 +33,7 @@ int reply_callback(struct query_info* qinfo, /* Init is called when the module is first loaded. It should be used to set up * the environment for this module and do any other initialisation required. */ -EXPORT void init(struct module_env* env, int id) { +EXPORT int init(struct module_env* env, int id) { log_info("dynlib: hello world from init"); struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id]; de->inplace_cb_register_wrapped(&reply_callback, @@ -41,6 +41,7 @@ EXPORT void init(struct module_env* env, int id) { NULL, env, id); struct dynlibmod_env* local_env = env->modinfo[id]; local_env->dyn_env = NULL; + return 1; } /* Deinit is run as the program is shutting down. It should be used to clean up From 99fd6cf7118389128c8016d211f1f432abcab523 Mon Sep 17 00:00:00 2001 From: Ralph Dolmans Date: Fri, 15 May 2020 13:13:49 +0200 Subject: [PATCH 08/38] - Cache ECS answers with longest scope of CNAME chain. --- doc/Changelog | 3 +++ edns-subnet/subnetmod.c | 29 ++++++++++++++++++++++------- edns-subnet/subnetmod.h | 7 +++++++ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0b2a86aa9..4e0c07c42 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +15 May 2020: Ralph + - Cache ECS answers with longest scope of CNAME chain. + 22 April 2020: George - Explicitly use 'rrset-roundrobin: no' for test cases. diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index 37dc550cd..f1b401b90 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -386,8 +386,7 @@ update_cache(struct module_qstate *qstate, int id) rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */ rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */ addrtree_insert(tree, (addrkey_t*)edns->subnet_addr, - edns->subnet_source_mask, - sq->ecs_server_in.subnet_scope_mask, rep, + edns->subnet_source_mask, sq->max_scope, rep, rep->ttl, *qstate->env->now); lock_rw_unlock(&lru_entry->lock); @@ -543,7 +542,7 @@ eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) c_out->subnet_addr_fam = c_in->subnet_addr_fam; c_out->subnet_source_mask = c_in->subnet_source_mask; memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE); - c_out->subnet_scope_mask = s_in->subnet_scope_mask; + c_out->subnet_scope_mask = sq->max_scope; /* Limit scope returned to client to scope used for caching. */ if(c_out->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) { if(c_out->subnet_scope_mask > @@ -648,6 +647,19 @@ ecs_query_response(struct module_qstate* qstate, struct dns_msg* response, qstate->env->cfg->client_subnet_opcode); sq->subnet_sent = 0; memset(&sq->ecs_server_out, 0, sizeof(sq->ecs_server_out)); + } else if (!sq->track_max_scope && + FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_NOERROR && + response->rep->an_numrrsets > 0 + ) { + struct ub_packed_rrset_key* s = response->rep->rrsets[0]; + if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && + query_dname_compare(qstate->qinfo.qname, + s->rk.dname) == 0) { + /* CNAME response for QNAME. From now on keep track of + * longest received ECS prefix for all queries on this + * qstate. */ + sq->track_max_scope = 1; + } } return 1; } @@ -663,16 +675,19 @@ ecs_edns_back_parsed(struct module_qstate* qstate, int id, return 1; if((ecs_opt = edns_opt_list_find( qstate->edns_opts_back_in, - qstate->env->cfg->client_subnet_opcode))) { - if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) && - sq->subnet_sent && - sq->ecs_server_in.subnet_validdata) + qstate->env->cfg->client_subnet_opcode)) && + parse_subnet_option(ecs_opt, &sq->ecs_server_in) && + sq->subnet_sent && sq->ecs_server_in.subnet_validdata) { /* Only skip global cache store if we sent an ECS option * and received one back. Answers from non-whitelisted * servers will end up in global cache. Answers for * queries with 0 source will not (unless nameserver * does not support ECS). */ qstate->no_cache_store = 1; + if(!sq->track_max_scope || (sq->track_max_scope && + sq->ecs_server_in.subnet_scope_mask > + sq->max_scope)) + sq->max_scope = sq->ecs_server_in.subnet_scope_mask; } return 1; diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h index e408627b0..27ba2ee74 100644 --- a/edns-subnet/subnetmod.h +++ b/edns-subnet/subnetmod.h @@ -45,6 +45,7 @@ #include "util/alloc.h" #include "util/net_help.h" #include "util/storage/slabhash.h" +#include "util/data/dname.h" #include "edns-subnet/addrtree.h" #include "edns-subnet/edns-subnet.h" @@ -83,6 +84,12 @@ struct subnet_qstate { struct ecs_data ecs_server_out; int subnet_downstream; int subnet_sent; + /** keep track of longest received scope, set after receiving CNAME for + * incoming QNAME. */ + int track_max_scope; + /** longest received scope mask since track_max_scope is set. This value + * is used for caching and answereing to client. */ + uint8_t max_scope; /** has the subnet module been started with no_cache_store? */ int started_no_cache_store; }; From 2c8ebe6206135e7d660857c488cddb25f7f55a22 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 15 May 2020 14:55:36 +0200 Subject: [PATCH 09/38] - Fixed conflicts for PR #93 and make configure, yacc, lex. --- config.h.in | 6 +- doc/Changelog | 4 + util/configlexer.c | 4586 ++++++++++++++++++++++--------------------- util/configparser.c | 2825 +++++++++++++------------- util/configparser.h | 8 +- 5 files changed, 3742 insertions(+), 3687 deletions(-) diff --git a/config.h.in b/config.h.in index dcab05b6a..aa3e6665b 100644 --- a/config.h.in +++ b/config.h.in @@ -866,12 +866,12 @@ /* the version of the windows API enabled */ #undef WINVER +/* Define if you want dynlib module. */ +#undef WITH_DYNLIBMODULE + /* Define if you want Python module. */ #undef WITH_PYTHONMODULE -/* Define if you want dynamic library module. */ -#undef WITH_DYNLIBMODULE - /* Define if you want PyUnbound. */ #undef WITH_PYUNBOUND diff --git a/doc/Changelog b/doc/Changelog index 4e0c07c42..fbbe22641 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +15 May 2020: Wouter + - Merge PR #93: Add dynamic library support. + - Fixed conflicts for PR #93 and make configure, yacc, lex. + 15 May 2020: Ralph - Cache ECS answers with longest scope of CNAME chain. diff --git a/util/configlexer.c b/util/configlexer.c index 09fd4b003..a4ac74066 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 312 -#define YY_END_OF_BUFFER 313 +#define YY_NUM_RULES 314 +#define YY_END_OF_BUFFER 315 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,345 +363,347 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3071] = +static const flex_int16_t yy_accept[3083] = { 0, - 1, 1, 294, 294, 298, 298, 302, 302, 306, 306, - 1, 1, 313, 310, 1, 292, 292, 311, 2, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 294, 295, 295, 296, 311, 298, 299, 299, - 300, 311, 305, 302, 303, 303, 304, 311, 306, 307, - 307, 308, 311, 309, 293, 2, 297, 311, 309, 310, - 0, 1, 2, 2, 2, 2, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 1, 1, 296, 296, 300, 300, 304, 304, 308, 308, + 1, 1, 315, 312, 1, 294, 294, 313, 2, 313, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 296, 297, 297, 298, 313, 300, 301, 301, + 302, 313, 307, 304, 305, 305, 306, 313, 308, 309, + 309, 310, 313, 311, 295, 2, 299, 313, 311, 312, + 0, 1, 2, 2, 2, 2, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 294, 0, 298, 0, 305, 0, 302, 306, 0, 309, - 0, 2, 2, 309, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 296, 0, 300, 0, 307, 0, 304, 308, 0, + 311, 0, 2, 2, 311, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 309, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 311, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 115, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 123, 310, 310, 310, - 310, 310, 310, 310, 309, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 115, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 123, + 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 99, 310, 310, 310, 310, 310, 310, 8, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 116, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 128, 310, 309, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 99, 312, 312, 312, 312, 312, + 312, 8, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 116, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 287, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 128, 312, 311, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 289, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 309, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 57, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 225, 310, 14, 15, 310, - 19, 18, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 311, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 57, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 227, 312, 14, 15, 312, 19, 18, 312, 312, 211, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 122, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 209, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 3, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 122, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 209, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 3, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 309, 310, 310, 310, 310, 310, 310, 310, 281, 310, - 310, 280, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 301, 310, 310, - 310, 310, 310, 310, 310, 56, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 311, 312, 312, + 312, 312, 312, 312, 312, 283, 312, 312, 282, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 303, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 60, 310, 255, 310, 310, 310, 310, 310, - 310, 310, 310, 288, 289, 310, 310, 310, 310, 310, - 61, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 119, 310, 310, - 310, 310, 310, 310, 310, 310, 198, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 21, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 56, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 60, 312, 257, 312, 312, 312, 312, 312, 312, 312, + 312, 290, 291, 312, 312, 312, 312, 312, 61, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 119, 312, 312, 312, 312, + 312, 312, 312, 312, 198, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 21, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 147, 310, 310, 301, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 97, 310, 310, 310, 310, 310, 310, 310, 263, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 170, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 146, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 147, 312, 312, 303, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 97, 312, + 312, 312, 312, 312, 312, 312, 265, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 170, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 146, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 96, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 32, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 33, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 58, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 121, 310, 310, 310, 310, 310, 114, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 96, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 32, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 33, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 58, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 121, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 59, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 228, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 171, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 47, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 114, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 59, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 230, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 171, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 47, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 246, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 51, 310, 52, 310, 310, 310, 310, - 310, 100, 310, 101, 310, 310, 310, 310, 98, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 7, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 218, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 248, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 51, 312, 52, 312, 312, 312, 312, + 312, 100, 312, 101, 312, 312, 312, 312, 98, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 7, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 149, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 229, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 48, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 190, 310, 189, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 16, 17, 310, 310, + 312, 312, 312, 312, 312, 312, 220, 312, 312, 312, + 312, 149, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 231, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 48, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 190, 312, + 189, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 62, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 197, 310, 310, 310, 310, 310, 310, - 103, 310, 102, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 181, 310, 310, 310, 310, 310, - 310, 310, 310, 129, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 81, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 16, 17, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 62, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 197, 312, 312, 312, 312, 312, + 312, 103, 312, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 181, 312, 312, 312, 312, + 312, 312, 312, 312, 129, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 81, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 85, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 55, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 184, 185, 310, - 310, 310, 257, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 6, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 261, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 210, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 85, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 55, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 184, + 185, 312, 312, 312, 259, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 6, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 282, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 42, 310, 310, 310, 310, - 44, 310, 310, 310, 310, 310, 310, 310, 310, 45, - 310, 310, 310, 310, 310, 310, 310, 310, 177, 310, - 310, 310, 124, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 202, 310, 178, 310, 310, 310, 215, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 46, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 126, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 263, + 312, 312, 312, 312, 312, 312, 284, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 42, 312, 312, + 312, 312, 44, 312, 312, 312, 312, 312, 312, 312, + 312, 45, 312, 312, 312, 312, 312, 312, 312, 312, + 177, 312, 312, 312, 124, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 202, 312, 178, 312, 312, + 312, 217, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, - 108, 310, 109, 310, 310, 310, 107, 310, 310, 310, - 310, 310, 310, 310, 310, 144, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 245, 310, 310, - 310, 310, 310, 310, 310, 310, 179, 310, 310, 310, - 310, 310, 182, 310, 188, 310, 310, 310, 310, 310, - 214, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 95, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 120, 310, 310, 310, 310, 310, - 310, 53, 310, 310, 310, 26, 310, 310, 310, 310, + 312, 46, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 126, 108, 312, 109, 312, 312, 312, 107, 312, + 312, 312, 312, 312, 312, 312, 312, 144, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 247, + 312, 312, 312, 312, 312, 312, 312, 312, 179, 312, + 312, 312, 312, 312, 182, 312, 188, 312, 312, 312, + 312, 312, 216, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 95, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 120, 312, 312, 312, - 310, 310, 310, 310, 310, 20, 310, 310, 310, 310, - 310, 310, 27, 36, 310, 154, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 70, 72, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 265, 310, 310, 310, 226, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 110, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 143, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 53, 312, 312, 312, 26, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 20, 312, 312, + 312, 312, 312, 312, 27, 36, 312, 154, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 70, 72, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 267, 312, 312, 312, 228, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 110, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 143, 312, - 310, 310, 276, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 148, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 208, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 285, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 165, 310, 310, - 310, 310, 310, 310, 310, 310, 104, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 160, 310, 172, 310, - 310, 310, 310, 310, 132, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 278, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 148, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 208, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 287, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 165, + 312, 312, 312, 312, 312, 312, 312, 312, 104, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 160, 312, - 91, 310, 310, 310, 310, 200, 310, 310, 310, 310, - 310, 310, 216, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 237, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 125, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 164, - 310, 310, 310, 310, 310, 73, 74, 310, 310, 310, - 310, 310, 54, 310, 310, 310, 310, 310, 80, 173, - 310, 191, 310, 219, 310, 310, 183, 258, 310, 310, - 310, 310, 310, 66, 310, 175, 310, 310, 310, 310, - 310, 9, 310, 310, 310, 94, 310, 310, 310, 310, + 172, 312, 312, 312, 312, 312, 132, 312, 312, 312, + 312, 312, 91, 312, 312, 312, 312, 200, 312, 312, + 312, 312, 312, 312, 218, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 239, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 125, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 164, 312, 312, 312, 312, 312, 73, 74, 312, + 312, 312, 312, 312, 54, 312, 312, 312, 312, 312, + 80, 173, 312, 191, 312, 221, 312, 312, 183, 260, + 312, 312, 312, 312, 312, 66, 312, 175, 312, 312, - 250, 310, 310, 310, 310, 199, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 163, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 150, 310, 264, 310, - 310, 310, 310, 236, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 210, 310, 310, 310, 310, - 256, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 9, 312, 312, 312, 94, 312, 312, + 312, 312, 252, 312, 312, 312, 312, 199, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 163, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 150, 312, + 266, 312, 312, 312, 312, 238, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 212, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 279, 310, 174, 310, 310, - 310, 310, 310, 310, 310, 65, 67, 310, 310, 310, - 310, 310, 310, 310, 93, 310, 310, 310, 310, 248, - 310, 310, 310, 310, 260, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 204, 34, 28, 30, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 35, - 310, 29, 31, 310, 310, 310, 310, 310, 310, 310, - 310, 90, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 206, + 312, 312, 258, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 281, 312, 174, + 312, 312, 312, 312, 312, 312, 312, 65, 67, 312, + 312, 312, 312, 312, 312, 312, 93, 312, 312, 312, + 312, 250, 312, 312, 312, 312, 262, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 204, 34, + 28, 30, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 35, 312, 29, 31, 312, 312, 312, 312, 312, + 312, 312, 312, 90, 312, 312, 312, 312, 312, 312, - 203, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 64, 310, - 310, 127, 310, 111, 310, 310, 310, 310, 310, 310, - 310, 310, 145, 13, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 274, 310, 277, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 12, 310, 310, 22, - 310, 310, 310, 254, 310, 310, 310, 310, 262, 310, - 310, 310, 68, 310, 212, 310, 310, 310, 310, 205, - 310, 310, 63, 310, 310, 310, 310, 23, 310, 43, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 206, 203, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 64, 312, 312, 127, 312, 111, 312, 312, 312, 312, + 312, 312, 312, 312, 145, 13, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 276, 312, 279, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 12, 312, + 312, 22, 312, 312, 312, 256, 312, 312, 312, 312, + 264, 312, 312, 312, 68, 312, 214, 312, 312, 312, + 312, 205, 312, 312, 63, 312, 312, 312, 312, 23, - 310, 310, 159, 158, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 207, 201, 310, 217, 310, 310, 266, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 75, 310, 310, - 310, 249, 310, 310, 310, 310, 187, 310, 310, 310, - 310, 211, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 283, 284, 156, 310, 310, 69, 310, 310, 310, - 310, 166, 310, 310, 105, 106, 310, 310, 310, 310, - 151, 310, 153, 310, 192, 310, 310, 310, 310, 157, + 312, 43, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 159, 158, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 207, 201, 312, 219, 312, + 312, 268, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 75, + 312, 312, 312, 251, 312, 312, 312, 312, 187, 312, + 312, 312, 312, 213, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 285, 286, 156, 312, 312, 69, 312, + 312, 312, 312, 166, 312, 312, 105, 106, 312, 312, - 310, 310, 220, 310, 310, 310, 310, 310, 310, 310, - 134, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 227, 310, 310, 310, 310, 310, 310, 310, - 24, 310, 259, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 193, 310, 310, 247, 310, 278, - 310, 186, 310, 310, 310, 310, 49, 310, 310, 310, - 310, 4, 310, 310, 310, 310, 118, 133, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 223, 37, 38, 310, - 310, 310, 310, 310, 310, 310, 267, 310, 310, 310, + 312, 312, 151, 312, 153, 312, 192, 312, 312, 312, + 312, 157, 312, 312, 222, 312, 312, 312, 312, 312, + 312, 312, 134, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 229, 312, 312, 312, 312, 312, + 312, 312, 24, 312, 261, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 193, 312, 312, 249, + 312, 280, 312, 186, 312, 312, 312, 312, 49, 312, + 312, 312, 312, 4, 312, 312, 312, 312, 118, 133, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 225, 37, - 310, 310, 310, 235, 310, 310, 310, 310, 310, 310, - 310, 196, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 78, 310, 50, 253, 310, 224, 310, 310, 310, - 310, 11, 310, 310, 310, 310, 310, 310, 117, 310, - 310, 310, 310, 194, 82, 310, 40, 310, 310, 310, - 310, 310, 310, 310, 310, 162, 310, 310, 310, 310, - 310, 136, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 234, 310, 310, 310, 310, 130, 310, 310, 112, - 113, 310, 310, 310, 84, 88, 83, 310, 76, 310, - 310, 310, 310, 310, 10, 310, 310, 310, 251, 286, + 38, 312, 312, 312, 312, 312, 312, 312, 269, 312, + 312, 312, 312, 312, 312, 237, 312, 312, 312, 312, + 312, 312, 312, 196, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 78, 312, 50, 255, 312, 226, 312, + 312, 312, 312, 11, 312, 312, 312, 312, 312, 312, + 117, 312, 312, 312, 312, 194, 82, 312, 40, 312, + 312, 312, 312, 312, 312, 312, 312, 162, 312, 312, + 312, 312, 312, 136, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 236, 312, 312, 312, 312, 130, 312, + 312, 112, 113, 312, 312, 312, 84, 88, 83, 312, - 310, 310, 310, 310, 291, 39, 310, 310, 310, 310, - 310, 161, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 89, 87, 310, 77, 275, 310, - 310, 310, 310, 310, 310, 310, 180, 310, 310, 310, - 310, 310, 195, 310, 310, 310, 310, 310, 310, 310, - 310, 152, 71, 310, 310, 310, 310, 310, 268, 310, - 310, 310, 310, 310, 310, 310, 231, 310, 310, 230, - 131, 310, 86, 137, 138, 141, 142, 139, 140, 79, - 310, 252, 310, 310, 310, 310, 155, 310, 310, 310, + 76, 312, 312, 312, 312, 312, 10, 312, 312, 312, + 253, 288, 312, 312, 312, 312, 293, 39, 312, 312, + 312, 312, 312, 161, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 89, 87, 312, 77, + 277, 312, 312, 312, 312, 312, 312, 312, 180, 312, + 312, 312, 312, 312, 195, 312, 312, 312, 312, 312, + 312, 312, 312, 152, 71, 312, 312, 312, 312, 312, + 270, 312, 312, 312, 312, 312, 312, 312, 233, 312, + 312, 232, 131, 312, 86, 137, 138, 141, 142, 139, - 310, 310, 222, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 168, 167, 41, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 92, 310, 221, - 310, 244, 272, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 5, 310, 310, 213, 310, - 310, 273, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 232, 25, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 233, 310, 310, 310, 135, + 140, 79, 312, 254, 312, 312, 312, 312, 155, 312, + 312, 312, 312, 312, 224, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 168, 167, 41, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 92, + 312, 223, 312, 246, 274, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 5, 312, 312, + 215, 312, 312, 275, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 234, 25, 312, 312, 312, 312, 312, - 310, 310, 310, 310, 310, 310, 310, 310, 169, 310, - 176, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 269, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 290, 310, - 310, 240, 310, 310, 310, 310, 310, 270, 310, 310, - 310, 310, 310, 310, 271, 310, 310, 310, 238, 310, - 241, 242, 310, 310, 310, 310, 310, 239, 243, 0 + 312, 312, 312, 312, 312, 312, 312, 235, 312, 312, + 312, 135, 312, 312, 312, 312, 312, 312, 312, 312, + 169, 312, 176, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 271, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 292, 312, 312, 242, 312, 312, 312, 312, 312, 272, + 312, 312, 312, 312, 312, 312, 273, 312, 312, 312, + 240, 312, 243, 244, 312, 312, 312, 312, 312, 241, + 245, 0 } ; static const YY_CHAR yy_ec[256] = @@ -744,693 +746,697 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3085] = +static const flex_int16_t yy_base[3097] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 2197, 2057, 81, 5988, 5988, 5988, 96, 52, - 106, 63, 107, 111, 70, 128, 130, 133, 57, 88, - 76, 135, 141, 117, 148, 145, 160, 164, 185, 177, - 189, 152, 1959, 5988, 5988, 5988, 107, 1846, 5988, 5988, - 5988, 165, 1569, 1315, 5988, 5988, 5988, 211, 1269, 5988, - 5988, 5988, 180, 948, 5988, 217, 5988, 221, 168, 767, - 225, 231, 0, 237, 0, 0, 226, 231, 85, 180, - 114, 238, 239, 156, 234, 206, 240, 232, 200, 132, - 253, 244, 245, 248, 256, 257, 264, 271, 249, 277, + 90, 112, 1616, 1559, 81, 6016, 6016, 6016, 96, 52, + 106, 63, 107, 128, 70, 116, 123, 134, 57, 88, + 76, 145, 151, 114, 158, 97, 169, 181, 179, 188, + 194, 129, 1447, 6016, 6016, 6016, 135, 1315, 6016, 6016, + 6016, 146, 1142, 1110, 6016, 6016, 6016, 220, 1034, 6016, + 6016, 6016, 171, 903, 6016, 224, 6016, 228, 157, 818, + 232, 167, 0, 239, 0, 0, 165, 205, 85, 166, + 226, 190, 233, 234, 228, 240, 241, 242, 98, 130, + 250, 243, 245, 248, 258, 256, 262, 267, 273, 251, - 279, 262, 282, 285, 270, 272, 291, 293, 290, 299, - 301, 284, 302, 305, 310, 312, 311, 315, 313, 319, - 322, 318, 324, 327, 326, 193, 221, 334, 329, 340, - 342, 325, 348, 349, 350, 353, 354, 357, 363, 359, - 723, 379, 595, 381, 503, 388, 450, 365, 392, 278, - 396, 400, 0, 377, 392, 401, 367, 394, 396, 402, - 261, 398, 399, 403, 405, 406, 418, 407, 416, 422, - 426, 430, 427, 434, 424, 437, 439, 440, 429, 451, - 453, 454, 446, 455, 456, 458, 461, 462, 477, 464, - 465, 463, 486, 472, 488, 490, 487, 498, 499, 475, + 276, 272, 264, 281, 285, 275, 284, 289, 290, 287, + 302, 301, 303, 304, 307, 310, 312, 305, 315, 313, + 326, 319, 318, 324, 332, 327, 204, 329, 336, 331, + 342, 347, 348, 351, 353, 356, 360, 359, 352, 372, + 361, 721, 372, 711, 388, 597, 392, 432, 320, 383, + 235, 396, 400, 0, 392, 394, 402, 379, 398, 401, + 403, 404, 405, 406, 410, 407, 408, 425, 418, 423, + 429, 437, 435, 432, 439, 422, 442, 444, 445, 447, + 448, 457, 454, 460, 456, 462, 463, 464, 466, 467, + 483, 469, 473, 476, 485, 490, 494, 502, 486, 504, - 506, 504, 511, 516, 512, 489, 514, 501, 517, 491, - 518, 515, 522, 524, 525, 529, 530, 537, 534, 535, - 538, 532, 547, 543, 552, 544, 551, 555, 548, 558, - 566, 569, 549, 576, 559, 572, 573, 578, 581, 585, - 582, 580, 583, 590, 587, 589, 591, 593, 592, 600, - 610, 607, 608, 620, 609, 605, 616, 617, 618, 596, - 628, 627, 623, 632, 638, 629, 636, 639, 641, 643, - 642, 644, 646, 656, 649, 659, 652, 666, 661, 667, - 664, 676, 651, 662, 672, 673, 674, 678, 677, 679, - 684, 687, 688, 690, 691, 685, 698, 696, 700, 713, + 505, 495, 513, 510, 517, 518, 519, 508, 522, 509, + 524, 520, 523, 525, 527, 534, 533, 481, 535, 545, + 536, 540, 546, 537, 553, 549, 557, 552, 556, 175, + 554, 562, 566, 570, 563, 571, 574, 575, 576, 579, + 587, 590, 583, 580, 588, 592, 591, 598, 594, 595, + 596, 607, 615, 608, 611, 618, 617, 620, 621, 622, + 623, 599, 633, 625, 635, 629, 641, 626, 642, 645, + 640, 647, 648, 649, 650, 652, 660, 655, 663, 664, + 671, 668, 673, 670, 682, 658, 667, 677, 679, 680, + 683, 684, 687, 688, 690, 693, 695, 696, 697, 706, - 701, 702, 704, 714, 715, 716, 724, 737, 727, 738, - 728, 734, 742, 743, 707, 750, 746, 744, 753, 754, - 756, 757, 761, 768, 769, 5988, 760, 773, 771, 774, - 782, 783, 784, 789, 785, 763, 796, 800, 797, 803, - 825, 791, 801, 804, 814, 795, 5988, 815, 807, 849, - 817, 827, 839, 831, 835, 823, 830, 850, 843, 853, - 840, 854, 855, 873, 857, 858, 870, 860, 871, 872, - 885, 881, 883, 884, 886, 894, 889, 891, 892, 901, - 893, 895, 902, 905, 904, 908, 916, 909, 915, 917, - 921, 922, 925, 927, 929, 923, 926, 933, 950, 931, + 701, 703, 717, 705, 710, 718, 719, 727, 712, 720, + 739, 744, 745, 733, 731, 747, 749, 752, 754, 760, + 755, 757, 763, 764, 765, 766, 773, 768, 6016, 772, + 774, 782, 784, 786, 790, 787, 796, 794, 777, 804, + 806, 802, 810, 832, 788, 800, 809, 811, 814, 6016, + 822, 816, 856, 827, 820, 840, 837, 836, 844, 845, + 838, 846, 867, 850, 849, 852, 879, 854, 862, 864, + 874, 880, 878, 887, 890, 886, 888, 894, 898, 895, + 896, 897, 907, 899, 901, 909, 910, 911, 914, 918, + 923, 928, 921, 915, 931, 926, 932, 936, 939, 933, - 945, 953, 943, 954, 941, 955, 958, 963, 960, 964, - 966, 974, 969, 970, 972, 975, 976, 978, 982, 983, - 984, 986, 988, 992, 989, 999, 990, 997, 1004, 1006, - 5988, 1007, 1009, 1011, 1012, 1013, 1010, 5988, 1014, 1015, - 1017, 1026, 1016, 1029, 1036, 1024, 1037, 1039, 1040, 1043, - 1050, 1027, 1046, 1057, 1052, 1055, 1056, 1053, 1059, 1062, - 1061, 1064, 1065, 1068, 1070, 1088, 5988, 1071, 1077, 1080, - 1079, 1085, 1082, 1090, 1097, 1100, 1103, 1106, 1116, 1093, - 1117, 1111, 1113, 1072, 1118, 1123, 1125, 1126, 1127, 1128, - 1129, 1130, 1132, 1131, 1137, 1139, 5988, 1144, 1154, 1155, + 937, 943, 955, 950, 951, 959, 961, 960, 953, 966, + 962, 969, 972, 970, 978, 980, 981, 976, 982, 984, + 987, 993, 986, 988, 995, 997, 996, 1000, 1005, 1006, + 1010, 990, 1018, 1001, 6016, 1020, 1012, 1014, 1016, 1024, + 1026, 6016, 1027, 1028, 1029, 1036, 1031, 1041, 1032, 1039, + 1046, 1049, 1042, 1050, 1061, 1051, 1059, 1064, 1060, 1063, + 1066, 1069, 1072, 1070, 1077, 1073, 1067, 935, 1080, 1094, + 6016, 1079, 1081, 1085, 1084, 1091, 1097, 1106, 1104, 1112, + 1105, 1109, 1122, 1123, 1125, 1126, 1130, 1086, 1129, 1131, + 1133, 1134, 1136, 1137, 1135, 1138, 1144, 1140, 1145, 1141, - 1136, 1146, 1156, 1157, 1159, 1160, 1162, 1163, 1165, 1164, - 1169, 1179, 1170, 1183, 1180, 1181, 1185, 1186, 1188, 1187, - 1189, 1191, 1203, 1196, 1195, 1211, 1206, 1213, 1215, 1222, - 1204, 1217, 1218, 1219, 1221, 1224, 1226, 1228, 1230, 1232, - 1239, 1237, 1234, 1235, 1242, 1250, 1243, 1245, 1253, 1246, - 1254, 1257, 1247, 1266, 1267, 1260, 1258, 5988, 1276, 1268, - 1278, 1279, 1280, 1284, 1286, 1282, 1288, 813, 1289, 1290, - 1292, 1294, 1299, 1296, 1297, 1300, 1304, 1307, 1311, 1318, - 1322, 1323, 1324, 1310, 1325, 1333, 1330, 1337, 1338, 1340, - 1348, 1336, 1343, 1346, 1350, 1334, 1352, 1354, 1355, 1357, + 6016, 1152, 1158, 1169, 1155, 1164, 1165, 1166, 1168, 1170, + 1171, 1172, 1174, 1173, 1178, 1192, 1182, 1193, 1189, 1195, + 1190, 1191, 1197, 1196, 1200, 1205, 1213, 1210, 1215, 1218, + 1226, 1225, 1228, 1235, 1237, 1211, 1230, 1203, 1222, 1234, + 1240, 1239, 1238, 1245, 1246, 1253, 1248, 1249, 1251, 1254, + 1263, 1255, 1258, 1265, 1262, 1269, 1266, 1259, 1271, 1278, + 1279, 1281, 6016, 1288, 1285, 1286, 1287, 1290, 1297, 1298, + 1292, 1299, 1302, 1301, 1305, 1304, 1307, 1311, 1312, 1316, + 1318, 1321, 1325, 1322, 1323, 1337, 1336, 1338, 1329, 1330, + 1346, 1345, 1348, 1349, 1351, 1359, 1341, 1355, 1357, 1366, - 1360, 1368, 1369, 1362, 1372, 1379, 1380, 1364, 1382, 1376, - 1383, 1314, 1370, 1387, 1390, 1391, 1398, 1393, 1394, 1399, - 1400, 1401, 1402, 1396, 1407, 1410, 1406, 1412, 1413, 1416, - 1423, 1418, 1417, 1425, 1426, 1428, 1429, 1437, 1430, 1438, - 1439, 1441, 1440, 1448, 1446, 1449, 1450, 1457, 1455, 1459, - 1456, 1465, 1467, 1469, 1471, 1472, 1473, 1475, 1474, 1478, - 1484, 1477, 1483, 1489, 1493, 1490, 1495, 1496, 1499, 1500, - 5988, 1501, 1508, 1503, 1506, 1512, 1513, 1514, 1521, 1517, - 1519, 1516, 1518, 1522, 1544, 5988, 1530, 5988, 5988, 1529, - 5988, 5988, 1527, 1531, 1535, 1548, 1539, 1554, 1547, 1541, + 1361, 1363, 1364, 1365, 1370, 1367, 1375, 1379, 1382, 1381, + 1389, 1390, 1384, 1395, 1387, 1396, 1392, 1399, 1400, 1401, + 1402, 1411, 1403, 1404, 1408, 1412, 1414, 1415, 1416, 1421, + 1425, 1424, 1429, 1426, 1430, 1431, 1433, 1437, 1439, 1440, + 1442, 1443, 1446, 1454, 1452, 1444, 1462, 1450, 1465, 1466, + 1467, 1468, 1469, 1472, 1471, 1474, 1475, 1483, 1484, 1485, + 1488, 1487, 1492, 1490, 1497, 1489, 1498, 1499, 1503, 1505, + 1506, 1510, 1513, 1516, 1511, 6016, 1507, 1523, 1521, 1524, + 1525, 1529, 1530, 1538, 1531, 1533, 1534, 1535, 1536, 1561, + 6016, 1542, 6016, 6016, 1545, 6016, 6016, 1544, 1543, 6016, - 1557, 1550, 1567, 1572, 1528, 1560, 1562, 1568, 1575, 1583, - 1585, 1586, 1588, 1594, 1596, 1597, 1599, 1606, 1607, 1565, - 1589, 1598, 1610, 1612, 1611, 1613, 1617, 1615, 1620, 1616, - 1623, 1618, 1628, 1633, 1625, 1642, 5988, 1639, 1643, 1651, - 1647, 1654, 1646, 1650, 1653, 1627, 1658, 1655, 1659, 1660, - 1662, 1664, 1667, 1670, 1668, 1678, 1671, 5988, 1673, 1675, - 1674, 1680, 1686, 1688, 1687, 1689, 1681, 1693, 1694, 1705, - 1696, 1700, 1701, 1708, 1709, 1710, 5988, 1712, 1719, 1711, - 1722, 1716, 1723, 1724, 1725, 1726, 1729, 1728, 1730, 1731, - 1735, 1742, 1739, 1740, 1741, 1745, 1750, 1753, 1757, 1764, + 1558, 1547, 1546, 1567, 1571, 1565, 1551, 1574, 1555, 1584, + 1589, 1577, 1579, 1585, 1586, 1592, 1598, 1587, 1604, 1599, + 1609, 1612, 1613, 1615, 1619, 1621, 1622, 1606, 1624, 1626, + 1629, 1627, 1630, 1632, 1636, 1637, 1633, 1640, 1639, 1649, + 1653, 1642, 1660, 6016, 1657, 1669, 1670, 1666, 1673, 1665, + 1672, 1674, 1645, 1656, 1675, 1676, 1679, 1680, 1677, 1686, + 1681, 1689, 1698, 1688, 6016, 1691, 1693, 1695, 1699, 1701, + 1703, 1708, 1709, 1705, 1711, 1712, 1722, 1714, 1717, 1718, + 1724, 1726, 1728, 6016, 1727, 1735, 1736, 1738, 1740, 1742, + 1744, 1741, 1745, 1746, 1747, 1748, 1749, 1753, 1760, 1759, - 1755, 1761, 1758, 1765, 1766, 1768, 1769, 1771, 1780, 1782, - 1779, 1783, 1772, 1787, 1795, 1794, 1784, 1785, 1796, 1799, - 1806, 1808, 1809, 1800, 1804, 1816, 1811, 1814, 1815, 1819, - 1822, 1823, 1825, 1826, 1828, 1832, 1830, 1834, 5988, 1836, - 1837, 5988, 1839, 1840, 1862, 1841, 1843, 1848, 1845, 1849, - 1854, 1855, 1866, 1864, 1868, 1885, 1872, 1877, 1875, 1887, - 1876, 1889, 1891, 1895, 1896, 1897, 1904, 1906, 1857, 1912, - 1914, 1899, 1901, 1909, 1928, 1911, 1913, 1917, 1925, 1932, - 1919, 1922, 1926, 1938, 1939, 1944, 1941, 5988, 1952, 1950, - 1949, 1951, 1961, 1960, 1956, 5988, 1962, 1963, 1966, 1973, + 1766, 1756, 1769, 1771, 1773, 1774, 1781, 1776, 1782, 1784, + 1785, 1786, 1788, 1789, 1792, 1800, 1801, 1797, 1805, 1798, + 1809, 1813, 1815, 1802, 1814, 1817, 1816, 1823, 1831, 1827, + 1820, 1828, 1835, 1832, 1840, 1833, 1842, 1844, 1845, 1846, + 1848, 1836, 1853, 1854, 1855, 6016, 1856, 1857, 6016, 1861, + 1862, 1884, 1863, 1865, 1867, 1876, 1866, 1868, 1870, 1878, + 1894, 1888, 1904, 1896, 1897, 1906, 1907, 1908, 1909, 1911, + 1915, 1916, 1877, 1917, 1924, 1932, 1928, 1934, 1937, 1919, + 1933, 1935, 1954, 1938, 1939, 1942, 1945, 1946, 1943, 1951, + 1949, 1958, 1964, 1966, 1967, 6016, 1975, 1976, 1970, 1972, - 1969, 1970, 1974, 1915, 1976, 1977, 1980, 1984, 1985, 1981, - 1983, 2001, 5988, 1986, 5988, 1991, 1988, 1996, 1998, 1999, - 2003, 2004, 2006, 5988, 5988, 2014, 2007, 2020, 2028, 2010, - 5988, 2013, 2031, 2032, 2024, 2026, 2034, 2035, 2037, 2039, - 2038, 2047, 2042, 2049, 2044, 2045, 2046, 5988, 2058, 2048, - 2063, 2065, 2056, 2066, 2073, 2064, 5988, 2074, 2067, 2075, - 2085, 2087, 2082, 2077, 2089, 2093, 2084, 2088, 2090, 2096, - 2098, 2103, 2106, 2104, 2108, 2112, 2120, 5988, 2101, 2105, - 2121, 2118, 2127, 2122, 2124, 2116, 2128, 2129, 2135, 2130, - 2136, 2137, 2139, 2146, 2148, 2144, 2145, 2152, 2143, 2153, + 1984, 1981, 1982, 6016, 1987, 1988, 1990, 1998, 1991, 1993, + 1994, 1995, 2002, 2003, 2005, 2004, 2009, 2008, 2007, 2025, + 6016, 2010, 6016, 2020, 2011, 2021, 2022, 2027, 2028, 2030, + 2032, 6016, 6016, 2033, 2039, 2041, 2050, 2046, 6016, 2047, + 2055, 2052, 2057, 2051, 2058, 2061, 2062, 2066, 2067, 2070, + 2068, 2075, 2071, 2076, 2073, 6016, 2089, 1940, 2085, 2091, + 2083, 2093, 2095, 2072, 6016, 2097, 2094, 2101, 2108, 2105, + 2106, 2109, 2111, 2112, 2116, 2117, 2118, 2119, 2120, 2129, + 2130, 2121, 2132, 2135, 2131, 6016, 2128, 2139, 2147, 2143, + 2145, 2142, 2149, 2150, 2152, 2153, 2154, 1879, 2155, 2160, - 2156, 2161, 2155, 2160, 2163, 2164, 5988, 2165, 2171, 124, - 2166, 2172, 2174, 2176, 2179, 2178, 2175, 2191, 2196, 2192, - 2198, 2194, 2193, 2201, 2203, 2202, 2204, 2205, 2206, 2209, - 5988, 2211, 2213, 2214, 2216, 2218, 2219, 2229, 5988, 2225, - 2230, 2237, 2233, 2238, 2241, 2242, 2246, 2247, 2249, 2250, - 2253, 2251, 2255, 5988, 2260, 2263, 2265, 2257, 2266, 2272, - 2273, 2275, 2278, 2267, 2279, 2280, 2281, 2284, 2283, 2285, - 2287, 2292, 2289, 2294, 2297, 2299, 5988, 2307, 2309, 2303, - 2300, 2310, 2312, 2319, 2316, 2322, 2321, 2325, 2337, 2327, - 2329, 2339, 2330, 2343, 2332, 2353, 2344, 2352, 2354, 2351, + 2161, 2169, 2170, 2162, 2174, 2166, 2167, 2175, 2176, 2182, + 2181, 2183, 2184, 2185, 6016, 2187, 2191, 147, 2193, 2194, + 2196, 2195, 2202, 2198, 2201, 2218, 2219, 2215, 2214, 2217, + 2223, 2224, 2225, 2226, 2227, 1751, 2228, 2229, 6016, 2205, + 2231, 2232, 2234, 2233, 2235, 2242, 6016, 2251, 2254, 2263, + 2253, 2257, 2264, 2265, 2268, 2266, 2269, 2270, 2273, 2272, + 2276, 2278, 6016, 2280, 2283, 2290, 2281, 2291, 2236, 2293, + 2292, 2294, 2298, 2299, 2300, 2303, 2304, 2305, 2306, 2308, + 2312, 2313, 2314, 2319, 2320, 6016, 2331, 2321, 2322, 2323, + 2332, 2333, 2342, 2338, 2340, 2346, 2347, 2360, 2349, 2344, - 2358, 2361, 2362, 2363, 2365, 2367, 2368, 2369, 2370, 2377, - 2384, 2375, 2385, 2386, 2390, 2396, 2392, 5988, 2397, 2398, - 2399, 2405, 2416, 2409, 2407, 2419, 2408, 2411, 2412, 2421, - 2423, 2432, 2427, 2425, 2430, 2434, 2435, 2436, 2438, 2441, - 2442, 2451, 2443, 2453, 2220, 5988, 2376, 2454, 2446, 2448, - 2461, 2455, 2463, 2467, 2464, 2470, 2471, 2473, 2474, 2476, - 2477, 2478, 2480, 2482, 2481, 5988, 2485, 2486, 2490, 2493, - 2498, 2496, 2500, 2506, 2508, 2510, 2502, 2512, 2514, 2513, - 5988, 2522, 2523, 2519, 2531, 2527, 2528, 2529, 2533, 2530, - 5988, 2534, 2535, 2543, 2544, 2539, 5988, 2548, 2541, 2546, + 2356, 2351, 2358, 2355, 2367, 2366, 2370, 2376, 2372, 2380, + 2382, 2374, 2378, 2386, 2384, 2392, 2388, 2389, 2405, 2406, + 2398, 2408, 2401, 2390, 2416, 2409, 6016, 2418, 2411, 2423, + 2424, 2431, 2427, 2428, 2429, 2432, 2435, 2437, 2438, 2439, + 2448, 2451, 2447, 2440, 2458, 2445, 2460, 2443, 2449, 2462, + 2465, 2466, 2471, 2473, 6016, 2476, 2472, 2468, 2480, 2483, + 2478, 2485, 2490, 2488, 2486, 2492, 2495, 2496, 2497, 2499, + 2501, 2502, 2503, 2504, 6016, 2509, 2508, 2510, 2514, 2520, + 2518, 2524, 2527, 2530, 2533, 2517, 2534, 2536, 2537, 6016, + 2545, 2547, 2544, 2548, 2546, 2551, 2552, 2554, 2556, 6016, - 2551, 2553, 2552, 2556, 2549, 2559, 2560, 2568, 2565, 2562, - 2571, 5988, 2572, 2580, 2575, 2577, 2581, 2582, 2583, 2587, - 2592, 2588, 2594, 5988, 2601, 2599, 2604, 2612, 2607, 2609, - 2610, 2613, 2614, 2616, 2617, 5988, 2619, 2620, 2622, 2623, - 2625, 2627, 2630, 2642, 2631, 2634, 2641, 2639, 2644, 2646, - 2647, 2650, 2651, 2648, 2658, 2660, 2662, 2663, 2664, 2668, - 2676, 2678, 2674, 2679, 5988, 2682, 2683, 2684, 2671, 2686, - 2688, 2690, 2691, 2694, 2696, 2701, 2695, 2698, 2708, 2711, - 2699, 2712, 2715, 2716, 2718, 2720, 2721, 2722, 2723, 2730, - 2726, 2728, 2738, 2729, 2733, 2743, 2736, 2744, 2745, 2746, + 2557, 2558, 2565, 2566, 2561, 6016, 2568, 2564, 2569, 2571, + 2572, 2573, 2574, 2579, 2580, 2582, 2585, 2588, 2592, 2593, + 6016, 2594, 2602, 2603, 2595, 2606, 2597, 2607, 2608, 2612, + 2616, 2610, 6016, 2625, 2627, 2628, 2635, 2630, 2632, 2633, + 2636, 2637, 2638, 2640, 2643, 6016, 2646, 2644, 2647, 2652, + 2650, 2648, 2655, 2667, 2657, 2659, 2668, 2664, 2670, 2671, + 2672, 2673, 2676, 2675, 2683, 2686, 2684, 2688, 2689, 2691, + 2701, 2703, 2704, 2706, 6016, 2709, 2698, 2711, 2700, 2712, + 2713, 2714, 2715, 2717, 2719, 2724, 2722, 2723, 2731, 2739, + 2732, 2734, 2740, 2741, 2744, 2743, 2745, 2746, 2747, 2755, - 2747, 2749, 2751, 2752, 2756, 2750, 2758, 2768, 2769, 2771, - 2760, 2772, 2776, 2777, 5988, 2780, 2782, 2778, 2784, 2785, - 2791, 2792, 2794, 2795, 2786, 2800, 2802, 2803, 2808, 2809, - 2811, 2818, 2814, 5988, 2815, 5988, 2816, 2817, 2819, 2829, - 2821, 5988, 2825, 5988, 2832, 2839, 2826, 2830, 5988, 2840, - 2834, 2836, 2847, 2844, 2849, 2850, 2851, 2852, 2857, 2853, - 2855, 2860, 2861, 2863, 2865, 2867, 2871, 2868, 2878, 2880, - 2872, 2881, 2874, 2887, 2889, 2888, 2890, 5988, 2900, 2891, - 2894, 2897, 2901, 2902, 2903, 2905, 2906, 2911, 2912, 2913, - 2914, 2920, 2919, 2929, 2925, 2936, 5988, 2928, 2933, 2935, + 2751, 2750, 2763, 2754, 2761, 2768, 2758, 2769, 2770, 2771, + 2772, 2774, 2778, 2779, 2781, 2775, 2783, 2792, 2794, 2796, + 2785, 2797, 2801, 2802, 6016, 2805, 2807, 2803, 2809, 2810, + 2816, 2817, 2819, 2820, 2811, 2825, 2827, 2828, 2833, 2834, + 2836, 2843, 2839, 6016, 2840, 6016, 2841, 2842, 2844, 2854, + 2846, 6016, 2850, 6016, 2857, 2864, 2851, 2855, 6016, 2865, + 2859, 2861, 2872, 2869, 2874, 2875, 2876, 2877, 2882, 2878, + 2880, 2885, 2886, 2888, 2890, 2892, 2896, 2893, 2903, 2905, + 2897, 2906, 2899, 2912, 2914, 2913, 2915, 6016, 2925, 2916, + 2919, 2922, 2926, 2927, 2928, 2930, 2931, 2936, 2937, 2938, - 2937, 5988, 2939, 2938, 2940, 2946, 2949, 2948, 2950, 2952, - 2956, 2958, 2951, 2961, 2959, 2968, 2969, 5988, 2974, 2975, - 2960, 2978, 2982, 2984, 2986, 2990, 2998, 2994, 2993, 2977, - 2996, 2997, 3000, 3007, 3008, 3004, 3011, 3010, 3013, 3020, - 3016, 3012, 3014, 3022, 3023, 3024, 3027, 3028, 3031, 3026, - 3029, 3036, 3032, 5988, 3044, 3035, 3040, 3047, 3051, 3054, - 3052, 3056, 3058, 3057, 3062, 3061, 3059, 5988, 3063, 5988, - 3060, 3077, 3065, 3082, 3079, 3071, 3084, 3093, 3086, 3088, - 3090, 3096, 3094, 3098, 3097, 3100, 3103, 3102, 3110, 3109, - 3105, 3116, 3117, 3118, 3120, 3121, 5988, 5988, 3122, 3123, + 2939, 2945, 2944, 2954, 2950, 2961, 6016, 2953, 2958, 2960, + 2962, 6016, 2964, 2963, 2965, 2971, 2974, 2973, 2975, 2977, + 2981, 2983, 2976, 2986, 2984, 2993, 2994, 6016, 2999, 3000, + 2985, 3003, 3002, 3015, 3007, 3016, 3018, 3020, 3021, 3011, + 3022, 3023, 3025, 3027, 3034, 3035, 3031, 3038, 3033, 3039, + 3047, 3043, 3037, 3041, 3049, 3050, 3051, 3054, 3057, 3058, + 3053, 3059, 3060, 3062, 6016, 3068, 3071, 3072, 3075, 3063, + 3080, 3081, 3082, 3084, 3086, 3085, 3087, 3088, 6016, 3095, + 6016, 3089, 3103, 3098, 3108, 3090, 3109, 3113, 3112, 3117, + 3118, 3119, 3120, 3121, 3122, 3123, 3126, 3134, 3133, 3135, - 3126, 3124, 3128, 3134, 3130, 3142, 3138, 3144, 3146, 3148, - 3156, 5988, 3149, 3153, 3152, 3159, 3171, 3157, 3161, 3176, - 3172, 3179, 3178, 5988, 3169, 3180, 3187, 3182, 3183, 3191, - 5988, 3188, 5988, 3190, 3193, 3197, 3198, 3200, 3201, 3202, - 3203, 3211, 3221, 3224, 3206, 3223, 3208, 3220, 3225, 3226, - 3233, 3229, 3230, 3231, 5988, 3235, 3236, 3237, 3199, 3240, - 3242, 3243, 3248, 5988, 3250, 3254, 3255, 3257, 3258, 3260, - 3261, 3263, 3264, 3266, 3262, 3267, 3279, 3268, 3272, 3282, - 3284, 3286, 3292, 5988, 3293, 3285, 3301, 3297, 3299, 3300, - 3303, 3304, 3305, 3307, 3308, 3309, 3310, 3316, 3315, 3312, + 3148, 3131, 3128, 3136, 3139, 3144, 3149, 6016, 6016, 3150, + 3152, 3155, 3157, 3158, 3159, 3162, 3169, 3166, 3165, 3168, + 3172, 3180, 6016, 3182, 3176, 3184, 3187, 3194, 3185, 3198, + 3199, 3195, 3207, 3202, 6016, 3204, 3205, 3215, 3210, 3211, + 3218, 6016, 3213, 6016, 3216, 3217, 3222, 3225, 3226, 3227, + 3228, 3229, 3232, 3244, 3247, 3233, 3249, 3237, 3245, 3250, + 3251, 3258, 3254, 3255, 3256, 6016, 3260, 3261, 3262, 3265, + 3267, 3268, 3275, 3277, 6016, 3278, 3280, 3282, 3283, 3285, + 3287, 3288, 3289, 3291, 3294, 3290, 3292, 3305, 3298, 3297, + 3307, 3317, 3308, 3319, 6016, 3320, 3314, 3327, 3329, 3322, - 3313, 3318, 3329, 3331, 3332, 3321, 3339, 3323, 3337, 3342, - 3340, 3343, 3348, 3349, 3352, 3354, 3346, 3368, 3369, 3355, - 3357, 3372, 3359, 3379, 3374, 5988, 3381, 3365, 3386, 3382, - 3384, 3389, 3390, 3398, 3396, 3385, 3393, 3400, 3397, 5988, - 3412, 3402, 3399, 3403, 3404, 3424, 3420, 3421, 3422, 3426, - 3423, 3427, 3430, 3431, 3432, 3435, 3436, 5988, 5988, 3438, - 3439, 3442, 5988, 3445, 3440, 3452, 3448, 3444, 3455, 3459, - 3458, 3457, 3462, 3460, 3468, 5988, 3469, 3477, 3472, 3473, - 3481, 3482, 3479, 3485, 3487, 3488, 3491, 3489, 3494, 3493, - 3495, 3498, 3506, 3509, 3502, 3504, 3512, 5988, 3505, 3507, + 3324, 3330, 3331, 3332, 3335, 3337, 3336, 3338, 3340, 3342, + 3339, 3349, 3343, 3356, 3345, 3359, 3365, 3366, 3346, 6016, + 3362, 3369, 3370, 3373, 3372, 3376, 3379, 3383, 3380, 3392, + 3393, 3384, 3387, 3396, 3397, 3404, 3399, 6016, 3409, 3389, + 3412, 3410, 3411, 3416, 3417, 3419, 3420, 3421, 3422, 3429, + 3424, 6016, 3431, 3426, 3436, 3437, 3428, 3451, 3446, 3427, + 3449, 3453, 3450, 3456, 3454, 3458, 3459, 3462, 3463, 6016, + 6016, 3465, 3466, 3468, 6016, 3469, 3467, 3479, 3472, 3475, + 3482, 3485, 3481, 3484, 3486, 3489, 3493, 6016, 3494, 3501, + 3498, 3500, 3508, 3511, 3504, 3512, 3513, 3506, 3514, 3516, - 3513, 3515, 3517, 3520, 5988, 3523, 3524, 3527, 3530, 3538, - 3540, 3534, 3547, 3531, 3541, 3543, 3548, 3549, 3551, 3560, - 3557, 3556, 3559, 3563, 3566, 5988, 3565, 3567, 3568, 3576, - 5988, 3580, 3587, 3590, 3591, 3573, 3577, 3589, 3598, 5988, - 3593, 3596, 3594, 3595, 3603, 3602, 3610, 3607, 5988, 3609, - 3608, 3611, 5988, 3612, 3613, 3618, 3623, 3625, 3632, 3628, - 3630, 3631, 3629, 5988, 3636, 5988, 3639, 3640, 3643, 5988, - 3646, 3647, 3648, 3650, 3651, 3656, 3657, 3655, 3663, 3664, - 3666, 3667, 3665, 3670, 3674, 3671, 3672, 3676, 3677, 5988, - 3678, 3680, 3687, 3692, 3688, 3695, 3682, 3699, 3700, 5988, + 3520, 3519, 3521, 3524, 3535, 3536, 3531, 3527, 3534, 6016, + 3532, 3539, 3540, 3544, 3541, 3548, 6016, 3546, 3549, 3550, + 3555, 3558, 3562, 3559, 3568, 3569, 3571, 3572, 3573, 3574, + 3576, 3583, 3580, 3579, 3582, 3586, 3588, 6016, 3589, 3593, + 3597, 3600, 6016, 3602, 3611, 3612, 3613, 3603, 3614, 3608, + 3621, 6016, 3616, 3618, 3623, 3624, 3631, 3626, 3633, 3630, + 6016, 3632, 3634, 3636, 6016, 3637, 3638, 3646, 3651, 3643, + 3658, 3654, 3656, 3659, 3655, 6016, 3657, 6016, 3666, 3667, + 3670, 6016, 3668, 3672, 3673, 3675, 3676, 3677, 3681, 3688, + 3683, 3689, 3690, 3691, 3692, 3694, 3701, 3693, 3697, 3700, - 5988, 3702, 5988, 3705, 3706, 3709, 5988, 3711, 3710, 3718, - 3714, 3715, 3717, 3721, 3727, 5988, 3723, 3728, 3732, 3729, - 3734, 3737, 3739, 3740, 3736, 3741, 3744, 5988, 3745, 3742, - 3747, 3743, 3753, 3757, 3759, 3758, 5988, 3766, 3767, 3768, - 3770, 3772, 5988, 3774, 5988, 3776, 3780, 3781, 3782, 3777, - 5988, 3785, 3788, 3791, 3792, 3795, 3797, 3798, 3801, 3804, - 3805, 3813, 3809, 3808, 3811, 5988, 3810, 3812, 3816, 3823, - 3817, 3820, 3833, 3830, 3834, 3828, 3831, 3838, 3841, 3842, - 3844, 3848, 3849, 3850, 5988, 3851, 3856, 3852, 3865, 3861, - 3855, 5988, 3862, 3866, 3872, 5988, 3869, 3875, 3876, 3879, + 3702, 6016, 3712, 3704, 3705, 3719, 3717, 3709, 3707, 3725, + 3723, 6016, 6016, 3732, 6016, 3734, 3727, 3729, 6016, 3733, + 3735, 3744, 3739, 3740, 3750, 3747, 3751, 6016, 3753, 3742, + 3754, 3757, 3758, 3761, 3763, 3764, 3765, 3767, 3768, 6016, + 3769, 3771, 3778, 3770, 3772, 3781, 3780, 3786, 6016, 3790, + 3794, 3793, 3797, 3798, 6016, 3799, 6016, 3800, 3801, 3803, + 3807, 3804, 6016, 3812, 3813, 3817, 3819, 3820, 3822, 3821, + 3828, 3829, 3830, 3837, 3834, 3835, 3832, 6016, 3836, 3838, + 3842, 3843, 3846, 3849, 3857, 3853, 3854, 3859, 3860, 3863, + 3866, 3864, 3870, 3872, 3874, 3867, 6016, 3875, 3880, 3873, - 3880, 3881, 3884, 3883, 3886, 5988, 3890, 3891, 3887, 3888, - 3889, 3896, 5988, 5988, 3904, 5988, 3906, 3892, 3909, 3908, - 3911, 3913, 3917, 3918, 3920, 3914, 3921, 3929, 3928, 3938, - 3945, 3946, 3944, 3935, 3930, 5988, 5988, 3949, 3951, 3953, - 3955, 3956, 3958, 3942, 3965, 3963, 3971, 3974, 3964, 3967, - 5988, 3975, 3976, 3978, 5988, 3980, 3981, 3983, 3984, 3985, - 3989, 3987, 3988, 3992, 3991, 3994, 3998, 3995, 4004, 4000, - 4011, 4001, 4012, 4014, 4015, 4019, 5988, 4016, 4021, 4022, - 4025, 4028, 4030, 4029, 4031, 4032, 5988, 4036, 4035, 4039, - 4044, 4045, 4047, 4037, 4055, 4062, 4056, 4063, 4064, 4058, + 3889, 3886, 3890, 6016, 3891, 3892, 3893, 6016, 3896, 3899, + 3901, 3905, 3900, 3906, 3907, 3908, 3911, 6016, 3913, 3915, + 3912, 3916, 3928, 3920, 6016, 6016, 3930, 6016, 3931, 3917, + 3935, 3934, 3914, 3938, 3942, 3944, 3946, 3943, 3951, 3954, + 3948, 3964, 3966, 3971, 3967, 3968, 3957, 6016, 6016, 3973, + 3974, 3969, 3980, 3981, 3983, 3984, 3991, 3987, 3993, 3997, + 3998, 4005, 6016, 3986, 3988, 4006, 6016, 4001, 4004, 4007, + 4012, 4011, 4013, 4017, 4014, 4015, 4018, 4022, 4019, 4024, + 4032, 4025, 4029, 4028, 4038, 4035, 4036, 4045, 6016, 4042, + 4046, 4049, 4052, 4053, 4055, 4057, 4058, 4059, 6016, 4056, - 4069, 4072, 5988, 4073, 4046, 4074, 4075, 4080, 4082, 4083, - 4085, 4086, 4089, 4090, 4091, 4093, 4098, 4095, 4099, 4100, - 4101, 5988, 4106, 4113, 4103, 4116, 4107, 4117, 4118, 4126, - 4129, 4119, 4124, 4130, 4132, 5988, 4133, 4134, 4135, 4136, - 4144, 4137, 4141, 4145, 4147, 5988, 4152, 4148, 4154, 4155, - 4158, 4159, 4163, 4164, 4166, 4170, 4178, 5988, 4167, 4180, - 4182, 4174, 4171, 4173, 4183, 4186, 5988, 4190, 4192, 4191, - 4207, 4193, 4208, 4200, 4204, 4203, 4210, 4213, 4211, 4215, - 4217, 4218, 4219, 4231, 4235, 4230, 5988, 4221, 5988, 4236, - 4237, 4246, 4242, 4232, 5988, 4239, 4244, 4248, 4249, 4250, + 4061, 4063, 4069, 4062, 4072, 4083, 4087, 4089, 4064, 4081, + 4090, 4092, 4096, 4093, 6016, 4097, 4099, 4100, 4103, 4106, + 4108, 4109, 4111, 4112, 4114, 4116, 4117, 4124, 4126, 4118, + 4127, 4121, 4129, 6016, 4133, 4140, 4134, 4142, 4137, 4067, + 4143, 4144, 4150, 4147, 4152, 4151, 4157, 6016, 4154, 4158, + 4161, 4159, 4165, 4168, 4172, 4169, 4171, 6016, 4179, 4162, + 4173, 4175, 4183, 4185, 4188, 4190, 4193, 4192, 4195, 6016, + 4196, 4199, 4200, 4197, 4206, 4207, 4211, 4209, 6016, 4212, + 4218, 4210, 4226, 4221, 4230, 4227, 4229, 4231, 4233, 4236, + 4238, 4240, 4241, 4243, 4237, 4254, 4259, 4257, 6016, 4244, - 5988, 4253, 4256, 4258, 4257, 5988, 4263, 4262, 4261, 4268, - 4271, 4274, 5988, 4277, 4279, 4278, 4290, 4291, 4287, 4288, - 4292, 4289, 4294, 4295, 4296, 4304, 4299, 4300, 5988, 4303, - 4306, 4311, 4312, 4315, 4316, 4318, 4320, 4321, 5988, 4323, - 4325, 4326, 4327, 4329, 4330, 4332, 4344, 4342, 4331, 5988, - 4335, 4347, 4359, 4354, 4355, 5988, 5988, 4356, 4339, 4358, - 4343, 4363, 5988, 4367, 4366, 4365, 4373, 4374, 5988, 5988, - 4376, 5988, 4368, 5988, 4378, 4379, 5988, 5988, 4380, 4381, - 4382, 4384, 4391, 5988, 4394, 5988, 4402, 4397, 4388, 4399, - 4400, 5988, 4401, 4403, 4409, 5988, 4410, 4412, 4411, 4413, + 6016, 4258, 4262, 4266, 4268, 4265, 6016, 4255, 4270, 4273, + 4274, 4275, 6016, 4276, 4278, 4280, 4279, 6016, 4290, 4292, + 4281, 4296, 4283, 4298, 6016, 4303, 4304, 4300, 4312, 4315, + 4311, 4313, 4316, 4314, 4318, 4319, 4320, 4328, 4323, 4324, + 6016, 4330, 4333, 4340, 4341, 4335, 4325, 4343, 4349, 4342, + 6016, 4351, 4350, 4352, 4353, 4354, 4357, 4359, 4366, 4362, + 4361, 6016, 4365, 4369, 4382, 4363, 4373, 6016, 6016, 4378, + 4383, 4385, 4380, 4386, 6016, 4389, 4396, 4391, 4395, 4398, + 6016, 6016, 4400, 6016, 4397, 6016, 4402, 4401, 6016, 6016, + 4404, 4405, 4408, 4414, 4411, 6016, 4421, 6016, 4418, 4422, - 5988, 4417, 4422, 4414, 4418, 5988, 4423, 4427, 4430, 4431, - 4432, 4434, 4438, 4437, 4442, 4443, 4445, 4444, 4447, 4454, - 4458, 4460, 4462, 4463, 4448, 4465, 4467, 4471, 4469, 4473, - 4474, 4476, 4478, 4479, 4483, 4487, 4480, 4484, 4488, 4489, - 4490, 4497, 4493, 4499, 4504, 4500, 4505, 4506, 4507, 4508, - 4511, 4514, 4512, 4518, 4522, 5988, 4516, 4517, 4523, 4524, - 4528, 4530, 4536, 4544, 4548, 4549, 5988, 4551, 5988, 4553, - 4538, 4529, 4545, 5988, 4555, 4558, 4557, 4560, 4559, 4561, - 4563, 4562, 4566, 4567, 4569, 5988, 4572, 4573, 4574, 4578, - 5988, 4587, 4589, 4586, 4590, 4591, 4592, 4593, 4594, 4597, + 4424, 4425, 4427, 6016, 4426, 4429, 4434, 6016, 4428, 4436, + 4435, 4439, 6016, 4443, 4446, 4438, 4444, 6016, 4450, 4456, + 4458, 4448, 4452, 4459, 4465, 4460, 4468, 4469, 4470, 4471, + 4472, 4479, 4484, 4486, 4488, 4480, 4476, 4490, 4496, 4498, + 4489, 4493, 4500, 4502, 4504, 4506, 4508, 4510, 4511, 4512, + 4514, 4515, 4513, 4523, 4516, 4517, 4530, 4526, 4519, 4531, + 4534, 4532, 4538, 4539, 4541, 4542, 4543, 6016, 4544, 4546, + 4548, 4560, 4553, 4549, 4559, 4566, 4570, 4572, 6016, 4574, + 6016, 4576, 4561, 4578, 4580, 6016, 4581, 4582, 4583, 4584, + 4585, 4586, 4588, 4587, 4591, 4592, 4595, 6016, 4598, 4593, - 4599, 4601, 4603, 4615, 4605, 4606, 4610, 4614, 4616, 4617, - 4620, 4622, 4627, 4628, 4632, 5988, 4633, 5988, 4634, 4635, - 4638, 4639, 4640, 4641, 4644, 5988, 5988, 4642, 4646, 4648, - 4651, 4653, 4656, 4660, 5988, 4657, 4665, 4668, 4670, 5988, - 4658, 4674, 4675, 4677, 5988, 4678, 4679, 4680, 4682, 4685, - 4687, 4691, 4689, 4692, 4693, 4700, 5988, 5988, 5988, 5988, - 4701, 4697, 4707, 4703, 4709, 4711, 4712, 4714, 4710, 5988, - 4718, 5988, 5988, 4723, 4724, 4726, 4727, 4730, 4715, 4733, - 4731, 5988, 4735, 4736, 4743, 4737, 4745, 4747, 4749, 4753, - 4751, 4754, 4761, 4757, 4759, 4763, 4765, 4767, 4774, 5988, + 4602, 4613, 6016, 4608, 4619, 4603, 4614, 4616, 4620, 4622, + 4624, 4625, 4626, 4628, 4630, 4637, 4633, 4634, 4636, 4638, + 4639, 4644, 4647, 4646, 4654, 4656, 4661, 6016, 4650, 6016, + 4657, 4662, 4663, 4665, 4667, 4668, 4670, 6016, 6016, 4671, + 4673, 4678, 4679, 4674, 4683, 4680, 6016, 4686, 4693, 4696, + 4687, 6016, 4690, 4698, 4699, 4703, 6016, 4704, 4706, 4707, + 4709, 4710, 4713, 4717, 4714, 4720, 4721, 4725, 6016, 6016, + 6016, 6016, 4726, 4728, 4731, 4732, 4734, 4735, 4737, 4739, + 4740, 6016, 4742, 6016, 6016, 4743, 4749, 4751, 4752, 4753, + 4756, 4758, 4760, 6016, 4759, 4764, 4766, 4762, 4773, 4779, - 5988, 4764, 4776, 4768, 4785, 4781, 4782, 4789, 4788, 4790, - 4791, 4793, 4794, 4780, 4803, 4804, 4805, 4799, 5988, 4807, - 4806, 5988, 4813, 5988, 4814, 4815, 4816, 4817, 4818, 4822, - 4823, 4826, 5988, 5988, 4821, 4828, 4832, 4837, 4833, 4829, - 4839, 4842, 4843, 5988, 4844, 5988, 4845, 4846, 4856, 4847, - 4863, 4864, 4866, 4868, 4853, 4869, 5988, 4870, 4871, 5988, - 4873, 4875, 4876, 5988, 4880, 4878, 4883, 4886, 5988, 4888, - 4890, 4892, 5988, 4899, 5988, 4893, 4895, 4902, 4907, 5988, - 4903, 4904, 5988, 4909, 4911, 4912, 4916, 5988, 4917, 5988, - 4918, 4920, 4921, 4925, 4926, 4928, 4930, 4931, 4932, 4939, + 4763, 4776, 4780, 4782, 4789, 4785, 4786, 4784, 4788, 4792, + 4795, 6016, 6016, 4796, 4802, 4803, 4811, 4807, 4808, 4820, + 4815, 4816, 4817, 4818, 4822, 4804, 4829, 4834, 4827, 4824, + 6016, 4835, 4838, 6016, 4831, 6016, 4837, 4839, 4845, 4846, + 4847, 4848, 4849, 4851, 6016, 6016, 4852, 4853, 4855, 4862, + 4858, 4866, 4854, 4865, 4867, 6016, 4868, 6016, 4870, 4872, + 4879, 4880, 4887, 4888, 4891, 4893, 4889, 4894, 6016, 4895, + 4896, 6016, 4898, 4900, 4901, 6016, 4906, 4903, 4911, 4913, + 6016, 4918, 4915, 4920, 6016, 4923, 6016, 4908, 4924, 4926, + 4933, 6016, 4930, 4934, 6016, 4937, 4940, 4941, 4942, 6016, - 4937, 4940, 5988, 5988, 4948, 4934, 4945, 4950, 4952, 4959, - 4951, 4956, 4955, 5988, 5988, 4961, 5988, 4963, 4964, 5988, - 4962, 4969, 4968, 4973, 4974, 4975, 4977, 4980, 4982, 4990, - 4983, 4981, 4994, 5004, 4988, 5006, 5008, 5010, 5012, 5014, - 5016, 4984, 4999, 5017, 5018, 5020, 5021, 5988, 5023, 5025, - 5024, 5988, 5030, 5026, 5035, 5031, 5988, 5038, 5039, 5044, - 5045, 5988, 5046, 5050, 5047, 5052, 5055, 5063, 5056, 5058, - 5068, 5988, 5988, 5988, 5060, 5074, 5988, 5076, 5066, 5059, - 5071, 5988, 5077, 5078, 5988, 5988, 5079, 5082, 5081, 5093, - 5988, 5083, 5988, 5085, 5988, 5092, 5094, 5102, 5096, 5988, + 4931, 6016, 4943, 4946, 4947, 4952, 4953, 4957, 4954, 4958, + 4959, 4966, 4962, 4965, 6016, 6016, 4978, 4964, 4970, 4971, + 4974, 4981, 4979, 4982, 4984, 6016, 6016, 4988, 6016, 4989, + 4992, 6016, 4985, 4996, 4994, 4998, 5000, 5001, 5002, 5006, + 5008, 5014, 5009, 5007, 5019, 5030, 5013, 5034, 5035, 5037, + 5039, 5041, 5015, 5043, 5044, 5020, 5045, 5047, 5049, 6016, + 5051, 5052, 5053, 6016, 5057, 5058, 5060, 5061, 6016, 5063, + 5068, 5070, 5072, 6016, 5073, 5075, 5076, 5078, 5082, 5089, + 5085, 5084, 5086, 6016, 6016, 6016, 5094, 5096, 6016, 5101, + 5092, 5102, 5103, 6016, 5104, 5105, 6016, 6016, 5107, 5109, - 5107, 5109, 5988, 5115, 5117, 5119, 5111, 5088, 5121, 5122, - 5988, 5129, 5125, 5126, 5133, 5124, 5128, 5134, 5135, 5143, - 5136, 5145, 5988, 5146, 5147, 5151, 5154, 5138, 5148, 5158, - 5988, 5160, 5988, 5162, 5164, 5165, 5167, 5166, 5168, 5171, - 5180, 5170, 5173, 5174, 5988, 5184, 5189, 5988, 5181, 5988, - 5191, 5988, 5192, 5194, 5195, 5198, 5988, 5200, 5186, 5197, - 5204, 5988, 5212, 5201, 5205, 5217, 5988, 5988, 5207, 5225, - 5209, 5218, 5222, 5229, 5226, 5231, 5232, 5233, 5234, 5241, - 5236, 5237, 5238, 5245, 5248, 5252, 5988, 5988, 5988, 5247, - 5256, 5263, 5261, 5262, 5270, 5266, 5988, 5267, 5268, 5269, + 5108, 5116, 6016, 5111, 6016, 5112, 6016, 5114, 5115, 5124, + 5122, 6016, 5129, 5135, 6016, 5138, 5141, 5143, 5144, 5126, + 5130, 5145, 6016, 5154, 5147, 5151, 5158, 5155, 5159, 5160, + 5161, 5168, 5163, 5167, 6016, 5170, 5164, 5171, 5177, 5172, + 5175, 5181, 6016, 5183, 6016, 5184, 5185, 5189, 5186, 5187, + 5192, 5194, 5199, 5196, 5206, 5200, 6016, 5208, 5210, 6016, + 5212, 6016, 5214, 6016, 5215, 5216, 5218, 5220, 6016, 5224, + 5217, 5221, 5226, 6016, 5227, 5229, 5230, 5236, 6016, 6016, + 5238, 5246, 5242, 5239, 5251, 5253, 5248, 5255, 5256, 5257, + 5259, 5269, 5241, 5264, 5262, 5271, 5272, 5277, 6016, 6016, - 5277, 5274, 5279, 5988, 5275, 5280, 5281, 5282, 5286, 5283, - 5290, 5988, 5294, 5297, 5300, 5289, 5304, 5308, 5311, 5313, - 5314, 5988, 5316, 5988, 5988, 5301, 5988, 5317, 5318, 5321, - 5322, 5988, 5325, 5327, 5326, 5328, 5330, 5332, 5988, 5342, - 5333, 5335, 5344, 5988, 5988, 5348, 5988, 5351, 5352, 5345, - 5361, 5356, 5358, 5363, 5360, 5988, 5364, 5367, 5369, 5370, - 5371, 5988, 5372, 5373, 5375, 5376, 5379, 5378, 5381, 5383, - 5385, 5988, 5386, 5388, 5406, 5402, 5988, 5389, 5401, 5988, - 5988, 5411, 5413, 5334, 5988, 5988, 5988, 5416, 5988, 5418, - 5422, 5426, 5430, 5421, 5988, 5432, 5429, 5434, 5988, 5988, + 6016, 5273, 5280, 5287, 5284, 5286, 5294, 5290, 6016, 5291, + 5292, 5293, 5301, 5298, 5303, 6016, 5299, 5304, 5305, 5306, + 5310, 5307, 5314, 6016, 5318, 5321, 5324, 5313, 5328, 5332, + 5335, 5337, 5338, 6016, 5340, 6016, 6016, 5325, 6016, 5341, + 5342, 5345, 5346, 6016, 5349, 5351, 5350, 5352, 5354, 5356, + 6016, 5366, 5357, 5359, 5368, 6016, 6016, 5372, 6016, 5375, + 5376, 5369, 5385, 5380, 5382, 5387, 5384, 6016, 5388, 5391, + 5393, 5394, 5395, 6016, 5396, 5397, 5399, 5400, 5403, 5402, + 5405, 5407, 5409, 6016, 5410, 5412, 5430, 5426, 6016, 5413, + 5425, 6016, 6016, 5435, 5437, 5358, 6016, 6016, 6016, 5440, - 5433, 5435, 5436, 5438, 5988, 5988, 5439, 5442, 5440, 5443, - 5445, 5988, 5450, 5454, 5456, 5459, 5462, 5451, 5465, 5467, - 5475, 5477, 5472, 5473, 5478, 5480, 5481, 5482, 5484, 5493, - 5489, 5491, 5503, 5500, 5988, 5988, 5507, 5988, 5988, 5509, - 5511, 5513, 5515, 5517, 5519, 5521, 5988, 5522, 5524, 5525, - 5393, 5526, 5988, 5528, 5530, 5527, 5532, 5492, 5535, 5533, - 5538, 5988, 5988, 5539, 5540, 5541, 5549, 5544, 5988, 5551, - 5558, 5555, 5556, 5553, 5559, 5560, 5988, 5564, 5565, 5988, - 5988, 5563, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988, - 5568, 5988, 5566, 5581, 5583, 5585, 5988, 5573, 5586, 5494, + 6016, 5442, 5446, 5450, 5454, 5445, 6016, 5456, 5453, 5458, + 6016, 6016, 5457, 5459, 5460, 5462, 6016, 6016, 5463, 5466, + 5464, 5467, 5469, 6016, 5474, 5478, 5480, 5483, 5486, 5475, + 5489, 5491, 5499, 5501, 5496, 5497, 5502, 5504, 5505, 5506, + 5508, 5517, 5513, 5515, 5527, 5524, 6016, 6016, 5531, 6016, + 6016, 5533, 5535, 5537, 5539, 5541, 5543, 5545, 6016, 5546, + 5548, 5549, 5417, 5550, 6016, 5552, 5554, 5551, 5556, 5516, + 5559, 5557, 5562, 6016, 6016, 5563, 5564, 5565, 5573, 5568, + 6016, 5575, 5582, 5579, 5580, 5577, 5583, 5584, 6016, 5588, + 5589, 6016, 6016, 5587, 6016, 6016, 6016, 6016, 6016, 6016, - 5587, 5575, 5988, 5588, 5590, 5592, 5098, 5591, 5593, 5599, - 5598, 5600, 5603, 5602, 5605, 5604, 5609, 5608, 5610, 5623, - 5988, 5988, 5988, 5622, 5614, 5616, 5624, 5626, 5631, 5638, - 5640, 5635, 5641, 5642, 5643, 5644, 5646, 5647, 5656, 5651, - 5652, 5653, 5655, 5660, 5657, 5663, 5667, 5988, 5668, 5988, - 5669, 5988, 5988, 5674, 5676, 5670, 5679, 5686, 5690, 5681, - 5688, 5685, 5689, 5692, 5697, 5988, 5693, 5699, 5988, 5702, - 5703, 5988, 5700, 5705, 5706, 5708, 5709, 5711, 5712, 5713, - 5724, 5988, 5988, 5715, 5726, 5727, 5729, 5731, 5738, 5733, - 5737, 5740, 5743, 5739, 5747, 5988, 5750, 5751, 5753, 5988, + 6016, 6016, 5592, 6016, 5590, 5605, 5607, 5609, 6016, 5597, + 5610, 5518, 5611, 5599, 6016, 5612, 5614, 5616, 5615, 5618, + 5622, 5624, 5626, 5628, 5627, 5629, 5632, 5630, 5636, 5634, + 5638, 5644, 6016, 6016, 6016, 5642, 5640, 5651, 5652, 5663, + 5664, 5667, 5669, 5653, 5657, 5670, 5671, 5674, 5659, 5675, + 5686, 5678, 5681, 5682, 5683, 5689, 5685, 5691, 5695, 6016, + 5696, 6016, 5697, 6016, 6016, 5699, 5701, 5704, 5705, 5713, + 5714, 5706, 5709, 5716, 5718, 5726, 5728, 6016, 5717, 5719, + 6016, 5729, 5730, 6016, 5721, 5731, 5732, 5733, 5737, 5740, + 5742, 5744, 5753, 6016, 6016, 5745, 5748, 5754, 5756, 5757, + + 5764, 5760, 5763, 5767, 5769, 5770, 5777, 6016, 5776, 5778, + 5780, 6016, 5781, 5782, 5784, 5786, 5787, 5794, 5790, 5795, + 6016, 5792, 6016, 5797, 5798, 5799, 5800, 5802, 5803, 5811, + 5813, 5814, 6016, 5815, 5822, 5817, 5824, 5828, 5826, 5830, + 5820, 5833, 5835, 5842, 5846, 5843, 5847, 5834, 5851, 5838, + 6016, 5849, 5852, 6016, 5855, 5858, 5859, 5861, 5864, 6016, + 5867, 5862, 5868, 5869, 5873, 5875, 6016, 5877, 5884, 5879, + 6016, 5885, 6016, 6016, 5888, 5889, 5891, 5895, 5897, 6016, + 6016, 6016, 5924, 5931, 5938, 5945, 5952, 88, 5959, 5966, + 5973, 5980, 5987, 5994, 6001, 6008 - 5755, 5754, 5757, 5760, 5761, 5768, 5763, 5765, 5988, 5766, - 5988, 5770, 5772, 5771, 5774, 5775, 5777, 5785, 5783, 5787, - 5988, 5789, 5791, 5795, 5796, 5798, 5801, 5802, 5803, 5805, - 5807, 5808, 5817, 5811, 5813, 5819, 5821, 5823, 5988, 5825, - 5827, 5988, 5828, 5829, 5830, 5831, 5835, 5988, 5840, 5832, - 5837, 5843, 5848, 5845, 5988, 5854, 5858, 5855, 5988, 5859, - 5988, 5988, 5860, 5861, 5863, 5867, 5869, 5988, 5988, 5988, - 5896, 5903, 5910, 5917, 5924, 88, 5931, 5938, 5945, 5952, - 5959, 5966, 5973, 5980 } ; -static const flex_int16_t yy_def[3085] = +static const flex_int16_t yy_def[3097] = { 0, - 3070, 1, 3071, 3071, 3072, 3072, 3073, 3073, 3074, 3074, - 3075, 3075, 3070, 3076, 3070, 3070, 3070, 3070, 3077, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3078, 3070, 3070, 3070, 3078, 3079, 3070, 3070, - 3070, 3079, 3080, 3070, 3070, 3070, 3070, 3080, 3081, 3070, - 3070, 3070, 3081, 3082, 3070, 3083, 3070, 3082, 3082, 3076, - 3076, 3070, 3084, 3077, 3084, 3077, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3082, 1, 3083, 3083, 3084, 3084, 3085, 3085, 3086, 3086, + 3087, 3087, 3082, 3088, 3082, 3082, 3082, 3082, 3089, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3090, 3082, 3082, 3082, 3090, 3091, 3082, 3082, + 3082, 3091, 3092, 3082, 3082, 3082, 3082, 3092, 3093, 3082, + 3082, 3082, 3093, 3094, 3082, 3095, 3082, 3094, 3094, 3088, + 3088, 3082, 3096, 3089, 3096, 3089, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3078, 3078, 3079, 3079, 3080, 3080, 3070, 3081, 3081, 3082, - 3082, 3083, 3083, 3082, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3090, 3090, 3091, 3091, 3092, 3092, 3082, 3093, 3093, + 3094, 3094, 3095, 3095, 3094, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3082, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3082, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3082, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3082, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3070, 3076, - 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3094, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3082, 3088, 3082, 3082, 3088, 3088, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3082, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3094, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, - 3070, 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, - 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, - 3076, 3070, 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, + 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3082, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3082, 3082, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, - 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, + 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, - 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3070, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3070, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3070, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3082, 3082, 3088, 3088, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, 3070, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3088, 3088, 3082, 3088, 3082, 3088, 3082, 3088, 3088, 3088, + 3088, 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3082, + 3088, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, - 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3070, 3076, 3076, 3076, 3070, 3070, 3070, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3070, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3082, 3088, 3088, 3088, 3082, 3082, 3082, 3088, - 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3076, 3076, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3070, 3076, 3070, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, - 3070, 3076, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3076, 3070, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, + 3082, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3082, 3082, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3088, + 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3082, 3088, 3082, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3082, 3082, 3088, 3082, 3082, 3082, 3082, 3082, 3082, - 3076, 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3070, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, + 3082, 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3082, 3088, + 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, + + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, + 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, + 3082, 3088, 3088, 3082, 3088, 3088, 3088, 3088, 3088, 3082, + 3088, 3088, 3088, 3088, 3088, 3088, 3082, 3088, 3088, 3088, + 3082, 3088, 3082, 3082, 3088, 3088, 3088, 3088, 3088, 3082, + 3082, 0, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3070, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3070, 3076, - 3076, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3076, 3076, - 3076, 3076, 3076, 3076, 3070, 3076, 3076, 3076, 3070, 3076, - 3070, 3070, 3076, 3076, 3076, 3076, 3076, 3070, 3070, 0, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070 } ; -static const flex_int16_t yy_nxt[6029] = +static const flex_int16_t yy_nxt[6057] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 26, @@ -1440,664 +1446,667 @@ static const flex_int16_t yy_nxt[6029] = 51, 47, 51, 70, 47, 70, 70, 52, 70, 52, 54, 55, 56, 57, 70, 18, 54, 55, 56, 57, 71, 18, 58, 60, 61, 62, 71, 82, 58, 60, - 61, 62, 72, 71, 63, 102, 73, 92, 70, 71, + 61, 62, 72, 71, 63, 103, 73, 93, 70, 71, 63, 15, 16, 17, 65, 66, 67, 75, 71, 75, - 75, 71, 75, 68, 104, 157, 103, 93, 75, 76, - 141, 141, 69, 15, 16, 17, 65, 66, 67, 71, - 71, 83, 77, 78, 71, 68, 79, 71, 84, 87, - 71, 80, 85, 88, 69, 86, 89, 151, 90, 91, - 81, 71, 94, 71, 96, 71, 71, 159, 71, 105, - 98, 112, 97, 99, 71, 109, 95, 106, 71, 110, - 100, 71, 101, 107, 172, 71, 113, 108, 143, 71, - 114, 143, 118, 71, 119, 111, 115, 71, 120, 116, - 140, 151, 124, 148, 148, 125, 117, 163, 121, 122, - 71, 123, 126, 71, 133, 154, 127, 128, 71, 129, + 75, 71, 75, 68, 105, 158, 104, 94, 75, 76, + 71, 71, 69, 15, 16, 17, 65, 66, 67, 71, + 71, 83, 77, 78, 119, 68, 79, 71, 84, 71, + 95, 80, 85, 172, 69, 86, 71, 97, 142, 142, + 81, 71, 71, 71, 96, 98, 87, 71, 113, 144, + 88, 99, 144, 89, 100, 90, 91, 141, 71, 106, + 152, 101, 173, 102, 71, 110, 92, 107, 72, 111, + 152, 71, 73, 108, 149, 149, 114, 109, 71, 71, + 115, 156, 71, 120, 155, 112, 116, 121, 71, 117, + 340, 159, 71, 130, 71, 131, 118, 122, 123, 125, - 224, 130, 71, 137, 134, 158, 71, 138, 135, 136, - 131, 139, 145, 71, 145, 145, 132, 145, 75, 71, - 75, 75, 150, 75, 150, 150, 70, 150, 70, 70, - 153, 70, 72, 165, 71, 171, 73, 70, 75, 71, - 75, 75, 155, 75, 71, 71, 225, 71, 156, 75, - 76, 71, 71, 71, 160, 161, 164, 71, 71, 166, - 173, 71, 71, 169, 170, 167, 71, 168, 162, 71, - 71, 175, 177, 178, 71, 71, 184, 71, 176, 174, - 179, 182, 253, 71, 71, 71, 189, 180, 181, 183, - 71, 151, 71, 185, 191, 71, 186, 71, 71, 199, + 124, 71, 126, 71, 132, 134, 161, 71, 138, 127, + 133, 226, 139, 128, 129, 135, 140, 71, 71, 136, + 137, 146, 157, 146, 146, 75, 146, 75, 75, 151, + 75, 151, 151, 70, 151, 70, 70, 154, 70, 71, + 75, 71, 75, 75, 70, 75, 71, 71, 152, 162, + 165, 75, 76, 71, 71, 71, 71, 174, 71, 160, + 167, 71, 163, 71, 71, 164, 168, 166, 169, 71, + 176, 71, 177, 170, 171, 71, 175, 71, 186, 191, + 71, 178, 179, 180, 184, 71, 71, 182, 71, 71, + 181, 185, 187, 183, 71, 188, 193, 71, 71, 194, - 192, 194, 197, 71, 71, 195, 71, 198, 200, 187, - 188, 190, 71, 201, 71, 71, 202, 205, 71, 203, - 193, 196, 207, 71, 71, 71, 71, 204, 71, 212, - 209, 71, 71, 206, 210, 71, 214, 71, 71, 71, - 71, 208, 71, 220, 211, 215, 213, 71, 226, 229, - 217, 216, 223, 71, 221, 71, 219, 218, 222, 233, - 230, 71, 71, 71, 235, 227, 71, 71, 228, 231, - 71, 239, 71, 236, 232, 238, 71, 234, 149, 240, - 71, 242, 141, 141, 143, 237, 243, 143, 241, 145, - 151, 145, 145, 244, 145, 148, 148, 150, 248, 150, + 71, 196, 71, 71, 192, 197, 202, 199, 189, 190, + 203, 201, 200, 204, 71, 71, 71, 71, 71, 195, + 71, 198, 205, 71, 209, 71, 71, 206, 71, 214, + 211, 71, 71, 150, 212, 208, 207, 71, 213, 71, + 71, 210, 71, 216, 71, 71, 215, 219, 222, 71, + 228, 231, 217, 225, 227, 71, 221, 220, 218, 223, + 71, 71, 232, 224, 71, 71, 71, 229, 237, 71, + 230, 233, 71, 71, 71, 142, 142, 238, 241, 234, + 236, 240, 235, 243, 242, 71, 149, 149, 245, 239, + 244, 144, 71, 146, 144, 146, 146, 151, 146, 151, - 150, 75, 150, 75, 75, 71, 75, 71, 246, 71, - 245, 71, 71, 153, 71, 71, 71, 250, 71, 71, - 71, 256, 249, 247, 251, 259, 252, 255, 258, 71, - 254, 71, 260, 264, 262, 71, 263, 71, 257, 71, - 71, 265, 71, 71, 268, 261, 266, 71, 273, 269, - 71, 147, 71, 71, 270, 275, 274, 276, 279, 71, - 271, 272, 278, 267, 71, 277, 71, 71, 71, 71, - 281, 71, 282, 283, 71, 71, 71, 71, 71, 288, - 289, 285, 295, 284, 286, 71, 299, 280, 71, 287, - 71, 290, 297, 298, 291, 300, 292, 302, 296, 71, + 151, 75, 151, 75, 75, 152, 75, 71, 246, 248, + 250, 71, 247, 154, 71, 71, 71, 71, 71, 71, + 71, 71, 252, 71, 249, 255, 251, 254, 258, 253, + 260, 71, 261, 148, 257, 71, 71, 256, 71, 262, + 259, 264, 71, 265, 266, 71, 267, 276, 71, 270, + 71, 268, 71, 275, 271, 71, 263, 71, 71, 272, + 71, 71, 278, 279, 282, 273, 274, 71, 269, 71, + 71, 284, 280, 71, 277, 71, 71, 71, 285, 71, + 71, 281, 71, 286, 291, 292, 71, 298, 288, 71, + 287, 289, 301, 283, 71, 290, 71, 293, 71, 71, - 71, 71, 71, 71, 71, 304, 305, 301, 293, 307, - 294, 71, 71, 308, 71, 313, 146, 71, 310, 71, - 303, 306, 309, 311, 71, 71, 317, 71, 71, 71, - 71, 71, 312, 314, 315, 71, 316, 71, 71, 318, - 320, 319, 71, 71, 325, 71, 321, 71, 71, 326, - 71, 71, 327, 322, 331, 329, 71, 71, 323, 334, - 71, 71, 71, 324, 71, 71, 328, 330, 71, 336, - 337, 71, 71, 340, 332, 333, 341, 335, 339, 71, - 338, 342, 71, 343, 344, 71, 71, 346, 348, 71, - 347, 71, 350, 71, 71, 71, 71, 351, 71, 345, + 294, 303, 295, 71, 302, 300, 299, 71, 71, 305, + 326, 307, 308, 304, 296, 71, 297, 71, 71, 306, + 311, 71, 71, 71, 313, 314, 71, 309, 312, 310, + 71, 71, 71, 71, 316, 71, 71, 71, 71, 315, + 71, 317, 318, 319, 321, 323, 71, 71, 71, 71, + 71, 322, 328, 71, 330, 320, 324, 329, 71, 71, + 334, 325, 71, 332, 337, 71, 71, 71, 327, 71, + 71, 331, 333, 343, 339, 71, 71, 344, 346, 71, + 335, 336, 342, 71, 71, 338, 341, 71, 71, 71, + 349, 350, 71, 71, 351, 345, 71, 353, 354, 347, - 71, 354, 71, 151, 71, 71, 71, 361, 144, 71, - 357, 359, 349, 71, 352, 355, 353, 362, 71, 356, - 71, 71, 71, 71, 358, 363, 364, 365, 360, 71, - 71, 71, 367, 71, 371, 372, 71, 366, 374, 370, - 71, 71, 71, 373, 369, 71, 375, 368, 376, 71, - 378, 71, 71, 379, 71, 71, 71, 71, 382, 71, - 377, 383, 71, 385, 71, 71, 387, 388, 384, 71, - 380, 381, 71, 389, 71, 71, 386, 71, 390, 71, - 71, 392, 393, 394, 395, 71, 71, 71, 399, 71, - 71, 71, 71, 396, 400, 391, 402, 71, 71, 398, + 71, 71, 348, 71, 71, 152, 357, 71, 71, 71, + 147, 71, 71, 362, 364, 355, 356, 358, 352, 360, + 71, 71, 365, 359, 71, 368, 366, 361, 71, 367, + 71, 71, 363, 71, 71, 71, 71, 374, 71, 71, + 375, 376, 71, 378, 373, 369, 71, 370, 71, 372, + 377, 379, 371, 71, 71, 71, 381, 380, 71, 382, + 71, 71, 71, 71, 385, 71, 386, 389, 71, 383, + 391, 71, 387, 71, 388, 384, 71, 71, 393, 392, + 71, 71, 390, 71, 71, 394, 71, 396, 397, 398, + 71, 399, 71, 71, 403, 71, 71, 71, 400, 404, - 71, 71, 405, 71, 71, 410, 397, 407, 401, 71, - 409, 71, 411, 71, 71, 71, 403, 71, 404, 438, - 71, 406, 421, 419, 408, 412, 71, 71, 71, 71, - 422, 425, 423, 420, 430, 413, 142, 71, 414, 431, - 71, 71, 426, 415, 416, 417, 418, 71, 424, 427, - 71, 71, 428, 429, 432, 71, 71, 71, 433, 71, - 440, 434, 435, 71, 436, 437, 71, 71, 439, 71, - 71, 442, 441, 71, 71, 447, 71, 465, 453, 443, - 71, 71, 71, 448, 71, 449, 71, 71, 444, 446, - 445, 452, 454, 451, 450, 71, 71, 71, 71, 457, + 71, 71, 395, 71, 406, 402, 71, 409, 71, 71, + 71, 401, 411, 414, 71, 405, 71, 415, 71, 71, + 407, 408, 413, 71, 145, 71, 410, 423, 416, 412, + 71, 71, 71, 71, 143, 426, 425, 427, 430, 417, + 71, 424, 418, 429, 71, 431, 71, 419, 420, 421, + 422, 434, 71, 428, 432, 433, 435, 71, 71, 439, + 71, 436, 71, 437, 442, 71, 438, 71, 71, 440, + 71, 441, 443, 71, 444, 446, 71, 71, 71, 71, + 451, 71, 452, 445, 453, 71, 71, 71, 447, 457, + 71, 469, 456, 454, 450, 71, 448, 71, 449, 71, - 455, 458, 71, 466, 71, 460, 456, 464, 71, 71, - 71, 459, 467, 71, 71, 468, 71, 71, 461, 469, - 71, 462, 483, 463, 479, 470, 71, 71, 71, 471, - 71, 484, 481, 733, 486, 480, 71, 472, 71, 473, - 71, 474, 482, 71, 71, 494, 496, 485, 151, 495, - 498, 497, 71, 71, 475, 500, 71, 476, 501, 477, - 504, 478, 71, 71, 487, 488, 71, 71, 71, 499, - 71, 71, 502, 71, 489, 503, 490, 491, 492, 505, - 508, 493, 507, 71, 71, 71, 71, 506, 513, 514, - 509, 511, 516, 510, 71, 517, 71, 71, 71, 71, + 71, 71, 458, 71, 459, 455, 461, 71, 462, 71, + 460, 470, 464, 71, 463, 71, 468, 71, 471, 71, + 472, 483, 71, 71, 71, 465, 473, 71, 466, 71, + 467, 71, 474, 71, 484, 71, 475, 485, 488, 486, + 71, 487, 499, 490, 476, 71, 477, 500, 478, 152, + 71, 71, 501, 71, 489, 498, 502, 71, 71, 71, + 506, 479, 71, 71, 480, 71, 481, 71, 482, 71, + 503, 491, 492, 505, 508, 71, 504, 71, 507, 511, + 71, 493, 510, 494, 495, 496, 512, 71, 497, 509, + 514, 71, 71, 71, 520, 515, 513, 516, 518, 71, - 515, 521, 71, 512, 71, 71, 71, 71, 71, 519, - 524, 525, 526, 520, 71, 71, 518, 71, 71, 531, - 523, 71, 71, 536, 528, 533, 527, 522, 71, 71, - 71, 529, 530, 534, 71, 71, 71, 532, 71, 71, - 71, 546, 71, 547, 71, 538, 71, 537, 535, 542, - 539, 545, 541, 540, 71, 548, 71, 549, 71, 553, - 543, 151, 544, 71, 551, 550, 71, 71, 71, 556, - 552, 71, 554, 71, 555, 558, 71, 71, 559, 71, - 561, 562, 71, 71, 557, 71, 563, 71, 71, 71, - 560, 71, 568, 566, 567, 71, 71, 71, 564, 71, + 71, 71, 517, 71, 521, 525, 519, 71, 71, 71, + 71, 71, 71, 523, 71, 528, 152, 529, 530, 522, + 71, 524, 71, 71, 71, 527, 535, 71, 71, 536, + 532, 71, 531, 526, 71, 538, 71, 534, 533, 71, + 539, 71, 541, 543, 71, 71, 71, 537, 71, 71, + 71, 551, 71, 542, 552, 540, 71, 545, 547, 546, + 544, 550, 554, 71, 71, 553, 71, 621, 71, 548, + 556, 549, 71, 71, 71, 71, 557, 558, 559, 71, + 561, 563, 71, 71, 555, 71, 560, 567, 562, 71, + 564, 71, 566, 71, 71, 71, 565, 71, 568, 71, - 569, 71, 71, 71, 574, 71, 565, 570, 578, 575, - 71, 573, 71, 577, 576, 572, 571, 71, 580, 71, - 71, 582, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 579, 584, 592, 585, 587, 594, 71, 593, 71, - 71, 581, 71, 583, 591, 588, 586, 589, 590, 71, - 71, 596, 71, 71, 595, 599, 71, 602, 597, 71, - 603, 598, 604, 71, 605, 71, 71, 600, 71, 71, - 71, 601, 71, 608, 71, 71, 611, 71, 71, 607, - 612, 71, 614, 71, 71, 71, 645, 610, 606, 613, - 71, 609, 71, 71, 615, 71, 617, 628, 71, 631, + 71, 71, 571, 71, 569, 572, 71, 573, 71, 71, + 71, 575, 579, 71, 71, 574, 570, 580, 71, 71, + 582, 576, 578, 71, 584, 71, 577, 71, 583, 71, + 581, 71, 585, 71, 587, 589, 586, 71, 590, 71, + 71, 71, 71, 597, 71, 71, 588, 150, 599, 71, + 600, 592, 71, 598, 71, 71, 596, 591, 593, 71, + 594, 595, 71, 71, 71, 604, 601, 602, 607, 605, + 603, 610, 71, 71, 71, 609, 71, 71, 606, 71, + 71, 613, 71, 71, 608, 71, 71, 612, 617, 616, + 71, 619, 71, 71, 71, 611, 620, 71, 71, 71, - 616, 71, 618, 71, 626, 627, 71, 619, 632, 620, - 71, 629, 633, 71, 630, 621, 71, 622, 635, 71, - 623, 624, 641, 639, 71, 634, 71, 625, 638, 71, - 71, 71, 636, 642, 640, 637, 71, 647, 71, 71, - 71, 71, 71, 71, 71, 71, 644, 643, 653, 71, - 71, 649, 71, 648, 654, 650, 646, 71, 657, 71, - 651, 661, 660, 655, 652, 656, 658, 151, 71, 71, - 71, 659, 71, 71, 662, 71, 71, 71, 71, 667, - 669, 671, 71, 71, 664, 670, 672, 665, 663, 668, - 674, 666, 71, 71, 71, 673, 71, 676, 71, 71, + 650, 614, 633, 615, 71, 618, 622, 71, 623, 632, + 71, 148, 631, 624, 636, 625, 634, 71, 71, 71, + 635, 626, 71, 627, 637, 71, 628, 629, 638, 644, + 640, 643, 639, 630, 641, 71, 71, 642, 71, 71, + 645, 647, 71, 71, 71, 652, 71, 71, 71, 71, + 71, 71, 646, 71, 71, 147, 658, 71, 71, 654, + 662, 653, 648, 649, 655, 71, 659, 651, 71, 656, + 657, 152, 660, 661, 663, 664, 665, 71, 71, 71, + 666, 71, 71, 71, 71, 71, 71, 71, 672, 674, + 676, 71, 667, 669, 675, 71, 670, 668, 673, 677, - 71, 71, 71, 680, 71, 675, 679, 688, 71, 71, - 685, 681, 677, 690, 678, 686, 71, 71, 682, 71, - 684, 683, 687, 689, 71, 691, 71, 692, 71, 693, - 71, 71, 71, 695, 71, 71, 696, 71, 694, 71, - 699, 71, 698, 71, 700, 71, 704, 71, 71, 703, - 71, 697, 71, 707, 705, 71, 71, 709, 71, 71, - 71, 710, 702, 71, 701, 706, 71, 71, 716, 712, - 71, 71, 711, 71, 713, 708, 718, 715, 714, 71, - 71, 71, 149, 723, 719, 720, 722, 721, 717, 71, - 724, 71, 71, 71, 725, 71, 726, 71, 728, 71, + 679, 671, 71, 71, 71, 71, 71, 678, 71, 71, + 71, 681, 685, 71, 680, 684, 71, 682, 71, 683, + 690, 703, 686, 71, 71, 691, 71, 693, 71, 687, + 694, 71, 688, 695, 689, 71, 692, 696, 71, 71, + 697, 71, 698, 71, 699, 701, 702, 71, 71, 700, + 71, 71, 71, 71, 704, 705, 706, 707, 71, 71, + 711, 71, 71, 710, 71, 712, 71, 71, 71, 714, + 716, 71, 71, 717, 708, 71, 71, 709, 71, 71, + 713, 719, 71, 723, 71, 718, 720, 715, 725, 726, + 721, 71, 71, 722, 71, 730, 727, 724, 71, 71, - 729, 71, 71, 71, 730, 71, 737, 71, 735, 71, - 71, 731, 71, 71, 743, 734, 147, 71, 727, 732, - 71, 738, 741, 71, 71, 736, 740, 71, 739, 742, - 744, 71, 746, 747, 745, 71, 71, 71, 71, 748, - 752, 750, 749, 71, 754, 783, 71, 71, 753, 71, - 71, 71, 751, 71, 755, 757, 71, 764, 756, 71, - 758, 71, 759, 71, 761, 71, 765, 71, 71, 760, - 71, 769, 767, 71, 766, 71, 773, 71, 762, 763, - 770, 71, 71, 71, 771, 71, 776, 774, 768, 71, - 775, 777, 71, 71, 778, 71, 71, 780, 782, 772, + 71, 71, 732, 71, 733, 71, 728, 731, 735, 729, + 71, 71, 71, 736, 71, 71, 737, 71, 71, 744, + 71, 738, 740, 742, 71, 71, 734, 741, 145, 71, + 739, 71, 750, 745, 71, 71, 71, 743, 71, 752, + 748, 751, 71, 71, 746, 747, 749, 753, 754, 71, + 71, 71, 755, 759, 71, 761, 756, 758, 71, 71, + 757, 71, 71, 760, 71, 762, 764, 766, 71, 763, + 71, 765, 71, 771, 71, 768, 71, 71, 71, 71, + 71, 767, 774, 71, 776, 773, 780, 777, 71, 769, + 770, 778, 71, 772, 71, 71, 783, 71, 775, 782, - 71, 784, 779, 71, 71, 788, 71, 71, 781, 71, - 789, 71, 71, 71, 71, 71, 790, 797, 785, 71, - 71, 795, 786, 71, 787, 71, 71, 791, 792, 71, - 71, 71, 793, 798, 794, 796, 71, 799, 71, 71, - 802, 71, 71, 71, 811, 800, 804, 809, 801, 803, - 71, 71, 71, 71, 71, 812, 805, 806, 807, 71, - 808, 71, 71, 71, 810, 814, 816, 815, 71, 71, - 71, 813, 71, 821, 823, 817, 819, 820, 71, 822, - 71, 818, 71, 824, 71, 71, 71, 151, 71, 826, - 71, 71, 831, 827, 832, 829, 71, 71, 825, 828, + 71, 784, 71, 71, 785, 71, 779, 781, 71, 71, + 787, 789, 71, 71, 71, 71, 71, 71, 795, 788, + 796, 71, 786, 790, 71, 71, 797, 71, 71, 71, + 791, 792, 804, 793, 71, 794, 798, 71, 71, 71, + 799, 802, 71, 71, 71, 800, 71, 801, 809, 803, + 71, 805, 71, 71, 806, 71, 71, 71, 807, 71, + 143, 816, 808, 71, 810, 71, 811, 71, 818, 819, + 812, 813, 814, 817, 815, 71, 820, 822, 71, 71, + 71, 71, 71, 823, 71, 71, 821, 71, 71, 827, + 828, 829, 830, 831, 826, 824, 71, 71, 71, 825, - 830, 833, 71, 71, 834, 835, 71, 839, 71, 71, - 840, 842, 71, 71, 71, 845, 71, 836, 841, 71, - 837, 71, 843, 847, 838, 71, 71, 71, 851, 71, - 71, 71, 71, 844, 71, 71, 846, 848, 852, 853, - 71, 71, 71, 71, 71, 850, 883, 854, 71, 865, - 866, 849, 71, 869, 71, 856, 855, 71, 863, 864, - 71, 71, 857, 71, 867, 868, 858, 71, 870, 859, - 71, 871, 872, 71, 875, 71, 860, 861, 71, 862, - 71, 71, 146, 874, 873, 71, 876, 877, 71, 878, - 898, 887, 879, 885, 884, 888, 71, 880, 71, 71, + 71, 71, 71, 152, 833, 71, 840, 834, 838, 836, + 71, 71, 71, 839, 832, 835, 71, 837, 71, 71, + 71, 842, 846, 71, 71, 841, 71, 847, 849, 71, + 852, 843, 844, 850, 71, 848, 71, 71, 71, 851, + 845, 854, 71, 71, 71, 858, 71, 71, 71, 71, + 855, 71, 859, 860, 853, 71, 71, 71, 71, 71, + 71, 857, 873, 876, 71, 861, 872, 856, 71, 863, + 870, 71, 71, 862, 71, 871, 875, 874, 71, 864, + 71, 877, 880, 865, 71, 878, 866, 71, 882, 879, + 71, 883, 71, 867, 868, 891, 869, 71, 71, 71, - 890, 71, 71, 881, 882, 889, 886, 71, 892, 71, - 71, 71, 71, 894, 893, 900, 891, 895, 896, 71, - 71, 899, 897, 71, 71, 71, 71, 904, 71, 71, - 71, 71, 903, 71, 907, 911, 71, 913, 71, 924, - 71, 71, 906, 901, 902, 905, 71, 908, 909, 914, - 917, 912, 71, 910, 915, 71, 71, 916, 918, 71, - 71, 920, 921, 71, 71, 919, 71, 71, 71, 922, - 925, 71, 71, 71, 923, 71, 926, 71, 928, 931, - 71, 71, 929, 71, 71, 934, 71, 71, 71, 933, - 927, 71, 932, 71, 71, 936, 930, 937, 939, 71, + 71, 881, 71, 884, 885, 71, 886, 897, 895, 887, + 896, 71, 71, 892, 888, 3082, 893, 71, 898, 71, + 889, 890, 71, 900, 894, 71, 71, 899, 71, 902, + 901, 904, 71, 903, 71, 71, 905, 71, 907, 71, + 71, 908, 71, 71, 912, 71, 71, 906, 911, 71, + 71, 915, 71, 71, 921, 71, 919, 932, 71, 909, + 913, 910, 71, 914, 916, 917, 71, 922, 933, 71, + 71, 920, 923, 71, 918, 924, 925, 926, 71, 71, + 928, 929, 71, 71, 927, 71, 71, 71, 71, 71, + 71, 930, 71, 71, 71, 931, 934, 936, 939, 71, - 71, 71, 71, 935, 941, 942, 71, 71, 940, 71, - 949, 938, 947, 71, 71, 945, 943, 948, 71, 944, - 946, 71, 71, 71, 71, 71, 954, 956, 950, 71, - 952, 957, 71, 951, 955, 71, 71, 71, 71, 71, - 959, 71, 71, 71, 71, 958, 953, 967, 71, 970, - 960, 965, 71, 71, 71, 71, 961, 962, 71, 964, - 963, 971, 968, 71, 966, 972, 71, 969, 71, 975, - 71, 71, 974, 973, 71, 977, 978, 71, 71, 71, - 976, 71, 71, 980, 71, 71, 982, 987, 979, 988, - 990, 981, 71, 71, 992, 71, 71, 71, 71, 983, + 937, 71, 71, 940, 71, 942, 71, 935, 71, 938, + 941, 71, 71, 944, 71, 945, 71, 947, 71, 949, + 943, 71, 71, 948, 71, 71, 950, 71, 957, 955, + 71, 71, 946, 953, 956, 71, 951, 71, 954, 71, + 71, 71, 964, 952, 962, 958, 960, 965, 71, 71, + 959, 71, 963, 71, 71, 71, 967, 71, 71, 71, + 71, 71, 71, 961, 71, 975, 71, 978, 973, 71, + 966, 1218, 71, 71, 968, 969, 971, 970, 972, 71, + 976, 979, 71, 974, 71, 977, 71, 71, 981, 71, + 983, 980, 985, 986, 71, 71, 982, 71, 71, 71, - 71, 985, 993, 984, 986, 991, 989, 71, 71, 71, - 996, 994, 71, 71, 998, 1001, 995, 71, 997, 71, - 1000, 71, 71, 1005, 71, 1002, 1007, 71, 71, 71, - 1004, 1003, 71, 999, 1010, 151, 71, 1009, 71, 71, - 1013, 71, 1012, 71, 1006, 71, 1008, 71, 1016, 71, - 71, 1011, 71, 71, 71, 1028, 71, 1031, 71, 144, - 1029, 71, 71, 1014, 1019, 1015, 1017, 71, 71, 1054, - 71, 1033, 1020, 1018, 1021, 71, 1030, 71, 1022, 71, - 1023, 71, 1036, 1034, 1024, 71, 1025, 1032, 71, 71, - 71, 1026, 1038, 1035, 1041, 1037, 1027, 1039, 71, 1040, + 984, 71, 71, 3082, 988, 71, 990, 995, 996, 987, + 71, 71, 998, 71, 71, 71, 1000, 989, 71, 991, + 1001, 993, 71, 992, 997, 994, 71, 71, 71, 71, + 71, 999, 1002, 71, 1003, 1006, 71, 1008, 1009, 1004, + 71, 71, 1013, 1010, 71, 71, 71, 1005, 71, 71, + 1007, 1011, 1015, 71, 1012, 71, 1018, 152, 71, 71, + 1017, 71, 1021, 1020, 1016, 1014, 71, 71, 71, 71, + 71, 1022, 1024, 1019, 71, 71, 71, 1036, 71, 71, + 71, 71, 1037, 71, 1027, 1041, 1023, 1025, 1039, 71, + 71, 71, 71, 1026, 1028, 1038, 1029, 71, 1042, 1059, - 71, 1046, 71, 1043, 71, 1044, 1042, 1047, 71, 71, - 71, 1052, 71, 1053, 71, 1045, 1051, 71, 1048, 71, - 1055, 1056, 71, 1050, 71, 71, 71, 71, 71, 1049, - 71, 1068, 71, 1058, 1057, 71, 1067, 1072, 71, 71, - 1059, 71, 1060, 1073, 1069, 71, 1071, 1061, 1093, 1062, - 1070, 71, 71, 1074, 71, 1063, 1077, 71, 1078, 1079, - 1064, 1065, 71, 71, 71, 71, 1080, 1066, 1083, 71, - 1075, 1076, 142, 71, 71, 71, 71, 1082, 1084, 71, - 1089, 1081, 71, 71, 1086, 1087, 71, 71, 1085, 71, - 71, 1090, 1092, 71, 71, 1088, 71, 71, 71, 71, + 1030, 71, 1031, 1182, 1040, 1043, 1032, 71, 1033, 71, + 71, 1046, 1044, 1034, 1049, 1045, 1047, 71, 1035, 71, + 71, 71, 71, 1048, 71, 1052, 1050, 1055, 71, 71, + 71, 1061, 71, 1054, 1051, 1053, 1060, 71, 1056, 1062, + 1063, 71, 1064, 1058, 1065, 71, 71, 71, 71, 1057, + 71, 71, 71, 71, 1066, 71, 71, 1077, 71, 71, + 1080, 1081, 71, 1076, 71, 1067, 1068, 71, 1069, 1078, + 1079, 71, 1082, 1070, 1144, 1071, 1083, 71, 1086, 71, + 71, 1072, 1088, 71, 1087, 71, 1073, 1074, 71, 71, + 1084, 1092, 1089, 1075, 71, 71, 1085, 71, 1091, 1093, - 1099, 71, 1091, 1094, 71, 1096, 1097, 1098, 1101, 71, - 1095, 71, 71, 1100, 71, 1102, 71, 71, 1103, 71, - 71, 1104, 1109, 71, 1110, 1106, 71, 71, 1105, 1112, - 1107, 1108, 1111, 71, 1113, 1114, 1115, 71, 1117, 71, - 1121, 71, 1116, 1118, 71, 71, 1119, 71, 71, 1120, - 71, 71, 71, 1122, 1128, 71, 1130, 71, 71, 71, - 71, 71, 71, 1132, 1124, 1126, 1127, 1123, 1125, 71, - 71, 71, 1131, 1133, 1134, 1129, 71, 71, 71, 71, - 71, 1136, 1135, 1137, 1139, 1138, 71, 71, 71, 1141, - 71, 1140, 1145, 1142, 1144, 71, 1143, 71, 71, 1146, + 71, 71, 1090, 71, 71, 1098, 71, 71, 71, 1095, + 1096, 71, 1101, 1099, 1094, 71, 71, 71, 71, 1097, + 71, 71, 71, 71, 71, 1100, 1106, 1108, 1102, 1103, + 1105, 1107, 1110, 71, 71, 71, 1104, 1109, 71, 1111, + 71, 71, 3082, 71, 1113, 71, 71, 1112, 1118, 1115, + 1119, 1120, 71, 1114, 71, 1122, 1117, 1123, 1116, 71, + 71, 1121, 1126, 71, 71, 71, 1128, 1127, 71, 1129, + 71, 71, 1124, 1130, 71, 71, 1125, 1137, 1131, 71, + 71, 71, 1139, 71, 71, 71, 71, 3082, 71, 71, + 1133, 1132, 1135, 1134, 1141, 1136, 71, 1150, 71, 1140, - 71, 71, 71, 71, 1147, 1149, 71, 1150, 1148, 71, - 1156, 71, 1154, 1157, 71, 1151, 71, 71, 71, 71, - 1152, 71, 1158, 1153, 1155, 71, 1159, 1161, 1164, 71, - 1160, 71, 1162, 71, 71, 71, 1165, 71, 1163, 1166, - 71, 71, 71, 71, 1167, 1171, 1168, 1169, 71, 71, - 71, 1172, 71, 1177, 1173, 1178, 71, 71, 71, 71, - 1170, 71, 1175, 1180, 1181, 71, 71, 1174, 71, 71, - 1185, 1176, 1179, 71, 71, 1182, 71, 71, 71, 71, - 1183, 1184, 1187, 1191, 71, 71, 1186, 71, 71, 71, - 1197, 71, 71, 1192, 1195, 1188, 3070, 1190, 1199, 1194, + 1142, 1138, 71, 1145, 71, 1143, 71, 71, 71, 1146, + 71, 1148, 1147, 1149, 71, 1154, 1151, 1155, 71, 71, + 1153, 71, 71, 1152, 71, 71, 1159, 1158, 1156, 71, + 71, 71, 71, 71, 71, 1163, 1165, 1166, 1170, 1167, + 1157, 71, 71, 71, 71, 71, 1164, 1160, 71, 1161, + 1168, 1162, 71, 1169, 1173, 71, 71, 1175, 71, 1171, + 71, 1174, 71, 71, 1176, 71, 71, 71, 71, 1180, + 1181, 1177, 1172, 71, 71, 71, 1186, 1187, 1190, 71, + 71, 1178, 71, 71, 1179, 1184, 1183, 71, 71, 71, + 1188, 1194, 1189, 1185, 71, 71, 71, 71, 71, 1191, - 1193, 1196, 1189, 1200, 71, 71, 71, 71, 1198, 71, - 1201, 71, 1203, 1202, 71, 71, 71, 71, 71, 71, - 1204, 1206, 71, 1212, 71, 1209, 71, 71, 1205, 71, - 1207, 71, 71, 71, 1210, 1337, 1208, 1216, 71, 1222, - 1213, 1211, 71, 71, 1215, 1214, 71, 1218, 1223, 1224, - 71, 71, 1217, 1225, 71, 71, 1219, 1227, 1220, 71, - 71, 1221, 71, 71, 71, 1226, 71, 1231, 71, 1230, - 71, 1233, 1236, 71, 1228, 1234, 71, 1229, 71, 71, - 71, 1237, 1232, 1238, 1240, 71, 71, 1235, 71, 1241, - 1239, 71, 71, 71, 71, 1242, 71, 71, 71, 1245, + 71, 1193, 1192, 1200, 71, 1196, 71, 71, 71, 71, + 1206, 71, 1195, 1204, 71, 71, 1197, 1221, 71, 1199, + 1201, 1203, 1202, 1198, 1205, 1208, 1209, 71, 71, 1211, + 71, 71, 71, 1210, 1207, 1212, 71, 71, 71, 71, + 71, 71, 71, 1215, 71, 71, 71, 71, 71, 71, + 1213, 1214, 1225, 1251, 1216, 71, 1219, 3082, 1222, 1217, + 1227, 1220, 1224, 1223, 71, 1231, 71, 71, 1226, 1228, + 71, 1229, 1232, 1234, 1230, 1233, 71, 71, 71, 71, + 1236, 71, 71, 71, 1235, 71, 71, 1240, 1239, 71, + 1243, 71, 1246, 71, 71, 3082, 71, 1237, 1242, 1238, - 71, 1248, 71, 1243, 1246, 71, 1244, 71, 1247, 1249, - 71, 1253, 71, 71, 1258, 1250, 71, 1254, 1252, 1251, - 71, 1257, 71, 71, 1260, 71, 1264, 1255, 1262, 71, - 1256, 1265, 71, 1261, 71, 71, 1259, 1263, 71, 1269, - 71, 3070, 71, 71, 1279, 71, 1278, 1268, 1266, 1267, - 71, 1277, 71, 1276, 1281, 1270, 71, 71, 1271, 1272, - 1282, 1280, 1283, 1273, 71, 71, 71, 71, 1285, 1274, - 1284, 71, 1287, 1275, 71, 71, 71, 1288, 71, 1289, - 71, 71, 71, 71, 1297, 1286, 1294, 1292, 71, 71, - 71, 1298, 1338, 1299, 1291, 1290, 1295, 71, 71, 71, + 1244, 1247, 1241, 71, 71, 71, 71, 71, 1248, 1250, + 1245, 71, 71, 71, 1249, 1252, 71, 71, 71, 71, + 1253, 71, 1254, 1258, 1256, 71, 71, 71, 1257, 1259, + 1255, 1263, 71, 71, 71, 71, 71, 1260, 1268, 1262, + 1261, 1264, 1267, 1270, 71, 71, 71, 1265, 1269, 1274, + 1272, 71, 1266, 71, 1275, 71, 1271, 71, 1273, 71, + 71, 1279, 71, 1288, 71, 1289, 1287, 1277, 71, 71, + 1276, 71, 1278, 71, 1292, 1286, 1290, 1291, 1280, 71, + 71, 1281, 1282, 71, 1293, 71, 1283, 71, 1294, 71, + 1295, 71, 1284, 71, 1297, 71, 1285, 71, 1298, 71, - 1293, 1296, 1300, 71, 1306, 71, 1307, 1308, 1301, 71, - 71, 71, 71, 1302, 1310, 1303, 1309, 1304, 71, 1305, - 71, 71, 71, 1314, 71, 71, 1311, 1313, 1315, 71, - 1312, 1316, 71, 1320, 71, 1319, 71, 1318, 71, 1324, - 71, 1325, 1317, 71, 1321, 71, 1326, 71, 71, 71, - 1323, 71, 1328, 1322, 71, 71, 71, 1327, 1330, 71, - 1333, 71, 1329, 1334, 71, 1336, 71, 71, 71, 1331, - 1341, 1335, 1339, 1342, 71, 1344, 71, 71, 1340, 1332, - 71, 1345, 1346, 71, 71, 1349, 71, 71, 1343, 71, - 71, 71, 1351, 71, 71, 71, 1353, 1355, 71, 71, + 1299, 71, 71, 71, 1316, 71, 1296, 1300, 1302, 1301, + 1304, 71, 1307, 1308, 71, 1305, 1309, 1303, 71, 71, + 1306, 71, 71, 1311, 71, 1310, 1317, 1318, 1312, 71, + 1313, 71, 1314, 1319, 1315, 1320, 71, 71, 1324, 1321, + 71, 71, 71, 1325, 71, 71, 1323, 1328, 71, 1326, + 71, 71, 71, 71, 1322, 1334, 71, 1330, 71, 1329, + 71, 71, 71, 1327, 71, 1335, 1333, 1337, 1336, 1331, + 1332, 71, 1339, 71, 1341, 71, 1338, 1344, 71, 71, + 1343, 71, 1340, 1346, 71, 71, 71, 1342, 1347, 71, + 1349, 71, 1348, 71, 1345, 1352, 71, 1354, 71, 71, - 3070, 1357, 1354, 71, 1347, 1348, 71, 1350, 1359, 71, - 1352, 71, 1356, 71, 1358, 71, 1361, 1362, 1363, 71, - 1360, 71, 1365, 71, 1364, 71, 71, 71, 1366, 1371, - 1372, 1368, 71, 1367, 1369, 71, 71, 1373, 1374, 1370, - 71, 71, 71, 71, 71, 1378, 71, 71, 71, 1375, - 1382, 1383, 71, 1377, 71, 1385, 71, 71, 1384, 71, - 1376, 71, 71, 1379, 71, 71, 71, 1380, 1386, 71, - 1392, 1381, 71, 71, 1387, 71, 1389, 1397, 71, 1388, - 1390, 71, 1393, 1391, 71, 71, 1396, 1401, 71, 1399, - 71, 1395, 1402, 71, 71, 71, 71, 1394, 1398, 1404, + 1350, 71, 1351, 71, 1355, 71, 1356, 1359, 71, 71, + 71, 1353, 71, 1361, 71, 71, 71, 71, 1365, 1363, + 1357, 71, 71, 71, 1364, 1367, 1358, 71, 1369, 1360, + 71, 71, 1362, 71, 3082, 1366, 1368, 71, 1371, 1372, + 71, 1370, 1373, 71, 1375, 1374, 71, 71, 1377, 71, + 71, 1376, 1381, 1378, 1382, 1384, 1379, 71, 71, 71, + 71, 71, 1383, 1380, 71, 71, 1388, 71, 1385, 71, + 71, 71, 1392, 1393, 71, 1395, 1387, 71, 71, 71, + 1394, 71, 71, 1386, 71, 71, 71, 71, 1402, 1389, + 1390, 1396, 71, 71, 1391, 71, 1399, 1397, 71, 1400, - 71, 71, 1405, 1412, 1400, 71, 1403, 71, 1414, 1406, - 1410, 1407, 71, 1411, 71, 1408, 1415, 71, 1409, 1417, - 71, 1413, 71, 71, 1418, 71, 71, 71, 1416, 71, - 71, 1422, 71, 71, 1424, 71, 71, 1429, 71, 1419, - 71, 1421, 1430, 71, 71, 1423, 1426, 71, 1420, 1433, - 1425, 1427, 71, 1428, 71, 71, 1434, 71, 1431, 71, - 71, 71, 1432, 71, 71, 1440, 1435, 1437, 1436, 1442, - 1441, 71, 1438, 71, 1445, 71, 71, 71, 1439, 1443, - 1444, 71, 1447, 1450, 71, 1451, 1449, 71, 1452, 71, - 1446, 71, 71, 1453, 1454, 71, 71, 71, 1448, 71, + 1407, 71, 1398, 1406, 1401, 71, 71, 71, 71, 1411, + 71, 1409, 1403, 1405, 1412, 71, 71, 1414, 1404, 71, + 71, 71, 3082, 71, 1416, 71, 1410, 1415, 1408, 71, + 1420, 1422, 1424, 1421, 1413, 1417, 1418, 1423, 71, 1419, + 71, 71, 1427, 71, 1425, 71, 71, 1428, 71, 71, + 71, 71, 1426, 71, 1432, 1433, 71, 71, 1435, 71, + 71, 71, 1429, 71, 1431, 71, 1440, 1441, 71, 1434, + 71, 1430, 71, 1437, 1444, 1438, 1436, 71, 1439, 1442, + 71, 71, 1445, 71, 71, 71, 71, 1443, 71, 71, + 1451, 1446, 1448, 1452, 1453, 1447, 71, 71, 1449, 71, - 1455, 71, 1457, 71, 71, 1461, 1456, 71, 71, 71, - 1460, 71, 71, 1458, 71, 1467, 1459, 1463, 1469, 1464, - 1468, 71, 1465, 1470, 71, 71, 1472, 1462, 71, 71, - 1466, 71, 1471, 71, 71, 71, 71, 1480, 1476, 71, - 1475, 71, 71, 71, 1481, 1483, 71, 1473, 1474, 71, - 1486, 71, 1485, 1477, 1479, 1478, 71, 71, 71, 71, - 71, 1484, 71, 71, 71, 71, 1494, 1482, 1487, 71, - 1497, 71, 1495, 71, 1491, 1496, 1488, 1489, 1490, 1493, - 1498, 71, 71, 1492, 71, 71, 1501, 1499, 1500, 71, - 71, 71, 1504, 71, 1502, 71, 1505, 71, 71, 71, + 1456, 71, 71, 1450, 71, 1455, 1454, 1458, 1461, 1460, + 1462, 71, 1457, 71, 71, 1466, 71, 71, 1463, 71, + 1464, 1465, 71, 1459, 71, 71, 71, 71, 71, 1472, + 71, 1468, 71, 1467, 1471, 71, 71, 71, 1478, 1469, + 1474, 1470, 1475, 1479, 71, 71, 1480, 71, 1483, 1476, + 1473, 1481, 71, 71, 71, 1477, 71, 71, 71, 71, + 71, 1487, 1491, 71, 71, 1482, 1486, 71, 71, 1492, + 1494, 71, 1484, 1485, 71, 1497, 71, 1488, 1490, 1489, + 1496, 71, 71, 71, 71, 71, 1495, 71, 71, 1493, + 1498, 71, 71, 1505, 71, 1508, 71, 1506, 71, 1502, - 1508, 1514, 1503, 1512, 71, 71, 1509, 71, 71, 1506, - 1513, 1507, 1516, 71, 1511, 71, 71, 1510, 1517, 1518, - 1519, 71, 71, 1515, 71, 1523, 1524, 71, 71, 71, - 71, 71, 71, 1528, 71, 1527, 1529, 1531, 71, 71, - 1521, 1520, 71, 71, 1522, 71, 1525, 71, 1532, 71, - 1526, 1533, 71, 71, 1530, 1534, 1536, 71, 1538, 1535, - 71, 1539, 71, 71, 71, 71, 71, 1537, 71, 1543, - 71, 1545, 1540, 71, 71, 1546, 71, 1550, 71, 1544, - 71, 71, 1542, 1541, 71, 71, 1547, 71, 1548, 1553, - 1555, 71, 1551, 71, 71, 1558, 1554, 1556, 1552, 1549, + 1507, 1499, 1500, 1501, 1509, 71, 1504, 71, 1503, 71, + 71, 1512, 1510, 1511, 71, 71, 71, 1515, 71, 1513, + 71, 1516, 71, 71, 71, 1519, 1525, 1514, 1523, 71, + 71, 1520, 71, 71, 1517, 1524, 1518, 1527, 71, 1522, + 71, 71, 1521, 1528, 1529, 1530, 71, 71, 1526, 71, + 1534, 1535, 71, 71, 71, 71, 71, 71, 1539, 71, + 1538, 1540, 1542, 71, 71, 1532, 1531, 71, 71, 1533, + 71, 1536, 71, 1543, 71, 1537, 1544, 71, 71, 1541, + 1545, 1547, 71, 1549, 1546, 71, 1550, 71, 71, 71, + 71, 71, 1548, 71, 1554, 71, 1556, 1551, 71, 71, - 71, 71, 71, 71, 71, 1557, 1561, 71, 1563, 1559, - 71, 1560, 1564, 71, 71, 71, 71, 1571, 71, 71, - 1562, 1566, 1565, 1572, 71, 71, 71, 71, 1569, 1567, - 1568, 1576, 71, 71, 1575, 1578, 1580, 1579, 71, 1573, - 1570, 71, 71, 1582, 1574, 1584, 71, 1577, 71, 71, - 71, 71, 71, 71, 1589, 1583, 1586, 1587, 1581, 71, - 1590, 71, 71, 71, 71, 71, 1601, 1585, 1594, 71, - 1595, 71, 71, 71, 71, 1588, 1591, 1598, 1593, 1592, - 1599, 71, 71, 1596, 1597, 1603, 1602, 71, 71, 1609, - 71, 71, 1600, 1606, 1608, 71, 1605, 71, 1607, 71, + 1557, 71, 1561, 71, 1555, 71, 71, 1553, 1552, 71, + 71, 1558, 71, 1559, 1564, 1566, 71, 1562, 71, 71, + 1569, 1565, 1567, 1563, 1560, 71, 71, 71, 71, 71, + 1568, 1572, 71, 1574, 1570, 71, 1571, 1575, 71, 71, + 71, 71, 1582, 71, 71, 1573, 1577, 1576, 1583, 71, + 71, 71, 71, 1580, 1578, 1579, 1587, 71, 71, 1586, + 1589, 1591, 1590, 71, 1584, 1581, 71, 71, 1593, 1585, + 1595, 71, 1588, 71, 71, 71, 71, 71, 71, 1600, + 1594, 1597, 1598, 1592, 71, 1601, 71, 71, 71, 71, + 71, 1612, 1596, 1605, 71, 1606, 71, 71, 71, 71, - 1611, 1604, 1610, 71, 1612, 1613, 71, 71, 1616, 71, - 71, 71, 1614, 71, 1620, 1621, 1619, 71, 1623, 1615, - 71, 71, 1622, 71, 71, 71, 71, 71, 1617, 71, - 1618, 1625, 1626, 71, 1627, 71, 71, 71, 1635, 71, - 71, 71, 71, 1628, 71, 71, 1624, 1629, 71, 71, - 1631, 1632, 1633, 71, 1634, 1630, 1640, 71, 1642, 1636, - 71, 1643, 1637, 1638, 71, 71, 1639, 71, 1641, 71, - 71, 71, 71, 71, 71, 71, 71, 1658, 71, 1644, - 1648, 1645, 1650, 1651, 71, 1649, 1652, 1647, 1653, 1646, - 71, 1654, 71, 1657, 1659, 71, 1655, 71, 1656, 71, + 1599, 1602, 1609, 1604, 1603, 1610, 71, 71, 1607, 1608, + 1614, 1613, 71, 71, 1620, 71, 71, 1611, 1617, 1619, + 71, 1616, 1621, 1618, 71, 1622, 1615, 1625, 71, 71, + 1623, 71, 1624, 71, 71, 71, 71, 1627, 71, 1626, + 71, 1632, 1633, 1631, 71, 1635, 71, 71, 71, 1634, + 71, 71, 71, 1628, 71, 1629, 71, 1637, 1630, 1638, + 71, 1639, 71, 71, 71, 1647, 71, 71, 1640, 1636, + 71, 71, 71, 71, 1641, 71, 71, 1643, 1644, 1645, + 1652, 71, 1642, 1646, 71, 71, 1648, 1650, 71, 1655, + 1654, 1656, 1649, 71, 71, 71, 1651, 71, 71, 71, - 1662, 71, 1661, 71, 1660, 1663, 71, 71, 1666, 71, - 71, 71, 1664, 71, 1667, 71, 71, 1675, 71, 1670, - 1665, 1676, 71, 71, 1674, 1672, 1668, 1669, 1673, 71, - 71, 71, 1671, 71, 71, 71, 71, 71, 1677, 71, - 1685, 71, 1678, 71, 1689, 1680, 1682, 71, 1679, 1681, - 1687, 71, 1688, 1686, 1684, 71, 1693, 71, 1690, 71, - 1683, 71, 71, 1697, 1691, 71, 71, 1692, 1698, 71, - 71, 3070, 71, 1705, 71, 1694, 1699, 1702, 1703, 1696, - 1695, 1700, 71, 1706, 71, 71, 1708, 1701, 1704, 71, - 1707, 71, 71, 71, 1712, 71, 71, 1709, 1716, 1714, + 71, 71, 71, 71, 1653, 1662, 1660, 1657, 71, 1663, + 1670, 71, 1664, 1659, 1661, 1672, 71, 1665, 1658, 1669, + 1671, 71, 71, 1666, 1675, 71, 71, 1668, 1667, 1674, + 71, 71, 71, 71, 71, 71, 71, 1678, 1679, 71, + 1673, 71, 1687, 1676, 71, 1682, 71, 71, 71, 71, + 1677, 1681, 71, 1680, 1690, 1686, 1684, 71, 1683, 1685, + 1688, 71, 71, 71, 1689, 71, 1692, 1691, 71, 1697, + 71, 71, 71, 1693, 1694, 71, 1701, 1700, 71, 71, + 1699, 71, 71, 1696, 1705, 71, 1698, 1709, 1695, 71, + 1702, 1703, 1710, 71, 1704, 71, 1706, 71, 71, 3082, - 71, 71, 1710, 71, 71, 1715, 71, 1711, 1713, 1717, - 71, 71, 71, 71, 71, 71, 71, 1743, 1720, 71, - 1721, 71, 1718, 1726, 71, 1719, 1722, 1723, 1728, 1724, - 1725, 1729, 1730, 71, 71, 1731, 71, 71, 71, 71, - 1736, 1732, 71, 71, 71, 1727, 71, 1740, 71, 71, - 71, 1733, 1735, 71, 1742, 71, 71, 1734, 1744, 1738, - 1745, 71, 1739, 71, 1737, 1746, 1749, 71, 71, 1741, - 71, 71, 1753, 71, 71, 71, 71, 71, 1748, 71, - 71, 71, 1751, 1755, 1747, 71, 1760, 1750, 1754, 1756, - 1752, 1757, 71, 1761, 1758, 71, 1764, 71, 71, 71, + 71, 1715, 1707, 1708, 1712, 1714, 1718, 71, 71, 1711, + 1717, 71, 71, 1719, 1720, 71, 1716, 71, 71, 1713, + 71, 1721, 1724, 71, 71, 1728, 71, 1726, 71, 71, + 71, 71, 1723, 1727, 1729, 71, 1725, 1722, 71, 71, + 71, 71, 71, 1732, 1738, 71, 71, 1733, 1730, 1731, + 71, 1740, 1734, 1735, 1741, 1736, 1737, 71, 71, 1742, + 71, 1743, 71, 71, 71, 1748, 1739, 71, 71, 71, + 1744, 71, 1752, 71, 71, 71, 1745, 1747, 71, 1754, + 71, 71, 1746, 1755, 1750, 1756, 1757, 1751, 71, 1749, + 71, 71, 1761, 71, 1753, 71, 71, 1758, 71, 1765, - 1759, 1763, 1765, 1762, 1766, 71, 71, 1768, 1769, 1770, - 71, 1767, 71, 71, 71, 1772, 71, 71, 71, 1773, - 71, 71, 71, 71, 1771, 71, 71, 1778, 71, 71, - 1782, 71, 1779, 1790, 71, 1783, 71, 1774, 1776, 1777, - 1775, 1780, 71, 1781, 71, 71, 1791, 1786, 1784, 1788, - 71, 1785, 71, 71, 1787, 71, 71, 1792, 1796, 71, - 1789, 71, 71, 1799, 1800, 71, 1801, 71, 71, 1793, - 71, 1794, 71, 1795, 3070, 1797, 1808, 1798, 71, 1802, - 1803, 71, 71, 1804, 1807, 71, 1809, 71, 1811, 1805, - 1810, 1806, 71, 1813, 71, 71, 1812, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 1760, 71, 1763, 1767, + 71, 71, 1772, 1759, 1762, 1766, 1768, 1764, 71, 1769, + 71, 71, 1770, 1773, 1777, 1771, 1775, 71, 1774, 1776, + 71, 1778, 71, 71, 1781, 71, 1780, 71, 1779, 1784, + 71, 1782, 71, 71, 71, 71, 1785, 1783, 71, 71, + 71, 71, 71, 71, 1790, 71, 71, 1794, 71, 71, + 1791, 3082, 71, 1800, 1786, 1792, 1788, 1787, 1789, 71, + 1793, 1795, 71, 1803, 1798, 71, 1797, 1802, 71, 71, + 1804, 1799, 71, 71, 1796, 71, 71, 1801, 1808, 71, + 1811, 1812, 71, 71, 1805, 1813, 71, 71, 1806, 1809, - 1815, 1816, 71, 71, 1817, 1818, 71, 1825, 3070, 71, - 71, 71, 71, 71, 1830, 71, 71, 71, 1823, 1827, - 1814, 1819, 1820, 1821, 1828, 71, 1824, 1831, 1822, 1829, - 1826, 1833, 1832, 71, 71, 71, 71, 71, 1837, 71, - 71, 1839, 1834, 71, 71, 71, 1842, 1843, 71, 71, - 1845, 71, 71, 71, 1835, 71, 1836, 71, 71, 1850, - 1851, 71, 1838, 1840, 1847, 71, 1841, 1848, 71, 1844, - 71, 71, 71, 71, 1849, 71, 1857, 1846, 1852, 1854, - 1855, 71, 71, 1853, 1861, 71, 71, 1860, 1864, 1865, - 71, 1866, 71, 1863, 71, 71, 1856, 1859, 71, 1858, + 71, 1810, 71, 1807, 1815, 71, 71, 1816, 1819, 71, + 71, 1821, 71, 1814, 1820, 1822, 1823, 71, 1817, 1825, + 1824, 1818, 71, 71, 71, 71, 1830, 1827, 1828, 71, + 71, 1829, 71, 71, 71, 71, 1837, 71, 1839, 71, + 71, 71, 71, 1840, 71, 1831, 1832, 1833, 1826, 71, + 71, 1842, 1834, 1841, 1835, 1836, 1844, 1838, 1845, 71, + 1847, 1843, 71, 71, 71, 1849, 71, 71, 1846, 71, + 1851, 71, 71, 1854, 1855, 71, 71, 1857, 71, 71, + 71, 71, 71, 1848, 1863, 71, 1862, 1852, 71, 1850, + 1859, 1860, 71, 1853, 71, 71, 1856, 71, 71, 71, - 71, 71, 71, 1867, 71, 1862, 71, 71, 71, 1868, - 1872, 71, 1875, 1876, 1871, 71, 1877, 71, 71, 71, - 71, 1869, 71, 1870, 1873, 71, 71, 1885, 71, 1880, - 71, 1884, 1879, 71, 1874, 1878, 71, 71, 1882, 3070, - 71, 1889, 1883, 71, 71, 1881, 1890, 71, 1887, 1886, - 1892, 71, 1891, 71, 71, 1888, 71, 1893, 1894, 1896, - 71, 71, 71, 1895, 71, 1897, 1900, 1903, 1898, 71, - 71, 1906, 71, 71, 1905, 1899, 71, 1907, 71, 71, - 71, 71, 1901, 1908, 1902, 1904, 71, 1909, 1913, 71, - 71, 1910, 1914, 71, 1915, 1920, 1911, 1917, 1918, 1916, + 1869, 1861, 71, 1867, 1858, 1866, 71, 71, 1873, 1864, + 1865, 71, 1872, 71, 71, 1876, 1878, 71, 1877, 71, + 1875, 71, 1871, 1868, 71, 71, 71, 71, 1870, 71, + 1879, 1874, 71, 71, 71, 1880, 1884, 71, 1887, 1881, + 71, 1883, 1888, 1889, 71, 71, 1882, 71, 71, 71, + 1885, 1892, 71, 71, 71, 1891, 1897, 71, 1896, 71, + 1886, 71, 71, 71, 1890, 1894, 1901, 1893, 71, 1902, + 1904, 71, 71, 1898, 1895, 71, 1899, 1903, 1900, 1905, + 1908, 71, 71, 1906, 71, 71, 71, 71, 1907, 71, + 1915, 1912, 71, 71, 1918, 71, 71, 1917, 1910, 71, - 71, 1912, 71, 71, 71, 1922, 71, 71, 71, 71, - 1927, 71, 1919, 1924, 1921, 71, 71, 1929, 1923, 1925, - 71, 71, 71, 71, 71, 71, 71, 1935, 1934, 1933, - 1936, 71, 1930, 1926, 1931, 1937, 71, 1928, 71, 1939, - 1932, 71, 71, 71, 71, 71, 3070, 1940, 1941, 71, - 1942, 1943, 71, 71, 1944, 1945, 71, 1947, 1938, 71, - 71, 71, 1951, 71, 71, 1946, 1950, 1955, 71, 71, - 71, 1948, 1949, 1952, 1953, 1954, 71, 71, 71, 71, - 71, 1962, 1960, 71, 71, 71, 1957, 71, 1961, 71, - 71, 71, 1967, 71, 1964, 71, 1956, 1958, 3070, 1959, + 1919, 71, 71, 1909, 1911, 1920, 71, 1913, 1916, 1914, + 71, 1921, 1925, 71, 1926, 71, 71, 1922, 1927, 1929, + 1930, 71, 1923, 1928, 71, 71, 71, 71, 1934, 71, + 1924, 71, 1932, 1933, 71, 1936, 71, 71, 1939, 71, + 1941, 1935, 1931, 71, 71, 71, 71, 71, 1937, 71, + 71, 71, 1947, 1946, 1945, 1942, 71, 1943, 1948, 71, + 3082, 1940, 1938, 1949, 71, 1951, 1944, 71, 71, 71, + 71, 71, 71, 1952, 1953, 1956, 1950, 1955, 1954, 71, + 71, 71, 1957, 71, 1959, 71, 71, 1963, 71, 71, + 71, 1962, 1958, 1960, 71, 1965, 71, 1961, 1964, 1966, - 71, 71, 1963, 1968, 1966, 71, 1971, 1965, 71, 1970, - 1972, 1969, 71, 71, 1977, 71, 1974, 1975, 71, 71, - 1973, 1978, 71, 71, 71, 1983, 1976, 71, 71, 1985, - 71, 71, 1986, 1987, 71, 1979, 71, 1982, 1980, 1981, - 71, 71, 71, 1989, 1984, 71, 1991, 71, 1988, 71, - 71, 1992, 71, 71, 71, 71, 71, 71, 71, 2003, - 71, 1990, 1994, 1999, 1995, 1996, 71, 2002, 1993, 1998, - 71, 71, 71, 2006, 2004, 1997, 2000, 2007, 2001, 71, - 71, 71, 2010, 71, 2009, 71, 2005, 71, 2012, 71, - 71, 2008, 2013, 71, 71, 71, 2014, 2018, 71, 2011, + 1967, 71, 71, 71, 71, 71, 71, 71, 1974, 1972, + 71, 1969, 1973, 71, 71, 71, 1968, 71, 71, 1976, + 71, 1970, 71, 1971, 1975, 71, 1979, 1982, 3082, 1978, + 71, 1977, 71, 1983, 1985, 1981, 71, 1980, 71, 1984, + 71, 1986, 71, 1987, 1989, 71, 71, 71, 71, 1988, + 1990, 1995, 71, 71, 1997, 71, 1991, 71, 1992, 1999, + 71, 1993, 1994, 71, 71, 1998, 71, 71, 2003, 1996, + 71, 71, 2000, 2001, 71, 2002, 71, 71, 71, 2004, + 71, 71, 71, 71, 71, 71, 2006, 2011, 2007, 2008, + 2015, 71, 2005, 71, 71, 2010, 2014, 2018, 2019, 71, - 2020, 71, 2016, 2022, 71, 71, 2017, 2015, 71, 2019, - 71, 71, 2025, 2024, 71, 2021, 2026, 71, 71, 2027, - 2030, 71, 71, 71, 71, 71, 71, 2031, 2036, 71, - 71, 2023, 2033, 71, 2032, 2028, 71, 2037, 2029, 2035, - 2040, 71, 2034, 71, 71, 2038, 71, 71, 2041, 2042, - 2046, 71, 2044, 2039, 71, 71, 2048, 71, 2049, 2043, - 2045, 71, 71, 71, 71, 71, 2047, 2051, 71, 71, - 2050, 2055, 2057, 2053, 71, 71, 2054, 2058, 71, 71, - 2060, 2052, 71, 2059, 2062, 71, 2056, 2061, 71, 71, - 2063, 2067, 71, 71, 71, 2064, 71, 71, 2066, 71, + 2012, 2016, 2013, 71, 2009, 2017, 71, 71, 2021, 2022, + 71, 71, 71, 71, 71, 2024, 71, 71, 2025, 2020, + 71, 2026, 2030, 2028, 2023, 71, 71, 2032, 2029, 2034, + 71, 2027, 71, 71, 71, 71, 2031, 2037, 2036, 2038, + 2033, 71, 71, 71, 2042, 71, 2039, 71, 71, 71, + 71, 71, 2043, 2045, 2048, 71, 71, 2049, 2035, 71, + 2040, 2044, 71, 2041, 2052, 2047, 71, 71, 2046, 2054, + 71, 2053, 71, 71, 2050, 2058, 71, 71, 2060, 71, + 71, 2056, 2051, 71, 2061, 71, 71, 71, 71, 2057, + 2055, 2059, 2063, 71, 2062, 2067, 2069, 2065, 2064, 71, - 71, 71, 71, 71, 71, 71, 2076, 2077, 2065, 71, - 2071, 2068, 2069, 2070, 2072, 2073, 2074, 71, 2078, 71, - 2075, 71, 71, 2079, 71, 2081, 71, 71, 2082, 2087, - 71, 71, 2089, 71, 71, 2086, 2080, 2083, 2091, 2084, - 2088, 71, 71, 71, 3070, 2094, 2090, 2092, 71, 2085, - 2095, 71, 2096, 2097, 2093, 71, 2099, 71, 71, 71, - 2098, 2101, 71, 2100, 71, 2102, 71, 2106, 71, 71, - 2107, 71, 2110, 2109, 2115, 2105, 71, 71, 71, 2103, - 71, 2111, 2114, 2108, 71, 2112, 2113, 71, 71, 71, - 2104, 71, 2116, 71, 71, 2118, 71, 71, 71, 2120, + 2066, 2070, 71, 71, 71, 71, 71, 2068, 2071, 71, + 2074, 2075, 71, 71, 71, 2072, 2073, 2079, 71, 71, + 71, 71, 2076, 2078, 71, 71, 71, 71, 71, 71, + 71, 2080, 2077, 71, 2088, 2083, 2082, 2081, 2085, 2084, + 2086, 71, 2090, 71, 71, 2087, 2089, 71, 71, 2091, + 2093, 71, 2097, 2094, 2099, 71, 71, 71, 2101, 71, + 2098, 71, 2092, 2095, 71, 2096, 2100, 71, 2103, 3082, + 71, 2106, 2104, 2108, 2105, 2102, 2107, 71, 2109, 71, + 71, 71, 71, 2110, 71, 2113, 71, 71, 2114, 2111, + 2112, 2117, 2118, 71, 71, 2119, 71, 71, 2122, 71, - 71, 71, 71, 2123, 71, 71, 2129, 71, 71, 2117, - 2127, 71, 2122, 71, 71, 2130, 2125, 71, 2119, 2121, - 2124, 2126, 2132, 2131, 71, 71, 2128, 71, 71, 71, - 2136, 2139, 71, 2135, 71, 71, 2134, 2140, 71, 2133, - 2137, 71, 71, 71, 71, 71, 2138, 2150, 71, 71, - 71, 2155, 71, 2141, 2142, 2151, 2147, 71, 71, 71, - 71, 2143, 2145, 2146, 2149, 2144, 2148, 2156, 71, 71, - 2152, 71, 2153, 2154, 2157, 71, 71, 71, 2160, 2166, - 2161, 2163, 71, 2162, 2158, 71, 71, 71, 71, 2159, - 2164, 2165, 2169, 71, 2170, 71, 71, 2172, 71, 71, + 71, 71, 2115, 2128, 71, 2123, 71, 2124, 2120, 2125, + 71, 71, 2127, 2116, 71, 2121, 2126, 71, 71, 71, + 71, 2129, 2132, 2130, 71, 71, 71, 71, 71, 2135, + 71, 71, 71, 2139, 2141, 71, 2142, 71, 71, 2131, + 2134, 71, 71, 2133, 2136, 71, 2137, 2138, 71, 71, + 2144, 71, 2143, 2140, 2146, 71, 2148, 2151, 71, 71, + 2147, 2149, 71, 2152, 2145, 71, 71, 2150, 71, 71, + 71, 71, 71, 2162, 71, 71, 71, 71, 2153, 2163, + 71, 2154, 71, 2159, 2161, 71, 2200, 2157, 2155, 2165, + 2156, 2158, 2170, 2160, 71, 2164, 71, 2167, 2166, 2168, - 2168, 2174, 71, 71, 71, 2177, 71, 2167, 71, 2176, - 2178, 71, 71, 71, 71, 2171, 71, 2173, 2175, 71, - 71, 2180, 2179, 3070, 2183, 2184, 71, 2181, 2186, 71, - 71, 71, 71, 2182, 2189, 2185, 2188, 71, 2187, 71, - 2190, 2192, 71, 71, 2196, 71, 71, 71, 71, 71, - 71, 2193, 2194, 2200, 71, 2191, 2201, 71, 71, 2203, - 71, 71, 2195, 2199, 2206, 71, 2197, 71, 71, 2202, - 2198, 71, 71, 2204, 2208, 2205, 71, 71, 2213, 71, - 71, 2207, 2209, 71, 71, 2215, 71, 71, 2214, 2210, - 2211, 71, 2219, 71, 2216, 71, 71, 2223, 2220, 71, + 71, 2169, 71, 71, 2172, 71, 71, 2171, 2175, 71, + 71, 2176, 71, 71, 2173, 2177, 71, 2174, 2181, 71, + 2182, 71, 71, 2184, 71, 71, 2186, 71, 2180, 71, + 71, 71, 2178, 2179, 71, 2188, 2189, 71, 2190, 71, + 71, 2183, 71, 2185, 2187, 2191, 71, 71, 2193, 2192, + 71, 2195, 2196, 71, 2198, 71, 71, 71, 2202, 2201, + 71, 2194, 2204, 71, 71, 71, 2197, 71, 2199, 2208, + 71, 71, 71, 2203, 71, 71, 2212, 2213, 71, 2205, + 2206, 71, 71, 2207, 71, 71, 71, 2209, 71, 2211, + 2215, 2218, 71, 2220, 2210, 2219, 71, 2216, 71, 2217, - 2221, 2225, 2212, 71, 71, 71, 71, 2224, 2227, 2217, - 2228, 2218, 2222, 71, 2230, 2232, 71, 71, 2233, 2229, - 71, 71, 2234, 71, 71, 2226, 71, 2231, 71, 2237, - 71, 71, 71, 2238, 71, 3070, 2236, 2239, 2243, 2240, - 2241, 2235, 2244, 71, 71, 71, 2242, 2245, 71, 71, - 71, 2248, 71, 2249, 2246, 71, 2250, 71, 2247, 71, - 2256, 71, 71, 71, 2251, 2252, 71, 2253, 2254, 71, - 71, 71, 2258, 2255, 71, 71, 71, 2257, 2259, 2263, - 2264, 71, 2262, 2267, 71, 2260, 2261, 71, 2268, 2269, - 71, 71, 71, 2266, 2265, 2270, 2271, 2272, 2273, 2274, + 2214, 71, 2221, 71, 2225, 71, 71, 2227, 71, 71, + 71, 2228, 71, 71, 2222, 2226, 2223, 2232, 2233, 71, + 71, 2231, 71, 71, 71, 71, 2229, 2224, 2230, 2237, + 2239, 71, 2235, 2242, 71, 2234, 2240, 2244, 2241, 71, + 71, 2236, 71, 71, 71, 2245, 71, 2246, 2238, 71, + 71, 71, 2249, 71, 71, 2243, 71, 71, 3082, 2248, + 2250, 2255, 2251, 2252, 2254, 2253, 2256, 71, 71, 2247, + 71, 71, 71, 2261, 2257, 71, 2260, 2258, 71, 71, + 2259, 71, 2262, 71, 2266, 2268, 71, 71, 71, 71, + 2263, 71, 71, 71, 71, 2279, 71, 2270, 2264, 2267, - 71, 71, 71, 71, 71, 71, 2276, 71, 71, 71, - 2280, 2281, 71, 71, 2277, 2275, 71, 71, 2283, 71, - 2284, 2278, 2285, 2286, 71, 71, 2282, 2279, 71, 71, - 2287, 71, 2291, 71, 71, 2290, 71, 2288, 71, 71, - 71, 2293, 71, 71, 71, 71, 2297, 2292, 71, 2289, - 2299, 2300, 71, 2309, 2296, 71, 71, 71, 2294, 2295, - 71, 2301, 2302, 2298, 2303, 2304, 2305, 71, 71, 71, - 2307, 71, 71, 2314, 2310, 2306, 71, 2312, 71, 71, - 71, 71, 2311, 2308, 2313, 2316, 71, 71, 2318, 71, - 2315, 71, 71, 71, 71, 71, 2317, 71, 2322, 2319, + 2265, 2271, 2269, 71, 2274, 71, 2275, 2272, 2273, 71, + 2276, 71, 2280, 71, 2277, 2281, 71, 71, 2283, 2284, + 2282, 2278, 2285, 2286, 71, 71, 71, 71, 71, 71, + 2288, 71, 71, 71, 2292, 2293, 71, 71, 71, 2289, + 2287, 71, 2295, 71, 3082, 2290, 71, 2296, 71, 2297, + 2294, 2291, 2298, 71, 71, 71, 71, 2300, 2301, 2299, + 2302, 2303, 71, 71, 71, 71, 71, 71, 2304, 2305, + 71, 2309, 71, 2312, 71, 71, 71, 2311, 71, 71, + 2308, 2313, 71, 2306, 2318, 2307, 71, 2316, 2319, 2317, + 2310, 71, 2314, 71, 2315, 71, 71, 2321, 71, 71, - 2324, 71, 2325, 2326, 71, 2320, 2327, 71, 2321, 2328, - 71, 2329, 71, 71, 71, 71, 71, 2330, 2332, 2337, - 2323, 2335, 71, 71, 71, 71, 71, 71, 2334, 2340, - 71, 71, 2336, 2333, 2331, 71, 71, 2344, 2341, 2345, - 71, 2339, 2338, 71, 71, 71, 2342, 71, 2346, 2343, - 71, 71, 2349, 2350, 2348, 71, 71, 71, 71, 3070, - 71, 71, 2347, 2354, 2351, 2356, 2357, 71, 2353, 2352, - 2358, 71, 2359, 71, 2360, 71, 71, 2355, 71, 2362, - 71, 2364, 71, 2363, 71, 2365, 71, 71, 2361, 71, - 2370, 71, 71, 71, 2366, 2372, 71, 71, 2367, 2373, + 2324, 2322, 71, 2326, 71, 2320, 2325, 2328, 71, 71, + 71, 71, 2330, 71, 71, 71, 2327, 71, 71, 2323, + 2329, 71, 2334, 2338, 71, 2340, 2336, 71, 2331, 2332, + 2333, 71, 2337, 2339, 71, 71, 2341, 71, 71, 71, + 71, 71, 71, 2349, 2335, 2344, 2347, 71, 71, 71, + 2348, 71, 71, 2342, 2346, 2352, 71, 71, 2345, 71, + 2343, 71, 2353, 71, 2356, 71, 2350, 2351, 2357, 71, + 2354, 71, 71, 71, 2360, 2355, 2358, 2361, 71, 2359, + 2362, 71, 71, 71, 71, 71, 3082, 2363, 2366, 71, + 2368, 2369, 71, 71, 2365, 2364, 2370, 71, 2371, 71, - 71, 71, 71, 71, 2374, 2369, 71, 2368, 2376, 2375, - 71, 2371, 71, 71, 2377, 2379, 2382, 71, 71, 71, - 71, 71, 2383, 2378, 71, 71, 2380, 71, 2389, 71, - 71, 71, 2381, 2386, 2390, 71, 71, 71, 2388, 2385, - 2396, 71, 71, 71, 2384, 2387, 2391, 2393, 2398, 71, - 2392, 71, 2394, 2406, 2399, 2397, 2400, 71, 71, 2395, - 2401, 71, 71, 2402, 71, 2403, 71, 2404, 71, 2405, - 71, 71, 71, 71, 71, 71, 71, 2407, 2414, 71, - 71, 2412, 71, 2418, 2419, 71, 71, 71, 2408, 2409, - 2422, 71, 2410, 2411, 2413, 2415, 2421, 2416, 2417, 71, + 2372, 71, 71, 71, 2367, 2373, 71, 2374, 2375, 71, + 2376, 71, 2377, 71, 2378, 71, 2382, 71, 2379, 71, + 2384, 71, 2385, 71, 71, 71, 71, 71, 71, 71, + 71, 2381, 71, 2380, 2388, 2386, 71, 2387, 2383, 71, + 2389, 2391, 2394, 71, 71, 71, 2390, 71, 2395, 2392, + 2393, 71, 71, 2401, 71, 71, 71, 71, 2396, 71, + 2398, 71, 71, 2402, 2397, 2400, 71, 2410, 3082, 2399, + 2403, 2404, 71, 71, 71, 2405, 2408, 2411, 2412, 71, + 2409, 2406, 2413, 71, 2407, 71, 2414, 71, 2415, 71, + 2416, 71, 2417, 71, 71, 71, 71, 71, 71, 71, - 71, 2424, 71, 71, 71, 71, 71, 71, 2420, 2423, - 71, 2427, 71, 2433, 71, 2434, 71, 2425, 71, 71, - 2428, 2426, 2435, 71, 2429, 2430, 2431, 71, 71, 71, - 71, 2432, 2439, 71, 2437, 71, 2436, 2443, 2442, 2444, - 71, 71, 2438, 2445, 2446, 71, 71, 71, 71, 2440, - 2441, 71, 71, 71, 71, 71, 2448, 71, 2452, 71, - 2457, 71, 2456, 2450, 71, 2447, 71, 2449, 2460, 71, - 71, 71, 2451, 71, 2453, 2455, 2454, 2461, 71, 2458, - 2464, 71, 2463, 71, 2459, 2462, 2466, 71, 71, 2469, - 71, 71, 71, 71, 2473, 71, 2465, 2472, 71, 2475, + 71, 71, 2418, 2426, 71, 71, 71, 2424, 71, 2430, + 2431, 71, 2419, 2421, 2420, 71, 71, 2423, 2422, 2425, + 2427, 71, 2428, 2429, 2433, 2434, 71, 71, 2432, 71, + 2435, 2436, 71, 71, 2437, 71, 2439, 71, 71, 71, + 2445, 71, 2446, 71, 2447, 2438, 71, 71, 2440, 71, + 71, 71, 71, 2441, 2443, 2442, 2451, 71, 2444, 71, + 71, 2455, 2449, 71, 2448, 2454, 2456, 71, 2450, 71, + 71, 2457, 2452, 2458, 71, 71, 71, 2453, 71, 2460, + 71, 71, 2459, 71, 71, 2464, 71, 71, 2462, 2468, + 2469, 71, 71, 71, 2461, 2472, 71, 2473, 2463, 71, - 71, 2471, 71, 2470, 71, 71, 71, 2467, 2468, 2476, - 71, 2477, 2480, 71, 71, 2481, 71, 2474, 2479, 2483, - 71, 2478, 71, 71, 71, 71, 2488, 71, 71, 2484, - 2490, 71, 2482, 2486, 2487, 2485, 71, 71, 2489, 71, - 71, 2491, 2492, 71, 71, 2494, 71, 2496, 71, 71, - 71, 2495, 2498, 2493, 2500, 2497, 71, 2503, 71, 2504, - 71, 2501, 71, 2499, 71, 2502, 71, 71, 2509, 2505, - 71, 2506, 71, 2511, 71, 2510, 71, 71, 71, 2514, - 71, 71, 2507, 2513, 2518, 2508, 2515, 71, 2517, 71, - 2516, 2512, 2519, 71, 71, 71, 2523, 2520, 71, 2521, + 71, 2465, 2466, 71, 2467, 2471, 71, 2470, 2476, 71, + 2475, 71, 71, 2477, 2474, 2481, 71, 71, 2478, 71, + 71, 2485, 71, 71, 2484, 2487, 71, 71, 2483, 2482, + 71, 2479, 2480, 71, 71, 2488, 2489, 2492, 71, 71, + 2493, 71, 2486, 2495, 71, 71, 2491, 71, 71, 2490, + 71, 2500, 71, 71, 2502, 71, 71, 2498, 2496, 2499, + 2497, 2503, 71, 2494, 71, 71, 71, 2504, 2501, 71, + 2506, 71, 71, 71, 2507, 71, 71, 71, 2505, 71, + 2509, 2510, 2512, 2517, 2513, 2515, 71, 2511, 2508, 71, + 2514, 2516, 71, 71, 2518, 71, 2521, 71, 71, 71, - 2522, 71, 71, 71, 71, 2524, 71, 71, 2525, 3070, - 2530, 2531, 71, 2526, 2529, 2528, 71, 71, 71, 71, - 71, 2527, 2535, 2532, 2533, 2534, 71, 71, 71, 71, - 71, 71, 2537, 2538, 71, 71, 71, 2543, 2536, 71, - 2541, 71, 71, 2540, 2542, 71, 71, 2539, 2544, 2548, - 71, 2550, 71, 2545, 2552, 71, 71, 71, 71, 71, - 71, 2546, 3070, 2556, 2547, 2549, 71, 2551, 2557, 71, - 2559, 2560, 2554, 2561, 2563, 2553, 71, 71, 2555, 71, - 2562, 71, 71, 71, 71, 2558, 71, 2564, 71, 71, - 2567, 71, 2565, 71, 2570, 2572, 71, 2566, 2573, 71, + 2523, 71, 71, 2522, 2526, 71, 2525, 2527, 71, 71, + 3082, 2519, 2524, 2520, 2529, 71, 71, 71, 2531, 2530, + 71, 71, 2528, 2532, 71, 2533, 2534, 2535, 71, 71, + 71, 71, 2536, 71, 2537, 71, 2542, 71, 2541, 2538, + 71, 2543, 71, 2540, 71, 2544, 2539, 71, 71, 2545, + 71, 71, 71, 2546, 2547, 2549, 2548, 2550, 71, 71, + 71, 71, 71, 2555, 71, 71, 71, 71, 71, 2553, + 2554, 71, 2552, 2556, 2560, 71, 2551, 2564, 71, 71, + 71, 71, 2563, 71, 2557, 71, 2558, 2559, 2562, 2568, + 2561, 2569, 71, 71, 2571, 2572, 2566, 3082, 2573, 2565, - 2574, 71, 2568, 71, 2569, 71, 71, 2575, 71, 2571, - 2576, 2577, 71, 2579, 2581, 71, 71, 71, 2584, 2582, - 71, 2585, 71, 2586, 71, 71, 2578, 2580, 2587, 71, - 71, 71, 2591, 71, 71, 2592, 2583, 2593, 71, 71, - 2595, 71, 2588, 71, 71, 71, 2599, 71, 2589, 2600, - 71, 2590, 71, 71, 2594, 2602, 2596, 2601, 71, 2598, - 2603, 71, 2597, 71, 71, 71, 2608, 2611, 71, 71, - 2604, 2607, 71, 2610, 71, 71, 71, 71, 2605, 2612, - 2614, 71, 71, 2606, 2613, 2616, 71, 71, 71, 2609, - 71, 2619, 2623, 71, 71, 71, 71, 71, 2617, 2618, + 71, 71, 71, 2567, 71, 2574, 71, 71, 71, 71, + 2575, 71, 2576, 71, 71, 2579, 71, 2577, 2570, 71, + 2582, 71, 2578, 2584, 71, 2585, 71, 2580, 71, 2581, + 2586, 71, 2587, 71, 2583, 2589, 71, 71, 2588, 71, + 2593, 2590, 2591, 71, 71, 2594, 71, 71, 2596, 2597, + 71, 2592, 2598, 71, 71, 71, 71, 2599, 2603, 71, + 71, 2604, 2601, 2595, 2605, 71, 71, 71, 2600, 2607, + 71, 71, 71, 2611, 2612, 71, 2602, 71, 71, 71, + 2608, 2606, 2613, 71, 71, 2614, 2610, 71, 2620, 2609, + 2615, 71, 71, 2619, 71, 71, 2623, 71, 71, 2622, - 2615, 71, 2639, 71, 2622, 2620, 2625, 71, 2621, 2624, - 2627, 2630, 71, 2628, 2626, 2629, 2631, 71, 2633, 71, - 2632, 71, 2634, 71, 2635, 71, 2636, 71, 2637, 71, - 71, 71, 2640, 71, 71, 2645, 71, 71, 71, 71, - 2642, 2646, 2648, 71, 71, 2638, 2649, 2650, 71, 2651, - 2652, 71, 71, 2643, 2644, 2647, 2641, 71, 71, 71, - 71, 2653, 2657, 71, 2658, 71, 2654, 2655, 71, 71, - 2661, 71, 71, 71, 2659, 2662, 71, 2656, 2666, 71, - 2664, 71, 2663, 2660, 71, 2665, 2667, 71, 2668, 71, - 71, 71, 71, 2669, 71, 71, 71, 2670, 71, 2672, + 2616, 71, 71, 2617, 2618, 71, 2624, 71, 2626, 71, + 2625, 71, 2628, 71, 71, 71, 2631, 2621, 2635, 71, + 71, 71, 71, 2627, 2629, 2630, 71, 71, 71, 2634, + 2637, 2632, 71, 71, 2633, 2636, 2639, 2642, 2638, 2640, + 2641, 3082, 2643, 71, 2650, 2644, 2645, 71, 71, 2646, + 71, 2647, 71, 2648, 71, 2649, 71, 71, 71, 2653, + 71, 2651, 71, 2657, 71, 71, 71, 2654, 2658, 2660, + 71, 71, 2662, 71, 71, 2664, 71, 2652, 2661, 2663, + 2655, 71, 2656, 71, 2659, 71, 71, 2669, 71, 71, + 2665, 71, 2666, 2670, 2667, 71, 2673, 71, 71, 71, - 2677, 71, 2671, 2673, 2675, 71, 71, 71, 2678, 71, - 2680, 71, 2681, 2932, 2676, 71, 2682, 2674, 2683, 2679, - 71, 2691, 71, 2685, 71, 2684, 2686, 2687, 71, 2688, - 71, 2689, 71, 2690, 71, 71, 2694, 71, 71, 71, - 2693, 71, 71, 2695, 2696, 2697, 71, 71, 71, 71, - 2702, 71, 2700, 2692, 3070, 2698, 71, 2704, 71, 71, - 71, 71, 2699, 2705, 71, 2706, 2701, 71, 2708, 2707, - 2709, 71, 2712, 71, 2703, 71, 2710, 71, 71, 71, - 71, 71, 2715, 71, 71, 2722, 71, 71, 2713, 2716, - 2714, 2711, 2719, 71, 71, 2717, 2724, 71, 2720, 71, + 2671, 2674, 71, 2677, 2668, 71, 2676, 71, 2679, 71, + 2672, 2675, 2678, 2680, 71, 71, 71, 71, 71, 2681, + 71, 71, 71, 2689, 71, 71, 2684, 71, 71, 71, + 2685, 2687, 2692, 2693, 2683, 71, 2690, 71, 2694, 71, + 2682, 2688, 71, 71, 2695, 2686, 2691, 2696, 71, 2697, + 2699, 71, 2698, 2700, 71, 2701, 71, 71, 71, 2703, + 71, 2706, 2704, 2705, 71, 2707, 2702, 71, 71, 2708, + 2709, 71, 71, 71, 71, 2714, 71, 71, 2712, 2716, + 71, 71, 2718, 71, 71, 71, 2710, 2717, 71, 2719, + 71, 2720, 2713, 2711, 71, 2724, 71, 71, 71, 71, - 2718, 2725, 71, 2727, 71, 71, 2723, 71, 71, 2721, - 71, 71, 2732, 71, 71, 2726, 2731, 71, 71, 2733, - 71, 2728, 71, 2729, 2730, 71, 2736, 2742, 2737, 2739, - 71, 71, 2741, 2734, 2744, 71, 2735, 2738, 71, 71, - 2740, 2745, 71, 2747, 71, 71, 71, 71, 2752, 71, - 71, 71, 3070, 2743, 71, 2750, 2749, 2756, 71, 2746, - 71, 71, 2754, 2748, 2757, 71, 2758, 2751, 2753, 71, - 2761, 2755, 2759, 2762, 71, 71, 71, 2764, 2763, 71, - 71, 71, 71, 71, 2769, 2766, 2767, 71, 71, 2760, - 71, 2772, 71, 71, 71, 71, 71, 2765, 2777, 71, + 71, 2715, 71, 2722, 2721, 71, 2727, 71, 2728, 71, + 2725, 2726, 71, 71, 2723, 2731, 2729, 2732, 2734, 71, + 2736, 71, 2737, 71, 2730, 71, 2739, 71, 71, 71, + 71, 71, 2735, 71, 71, 2733, 2744, 71, 2743, 71, + 71, 2748, 71, 71, 2740, 2741, 2738, 2742, 2751, 71, + 2745, 71, 71, 2753, 71, 71, 2749, 2746, 2747, 71, + 2754, 71, 2750, 2756, 71, 2757, 71, 2759, 71, 71, + 71, 2752, 71, 2765, 2755, 71, 2764, 71, 3082, 2762, + 2761, 2758, 71, 2768, 71, 71, 71, 2760, 2769, 2766, + 71, 2770, 2763, 71, 2773, 2767, 2774, 71, 2771, 71, - 2773, 2768, 71, 71, 2770, 2771, 2780, 71, 2776, 2781, - 71, 2774, 2779, 71, 71, 2778, 2783, 71, 2782, 2775, - 2785, 71, 2784, 2786, 71, 2787, 71, 71, 2789, 71, - 71, 71, 2788, 2790, 71, 71, 2794, 2795, 71, 71, - 71, 71, 2799, 71, 2800, 71, 71, 71, 71, 2801, - 2798, 2837, 2791, 2792, 2796, 71, 2793, 71, 71, 2797, - 2805, 71, 2804, 2806, 71, 71, 2802, 2803, 2809, 71, - 2807, 71, 2808, 71, 71, 2812, 71, 71, 2813, 2811, - 71, 2810, 71, 71, 71, 71, 71, 2816, 71, 71, - 2818, 71, 71, 2819, 71, 2817, 71, 2814, 71, 71, + 71, 2776, 2775, 71, 71, 71, 71, 71, 2781, 2778, + 2779, 71, 71, 2772, 71, 2784, 71, 71, 71, 71, + 71, 2777, 2789, 71, 2785, 2780, 71, 71, 2782, 2783, + 2792, 71, 2788, 2793, 71, 2786, 2791, 71, 71, 2790, + 2795, 71, 2794, 2787, 2797, 71, 2796, 2798, 71, 2799, + 71, 71, 2801, 71, 71, 71, 2800, 2802, 71, 71, + 2806, 2807, 71, 71, 71, 71, 2811, 71, 2812, 71, + 71, 71, 71, 2813, 2810, 2849, 2803, 2804, 2808, 71, + 2805, 71, 71, 2809, 2817, 71, 2816, 2818, 71, 71, + 2814, 2815, 2821, 71, 2819, 71, 2820, 71, 71, 2824, - 2815, 71, 71, 2828, 2829, 2820, 71, 2824, 2821, 2822, - 2823, 2825, 2826, 2831, 71, 71, 3070, 2827, 2894, 71, - 2832, 2830, 2833, 2835, 71, 2836, 71, 2834, 2838, 71, - 2839, 71, 2840, 2841, 71, 71, 2842, 2843, 2846, 71, - 2844, 2845, 71, 71, 2847, 71, 71, 71, 71, 71, - 2853, 71, 71, 71, 2852, 71, 71, 2856, 71, 3070, - 2848, 2849, 2855, 71, 71, 2857, 2850, 71, 2851, 71, - 2861, 2862, 71, 2858, 2863, 71, 2860, 2854, 71, 2864, - 71, 2859, 2868, 2865, 2870, 71, 71, 2869, 71, 2866, - 71, 71, 2867, 71, 71, 71, 2877, 71, 2874, 2875, + 71, 71, 2825, 2823, 71, 2822, 71, 71, 71, 71, + 71, 2828, 71, 71, 2830, 71, 71, 2831, 71, 2829, + 71, 2826, 71, 71, 2827, 71, 71, 2840, 2841, 2832, + 71, 2836, 2833, 2834, 2835, 2837, 2838, 2843, 71, 71, + 3082, 2839, 2906, 71, 2844, 2842, 2845, 2847, 71, 2848, + 71, 2846, 2850, 71, 2851, 71, 2852, 2853, 71, 71, + 2854, 2855, 2858, 71, 2856, 2857, 71, 71, 2859, 71, + 71, 71, 71, 71, 2865, 71, 71, 71, 2864, 71, + 71, 2868, 71, 3082, 2860, 2861, 2867, 71, 71, 2869, + 2862, 71, 2863, 71, 2873, 2874, 71, 2870, 2875, 71, - 2878, 2872, 71, 2880, 71, 71, 71, 71, 2879, 3070, - 2871, 2926, 2873, 71, 2876, 2881, 71, 2900, 2882, 2883, - 71, 2884, 71, 2885, 71, 2886, 71, 2887, 71, 2888, - 71, 2889, 71, 2890, 71, 71, 2892, 71, 71, 71, - 71, 71, 2897, 71, 2891, 71, 71, 2893, 71, 2901, - 2903, 71, 71, 71, 71, 2898, 2905, 71, 2899, 2895, - 2896, 2902, 71, 2907, 71, 2910, 71, 2909, 71, 71, - 2904, 71, 71, 71, 2912, 2908, 71, 71, 71, 71, - 2906, 71, 2911, 2916, 2919, 2913, 71, 2917, 71, 2915, - 2914, 2918, 2920, 2921, 71, 2922, 71, 2923, 71, 71, + 2872, 2866, 71, 2876, 71, 2871, 2880, 2877, 2882, 71, + 71, 2881, 71, 2878, 71, 71, 2879, 71, 71, 71, + 2889, 71, 2886, 2887, 2890, 2884, 71, 2892, 71, 71, + 71, 71, 2891, 3082, 2883, 2938, 2885, 71, 2888, 2893, + 71, 2912, 2894, 2895, 71, 2896, 71, 2897, 71, 2898, + 71, 2899, 71, 2900, 71, 2901, 71, 2902, 71, 71, + 2904, 71, 71, 71, 71, 71, 2909, 71, 2903, 71, + 71, 2905, 71, 2913, 2915, 71, 71, 71, 71, 2910, + 2917, 71, 2911, 2907, 2908, 2914, 71, 2919, 71, 2922, + 71, 2921, 71, 71, 2916, 71, 71, 71, 2924, 2920, - 71, 71, 2928, 71, 71, 71, 71, 2934, 2925, 2924, - 2931, 71, 71, 71, 2930, 71, 71, 71, 71, 2933, - 2927, 71, 71, 71, 2929, 2935, 2941, 71, 2948, 71, - 2936, 2937, 2938, 2940, 2942, 71, 71, 71, 2950, 71, - 2939, 2945, 2943, 2944, 71, 2951, 2949, 2947, 71, 2946, - 2952, 71, 2953, 71, 71, 71, 71, 71, 2956, 71, - 71, 2957, 2958, 2961, 71, 71, 71, 2954, 71, 71, - 71, 2964, 2966, 71, 2955, 2960, 71, 2963, 2962, 2969, - 71, 71, 71, 71, 2959, 2967, 2972, 71, 2965, 71, - 2973, 2974, 71, 2976, 71, 2968, 2970, 2977, 71, 71, + 71, 71, 71, 71, 2918, 71, 2923, 2928, 2931, 2925, + 71, 2929, 71, 2927, 2926, 2930, 2932, 2933, 71, 2934, + 71, 2935, 71, 71, 71, 71, 2940, 71, 71, 71, + 2944, 71, 2937, 2936, 2943, 71, 2946, 71, 2942, 71, + 71, 71, 71, 71, 2939, 71, 2945, 71, 2941, 71, + 2947, 71, 2953, 71, 3082, 71, 2950, 71, 2948, 2949, + 2952, 2954, 2957, 2960, 71, 71, 71, 2951, 2955, 2958, + 71, 2956, 71, 2959, 2961, 2962, 71, 71, 2963, 2964, + 71, 2965, 71, 71, 71, 2966, 2968, 71, 71, 2969, + 2967, 71, 2970, 2973, 71, 71, 71, 2971, 71, 71, - 2971, 71, 71, 71, 2982, 71, 71, 2981, 2978, 2983, - 71, 2975, 71, 71, 2979, 71, 71, 2980, 71, 71, - 2987, 71, 71, 2989, 71, 71, 71, 2984, 71, 2986, - 2994, 2995, 2985, 2988, 2991, 2992, 2996, 71, 2990, 71, - 71, 3000, 71, 2993, 71, 3002, 71, 3003, 2997, 3001, - 71, 71, 71, 71, 3008, 3004, 71, 2998, 3005, 2999, - 71, 3006, 3009, 71, 71, 3011, 71, 71, 71, 3010, - 71, 3007, 3012, 71, 71, 3017, 71, 3014, 71, 71, - 3020, 71, 3021, 71, 71, 71, 3013, 71, 71, 3024, - 71, 3019, 3015, 3016, 3022, 3018, 71, 3023, 71, 3028, + 2976, 2978, 71, 2972, 71, 2974, 2975, 2981, 71, 71, + 71, 2984, 71, 2979, 71, 2985, 2977, 71, 71, 71, + 2988, 2989, 71, 2980, 2982, 2986, 71, 71, 2983, 71, + 71, 71, 71, 2990, 71, 2991, 2993, 2987, 2994, 71, + 2995, 71, 71, 71, 71, 71, 71, 2999, 2992, 3001, + 71, 2996, 2997, 71, 3000, 71, 2998, 71, 71, 3003, + 3006, 71, 3007, 3004, 3002, 3008, 71, 71, 3012, 71, + 71, 3014, 3005, 71, 3015, 3013, 71, 71, 3009, 3010, + 71, 3016, 71, 71, 3020, 3017, 3011, 3018, 3021, 71, + 71, 71, 3023, 71, 71, 71, 3022, 71, 3024, 71, - 71, 3029, 71, 3027, 71, 3032, 3025, 3026, 71, 71, - 3034, 71, 3035, 3030, 71, 71, 71, 3039, 71, 3036, - 71, 71, 3037, 3041, 71, 3040, 71, 3033, 3031, 3042, - 71, 3043, 71, 3044, 71, 3038, 71, 3048, 71, 3046, - 71, 71, 71, 71, 71, 71, 3050, 3051, 71, 3054, - 71, 3045, 3055, 71, 3070, 3047, 71, 3058, 71, 3049, - 3059, 71, 3052, 3053, 3056, 3060, 3061, 71, 71, 3057, - 3062, 71, 71, 71, 71, 3063, 71, 3064, 3065, 3068, - 71, 3069, 71, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3066, 3070, 3067, 43, 43, 43, 43, + 71, 3029, 3019, 71, 3026, 71, 3032, 71, 71, 3033, + 71, 71, 71, 71, 3025, 71, 71, 3036, 3027, 3028, + 3034, 3031, 3030, 3035, 71, 3040, 71, 71, 71, 3039, + 71, 3041, 3037, 71, 3038, 71, 3044, 71, 3046, 71, + 3042, 71, 3047, 71, 3048, 3051, 71, 71, 71, 3045, + 3049, 71, 3050, 3052, 3043, 71, 71, 3053, 3054, 71, + 71, 3060, 71, 3055, 71, 71, 3057, 3056, 71, 3058, + 3059, 71, 71, 3062, 71, 71, 3063, 71, 3066, 3067, + 71, 71, 71, 3070, 3061, 3071, 71, 3082, 71, 3073, + 71, 3064, 71, 3065, 3068, 3072, 3074, 71, 71, 3075, - 43, 43, 43, 48, 48, 48, 48, 48, 48, 48, - 53, 53, 53, 53, 53, 53, 53, 59, 59, 59, - 59, 59, 59, 59, 64, 64, 64, 64, 64, 64, - 64, 74, 74, 3070, 74, 74, 74, 74, 141, 141, - 3070, 3070, 3070, 141, 141, 143, 143, 3070, 3070, 143, - 3070, 143, 145, 3070, 3070, 3070, 3070, 3070, 145, 148, - 148, 3070, 3070, 3070, 148, 148, 150, 3070, 3070, 3070, - 3070, 3070, 150, 152, 152, 3070, 152, 152, 152, 152, - 75, 75, 3070, 75, 75, 75, 75, 13, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3069, 71, 71, 3076, 71, 3082, 3077, 3080, 71, 3081, + 71, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3078, 3082, 3079, 43, 43, 43, 43, 43, 43, + 43, 48, 48, 48, 48, 48, 48, 48, 53, 53, + 53, 53, 53, 53, 53, 59, 59, 59, 59, 59, + 59, 59, 64, 64, 64, 64, 64, 64, 64, 74, + 74, 3082, 74, 74, 74, 74, 142, 142, 3082, 3082, + 3082, 142, 142, 144, 144, 3082, 3082, 144, 3082, 144, + 146, 3082, 3082, 3082, 3082, 3082, 146, 149, 149, 3082, + 3082, 3082, 149, 149, 151, 3082, 3082, 3082, 3082, 3082, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 + 151, 153, 153, 3082, 153, 153, 153, 153, 75, 75, + 3082, 75, 75, 75, 75, 13, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 } ; -static const flex_int16_t yy_chk[6029] = +static const flex_int16_t yy_chk[6057] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2107,661 +2116,664 @@ static const flex_int16_t yy_chk[6029] = 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, 29, 8, 7, 9, 9, 9, 22, 22, 8, 10, - 10, 10, 15, 25, 9, 29, 15, 25, 3076, 31, + 10, 10, 15, 25, 9, 29, 15, 25, 3088, 31, 10, 11, 11, 11, 11, 11, 11, 19, 79, 19, 19, 30, 19, 11, 31, 79, 30, 25, 19, 19, - 47, 47, 11, 12, 12, 12, 12, 12, 12, 21, - 23, 23, 21, 21, 24, 12, 21, 81, 23, 24, - 34, 21, 23, 24, 12, 23, 24, 1010, 24, 24, - 21, 26, 26, 27, 27, 90, 28, 81, 32, 32, - 28, 34, 27, 28, 33, 33, 26, 32, 36, 33, - 28, 35, 28, 32, 90, 42, 35, 32, 52, 84, - 35, 52, 36, 37, 37, 33, 35, 38, 37, 35, - 42, 69, 38, 63, 63, 38, 35, 84, 37, 37, - 40, 37, 38, 80, 40, 69, 38, 38, 39, 39, + 36, 89, 11, 12, 12, 12, 12, 12, 12, 21, + 23, 23, 21, 21, 36, 12, 21, 34, 23, 26, + 26, 21, 23, 89, 12, 23, 27, 27, 47, 47, + 21, 24, 42, 90, 26, 27, 24, 28, 34, 52, + 24, 28, 52, 24, 28, 24, 24, 42, 32, 32, + 1018, 28, 90, 28, 33, 33, 24, 32, 72, 33, + 69, 35, 72, 32, 63, 63, 35, 32, 77, 80, + 35, 77, 37, 37, 69, 33, 35, 37, 230, 35, + 230, 80, 39, 39, 38, 39, 35, 37, 37, 38, - 126, 39, 41, 41, 40, 80, 126, 41, 40, 40, - 39, 41, 58, 89, 58, 58, 39, 58, 66, 86, - 66, 66, 68, 66, 68, 68, 71, 68, 71, 71, - 66, 71, 72, 86, 127, 89, 72, 71, 74, 77, - 74, 74, 77, 74, 78, 88, 127, 85, 78, 74, - 74, 82, 83, 87, 82, 83, 85, 92, 93, 87, - 91, 94, 99, 88, 88, 87, 91, 87, 83, 95, - 96, 92, 94, 94, 161, 102, 99, 97, 93, 91, - 94, 97, 161, 105, 98, 106, 101, 95, 96, 98, - 100, 150, 101, 100, 102, 103, 100, 112, 104, 106, + 37, 40, 38, 82, 39, 40, 82, 41, 41, 38, + 39, 127, 41, 38, 38, 40, 41, 127, 78, 40, + 40, 58, 78, 58, 58, 66, 58, 66, 66, 68, + 66, 68, 68, 71, 68, 71, 71, 66, 71, 81, + 74, 85, 74, 74, 71, 74, 83, 84, 151, 83, + 85, 74, 74, 86, 87, 88, 92, 91, 93, 81, + 87, 94, 83, 91, 100, 84, 87, 86, 87, 96, + 92, 95, 93, 88, 88, 97, 91, 103, 100, 102, + 98, 94, 95, 95, 98, 102, 99, 96, 106, 101, + 95, 99, 101, 97, 104, 101, 103, 107, 105, 104, - 103, 104, 105, 109, 107, 104, 108, 105, 107, 100, - 100, 101, 110, 108, 111, 113, 109, 112, 114, 110, - 103, 104, 114, 115, 117, 116, 119, 111, 118, 118, - 116, 122, 120, 113, 116, 121, 120, 123, 132, 125, - 124, 115, 129, 124, 117, 120, 119, 128, 128, 129, - 121, 120, 125, 130, 124, 131, 123, 122, 124, 132, - 129, 133, 134, 135, 134, 128, 136, 137, 128, 130, - 138, 136, 140, 134, 131, 135, 139, 133, 148, 137, - 157, 139, 142, 142, 144, 134, 140, 144, 138, 146, - 154, 146, 146, 154, 146, 149, 149, 151, 157, 151, + 110, 105, 108, 109, 102, 105, 108, 106, 101, 101, + 109, 107, 106, 110, 112, 111, 113, 114, 118, 104, + 115, 105, 111, 116, 115, 117, 120, 112, 119, 119, + 117, 123, 122, 149, 117, 114, 113, 124, 118, 121, + 126, 116, 128, 121, 130, 125, 120, 122, 125, 129, + 129, 130, 121, 126, 128, 131, 124, 123, 121, 125, + 132, 133, 130, 125, 134, 139, 135, 129, 135, 136, + 129, 131, 138, 137, 141, 143, 143, 135, 137, 132, + 134, 136, 133, 139, 138, 140, 150, 150, 141, 135, + 140, 145, 158, 147, 145, 147, 147, 152, 147, 152, - 151, 152, 151, 152, 152, 155, 152, 158, 156, 159, - 155, 162, 163, 152, 156, 160, 164, 159, 165, 166, - 168, 164, 158, 156, 159, 167, 160, 163, 166, 169, - 162, 167, 167, 171, 169, 170, 170, 175, 165, 171, - 173, 172, 179, 172, 173, 168, 172, 174, 174, 173, - 176, 147, 177, 178, 173, 176, 175, 177, 180, 183, - 173, 173, 179, 172, 180, 178, 181, 182, 184, 185, - 181, 186, 182, 183, 187, 188, 192, 190, 191, 187, - 188, 185, 190, 184, 185, 194, 194, 180, 200, 186, - 189, 189, 192, 193, 189, 195, 189, 196, 191, 193, + 152, 153, 152, 153, 153, 155, 153, 156, 155, 157, + 158, 159, 156, 153, 160, 157, 161, 162, 163, 164, + 166, 167, 160, 165, 157, 162, 159, 161, 165, 160, + 167, 169, 168, 148, 164, 176, 170, 163, 168, 168, + 166, 170, 171, 171, 172, 174, 173, 176, 173, 174, + 172, 173, 175, 175, 174, 177, 169, 178, 179, 174, + 180, 181, 178, 179, 182, 174, 174, 183, 173, 185, + 182, 183, 180, 184, 177, 186, 187, 188, 184, 189, + 190, 181, 192, 185, 189, 190, 193, 192, 187, 194, + 186, 187, 195, 182, 218, 188, 191, 191, 195, 199, - 197, 195, 206, 196, 210, 198, 199, 195, 189, 200, - 189, 198, 199, 201, 208, 206, 145, 202, 203, 201, - 197, 199, 202, 204, 203, 205, 210, 207, 212, 204, - 209, 211, 205, 207, 208, 213, 209, 214, 215, 211, - 213, 212, 216, 217, 218, 222, 214, 219, 220, 218, - 218, 221, 219, 215, 223, 221, 224, 226, 216, 225, - 223, 229, 233, 217, 227, 225, 220, 222, 228, 227, - 228, 230, 235, 231, 224, 224, 232, 226, 230, 231, - 229, 233, 232, 234, 235, 236, 237, 237, 239, 234, - 238, 238, 240, 242, 239, 241, 243, 241, 240, 236, + 191, 197, 191, 196, 196, 194, 193, 197, 202, 198, + 218, 200, 201, 197, 191, 198, 191, 200, 201, 199, + 203, 208, 210, 204, 205, 206, 203, 201, 204, 202, + 205, 206, 207, 212, 208, 209, 213, 211, 214, 207, + 215, 209, 210, 211, 213, 215, 217, 216, 219, 221, + 224, 214, 220, 222, 221, 212, 216, 220, 220, 223, + 225, 217, 226, 223, 227, 228, 225, 231, 219, 229, + 227, 222, 224, 233, 229, 232, 235, 234, 236, 233, + 226, 226, 232, 234, 236, 228, 231, 237, 238, 239, + 239, 240, 240, 244, 241, 235, 243, 242, 243, 237, - 245, 243, 246, 244, 247, 249, 248, 250, 143, 260, - 246, 248, 239, 250, 241, 244, 242, 251, 256, 245, - 252, 253, 255, 251, 247, 252, 253, 254, 249, 257, - 258, 259, 256, 254, 260, 261, 263, 255, 263, 259, - 262, 261, 266, 262, 258, 264, 264, 257, 265, 267, - 267, 265, 268, 268, 269, 271, 270, 272, 271, 273, - 266, 272, 275, 274, 283, 277, 276, 277, 273, 274, - 269, 270, 276, 278, 279, 284, 275, 281, 279, 278, - 280, 280, 281, 282, 283, 285, 286, 287, 287, 282, - 289, 288, 290, 284, 288, 279, 290, 291, 296, 286, + 241, 245, 238, 242, 247, 246, 245, 249, 250, 251, + 146, 248, 262, 250, 252, 243, 244, 246, 241, 248, + 252, 254, 253, 247, 255, 256, 254, 249, 253, 255, + 257, 256, 251, 258, 259, 260, 261, 262, 264, 268, + 263, 264, 266, 266, 261, 257, 263, 258, 265, 260, + 265, 267, 259, 271, 267, 269, 269, 268, 270, 270, + 272, 273, 274, 275, 273, 276, 274, 277, 278, 271, + 279, 286, 275, 277, 276, 272, 279, 280, 281, 280, + 287, 282, 278, 284, 281, 282, 283, 283, 284, 285, + 288, 286, 289, 290, 290, 285, 291, 292, 287, 291, - 292, 293, 293, 294, 295, 297, 285, 295, 289, 298, - 296, 297, 298, 299, 301, 302, 291, 303, 292, 315, - 315, 294, 303, 301, 295, 299, 300, 304, 305, 306, - 304, 305, 304, 302, 309, 300, 141, 307, 300, 309, - 309, 311, 306, 300, 300, 300, 300, 312, 304, 307, - 308, 310, 308, 308, 310, 313, 314, 318, 311, 317, - 317, 311, 312, 316, 313, 314, 319, 320, 316, 321, - 322, 319, 318, 327, 323, 324, 336, 336, 329, 320, - 70, 324, 325, 325, 329, 325, 328, 330, 321, 323, - 322, 328, 330, 327, 325, 331, 332, 333, 335, 332, + 293, 294, 282, 295, 293, 289, 296, 296, 297, 298, + 299, 288, 298, 300, 301, 292, 302, 301, 304, 300, + 294, 295, 299, 305, 144, 309, 297, 304, 302, 298, + 303, 306, 307, 310, 142, 307, 306, 307, 309, 303, + 308, 305, 303, 308, 315, 310, 314, 303, 303, 303, + 303, 312, 311, 307, 311, 311, 312, 312, 313, 315, + 316, 313, 317, 314, 318, 318, 314, 319, 321, 316, + 322, 317, 319, 320, 320, 322, 323, 324, 325, 326, + 327, 328, 328, 321, 328, 330, 327, 331, 323, 332, + 339, 339, 331, 328, 326, 332, 324, 333, 325, 334, - 331, 332, 334, 337, 342, 334, 331, 335, 346, 337, - 339, 333, 338, 338, 343, 339, 340, 344, 334, 340, - 349, 334, 346, 334, 342, 340, 568, 345, 348, 340, - 351, 348, 344, 568, 349, 343, 356, 340, 341, 341, - 352, 341, 345, 357, 354, 351, 353, 348, 355, 352, - 354, 353, 353, 361, 341, 356, 359, 341, 357, 341, - 360, 341, 350, 358, 350, 350, 360, 362, 363, 355, - 365, 366, 358, 368, 350, 359, 350, 350, 350, 361, - 364, 350, 363, 367, 369, 370, 364, 362, 368, 369, - 364, 366, 371, 365, 372, 372, 373, 374, 371, 375, + 336, 345, 333, 335, 334, 330, 335, 338, 335, 337, + 334, 340, 337, 346, 336, 342, 338, 340, 341, 341, + 342, 345, 347, 343, 348, 337, 343, 349, 337, 352, + 337, 70, 343, 355, 346, 351, 343, 347, 351, 348, + 354, 349, 355, 352, 343, 344, 344, 356, 344, 358, + 357, 361, 356, 356, 351, 354, 357, 359, 360, 362, + 361, 344, 365, 364, 344, 366, 344, 368, 344, 353, + 358, 353, 353, 360, 363, 369, 359, 370, 362, 366, + 363, 353, 365, 353, 353, 353, 367, 371, 353, 364, + 368, 373, 367, 372, 374, 369, 367, 370, 372, 376, - 370, 376, 377, 367, 378, 379, 381, 376, 382, 374, - 379, 380, 380, 375, 380, 383, 373, 385, 384, 385, - 378, 386, 388, 388, 382, 386, 381, 377, 389, 387, - 390, 383, 384, 387, 391, 392, 396, 385, 393, 397, - 394, 396, 395, 397, 400, 390, 398, 389, 387, 394, - 391, 395, 393, 392, 405, 398, 403, 399, 401, 403, - 394, 64, 394, 399, 401, 400, 402, 404, 406, 406, - 402, 407, 404, 409, 405, 408, 408, 410, 409, 411, - 411, 412, 413, 414, 407, 415, 413, 412, 416, 417, - 410, 418, 418, 416, 417, 419, 420, 421, 414, 422, + 374, 377, 371, 375, 375, 379, 373, 378, 380, 381, + 382, 379, 384, 377, 385, 382, 64, 383, 383, 376, + 383, 378, 386, 387, 388, 381, 388, 389, 394, 389, + 385, 390, 384, 380, 393, 390, 391, 387, 386, 396, + 391, 392, 392, 394, 395, 397, 400, 389, 468, 398, + 401, 400, 399, 393, 401, 391, 402, 396, 398, 397, + 395, 399, 403, 404, 405, 402, 409, 468, 403, 398, + 405, 398, 406, 408, 407, 411, 406, 407, 408, 410, + 410, 412, 412, 414, 404, 413, 409, 416, 411, 418, + 413, 415, 415, 416, 417, 419, 414, 420, 417, 423, - 418, 423, 425, 427, 423, 424, 415, 419, 427, 424, - 428, 422, 426, 426, 425, 421, 420, 429, 429, 430, - 432, 432, 433, 437, 434, 435, 436, 439, 440, 443, - 441, 428, 434, 442, 435, 437, 444, 446, 443, 442, - 452, 430, 444, 433, 441, 439, 436, 439, 440, 445, - 447, 446, 448, 449, 445, 448, 450, 451, 447, 453, - 452, 447, 453, 451, 454, 455, 458, 449, 456, 457, - 454, 450, 459, 456, 461, 460, 459, 462, 463, 455, - 460, 464, 462, 465, 468, 484, 484, 458, 454, 461, - 469, 457, 471, 470, 463, 473, 465, 470, 472, 473, + 421, 424, 420, 432, 418, 421, 422, 422, 425, 427, + 426, 423, 427, 428, 434, 422, 419, 428, 429, 430, + 430, 424, 426, 431, 432, 437, 425, 438, 431, 439, + 429, 433, 433, 436, 436, 438, 434, 440, 439, 441, + 443, 444, 445, 446, 447, 449, 437, 59, 448, 446, + 449, 441, 450, 447, 448, 453, 445, 440, 443, 451, + 443, 444, 452, 454, 456, 452, 450, 451, 455, 453, + 451, 458, 457, 459, 455, 457, 460, 458, 454, 461, + 467, 460, 462, 464, 456, 463, 466, 459, 464, 463, + 465, 466, 472, 469, 473, 458, 467, 475, 474, 488, - 464, 466, 466, 474, 468, 469, 480, 466, 474, 466, - 475, 471, 474, 476, 472, 466, 477, 466, 476, 478, - 466, 466, 480, 479, 482, 475, 483, 466, 478, 479, - 481, 485, 477, 481, 479, 477, 486, 486, 487, 488, - 489, 490, 491, 492, 494, 493, 483, 482, 492, 501, - 495, 488, 496, 487, 493, 489, 485, 498, 496, 502, - 490, 501, 500, 494, 491, 495, 498, 499, 500, 503, - 504, 499, 505, 506, 502, 507, 508, 510, 509, 507, - 509, 511, 511, 513, 504, 510, 512, 505, 503, 508, - 514, 506, 512, 515, 516, 513, 514, 516, 517, 518, + 488, 461, 474, 462, 476, 465, 469, 470, 470, 473, + 477, 54, 472, 470, 477, 470, 475, 479, 481, 478, + 476, 470, 482, 470, 478, 480, 470, 470, 478, 483, + 480, 482, 479, 470, 481, 483, 484, 481, 485, 486, + 483, 485, 489, 487, 490, 490, 491, 492, 495, 493, + 494, 496, 484, 498, 500, 53, 496, 497, 499, 492, + 500, 491, 486, 487, 493, 502, 497, 489, 505, 494, + 495, 503, 498, 499, 502, 503, 504, 506, 507, 508, + 505, 509, 504, 510, 511, 512, 514, 513, 511, 513, + 515, 515, 506, 508, 514, 517, 509, 507, 512, 516, - 520, 519, 521, 520, 522, 515, 519, 525, 525, 524, - 523, 521, 517, 527, 518, 523, 523, 531, 521, 527, - 522, 521, 524, 526, 526, 528, 528, 529, 529, 530, - 532, 533, 534, 532, 535, 530, 533, 536, 531, 537, - 536, 538, 535, 539, 537, 540, 541, 543, 544, 540, - 542, 534, 541, 544, 542, 545, 547, 546, 548, 550, - 553, 547, 539, 546, 538, 543, 549, 551, 551, 549, - 552, 557, 548, 556, 549, 545, 553, 550, 549, 554, - 555, 560, 59, 559, 554, 555, 557, 556, 552, 559, - 560, 561, 562, 563, 561, 566, 562, 564, 563, 565, + 518, 510, 519, 521, 522, 516, 518, 517, 520, 524, + 523, 520, 524, 525, 519, 523, 538, 521, 526, 522, + 527, 538, 525, 528, 536, 527, 527, 529, 529, 525, + 530, 530, 525, 531, 526, 539, 528, 532, 532, 531, + 533, 533, 534, 537, 535, 536, 537, 540, 534, 535, + 535, 543, 542, 541, 539, 540, 541, 542, 544, 545, + 546, 547, 548, 545, 549, 547, 546, 550, 552, 549, + 551, 553, 558, 552, 543, 555, 551, 544, 554, 557, + 548, 554, 556, 556, 559, 553, 554, 550, 558, 559, + 554, 560, 561, 555, 562, 564, 560, 557, 565, 566, - 564, 567, 569, 570, 565, 571, 572, 572, 570, 574, - 575, 566, 573, 576, 578, 569, 54, 577, 562, 567, - 578, 573, 576, 584, 579, 571, 575, 612, 574, 577, - 579, 580, 581, 581, 580, 581, 582, 583, 585, 582, - 586, 584, 583, 587, 588, 612, 586, 596, 587, 592, - 588, 589, 585, 590, 589, 591, 593, 595, 590, 594, - 591, 591, 592, 595, 594, 597, 596, 598, 599, 593, - 600, 600, 598, 601, 597, 604, 603, 608, 594, 594, - 601, 602, 603, 613, 602, 605, 606, 604, 599, 610, - 605, 606, 606, 607, 607, 609, 611, 609, 611, 602, + 567, 564, 566, 568, 567, 571, 561, 565, 568, 562, + 569, 570, 572, 569, 574, 573, 570, 576, 575, 577, + 577, 571, 573, 575, 578, 579, 567, 574, 48, 580, + 572, 581, 583, 578, 582, 584, 585, 576, 583, 585, + 581, 584, 589, 590, 579, 580, 582, 586, 586, 587, + 586, 588, 587, 591, 597, 593, 588, 590, 592, 591, + 589, 593, 594, 592, 595, 594, 596, 597, 598, 595, + 599, 596, 596, 600, 601, 599, 602, 603, 604, 600, + 606, 598, 603, 605, 605, 602, 608, 606, 607, 599, + 599, 607, 608, 601, 610, 609, 611, 613, 604, 610, - 614, 613, 608, 615, 616, 617, 618, 619, 610, 624, - 618, 617, 620, 621, 622, 623, 619, 626, 614, 627, - 625, 624, 615, 626, 616, 628, 629, 620, 621, 630, - 633, 632, 622, 627, 623, 625, 631, 628, 634, 635, - 631, 636, 637, 639, 639, 629, 633, 637, 630, 632, - 638, 640, 641, 643, 642, 640, 634, 635, 635, 645, - 636, 644, 646, 647, 638, 642, 644, 643, 649, 651, - 648, 641, 650, 649, 651, 645, 647, 648, 652, 650, - 653, 646, 654, 652, 655, 656, 657, 659, 658, 654, - 662, 660, 659, 655, 660, 657, 663, 661, 653, 656, + 615, 611, 611, 612, 612, 617, 607, 609, 614, 616, + 614, 616, 618, 619, 620, 621, 623, 624, 622, 615, + 623, 625, 613, 617, 622, 626, 624, 627, 628, 629, + 618, 619, 631, 620, 630, 621, 625, 632, 631, 634, + 626, 629, 633, 635, 636, 627, 637, 628, 636, 630, + 638, 632, 639, 640, 633, 641, 642, 646, 634, 643, + 43, 642, 635, 648, 637, 645, 638, 644, 644, 645, + 639, 640, 640, 643, 641, 647, 646, 648, 649, 650, + 651, 652, 653, 649, 655, 654, 647, 656, 657, 653, + 654, 655, 656, 657, 652, 650, 658, 659, 660, 651, - 658, 661, 664, 666, 662, 663, 665, 667, 667, 668, - 668, 669, 669, 670, 672, 673, 674, 664, 668, 675, - 665, 673, 670, 675, 666, 676, 677, 678, 679, 682, - 680, 683, 681, 672, 679, 684, 674, 676, 680, 681, - 693, 705, 690, 687, 694, 678, 705, 682, 695, 693, - 694, 677, 697, 697, 700, 684, 683, 685, 687, 690, - 699, 696, 685, 702, 695, 696, 685, 698, 698, 685, - 701, 699, 700, 706, 703, 707, 685, 685, 720, 685, - 703, 708, 53, 702, 701, 704, 704, 704, 709, 704, - 720, 709, 704, 707, 706, 710, 710, 704, 711, 712, + 662, 661, 666, 664, 659, 663, 666, 660, 664, 662, + 665, 667, 668, 665, 658, 661, 669, 663, 670, 671, + 677, 668, 672, 672, 675, 667, 673, 673, 674, 674, + 678, 669, 670, 675, 679, 673, 678, 680, 681, 677, + 671, 680, 682, 683, 685, 684, 686, 687, 688, 689, + 681, 684, 685, 686, 679, 692, 699, 698, 695, 703, + 702, 683, 699, 703, 707, 687, 698, 682, 709, 689, + 692, 701, 14, 688, 690, 695, 702, 701, 706, 690, + 704, 704, 707, 690, 705, 705, 690, 708, 709, 706, + 712, 710, 713, 690, 690, 712, 690, 710, 714, 715, - 712, 713, 721, 704, 704, 711, 708, 714, 714, 715, - 716, 722, 717, 716, 715, 722, 713, 717, 718, 718, - 719, 721, 719, 723, 725, 724, 726, 726, 728, 730, - 727, 732, 725, 729, 729, 733, 731, 735, 735, 746, - 746, 733, 728, 723, 724, 727, 734, 730, 731, 736, - 739, 734, 738, 732, 736, 736, 739, 738, 740, 743, - 741, 742, 743, 744, 740, 741, 745, 742, 748, 744, - 747, 747, 749, 750, 745, 751, 748, 752, 750, 753, - 753, 755, 751, 754, 757, 756, 759, 761, 760, 755, - 749, 756, 754, 762, 767, 759, 752, 760, 762, 763, + 718, 708, 711, 711, 711, 716, 711, 718, 716, 711, + 717, 717, 720, 713, 711, 13, 714, 719, 719, 728, + 711, 711, 721, 721, 715, 722, 723, 720, 724, 723, + 722, 725, 725, 724, 726, 727, 726, 729, 728, 730, + 732, 729, 731, 733, 733, 734, 737, 727, 732, 735, + 736, 736, 739, 738, 742, 742, 740, 753, 753, 730, + 734, 731, 740, 735, 737, 738, 741, 743, 754, 754, + 745, 741, 743, 743, 739, 745, 746, 747, 750, 748, + 749, 750, 746, 747, 748, 751, 749, 752, 755, 756, + 759, 751, 757, 758, 761, 752, 755, 757, 760, 760, - 765, 764, 766, 757, 764, 765, 768, 769, 763, 771, - 771, 761, 770, 772, 773, 768, 766, 770, 770, 767, - 769, 774, 775, 776, 780, 778, 776, 778, 772, 782, - 774, 779, 779, 773, 776, 781, 783, 784, 785, 786, - 781, 788, 787, 789, 790, 780, 775, 789, 791, 792, - 782, 787, 793, 794, 795, 792, 783, 784, 796, 786, - 785, 793, 790, 797, 788, 794, 798, 791, 801, 797, - 799, 803, 796, 795, 802, 799, 800, 800, 804, 805, - 798, 806, 807, 802, 808, 813, 804, 809, 801, 810, - 812, 803, 811, 809, 814, 810, 812, 817, 818, 805, + 758, 764, 762, 761, 766, 763, 767, 756, 768, 759, + 762, 763, 769, 766, 770, 767, 771, 769, 774, 771, + 764, 772, 773, 770, 775, 776, 772, 778, 778, 777, + 779, 780, 768, 775, 777, 777, 773, 781, 776, 782, + 785, 783, 785, 774, 783, 779, 781, 786, 786, 787, + 780, 788, 783, 789, 792, 790, 788, 791, 793, 794, + 795, 796, 797, 782, 1036, 796, 798, 799, 794, 802, + 787, 1036, 800, 799, 789, 790, 792, 791, 793, 801, + 797, 800, 803, 795, 804, 798, 805, 806, 802, 808, + 804, 801, 806, 807, 807, 809, 803, 810, 811, 812, - 814, 807, 815, 806, 808, 813, 811, 816, 815, 819, - 818, 816, 820, 824, 819, 822, 817, 825, 818, 821, - 821, 822, 823, 826, 827, 823, 828, 828, 829, 826, - 825, 824, 830, 820, 831, 831, 832, 830, 833, 834, - 834, 835, 833, 837, 827, 836, 829, 838, 837, 840, - 841, 832, 843, 844, 846, 846, 847, 849, 849, 48, - 847, 848, 850, 835, 841, 836, 838, 851, 852, 869, - 869, 851, 843, 840, 844, 845, 848, 854, 845, 853, - 845, 855, 854, 852, 845, 857, 845, 850, 859, 861, - 858, 845, 856, 853, 858, 855, 845, 856, 856, 857, + 805, 813, 814, 0, 809, 815, 811, 816, 817, 808, + 818, 820, 819, 816, 817, 824, 821, 810, 819, 812, + 822, 814, 821, 813, 818, 815, 822, 825, 823, 827, + 826, 820, 823, 831, 824, 826, 828, 828, 829, 825, + 830, 832, 833, 830, 829, 834, 836, 825, 833, 842, + 827, 831, 835, 835, 832, 837, 838, 838, 839, 840, + 837, 841, 841, 840, 836, 834, 843, 844, 845, 847, + 848, 842, 844, 839, 850, 851, 853, 853, 854, 857, + 855, 858, 854, 859, 848, 858, 843, 845, 856, 856, + 873, 860, 998, 847, 850, 855, 851, 852, 859, 873, - 860, 861, 862, 859, 863, 860, 858, 862, 864, 865, - 866, 867, 872, 868, 873, 860, 866, 867, 863, 868, - 870, 871, 874, 865, 876, 870, 877, 871, 904, 864, - 878, 877, 881, 873, 872, 882, 876, 881, 879, 883, - 874, 875, 875, 882, 878, 880, 880, 875, 904, 875, - 879, 884, 885, 883, 887, 875, 886, 886, 887, 889, - 875, 875, 891, 890, 892, 889, 890, 875, 893, 895, - 884, 885, 43, 894, 893, 897, 898, 892, 894, 899, - 900, 891, 901, 902, 897, 898, 900, 903, 895, 905, - 906, 901, 903, 907, 910, 899, 911, 908, 909, 914, + 852, 862, 852, 998, 857, 860, 852, 861, 852, 864, + 865, 863, 861, 852, 865, 862, 863, 863, 852, 866, + 867, 868, 869, 864, 870, 867, 865, 869, 871, 872, + 874, 875, 880, 868, 866, 867, 874, 875, 870, 876, + 877, 877, 878, 872, 879, 876, 881, 878, 882, 871, + 879, 884, 885, 958, 880, 886, 889, 885, 887, 888, + 888, 889, 891, 884, 890, 881, 882, 883, 883, 886, + 887, 892, 890, 883, 958, 883, 891, 893, 894, 894, + 895, 883, 897, 899, 895, 900, 883, 883, 897, 898, + 892, 901, 898, 883, 902, 903, 893, 901, 900, 902, - 910, 917, 902, 905, 916, 907, 908, 909, 912, 918, - 906, 919, 920, 911, 912, 914, 921, 922, 916, 923, - 927, 917, 922, 930, 923, 919, 932, 926, 918, 927, - 920, 921, 926, 928, 928, 929, 930, 935, 933, 936, - 935, 929, 932, 933, 933, 934, 934, 937, 938, 934, - 939, 941, 940, 936, 942, 943, 944, 945, 946, 947, - 942, 950, 944, 946, 938, 940, 941, 937, 939, 953, - 14, 949, 945, 947, 949, 943, 951, 956, 952, 954, - 959, 951, 950, 952, 954, 953, 955, 958, 960, 956, - 964, 955, 961, 958, 960, 963, 959, 967, 961, 962, + 905, 906, 899, 907, 909, 908, 910, 911, 912, 905, + 906, 908, 911, 909, 903, 913, 914, 916, 915, 907, + 919, 918, 917, 922, 925, 910, 916, 918, 912, 913, + 915, 917, 920, 924, 926, 927, 914, 919, 920, 922, + 928, 929, 0, 930, 925, 931, 934, 924, 930, 927, + 931, 934, 935, 926, 936, 936, 929, 937, 928, 938, + 940, 935, 941, 937, 944, 942, 942, 941, 941, 942, + 943, 945, 938, 943, 946, 947, 940, 950, 944, 948, + 949, 951, 952, 950, 953, 964, 955, 0, 952, 954, + 946, 945, 948, 947, 954, 949, 961, 964, 959, 953, - 962, 968, 965, 969, 963, 965, 966, 966, 964, 970, - 972, 971, 970, 973, 979, 967, 972, 974, 980, 973, - 968, 975, 974, 969, 971, 976, 975, 977, 981, 986, - 976, 982, 979, 977, 981, 984, 982, 985, 980, 983, - 983, 987, 988, 990, 984, 988, 985, 986, 989, 991, - 992, 989, 993, 994, 990, 995, 999, 996, 997, 994, - 987, 995, 992, 997, 998, 998, 1000, 991, 1003, 1001, - 1002, 993, 996, 1004, 1002, 999, 1005, 1006, 1008, 1011, - 1000, 1001, 1004, 1009, 1009, 1012, 1003, 1013, 1017, 1014, - 1016, 1016, 1015, 1011, 1014, 1005, 13, 1008, 1018, 1013, + 955, 951, 957, 959, 960, 957, 962, 967, 963, 960, + 966, 962, 961, 963, 968, 969, 966, 970, 970, 971, + 968, 969, 972, 967, 973, 974, 974, 973, 971, 975, + 976, 977, 978, 979, 982, 978, 980, 981, 985, 982, + 972, 987, 980, 981, 985, 983, 979, 975, 984, 976, + 983, 977, 988, 984, 989, 992, 990, 991, 991, 987, + 989, 990, 993, 994, 992, 995, 996, 997, 999, 996, + 997, 993, 988, 1000, 1001, 1004, 1002, 1003, 1006, 1006, + 1007, 994, 1002, 1003, 995, 1000, 999, 1005, 1008, 1009, + 1004, 1010, 1005, 1001, 1011, 1010, 1012, 1013, 1014, 1007, - 1012, 1015, 1006, 1019, 1018, 1020, 1023, 1022, 1017, 1019, - 1020, 1021, 1022, 1021, 1024, 1026, 1025, 1027, 1028, 1029, - 1023, 1025, 1030, 1032, 1032, 1028, 1033, 1034, 1024, 1035, - 1026, 1036, 1037, 1145, 1029, 1145, 1027, 1036, 1040, 1040, - 1033, 1030, 1038, 1041, 1035, 1034, 1043, 1038, 1041, 1042, - 1042, 1044, 1037, 1043, 1045, 1046, 1038, 1045, 1038, 1047, - 1048, 1038, 1049, 1050, 1052, 1044, 1051, 1049, 1053, 1048, - 1058, 1051, 1055, 1055, 1046, 1052, 1056, 1047, 1057, 1059, - 1064, 1056, 1050, 1057, 1059, 1060, 1061, 1053, 1062, 1060, - 1058, 1063, 1065, 1066, 1067, 1061, 1069, 1068, 1070, 1064, + 1016, 1009, 1008, 1017, 1017, 1012, 1019, 1020, 1022, 1021, + 1024, 1024, 1011, 1022, 1025, 1023, 1013, 1040, 1040, 1016, + 1019, 1021, 1020, 1014, 1023, 1026, 1027, 1029, 1028, 1029, + 1030, 1026, 1027, 1028, 1025, 1030, 1031, 1032, 1033, 1034, + 1035, 1037, 1038, 1033, 1041, 1042, 1044, 1043, 1045, 1069, + 1031, 1032, 1044, 1069, 1034, 1046, 1037, 0, 1041, 1035, + 1046, 1038, 1043, 1042, 1048, 1048, 1051, 1049, 1045, 1046, + 1052, 1046, 1049, 1051, 1046, 1050, 1050, 1053, 1054, 1056, + 1053, 1055, 1057, 1058, 1052, 1060, 1059, 1057, 1056, 1061, + 1060, 1062, 1064, 1064, 1067, 0, 1065, 1054, 1059, 1055, - 1071, 1067, 1073, 1062, 1065, 1072, 1063, 1074, 1066, 1068, - 1075, 1072, 1076, 1081, 1078, 1069, 1080, 1073, 1071, 1070, - 1078, 1076, 1079, 1082, 1080, 1083, 1084, 1074, 1082, 1085, - 1075, 1084, 1084, 1081, 1087, 1086, 1079, 1083, 1088, 1088, - 1090, 0, 1091, 1093, 1093, 1095, 1092, 1087, 1085, 1086, - 1089, 1091, 1092, 1090, 1095, 1089, 1094, 1097, 1089, 1089, - 1096, 1094, 1097, 1089, 1100, 1098, 1096, 1099, 1099, 1089, - 1098, 1101, 1101, 1089, 1102, 1103, 1104, 1102, 1105, 1102, - 1106, 1107, 1108, 1109, 1110, 1100, 1107, 1105, 1112, 1147, - 1110, 1111, 1147, 1112, 1104, 1103, 1108, 1111, 1113, 1114, + 1061, 1065, 1058, 1066, 1068, 1071, 1070, 1072, 1066, 1068, + 1062, 1073, 1074, 1075, 1067, 1070, 1076, 1077, 1078, 1079, + 1071, 1080, 1072, 1076, 1074, 1081, 1082, 1083, 1075, 1077, + 1073, 1081, 1084, 1085, 1088, 1089, 1090, 1078, 1087, 1080, + 1079, 1082, 1085, 1089, 1087, 1091, 1092, 1083, 1088, 1093, + 1091, 1094, 1084, 1095, 1093, 1093, 1090, 1100, 1092, 1096, + 1097, 1097, 1099, 1101, 1102, 1102, 1100, 1095, 1104, 1101, + 1094, 1103, 1096, 1098, 1105, 1099, 1103, 1104, 1098, 1106, + 1105, 1098, 1098, 1107, 1106, 1109, 1098, 1112, 1107, 1108, + 1108, 1113, 1098, 1110, 1110, 1111, 1098, 1115, 1111, 1114, - 1106, 1109, 1113, 1115, 1115, 1117, 1116, 1116, 1114, 1116, - 1119, 1120, 1121, 1114, 1119, 1114, 1117, 1114, 1122, 1114, - 1125, 1127, 1124, 1123, 1128, 1129, 1120, 1122, 1123, 1123, - 1121, 1124, 1126, 1128, 1130, 1127, 1131, 1126, 1134, 1132, - 1133, 1133, 1125, 1135, 1129, 1132, 1134, 1136, 1137, 1138, - 1131, 1139, 1136, 1130, 1140, 1141, 1143, 1135, 1138, 1149, - 1141, 1150, 1137, 1142, 1142, 1144, 1144, 1148, 1152, 1139, - 1150, 1143, 1148, 1151, 1151, 1153, 1153, 1155, 1149, 1140, - 1154, 1154, 1155, 1156, 1157, 1158, 1158, 1159, 1152, 1160, - 1161, 1162, 1160, 1163, 1165, 1164, 1162, 1164, 1167, 1168, + 1111, 1117, 1118, 1124, 1124, 1116, 1109, 1112, 1114, 1113, + 1116, 1121, 1119, 1120, 1123, 1117, 1121, 1115, 1119, 1120, + 1118, 1122, 1126, 1123, 1129, 1122, 1125, 1125, 1123, 1125, + 1123, 1128, 1123, 1126, 1123, 1128, 1130, 1131, 1132, 1129, + 1133, 1134, 1135, 1132, 1132, 1136, 1131, 1135, 1137, 1133, + 1138, 1139, 1140, 1144, 1130, 1141, 1148, 1137, 1146, 1136, + 1143, 1141, 1149, 1134, 1142, 1142, 1140, 1144, 1143, 1138, + 1139, 1145, 1146, 1147, 1148, 1150, 1145, 1151, 1151, 1152, + 1150, 1158, 1147, 1153, 1153, 1157, 1154, 1149, 1154, 1156, + 1157, 1161, 1156, 1159, 1152, 1160, 1160, 1162, 1162, 1165, - 0, 1167, 1163, 1169, 1156, 1157, 1170, 1159, 1169, 1172, - 1161, 1171, 1165, 1173, 1168, 1177, 1171, 1172, 1173, 1174, - 1170, 1175, 1175, 1176, 1174, 1178, 1180, 1179, 1176, 1182, - 1183, 1178, 1184, 1177, 1179, 1182, 1183, 1184, 1185, 1180, - 1186, 1187, 1188, 1190, 1185, 1189, 1189, 1192, 1193, 1186, - 1194, 1195, 1196, 1188, 1199, 1198, 1194, 1195, 1196, 1200, - 1187, 1198, 1205, 1190, 1201, 1203, 1202, 1192, 1199, 1204, - 1204, 1193, 1206, 1207, 1199, 1210, 1201, 1209, 1209, 1200, - 1202, 1208, 1205, 1203, 1211, 1213, 1208, 1214, 1215, 1211, - 1216, 1207, 1214, 1214, 1217, 1218, 1219, 1206, 1210, 1216, + 1158, 1164, 1159, 1163, 1163, 1166, 1164, 1167, 1167, 1168, + 1169, 1161, 1170, 1169, 1171, 1172, 1173, 1174, 1173, 1171, + 1165, 1177, 1176, 1178, 1172, 1176, 1166, 1179, 1178, 1168, + 1186, 1181, 1170, 1180, 0, 1174, 1177, 1182, 1180, 1181, + 1183, 1179, 1182, 1184, 1184, 1183, 1185, 1187, 1186, 1188, + 1189, 1185, 1191, 1187, 1192, 1194, 1188, 1193, 1191, 1195, + 1192, 1194, 1193, 1189, 1196, 1197, 1198, 1198, 1195, 1199, + 1201, 1202, 1203, 1204, 1205, 1207, 1197, 1208, 1203, 1204, + 1205, 1207, 1209, 1196, 1210, 1211, 1212, 1213, 1213, 1199, + 1201, 1208, 1214, 1215, 1202, 1216, 1210, 1208, 1217, 1211, - 1220, 1222, 1217, 1222, 1213, 1221, 1215, 1223, 1225, 1218, - 1221, 1219, 1226, 1221, 1225, 1220, 1226, 1227, 1220, 1228, - 1229, 1223, 1230, 1231, 1228, 1228, 1232, 1233, 1227, 1234, - 1235, 1232, 1237, 1238, 1234, 1239, 1240, 1240, 1241, 1229, - 1242, 1231, 1241, 1243, 1245, 1233, 1237, 1246, 1230, 1244, - 1235, 1238, 1248, 1239, 1247, 1244, 1245, 1249, 1242, 1250, - 1251, 1254, 1243, 1252, 1253, 1251, 1246, 1248, 1247, 1253, - 1252, 1255, 1249, 1256, 1256, 1257, 1258, 1259, 1250, 1254, - 1255, 1260, 1258, 1261, 1269, 1262, 1260, 1263, 1263, 1261, - 1257, 1262, 1264, 1264, 1266, 1266, 1267, 1268, 1259, 1270, + 1218, 1218, 1209, 1217, 1212, 1219, 1220, 1222, 1225, 1223, + 1227, 1220, 1214, 1216, 1223, 1223, 1224, 1225, 1215, 1226, + 1228, 1229, 0, 1232, 1227, 1230, 1222, 1226, 1219, 1231, + 1230, 1231, 1234, 1230, 1224, 1228, 1229, 1232, 1234, 1229, + 1235, 1236, 1237, 1238, 1235, 1239, 1240, 1237, 1237, 1241, + 1242, 1243, 1236, 1244, 1241, 1242, 1245, 1248, 1244, 1247, + 1249, 1252, 1238, 1251, 1240, 1250, 1250, 1251, 1253, 1243, + 1255, 1239, 1256, 1247, 1254, 1248, 1245, 1258, 1249, 1252, + 1254, 1257, 1255, 1259, 1260, 1261, 1262, 1253, 1264, 1263, + 1261, 1256, 1258, 1262, 1263, 1257, 1265, 1267, 1259, 1266, - 1267, 1271, 1269, 1272, 1273, 1273, 1268, 1274, 1277, 1275, - 1272, 1278, 1281, 1270, 1276, 1279, 1271, 1275, 1280, 1276, - 1279, 1279, 1277, 1280, 1280, 1282, 1282, 1274, 1283, 1284, - 1278, 1285, 1281, 1286, 1287, 1288, 1289, 1290, 1286, 1291, - 1285, 1292, 1294, 1290, 1291, 1293, 1295, 1283, 1284, 1297, - 1296, 1293, 1295, 1287, 1289, 1288, 1296, 1298, 1299, 1300, - 1301, 1294, 1302, 1306, 1303, 1304, 1304, 1292, 1297, 1305, - 1307, 1307, 1305, 1311, 1301, 1306, 1298, 1299, 1300, 1303, - 1308, 1308, 1309, 1302, 1310, 1312, 1311, 1309, 1310, 1313, - 1314, 1318, 1314, 1316, 1312, 1317, 1314, 1319, 1320, 1325, + 1266, 1268, 1269, 1260, 1270, 1265, 1264, 1268, 1271, 1270, + 1272, 1277, 1267, 1279, 1271, 1277, 1272, 1273, 1273, 1274, + 1274, 1276, 1276, 1269, 1278, 1280, 1281, 1282, 1283, 1283, + 1284, 1279, 1285, 1278, 1282, 1287, 1288, 1286, 1289, 1280, + 1285, 1281, 1286, 1289, 1289, 1291, 1290, 1292, 1292, 1287, + 1284, 1290, 1290, 1293, 1294, 1288, 1296, 1295, 1297, 1298, + 1299, 1296, 1300, 1302, 1301, 1291, 1295, 1304, 1300, 1301, + 1303, 1307, 1293, 1294, 1305, 1306, 1303, 1297, 1299, 1298, + 1305, 1306, 1308, 1309, 1310, 1311, 1304, 1312, 1316, 1302, + 1307, 1313, 1314, 1314, 1315, 1317, 1317, 1315, 1321, 1311, - 1317, 1323, 1313, 1321, 1321, 1322, 1318, 1323, 1324, 1314, - 1322, 1316, 1325, 1326, 1320, 1327, 1328, 1319, 1326, 1327, - 1328, 1329, 1330, 1324, 1331, 1332, 1333, 1333, 1335, 1337, - 1338, 1332, 1339, 1339, 1341, 1338, 1340, 1343, 1343, 1347, - 1330, 1329, 1340, 1348, 1331, 1345, 1335, 1351, 1345, 1352, - 1337, 1346, 1346, 1350, 1341, 1347, 1350, 1354, 1352, 1348, - 1353, 1353, 1355, 1356, 1357, 1358, 1360, 1351, 1361, 1357, - 1359, 1359, 1354, 1362, 1363, 1360, 1364, 1364, 1365, 1358, - 1366, 1368, 1356, 1355, 1367, 1371, 1361, 1373, 1362, 1367, - 1369, 1369, 1365, 1370, 1372, 1372, 1368, 1370, 1366, 1363, + 1316, 1308, 1309, 1310, 1318, 1318, 1313, 1319, 1312, 1320, + 1322, 1321, 1319, 1320, 1323, 1324, 1328, 1324, 1326, 1322, + 1327, 1324, 1329, 1330, 1335, 1327, 1333, 1323, 1331, 1331, + 1332, 1328, 1333, 1334, 1324, 1332, 1326, 1335, 1336, 1330, + 1337, 1338, 1329, 1336, 1337, 1338, 1339, 1340, 1334, 1341, + 1342, 1343, 1343, 1345, 1347, 1348, 1342, 1349, 1349, 1351, + 1348, 1350, 1353, 1353, 1357, 1340, 1339, 1350, 1358, 1341, + 1355, 1345, 1361, 1355, 1362, 1347, 1356, 1356, 1360, 1351, + 1357, 1360, 1364, 1362, 1358, 1363, 1363, 1365, 1366, 1367, + 1368, 1370, 1361, 1371, 1367, 1369, 1369, 1364, 1372, 1373, - 1374, 1376, 1375, 1377, 1380, 1371, 1375, 1381, 1377, 1373, - 1382, 1374, 1379, 1379, 1383, 1384, 1385, 1385, 1386, 1387, - 1376, 1381, 1380, 1386, 1388, 1389, 1390, 1391, 1383, 1382, - 1382, 1390, 1393, 1392, 1389, 1392, 1394, 1393, 1395, 1387, - 1384, 1398, 1394, 1396, 1388, 1399, 1399, 1391, 1400, 1396, - 1401, 1404, 1403, 1405, 1405, 1398, 1401, 1403, 1395, 1406, - 1406, 1408, 1407, 1409, 1413, 1410, 1415, 1400, 1410, 1411, - 1411, 1412, 1415, 1421, 1414, 1404, 1407, 1414, 1409, 1408, - 1414, 1416, 1417, 1412, 1413, 1417, 1416, 1419, 1420, 1423, - 1430, 1422, 1414, 1420, 1422, 1423, 1419, 1424, 1421, 1425, + 1370, 1374, 1374, 1375, 1368, 1376, 1378, 1366, 1365, 1377, + 1381, 1371, 1383, 1372, 1377, 1379, 1379, 1375, 1380, 1382, + 1382, 1378, 1380, 1376, 1373, 1384, 1386, 1385, 1387, 1390, + 1381, 1385, 1391, 1387, 1383, 1392, 1384, 1389, 1389, 1393, + 1394, 1395, 1395, 1396, 1397, 1386, 1391, 1390, 1396, 1398, + 1399, 1400, 1401, 1393, 1392, 1392, 1400, 1403, 1402, 1399, + 1402, 1404, 1403, 1405, 1397, 1394, 1408, 1404, 1406, 1398, + 1409, 1409, 1401, 1410, 1406, 1411, 1414, 1413, 1415, 1415, + 1408, 1411, 1413, 1405, 1416, 1416, 1418, 1417, 1419, 1423, + 1420, 1425, 1410, 1420, 1421, 1421, 1422, 1425, 1431, 1424, - 1425, 1417, 1424, 1426, 1426, 1427, 1429, 1428, 1430, 1431, - 1432, 1427, 1428, 1433, 1434, 1435, 1433, 1436, 1437, 1429, - 1434, 1435, 1436, 1438, 1437, 1442, 1439, 1443, 1431, 1441, - 1432, 1439, 1440, 1440, 1441, 1444, 1445, 1446, 1449, 1450, - 1447, 1448, 1451, 1442, 1449, 1453, 1438, 1443, 1456, 1452, - 1445, 1446, 1447, 1457, 1448, 1444, 1455, 1455, 1457, 1450, - 1458, 1458, 1451, 1452, 1459, 1461, 1453, 1460, 1456, 1462, - 1464, 1463, 1467, 1471, 1466, 1465, 1469, 1473, 1473, 1459, - 1463, 1460, 1465, 1466, 1476, 1464, 1466, 1462, 1467, 1461, - 1472, 1469, 1475, 1472, 1474, 1474, 1469, 1477, 1471, 1479, + 1414, 1417, 1424, 1419, 1418, 1424, 1426, 1427, 1422, 1423, + 1427, 1426, 1429, 1430, 1433, 1433, 1432, 1424, 1430, 1432, + 1435, 1429, 1434, 1431, 1440, 1435, 1427, 1438, 1434, 1436, + 1436, 1437, 1437, 1438, 1439, 1441, 1442, 1440, 1443, 1439, + 1444, 1445, 1446, 1444, 1447, 1448, 1449, 1445, 1446, 1447, + 1453, 1448, 1450, 1441, 1454, 1442, 1452, 1450, 1443, 1451, + 1451, 1452, 1455, 1456, 1457, 1460, 1461, 1458, 1453, 1449, + 1459, 1460, 1462, 1463, 1454, 1464, 1470, 1456, 1457, 1458, + 1466, 1466, 1455, 1459, 1467, 1468, 1461, 1463, 1469, 1469, + 1468, 1470, 1462, 1471, 1472, 1473, 1464, 1474, 1476, 1475, - 1477, 1480, 1476, 1481, 1475, 1478, 1478, 1483, 1481, 1482, - 1485, 1484, 1479, 1486, 1482, 1488, 1487, 1489, 1491, 1485, - 1480, 1490, 1490, 1489, 1488, 1487, 1483, 1484, 1487, 1492, - 1493, 1494, 1486, 1495, 1496, 1499, 1500, 1502, 1491, 1501, - 1501, 1503, 1492, 1505, 1505, 1494, 1496, 1504, 1493, 1495, - 1503, 1507, 1504, 1502, 1500, 1506, 1507, 1508, 1505, 1509, - 1499, 1510, 1513, 1511, 1506, 1515, 1514, 1506, 1511, 1511, - 1518, 0, 1516, 1519, 1519, 1508, 1513, 1516, 1517, 1510, - 1509, 1514, 1525, 1520, 1517, 1521, 1522, 1515, 1518, 1520, - 1521, 1523, 1522, 1526, 1527, 1528, 1529, 1523, 1530, 1529, + 1477, 1478, 1482, 1486, 1467, 1476, 1474, 1471, 1480, 1477, + 1484, 1484, 1477, 1473, 1475, 1486, 1483, 1478, 1472, 1483, + 1485, 1485, 1487, 1480, 1489, 1489, 1488, 1482, 1480, 1488, + 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1492, 1493, 1497, + 1487, 1503, 1500, 1490, 1502, 1496, 1499, 1498, 1500, 1504, + 1491, 1495, 1505, 1494, 1503, 1499, 1498, 1506, 1497, 1498, + 1501, 1501, 1507, 1510, 1502, 1511, 1505, 1504, 1512, 1512, + 1513, 1514, 1515, 1506, 1507, 1516, 1516, 1515, 1519, 1518, + 1514, 1520, 1517, 1511, 1518, 1521, 1513, 1522, 1510, 1525, + 1516, 1517, 1522, 1522, 1517, 1524, 1519, 1526, 1529, 0, - 1527, 1532, 1525, 1534, 1530, 1529, 1535, 1526, 1528, 1532, - 1536, 1537, 1559, 1538, 1539, 1540, 1541, 1559, 1536, 1545, - 1537, 1547, 1534, 1542, 1542, 1535, 1538, 1539, 1543, 1540, - 1541, 1544, 1545, 1548, 1543, 1546, 1546, 1544, 1549, 1550, - 1551, 1547, 1552, 1553, 1554, 1542, 1551, 1556, 1556, 1557, - 1558, 1548, 1550, 1560, 1558, 1561, 1562, 1549, 1560, 1553, - 1561, 1563, 1554, 1565, 1552, 1562, 1566, 1566, 1567, 1557, - 1568, 1569, 1570, 1570, 1571, 1575, 1572, 1573, 1565, 1574, - 1576, 1578, 1568, 1572, 1563, 1579, 1577, 1567, 1571, 1573, - 1569, 1574, 1577, 1578, 1575, 1580, 1581, 1581, 1586, 1582, + 1527, 1528, 1520, 1521, 1525, 1527, 1531, 1528, 1532, 1524, + 1530, 1530, 1531, 1532, 1533, 1534, 1529, 1536, 1537, 1526, + 1533, 1534, 1538, 1539, 1540, 1541, 1543, 1540, 1538, 1545, + 1546, 1541, 1537, 1540, 1543, 1547, 1539, 1536, 1548, 1549, + 1550, 1551, 1552, 1547, 1553, 1553, 1556, 1548, 1545, 1546, + 1558, 1554, 1549, 1550, 1555, 1551, 1552, 1554, 1559, 1556, + 1555, 1557, 1557, 1560, 1561, 1562, 1553, 1563, 1564, 1565, + 1558, 1562, 1567, 1567, 1568, 1569, 1559, 1561, 1570, 1569, + 1571, 1572, 1560, 1570, 1564, 1571, 1572, 1565, 1573, 1563, + 1574, 1576, 1577, 1577, 1568, 1578, 1579, 1573, 1580, 1581, - 1576, 1580, 1582, 1579, 1583, 1583, 1585, 1586, 1587, 1588, - 1588, 1585, 1589, 1590, 1587, 1590, 1591, 1592, 1593, 1591, - 1594, 1595, 1596, 1597, 1589, 1600, 1601, 1596, 1599, 1598, - 1600, 1602, 1597, 1606, 1606, 1601, 1608, 1592, 1594, 1595, - 1593, 1598, 1603, 1599, 1604, 1605, 1607, 1603, 1601, 1604, - 1609, 1602, 1607, 1611, 1603, 1610, 1612, 1608, 1612, 1617, - 1605, 1613, 1614, 1614, 1615, 1615, 1616, 1616, 1620, 1609, - 1621, 1610, 1623, 1611, 0, 1613, 1623, 1613, 1628, 1617, - 1618, 1618, 1619, 1619, 1622, 1622, 1624, 1625, 1627, 1620, - 1625, 1621, 1624, 1629, 1627, 1630, 1628, 1631, 1636, 1629, + 1581, 1582, 1583, 1586, 1584, 1587, 1576, 1585, 1579, 1583, + 1590, 1589, 1588, 1574, 1578, 1582, 1584, 1580, 1588, 1585, + 1591, 1593, 1586, 1589, 1593, 1587, 1591, 1597, 1590, 1592, + 1592, 1594, 1594, 1596, 1598, 1600, 1597, 1601, 1596, 1601, + 1598, 1599, 1599, 1602, 1603, 1604, 1602, 1600, 1605, 1607, + 1606, 1608, 1611, 1609, 1607, 1610, 1613, 1611, 1615, 1619, + 1608, 0, 1612, 1615, 1603, 1609, 1605, 1604, 1606, 1614, + 1610, 1612, 1616, 1618, 1614, 1621, 1613, 1617, 1617, 1618, + 1619, 1614, 1622, 1623, 1612, 1625, 1624, 1616, 1624, 1626, + 1626, 1627, 1627, 1629, 1621, 1628, 1628, 1632, 1622, 1625, - 1631, 1632, 1632, 1633, 1633, 1634, 1637, 1638, 0, 1635, - 1639, 1634, 1643, 1638, 1643, 1642, 1644, 1645, 1636, 1641, - 1630, 1635, 1635, 1635, 1641, 1641, 1637, 1644, 1635, 1642, - 1639, 1646, 1645, 1647, 1648, 1649, 1651, 1646, 1650, 1650, - 1652, 1652, 1647, 1653, 1654, 1655, 1655, 1656, 1656, 1657, - 1660, 1660, 1661, 1665, 1648, 1662, 1649, 1668, 1664, 1666, - 1667, 1667, 1651, 1653, 1662, 1666, 1654, 1664, 1669, 1657, - 1672, 1671, 1670, 1674, 1665, 1673, 1673, 1661, 1668, 1670, - 1671, 1675, 1677, 1669, 1678, 1679, 1680, 1677, 1681, 1682, - 1678, 1683, 1683, 1680, 1681, 1682, 1672, 1675, 1684, 1674, + 1633, 1625, 1640, 1623, 1630, 1630, 1631, 1631, 1634, 1634, + 1635, 1636, 1637, 1629, 1635, 1637, 1639, 1636, 1632, 1641, + 1640, 1633, 1639, 1642, 1643, 1641, 1646, 1643, 1644, 1644, + 1645, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, + 1660, 1657, 1650, 1653, 1653, 1647, 1647, 1647, 1642, 1655, + 1656, 1655, 1647, 1654, 1648, 1649, 1657, 1651, 1658, 1659, + 1660, 1656, 1661, 1663, 1658, 1662, 1662, 1665, 1659, 1664, + 1664, 1666, 1667, 1667, 1668, 1668, 1669, 1672, 1672, 1673, + 1677, 1674, 1676, 1661, 1679, 1679, 1678, 1665, 1680, 1663, + 1674, 1676, 1678, 1666, 1683, 1681, 1669, 1684, 1682, 1685, - 1685, 1686, 1688, 1684, 1687, 1679, 1690, 1689, 1691, 1685, - 1689, 1692, 1692, 1693, 1688, 1695, 1694, 1696, 1699, 1693, - 1700, 1686, 1694, 1687, 1690, 1697, 1701, 1702, 1702, 1697, - 1703, 1701, 1696, 1704, 1691, 1695, 1706, 1707, 1699, 0, - 1708, 1707, 1700, 1709, 1714, 1697, 1708, 1712, 1704, 1703, - 1710, 1710, 1709, 1711, 1715, 1706, 1716, 1711, 1712, 1713, - 1713, 1717, 1718, 1712, 1719, 1714, 1717, 1720, 1715, 1722, - 1721, 1723, 1723, 1720, 1722, 1716, 1724, 1724, 1727, 1725, - 1728, 1729, 1718, 1725, 1719, 1721, 1736, 1727, 1730, 1730, - 1737, 1728, 1732, 1732, 1733, 1737, 1728, 1734, 1735, 1733, + 1685, 1677, 1686, 1683, 1673, 1682, 1687, 1689, 1690, 1680, + 1681, 1691, 1689, 1692, 1690, 1693, 1695, 1695, 1694, 1698, + 1692, 1693, 1687, 1684, 1694, 1696, 1697, 1699, 1686, 1700, + 1696, 1691, 1702, 1701, 1703, 1697, 1701, 1704, 1704, 1698, + 1708, 1700, 1705, 1706, 1707, 1711, 1699, 1709, 1705, 1706, + 1702, 1709, 1712, 1713, 1715, 1708, 1714, 1714, 1713, 1718, + 1703, 1716, 1719, 1720, 1707, 1711, 1719, 1709, 1721, 1720, + 1722, 1722, 1724, 1715, 1712, 1723, 1716, 1721, 1718, 1723, + 1725, 1725, 1726, 1724, 1727, 1728, 1729, 1730, 1724, 1731, + 1732, 1729, 1734, 1733, 1735, 1735, 1732, 1734, 1727, 1736, - 1733, 1729, 1738, 1734, 1735, 1739, 1741, 1743, 1744, 1742, - 1745, 1739, 1736, 1742, 1738, 1746, 1745, 1747, 1741, 1743, - 1748, 1751, 1750, 1747, 1752, 1754, 1755, 1755, 1754, 1752, - 1756, 1756, 1748, 1744, 1750, 1757, 1757, 1746, 1758, 1759, - 1751, 1760, 1763, 1761, 1762, 1759, 0, 1760, 1761, 1765, - 1762, 1763, 1767, 1768, 1765, 1767, 1769, 1769, 1758, 1771, - 1772, 1773, 1774, 1774, 1775, 1768, 1773, 1778, 1778, 1776, - 1777, 1771, 1772, 1775, 1776, 1777, 1779, 1780, 1783, 1781, - 1782, 1785, 1783, 1784, 1786, 1787, 1780, 1785, 1784, 1788, - 1789, 1791, 1791, 1792, 1787, 1797, 1779, 1781, 0, 1782, + 1736, 1737, 1739, 1726, 1728, 1737, 1740, 1730, 1733, 1731, + 1741, 1739, 1742, 1742, 1744, 1744, 1748, 1740, 1745, 1746, + 1747, 1750, 1740, 1745, 1745, 1746, 1747, 1749, 1751, 1753, + 1741, 1754, 1749, 1750, 1751, 1754, 1755, 1756, 1757, 1758, + 1759, 1753, 1748, 1760, 1757, 1762, 1759, 1763, 1755, 1764, + 1766, 1767, 1767, 1766, 1764, 1760, 1770, 1762, 1768, 1768, + 0, 1758, 1756, 1769, 1769, 1771, 1763, 1772, 1775, 1773, + 1777, 1771, 1774, 1772, 1773, 1777, 1770, 1775, 1774, 1779, + 1780, 1783, 1779, 1781, 1781, 1784, 1785, 1786, 1786, 1787, + 1788, 1785, 1780, 1783, 1789, 1788, 1791, 1784, 1787, 1789, - 1793, 1795, 1786, 1791, 1789, 1794, 1794, 1788, 1796, 1793, - 1795, 1792, 1798, 1799, 1802, 1802, 1797, 1798, 1804, 1805, - 1796, 1804, 1806, 1809, 1808, 1810, 1799, 1811, 1812, 1812, - 1813, 1810, 1813, 1814, 1814, 1805, 1817, 1809, 1806, 1808, - 1815, 1818, 1820, 1817, 1811, 1819, 1819, 1821, 1815, 1825, - 1822, 1820, 1823, 1824, 1826, 1830, 1832, 1827, 1829, 1831, - 1831, 1818, 1822, 1827, 1823, 1824, 1833, 1830, 1821, 1826, - 1834, 1836, 1835, 1834, 1832, 1825, 1827, 1835, 1829, 1838, - 1839, 1840, 1839, 1841, 1838, 1842, 1833, 1844, 1841, 1846, - 1850, 1836, 1842, 1847, 1848, 1849, 1844, 1849, 1852, 1840, + 1790, 1790, 1792, 1793, 1794, 1795, 1798, 1796, 1797, 1795, + 1799, 1792, 1796, 1800, 1797, 1801, 1791, 1804, 1805, 1799, + 1809, 1793, 1808, 1794, 1798, 1803, 1803, 1805, 0, 1801, + 1807, 1800, 1806, 1806, 1808, 1804, 1811, 1803, 1810, 1807, + 1817, 1809, 1818, 1810, 1814, 1814, 1820, 1816, 1821, 1811, + 1816, 1822, 1823, 1824, 1824, 1830, 1817, 1822, 1818, 1826, + 1826, 1820, 1821, 1825, 1827, 1825, 1829, 1831, 1831, 1823, + 1832, 1833, 1827, 1829, 1834, 1830, 1835, 1836, 1837, 1832, + 1838, 1839, 1841, 1844, 1842, 1845, 1834, 1839, 1835, 1836, + 1843, 1843, 1833, 1847, 1846, 1838, 1842, 1846, 1847, 1848, - 1852, 1853, 1847, 1854, 1854, 1855, 1848, 1846, 1856, 1850, - 1857, 1858, 1857, 1856, 1859, 1853, 1858, 1860, 1861, 1859, - 1862, 1864, 1863, 1867, 1865, 1868, 1862, 1863, 1869, 1869, - 1871, 1855, 1865, 1872, 1864, 1860, 1870, 1870, 1861, 1868, - 1873, 1876, 1867, 1874, 1877, 1871, 1873, 1875, 1874, 1875, - 1878, 1878, 1877, 1872, 1879, 1880, 1880, 1881, 1881, 1876, - 1877, 1882, 1883, 1884, 1886, 1888, 1879, 1883, 1891, 1887, - 1882, 1887, 1889, 1886, 1890, 1893, 1886, 1889, 1889, 1894, - 1891, 1884, 1897, 1890, 1894, 1895, 1888, 1893, 1898, 1899, - 1895, 1900, 1900, 1901, 1902, 1897, 1904, 1903, 1899, 1905, + 1839, 1844, 1841, 1850, 1837, 1845, 1852, 1851, 1850, 1851, + 1853, 1854, 1856, 1858, 1859, 1853, 1860, 1862, 1854, 1848, + 1861, 1856, 1861, 1859, 1852, 1864, 1865, 1864, 1860, 1866, + 1866, 1858, 1867, 1868, 1870, 1869, 1862, 1869, 1868, 1870, + 1865, 1871, 1872, 1873, 1874, 1877, 1871, 1875, 1876, 1879, + 1874, 1880, 1875, 1877, 1881, 1881, 1882, 1882, 1867, 1883, + 1872, 1876, 1884, 1873, 1885, 1880, 1886, 1887, 1879, 1887, + 1885, 1886, 1888, 1889, 1883, 1890, 1890, 1892, 1892, 1891, + 1896, 1889, 1884, 1893, 1893, 1894, 1900, 1895, 1898, 1889, + 1888, 1891, 1895, 1899, 1894, 1899, 1901, 1898, 1896, 1902, - 1909, 1910, 1911, 1907, 1908, 1918, 1910, 1911, 1898, 1912, - 1904, 1901, 1902, 1903, 1905, 1907, 1908, 1915, 1912, 1917, - 1909, 1920, 1919, 1915, 1921, 1917, 1922, 1926, 1918, 1923, - 1923, 1924, 1925, 1925, 1927, 1922, 1915, 1919, 1927, 1920, - 1924, 1929, 1928, 1935, 0, 1930, 1926, 1928, 1934, 1921, - 1930, 1930, 1931, 1932, 1929, 1944, 1934, 1933, 1931, 1932, - 1933, 1938, 1938, 1935, 1939, 1939, 1940, 1941, 1941, 1942, - 1942, 1943, 1945, 1944, 1950, 1940, 1946, 1949, 1945, 1939, - 1950, 1946, 1949, 1943, 1947, 1947, 1948, 1948, 1952, 1953, - 1939, 1954, 1952, 1956, 1957, 1954, 1958, 1959, 1960, 1957, + 1898, 1901, 1901, 1903, 1905, 1906, 1907, 1900, 1902, 1909, + 1906, 1907, 1910, 1913, 1911, 1903, 1905, 1912, 1912, 1914, + 1915, 1916, 1909, 1911, 1917, 1921, 1919, 1933, 1920, 1922, + 1930, 1913, 1910, 1924, 1922, 1916, 1915, 1914, 1919, 1917, + 1920, 1923, 1924, 1927, 1929, 1921, 1923, 1932, 1931, 1927, + 1929, 1934, 1933, 1930, 1935, 1935, 1938, 1936, 1937, 1937, + 1934, 1941, 1927, 1931, 1939, 1932, 1936, 1940, 1939, 0, + 1947, 1942, 1940, 1943, 1941, 1938, 1942, 1942, 1944, 1943, + 1945, 1946, 1952, 1945, 1944, 1950, 1950, 1951, 1951, 1946, + 1947, 1952, 1953, 1953, 1954, 1954, 1955, 1956, 1957, 1964, - 1962, 1963, 1961, 1960, 1965, 1964, 1966, 1966, 1968, 1953, - 1964, 1967, 1959, 1970, 1972, 1967, 1962, 1969, 1956, 1958, - 1961, 1963, 1969, 1968, 1971, 1973, 1965, 1974, 1975, 1978, - 1973, 1976, 1976, 1972, 1979, 1980, 1971, 1978, 1981, 1970, - 1974, 1982, 1984, 1983, 1985, 1986, 1975, 1989, 1989, 1988, - 1994, 1994, 1990, 1979, 1980, 1990, 1985, 1991, 1992, 2005, - 1993, 1981, 1983, 1984, 1988, 1982, 1986, 1995, 1995, 1997, - 1991, 2000, 1992, 1993, 1996, 1996, 1998, 1999, 1999, 2005, - 2000, 2001, 2001, 2000, 1997, 2002, 2004, 2006, 2007, 1998, - 2002, 2004, 2008, 2008, 2009, 2009, 2010, 2011, 2011, 2012, + 1958, 1965, 1951, 1964, 1957, 1958, 1959, 1959, 1955, 1960, + 1960, 1961, 1962, 1951, 1968, 1956, 1961, 1969, 1962, 1966, + 1970, 1965, 1969, 1966, 1972, 1971, 1973, 1975, 1976, 1972, + 1974, 1977, 1979, 1976, 1978, 1978, 1979, 1980, 1982, 1968, + 1971, 1984, 1983, 1970, 1973, 1981, 1974, 1975, 1986, 1987, + 1981, 1985, 1980, 1977, 1983, 1990, 1985, 1988, 1988, 1991, + 1984, 1986, 1992, 1990, 1982, 1993, 1994, 1987, 1995, 2000, + 1996, 1997, 1998, 2001, 2001, 2004, 2002, 2009, 1991, 2002, + 2040, 1992, 2003, 1997, 2000, 2005, 2040, 1995, 1993, 2004, + 1994, 1996, 2009, 1998, 2010, 2003, 2006, 2006, 2005, 2007, - 2007, 2013, 2013, 2014, 2015, 2016, 2016, 2006, 2018, 2015, - 2017, 2017, 2019, 2020, 2021, 2010, 2025, 2012, 2014, 2023, - 2027, 2019, 2018, 0, 2023, 2024, 2024, 2020, 2026, 2026, - 2028, 2029, 2032, 2021, 2029, 2025, 2028, 2033, 2027, 2030, - 2030, 2031, 2031, 2034, 2035, 2035, 2037, 2038, 2039, 2040, - 2042, 2032, 2033, 2040, 2043, 2030, 2041, 2041, 2044, 2043, - 2045, 2048, 2034, 2039, 2047, 2047, 2037, 2049, 2050, 2042, - 2038, 2051, 2052, 2044, 2049, 2045, 2053, 2054, 2054, 2055, - 2059, 2048, 2050, 2056, 2063, 2056, 2064, 2062, 2055, 2051, - 2052, 2057, 2059, 2060, 2057, 2061, 2065, 2063, 2060, 2066, + 2007, 2008, 2008, 2011, 2011, 2012, 2014, 2010, 2013, 2013, + 2016, 2014, 2017, 2018, 2012, 2016, 2019, 2012, 2020, 2020, + 2021, 2021, 2022, 2023, 2023, 2024, 2025, 2025, 2019, 2026, + 2027, 2030, 2017, 2018, 2032, 2027, 2028, 2028, 2029, 2029, + 2031, 2022, 2033, 2024, 2026, 2030, 2035, 2037, 2032, 2031, + 2039, 2035, 2036, 2036, 2038, 2038, 2041, 2042, 2042, 2041, + 2044, 2033, 2043, 2043, 2046, 2045, 2037, 2049, 2039, 2047, + 2047, 2050, 2052, 2042, 2051, 2060, 2052, 2053, 2053, 2044, + 2045, 2054, 2056, 2046, 2057, 2055, 2061, 2049, 2062, 2051, + 2055, 2059, 2059, 2061, 2050, 2060, 2063, 2056, 2064, 2057, - 2061, 2065, 2053, 2068, 2070, 2069, 2072, 2064, 2068, 2057, - 2069, 2057, 2062, 2074, 2071, 2073, 2076, 2075, 2074, 2070, - 2071, 2073, 2075, 2077, 2079, 2066, 2078, 2072, 2080, 2078, - 2081, 2082, 2083, 2079, 2088, 0, 2077, 2080, 2084, 2081, - 2082, 2076, 2085, 2086, 2084, 2094, 2083, 2086, 2085, 2090, - 2091, 2091, 2096, 2092, 2088, 2093, 2093, 2097, 2090, 2092, - 2098, 2098, 2099, 2100, 2093, 2094, 2102, 2094, 2096, 2103, - 2105, 2104, 2100, 2097, 2109, 2108, 2107, 2099, 2102, 2107, - 2108, 2110, 2105, 2111, 2111, 2103, 2104, 2112, 2112, 2114, - 2114, 2116, 2115, 2110, 2109, 2115, 2116, 2117, 2118, 2119, + 2054, 2065, 2062, 2066, 2066, 2068, 2067, 2068, 2069, 2071, + 2074, 2069, 2072, 2073, 2063, 2067, 2064, 2072, 2073, 2075, + 2076, 2071, 2078, 2082, 2077, 2080, 2069, 2065, 2069, 2077, + 2080, 2081, 2075, 2083, 2084, 2074, 2081, 2085, 2082, 2083, + 2086, 2076, 2087, 2085, 2088, 2086, 2089, 2087, 2078, 2090, + 2095, 2091, 2090, 2092, 2093, 2084, 2094, 2100, 0, 2089, + 2091, 2096, 2092, 2093, 2095, 2094, 2097, 2096, 2108, 2088, + 2098, 2102, 2097, 2104, 2098, 2103, 2103, 2100, 2106, 2104, + 2102, 2105, 2105, 2109, 2108, 2110, 2110, 2111, 2112, 2114, + 2105, 2115, 2117, 2116, 2121, 2123, 2123, 2112, 2106, 2109, - 2119, 2120, 2122, 2117, 2118, 2121, 2121, 2123, 2124, 2125, - 2125, 2126, 2127, 2128, 2122, 2120, 2130, 2126, 2128, 2131, - 2130, 2123, 2131, 2132, 2132, 2133, 2127, 2124, 2134, 2135, - 2133, 2136, 2137, 2137, 2138, 2136, 2140, 2134, 2141, 2142, - 2143, 2140, 2144, 2145, 2149, 2146, 2144, 2138, 2151, 2135, - 2146, 2147, 2159, 2159, 2143, 2148, 2161, 2147, 2141, 2142, - 2152, 2148, 2149, 2145, 2151, 2152, 2153, 2154, 2155, 2158, - 2155, 2160, 2153, 2165, 2160, 2154, 2162, 2162, 2166, 2165, - 2164, 2173, 2161, 2158, 2164, 2167, 2167, 2168, 2171, 2171, - 2166, 2175, 2176, 2179, 2180, 2181, 2168, 2182, 2179, 2173, + 2106, 2114, 2111, 2119, 2117, 2120, 2119, 2115, 2116, 2122, + 2120, 2124, 2124, 2128, 2121, 2126, 2126, 2127, 2128, 2129, + 2127, 2122, 2130, 2131, 2131, 2129, 2132, 2134, 2130, 2133, + 2133, 2135, 2136, 2137, 2137, 2138, 2139, 2140, 2147, 2134, + 2132, 2138, 2140, 2142, 0, 2135, 2143, 2142, 2146, 2143, + 2139, 2136, 2144, 2144, 2145, 2150, 2148, 2146, 2147, 2145, + 2148, 2149, 2149, 2153, 2152, 2154, 2155, 2156, 2150, 2152, + 2157, 2156, 2158, 2159, 2161, 2160, 2166, 2158, 2163, 2159, + 2155, 2160, 2164, 2153, 2166, 2154, 2167, 2164, 2167, 2165, + 2157, 2170, 2161, 2173, 2163, 2165, 2171, 2171, 2172, 2174, - 2181, 2189, 2182, 2183, 2183, 2175, 2185, 2185, 2176, 2187, - 2188, 2188, 2190, 2191, 2193, 2187, 2194, 2189, 2191, 2198, - 2180, 2195, 2195, 2197, 2199, 2198, 2200, 2204, 2194, 2202, - 2202, 2205, 2197, 2193, 2190, 2203, 2207, 2207, 2203, 2208, - 2208, 2200, 2199, 2209, 2210, 2211, 2204, 2212, 2209, 2205, - 2214, 2213, 2212, 2213, 2211, 2215, 2216, 2218, 2217, 0, - 2219, 2225, 2210, 2217, 2214, 2219, 2220, 2220, 2216, 2215, - 2221, 2221, 2222, 2222, 2223, 2223, 2224, 2218, 2226, 2225, - 2227, 2227, 2229, 2226, 2228, 2228, 2230, 2231, 2224, 2232, - 2233, 2233, 2234, 2237, 2229, 2235, 2235, 2238, 2230, 2236, + 2174, 2172, 2176, 2177, 2178, 2170, 2176, 2179, 2179, 2177, + 2185, 2180, 2183, 2183, 2188, 2187, 2178, 2191, 2192, 2173, + 2180, 2193, 2191, 2195, 2195, 2199, 2193, 2194, 2185, 2187, + 2188, 2199, 2194, 2197, 2197, 2200, 2200, 2201, 2202, 2205, + 2203, 2209, 2206, 2210, 2192, 2203, 2207, 2207, 2211, 2210, + 2209, 2216, 2212, 2201, 2206, 2214, 2214, 2217, 2205, 2215, + 2202, 2222, 2215, 2219, 2219, 2223, 2211, 2212, 2220, 2220, + 2216, 2221, 2224, 2226, 2223, 2217, 2221, 2224, 2225, 2222, + 2225, 2227, 2228, 2229, 2230, 2231, 0, 2226, 2229, 2237, + 2231, 2232, 2232, 2236, 2228, 2227, 2233, 2233, 2234, 2234, - 2236, 2239, 2240, 2241, 2237, 2232, 2243, 2231, 2239, 2238, - 2242, 2234, 2244, 2246, 2240, 2242, 2245, 2245, 2247, 2248, - 2249, 2250, 2246, 2241, 2251, 2253, 2243, 2252, 2252, 2257, - 2258, 2254, 2244, 2249, 2253, 2255, 2259, 2260, 2251, 2248, - 2260, 2261, 2272, 2262, 2247, 2250, 2254, 2257, 2262, 2263, - 2255, 2271, 2258, 2272, 2263, 2261, 2264, 2264, 2273, 2259, - 2265, 2265, 2266, 2266, 2268, 2268, 2270, 2270, 2275, 2271, - 2277, 2276, 2279, 2278, 2280, 2282, 2281, 2273, 2281, 2283, - 2284, 2279, 2285, 2285, 2287, 2287, 2288, 2289, 2275, 2276, - 2290, 2290, 2277, 2278, 2280, 2282, 2289, 2283, 2284, 2294, + 2235, 2235, 2241, 2238, 2230, 2236, 2242, 2237, 2238, 2239, + 2239, 2240, 2240, 2243, 2241, 2244, 2245, 2245, 2242, 2246, + 2247, 2247, 2248, 2248, 2249, 2250, 2253, 2251, 2252, 2255, + 2256, 2244, 2259, 2243, 2251, 2249, 2254, 2250, 2246, 2258, + 2252, 2254, 2257, 2257, 2260, 2262, 2253, 2261, 2258, 2255, + 2256, 2263, 2264, 2264, 2265, 2266, 2267, 2269, 2259, 2270, + 2261, 2271, 2274, 2265, 2260, 2263, 2273, 2274, 0, 2262, + 2266, 2267, 2275, 2272, 2283, 2269, 2272, 2275, 2276, 2276, + 2273, 2270, 2277, 2277, 2271, 2278, 2278, 2280, 2280, 2282, + 2282, 2284, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, - 2292, 2293, 2293, 2295, 2296, 2297, 2298, 2299, 2288, 2292, - 2300, 2296, 2301, 2302, 2302, 2303, 2303, 2294, 2305, 2306, - 2297, 2295, 2304, 2307, 2298, 2299, 2300, 2308, 2304, 2309, - 2310, 2301, 2308, 2311, 2306, 2312, 2305, 2312, 2311, 2313, - 2313, 2314, 2307, 2314, 2315, 2315, 2317, 2319, 2320, 2309, - 2310, 2321, 2322, 2323, 2324, 2328, 2319, 2325, 2323, 2329, - 2330, 2330, 2329, 2321, 2331, 2317, 2332, 2320, 2333, 2333, - 2336, 2341, 2322, 2334, 2324, 2328, 2325, 2334, 2337, 2331, - 2338, 2338, 2337, 2339, 2332, 2336, 2341, 2342, 2343, 2344, - 2344, 2346, 2347, 2348, 2349, 2349, 2339, 2348, 2350, 2351, + 2294, 2293, 2284, 2293, 2295, 2296, 2300, 2291, 2297, 2297, + 2299, 2299, 2285, 2288, 2287, 2301, 2306, 2290, 2289, 2292, + 2294, 2304, 2295, 2296, 2301, 2302, 2302, 2307, 2300, 2308, + 2304, 2305, 2305, 2309, 2306, 2310, 2308, 2311, 2312, 2313, + 2314, 2314, 2315, 2315, 2316, 2307, 2317, 2318, 2309, 2319, + 2316, 2320, 2321, 2310, 2312, 2311, 2320, 2322, 2313, 2324, + 2323, 2324, 2318, 2329, 2317, 2323, 2325, 2325, 2319, 2326, + 2331, 2326, 2321, 2327, 2327, 2332, 2333, 2322, 2334, 2331, + 2335, 2336, 2329, 2337, 2340, 2335, 2341, 2344, 2333, 2341, + 2342, 2342, 2343, 2346, 2332, 2345, 2345, 2346, 2334, 2348, - 2351, 2347, 2353, 2346, 2352, 2354, 2355, 2342, 2343, 2352, - 2362, 2353, 2356, 2356, 2361, 2361, 2364, 2350, 2355, 2363, - 2363, 2354, 2365, 2369, 2366, 2367, 2368, 2368, 2379, 2364, - 2371, 2371, 2362, 2366, 2367, 2365, 2374, 2375, 2369, 2376, - 2377, 2374, 2375, 2378, 2381, 2377, 2380, 2379, 2383, 2384, - 2386, 2378, 2381, 2376, 2384, 2380, 2385, 2387, 2387, 2388, - 2388, 2385, 2389, 2383, 2391, 2386, 2390, 2392, 2393, 2389, - 2394, 2390, 2395, 2395, 2393, 2394, 2396, 2402, 2397, 2398, - 2398, 2404, 2391, 2397, 2404, 2392, 2399, 2399, 2403, 2403, - 2402, 2396, 2405, 2414, 2406, 2407, 2408, 2405, 2405, 2406, + 2351, 2336, 2337, 2353, 2340, 2344, 2349, 2343, 2350, 2350, + 2349, 2354, 2355, 2351, 2348, 2356, 2356, 2358, 2353, 2359, + 2360, 2361, 2361, 2362, 2360, 2363, 2363, 2365, 2359, 2358, + 2364, 2354, 2355, 2366, 2367, 2364, 2365, 2368, 2368, 2373, + 2373, 2374, 2362, 2375, 2375, 2376, 2367, 2377, 2378, 2366, + 2379, 2380, 2380, 2381, 2383, 2383, 2386, 2378, 2376, 2379, + 2377, 2386, 2387, 2374, 2388, 2389, 2390, 2387, 2381, 2391, + 2389, 2392, 2395, 2393, 2390, 2398, 2401, 2396, 2388, 2397, + 2392, 2393, 2396, 2401, 2397, 2399, 2399, 2395, 2391, 2402, + 2398, 2400, 2400, 2403, 2402, 2404, 2405, 2408, 2406, 2407, - 2407, 2409, 2408, 2410, 2411, 2409, 2412, 2413, 2410, 0, - 2415, 2416, 2418, 2411, 2414, 2413, 2415, 2416, 2417, 2421, - 2420, 2412, 2421, 2417, 2418, 2420, 2423, 2425, 2426, 2427, - 2428, 2429, 2425, 2426, 2435, 2430, 2431, 2431, 2423, 2432, - 2429, 2436, 2440, 2428, 2430, 2437, 2439, 2427, 2432, 2438, - 2438, 2440, 2441, 2435, 2442, 2442, 2443, 2445, 2447, 2448, - 2450, 2436, 0, 2448, 2437, 2439, 2455, 2441, 2449, 2449, - 2451, 2452, 2445, 2453, 2455, 2443, 2451, 2452, 2447, 2453, - 2454, 2454, 2456, 2458, 2459, 2450, 2461, 2456, 2462, 2463, - 2461, 2466, 2458, 2465, 2465, 2467, 2467, 2459, 2468, 2468, + 2407, 2409, 2405, 2406, 2410, 2410, 2409, 2411, 2411, 2414, + 0, 2403, 2408, 2404, 2415, 2415, 2416, 2426, 2417, 2416, + 2418, 2419, 2414, 2417, 2417, 2418, 2419, 2420, 2421, 2422, + 2423, 2424, 2421, 2420, 2422, 2425, 2427, 2430, 2426, 2423, + 2429, 2428, 2427, 2425, 2435, 2429, 2424, 2428, 2432, 2430, + 2437, 2433, 2438, 2432, 2433, 2437, 2435, 2438, 2439, 2440, + 2441, 2442, 2443, 2443, 2444, 2447, 2448, 2453, 2449, 2441, + 2442, 2451, 2440, 2444, 2450, 2450, 2439, 2454, 2454, 2452, + 2455, 2457, 2453, 2459, 2447, 2460, 2448, 2449, 2452, 2460, + 2451, 2461, 2461, 2462, 2463, 2464, 2457, 0, 2465, 2455, - 2470, 2470, 2462, 2471, 2463, 2472, 2476, 2471, 2477, 2466, - 2472, 2474, 2474, 2477, 2479, 2478, 2481, 2482, 2482, 2479, - 2479, 2484, 2484, 2485, 2485, 2486, 2476, 2478, 2486, 2487, - 2489, 2491, 2492, 2492, 2493, 2493, 2481, 2494, 2494, 2495, - 2496, 2496, 2487, 2497, 2498, 2499, 2500, 2506, 2489, 2501, - 2501, 2491, 2500, 2502, 2495, 2505, 2497, 2502, 2507, 2499, - 2505, 2505, 2498, 2508, 2511, 2509, 2510, 2513, 2513, 2512, - 2506, 2509, 2510, 2512, 2516, 2521, 2518, 2519, 2507, 2516, - 2519, 2523, 2522, 2508, 2518, 2522, 2524, 2525, 2526, 2511, - 2527, 2524, 2528, 2528, 2532, 2529, 2531, 2542, 2523, 2523, + 2463, 2464, 2467, 2459, 2465, 2466, 2466, 2468, 2470, 2471, + 2467, 2473, 2468, 2474, 2475, 2473, 2478, 2470, 2462, 2477, + 2477, 2488, 2471, 2479, 2479, 2480, 2480, 2474, 2483, 2475, + 2482, 2482, 2483, 2484, 2478, 2486, 2486, 2489, 2484, 2490, + 2491, 2488, 2489, 2493, 2501, 2491, 2491, 2494, 2494, 2496, + 2496, 2490, 2497, 2497, 2498, 2499, 2503, 2498, 2504, 2504, + 2505, 2505, 2501, 2493, 2506, 2506, 2507, 2509, 2499, 2508, + 2508, 2510, 2511, 2512, 2513, 2513, 2503, 2518, 2514, 2512, + 2509, 2507, 2514, 2519, 2520, 2517, 2511, 2521, 2522, 2510, + 2517, 2517, 2523, 2521, 2522, 2524, 2525, 2525, 2533, 2524, - 2521, 2535, 2542, 2530, 2527, 2525, 2530, 2533, 2526, 2529, - 2531, 2534, 2543, 2532, 2530, 2533, 2534, 2534, 2536, 2536, - 2535, 2537, 2537, 2538, 2538, 2539, 2539, 2540, 2540, 2541, - 2544, 2545, 2543, 2546, 2547, 2549, 2549, 2551, 2550, 2554, - 2545, 2550, 2553, 2553, 2556, 2541, 2554, 2555, 2555, 2556, - 2558, 2558, 2559, 2546, 2547, 2551, 2544, 2560, 2561, 2563, - 2565, 2559, 2564, 2564, 2565, 2566, 2560, 2561, 2567, 2569, - 2568, 2570, 2580, 2575, 2566, 2568, 2568, 2563, 2575, 2579, - 2570, 2571, 2569, 2567, 2581, 2571, 2576, 2576, 2578, 2578, - 2583, 2584, 2587, 2579, 2589, 2588, 2592, 2580, 2594, 2583, + 2518, 2528, 2530, 2519, 2520, 2531, 2528, 2535, 2531, 2534, + 2530, 2536, 2534, 2537, 2538, 2539, 2536, 2523, 2540, 2540, + 2544, 2541, 2543, 2533, 2535, 2535, 2547, 2542, 2553, 2539, + 2542, 2537, 2545, 2556, 2538, 2541, 2543, 2546, 2542, 2544, + 2545, 0, 2546, 2546, 2553, 2547, 2548, 2548, 2549, 2549, + 2550, 2550, 2551, 2551, 2552, 2552, 2554, 2555, 2557, 2556, + 2558, 2554, 2559, 2561, 2561, 2562, 2563, 2557, 2562, 2565, + 2565, 2566, 2567, 2567, 2568, 2570, 2570, 2555, 2566, 2568, + 2558, 2571, 2559, 2572, 2563, 2573, 2575, 2576, 2576, 2577, + 2571, 2578, 2572, 2577, 2573, 2579, 2580, 2582, 2581, 2583, - 2590, 2608, 2581, 2584, 2588, 2596, 2590, 2597, 2592, 2599, - 2596, 2907, 2597, 2907, 2589, 2598, 2598, 2587, 2599, 2594, - 2601, 2608, 2602, 2602, 2607, 2601, 2602, 2604, 2604, 2605, - 2605, 2606, 2606, 2607, 2609, 2610, 2612, 2616, 2613, 2614, - 2610, 2617, 2612, 2613, 2614, 2615, 2615, 2618, 2619, 2621, - 2620, 2628, 2618, 2609, 0, 2616, 2620, 2622, 2622, 2624, - 2625, 2629, 2617, 2624, 2626, 2625, 2619, 2627, 2627, 2626, - 2628, 2630, 2632, 2632, 2621, 2634, 2629, 2635, 2636, 2638, - 2637, 2639, 2636, 2642, 2640, 2643, 2643, 2644, 2634, 2637, - 2635, 2630, 2640, 2641, 2649, 2638, 2646, 2646, 2641, 2659, + 2578, 2580, 2580, 2583, 2575, 2591, 2582, 2587, 2588, 2588, + 2579, 2581, 2587, 2590, 2590, 2592, 2593, 2595, 2596, 2591, + 2599, 2601, 2600, 2602, 2604, 2606, 2595, 2608, 2609, 2602, + 2596, 2600, 2608, 2609, 2593, 2611, 2604, 2610, 2610, 2620, + 2592, 2601, 2613, 2621, 2611, 2599, 2606, 2613, 2614, 2614, + 2616, 2616, 2614, 2617, 2617, 2618, 2618, 2619, 2622, 2620, + 2625, 2624, 2621, 2622, 2626, 2625, 2619, 2624, 2628, 2626, + 2627, 2627, 2629, 2630, 2631, 2632, 2633, 2637, 2630, 2634, + 2634, 2632, 2637, 2636, 2638, 2640, 2628, 2636, 2641, 2638, + 2639, 2639, 2631, 2629, 2642, 2644, 2644, 2646, 2647, 2649, - 2639, 2647, 2647, 2651, 2651, 2653, 2644, 2654, 2655, 2642, - 2660, 2656, 2658, 2658, 2664, 2649, 2656, 2661, 2665, 2659, - 2669, 2653, 2671, 2654, 2655, 2663, 2663, 2671, 2664, 2666, - 2666, 2672, 2670, 2660, 2673, 2673, 2661, 2665, 2670, 2675, - 2669, 2674, 2674, 2676, 2676, 2677, 2678, 2679, 2680, 2681, - 2682, 2683, 0, 2672, 2680, 2678, 2677, 2684, 2684, 2675, - 2690, 2685, 2682, 2676, 2685, 2686, 2686, 2679, 2681, 2691, - 2692, 2683, 2690, 2693, 2693, 2694, 2692, 2695, 2694, 2696, - 2698, 2699, 2700, 2695, 2701, 2698, 2699, 2702, 2705, 2691, - 2701, 2703, 2703, 2706, 2707, 2708, 2710, 2696, 2709, 2709, + 2650, 2633, 2648, 2641, 2640, 2651, 2648, 2652, 2649, 2654, + 2646, 2647, 2653, 2656, 2642, 2652, 2650, 2653, 2655, 2655, + 2658, 2658, 2659, 2659, 2651, 2661, 2663, 2663, 2665, 2666, + 2671, 2667, 2656, 2668, 2672, 2654, 2670, 2670, 2668, 2673, + 2675, 2675, 2676, 2677, 2665, 2666, 2661, 2667, 2678, 2678, + 2671, 2681, 2684, 2682, 2693, 2683, 2676, 2672, 2673, 2682, + 2683, 2687, 2677, 2685, 2685, 2686, 2686, 2688, 2688, 2689, + 2690, 2681, 2691, 2693, 2684, 2695, 2692, 2694, 0, 2690, + 2689, 2687, 2692, 2696, 2696, 2697, 2702, 2688, 2697, 2694, + 2698, 2698, 2691, 2703, 2704, 2695, 2705, 2705, 2702, 2706, - 2705, 2700, 2716, 2711, 2702, 2702, 2713, 2713, 2708, 2714, - 2714, 2706, 2711, 2715, 2726, 2710, 2716, 2717, 2715, 2707, - 2718, 2718, 2717, 2719, 2719, 2720, 2720, 2721, 2723, 2723, - 2728, 2729, 2721, 2726, 2730, 2731, 2731, 2733, 2733, 2735, - 2734, 2736, 2737, 2737, 2738, 2738, 2741, 2784, 2742, 2740, - 2736, 2784, 2728, 2729, 2734, 2740, 2730, 2743, 2750, 2735, - 2746, 2746, 2743, 2748, 2748, 2749, 2741, 2742, 2751, 2752, - 2749, 2753, 2750, 2755, 2751, 2754, 2754, 2757, 2755, 2753, - 2758, 2752, 2759, 2760, 2761, 2763, 2764, 2759, 2765, 2766, - 2761, 2768, 2767, 2763, 2769, 2760, 2770, 2757, 2771, 2773, + 2704, 2707, 2706, 2708, 2710, 2711, 2712, 2707, 2713, 2710, + 2711, 2714, 2717, 2703, 2713, 2715, 2715, 2718, 2719, 2720, + 2722, 2708, 2721, 2721, 2717, 2712, 2728, 2723, 2714, 2714, + 2725, 2725, 2720, 2726, 2726, 2718, 2723, 2727, 2738, 2722, + 2728, 2729, 2727, 2719, 2730, 2730, 2729, 2731, 2731, 2732, + 2732, 2733, 2735, 2735, 2740, 2741, 2733, 2738, 2742, 2743, + 2743, 2745, 2745, 2747, 2746, 2748, 2749, 2749, 2750, 2750, + 2753, 2796, 2754, 2752, 2748, 2796, 2740, 2741, 2746, 2752, + 2742, 2755, 2762, 2747, 2758, 2758, 2755, 2760, 2760, 2761, + 2753, 2754, 2763, 2764, 2761, 2765, 2762, 2767, 2763, 2766, - 2758, 2774, 2778, 2771, 2773, 2764, 2851, 2768, 2765, 2766, - 2767, 2769, 2769, 2775, 2779, 2776, 0, 2770, 2851, 2775, - 2776, 2774, 2778, 2782, 2782, 2783, 2783, 2779, 2788, 2788, - 2790, 2790, 2791, 2791, 2794, 2791, 2792, 2792, 2794, 2792, - 2793, 2793, 2797, 2793, 2796, 2796, 2801, 2798, 2802, 2803, - 2804, 2804, 2807, 2809, 2803, 2808, 2810, 2809, 2811, 0, - 2797, 2798, 2808, 2813, 2818, 2810, 2801, 2814, 2802, 2815, - 2815, 2816, 2816, 2811, 2817, 2817, 2814, 2807, 2819, 2818, - 2820, 2813, 2821, 2819, 2822, 2823, 2824, 2821, 2821, 2820, - 2822, 2825, 2820, 2826, 2827, 2828, 2829, 2829, 2826, 2827, + 2766, 2769, 2767, 2765, 2770, 2764, 2771, 2772, 2773, 2775, + 2776, 2771, 2777, 2778, 2773, 2780, 2779, 2775, 2781, 2772, + 2782, 2769, 2783, 2785, 2770, 2786, 2790, 2783, 2785, 2776, + 2863, 2780, 2777, 2778, 2779, 2781, 2781, 2787, 2791, 2788, + 0, 2782, 2863, 2787, 2788, 2786, 2790, 2794, 2794, 2795, + 2795, 2791, 2800, 2800, 2802, 2802, 2803, 2803, 2806, 2803, + 2804, 2804, 2806, 2804, 2805, 2805, 2809, 2805, 2808, 2808, + 2813, 2810, 2814, 2815, 2816, 2816, 2819, 2821, 2815, 2820, + 2822, 2821, 2823, 0, 2809, 2810, 2820, 2825, 2830, 2822, + 2813, 2826, 2814, 2827, 2827, 2828, 2828, 2823, 2829, 2829, - 2830, 2824, 2831, 2832, 2832, 2858, 2830, 2900, 2831, 0, - 2823, 2900, 2825, 2834, 2828, 2833, 2833, 2858, 2834, 2837, - 2837, 2840, 2840, 2841, 2841, 2842, 2842, 2843, 2843, 2844, - 2844, 2845, 2845, 2846, 2846, 2848, 2849, 2849, 2850, 2852, - 2856, 2854, 2855, 2855, 2848, 2857, 2860, 2850, 2859, 2859, - 2861, 2861, 2864, 2865, 2866, 2856, 2865, 2868, 2857, 2852, - 2854, 2860, 2867, 2867, 2870, 2871, 2874, 2870, 2872, 2873, - 2864, 2871, 2875, 2876, 2873, 2868, 2882, 2878, 2879, 2893, - 2866, 2891, 2872, 2878, 2891, 2874, 2898, 2879, 2902, 2876, - 2875, 2882, 2893, 2894, 2894, 2895, 2895, 2896, 2896, 2899, + 2826, 2819, 2831, 2830, 2832, 2825, 2833, 2831, 2834, 2835, + 2836, 2833, 2833, 2832, 2834, 2837, 2832, 2838, 2839, 2840, + 2841, 2841, 2838, 2839, 2842, 2836, 2843, 2844, 2844, 2870, + 2842, 2912, 2843, 0, 2835, 2912, 2837, 2846, 2840, 2845, + 2845, 2870, 2846, 2849, 2849, 2852, 2852, 2853, 2853, 2854, + 2854, 2855, 2855, 2856, 2856, 2857, 2857, 2858, 2858, 2860, + 2861, 2861, 2862, 2864, 2868, 2866, 2867, 2867, 2860, 2869, + 2872, 2862, 2871, 2871, 2873, 2873, 2876, 2877, 2878, 2868, + 2877, 2880, 2869, 2864, 2866, 2872, 2879, 2879, 2882, 2883, + 2886, 2882, 2884, 2885, 2876, 2883, 2887, 2888, 2885, 2880, - 2901, 2904, 2902, 2905, 2908, 2906, 2909, 2909, 2899, 2898, - 2906, 2911, 2910, 2912, 2905, 2914, 2913, 2916, 2915, 2908, - 2901, 2918, 2917, 2919, 2904, 2910, 2916, 2925, 2926, 2926, - 2911, 2912, 2913, 2915, 2917, 2924, 2920, 2927, 2928, 2928, - 2914, 2920, 2918, 2919, 2929, 2929, 2927, 2925, 2932, 2924, - 2930, 2930, 2931, 2931, 2933, 2934, 2935, 2936, 2934, 2937, - 2938, 2935, 2936, 2939, 2940, 2941, 2942, 2932, 2943, 2939, - 2945, 2942, 2944, 2944, 2933, 2938, 2946, 2941, 2940, 2947, - 2947, 2949, 2951, 2956, 2937, 2945, 2954, 2954, 2943, 2955, - 2955, 2956, 2957, 2958, 2960, 2946, 2949, 2959, 2962, 2958, + 2894, 2890, 2891, 2905, 2878, 2903, 2884, 2890, 2903, 2886, + 2910, 2891, 2914, 2888, 2887, 2894, 2905, 2906, 2906, 2907, + 2907, 2908, 2908, 2911, 2913, 2916, 2914, 2917, 2919, 2918, + 2919, 2920, 2911, 2910, 2918, 2921, 2921, 2922, 2917, 2923, + 2925, 2924, 2926, 2928, 2913, 2927, 2920, 2930, 2916, 2929, + 2922, 2931, 2928, 2937, 0, 2936, 2925, 2932, 2923, 2924, + 2927, 2929, 2932, 2938, 2938, 2939, 2944, 2926, 2930, 2936, + 2945, 2931, 2949, 2937, 2939, 2940, 2940, 2941, 2941, 2942, + 2942, 2943, 2943, 2946, 2947, 2944, 2946, 2948, 2950, 2947, + 2945, 2952, 2948, 2951, 2953, 2954, 2955, 2949, 2957, 2951, - 2951, 2961, 2963, 2959, 2964, 2964, 2967, 2963, 2960, 2965, - 2965, 2957, 2968, 2973, 2961, 2970, 2971, 2962, 2974, 2975, - 2971, 2976, 2977, 2974, 2978, 2979, 2980, 2967, 2984, 2970, - 2979, 2980, 2968, 2973, 2976, 2977, 2981, 2981, 2975, 2985, - 2986, 2987, 2987, 2978, 2988, 2989, 2990, 2990, 2984, 2988, - 2991, 2989, 2994, 2992, 2995, 2991, 2993, 2985, 2992, 2986, - 2995, 2993, 2997, 2997, 2998, 2999, 2999, 3002, 3001, 2998, - 3003, 2994, 3001, 3004, 3005, 3006, 3007, 3003, 3008, 3010, - 3010, 3006, 3012, 3012, 3014, 3013, 3002, 3015, 3016, 3014, - 3017, 3008, 3004, 3005, 3013, 3007, 3019, 3013, 3018, 3018, + 2954, 2956, 2956, 2950, 2958, 2952, 2953, 2959, 2959, 2961, + 2963, 2966, 2966, 2957, 2967, 2967, 2955, 2968, 2969, 2972, + 2970, 2971, 2973, 2958, 2961, 2968, 2970, 2971, 2963, 2974, + 2979, 2975, 2980, 2972, 2985, 2973, 2975, 2969, 2976, 2976, + 2977, 2977, 2982, 2983, 2986, 2987, 2988, 2983, 2974, 2986, + 2989, 2979, 2980, 2990, 2985, 2991, 2982, 2992, 2996, 2988, + 2991, 2997, 2992, 2989, 2987, 2993, 2993, 2998, 2999, 2999, + 3000, 3001, 2990, 3002, 3002, 3000, 3003, 3001, 2996, 2997, + 3004, 3003, 3005, 3006, 3007, 3004, 2998, 3005, 3009, 3009, + 3007, 3010, 3011, 3011, 3013, 3014, 3010, 3015, 3013, 3016, - 3020, 3019, 3022, 3017, 3023, 3023, 3015, 3016, 3024, 3025, - 3025, 3026, 3026, 3020, 3027, 3028, 3029, 3030, 3030, 3027, - 3031, 3032, 3028, 3032, 3034, 3031, 3035, 3024, 3022, 3033, - 3033, 3034, 3036, 3035, 3037, 3029, 3038, 3040, 3040, 3037, - 3041, 3043, 3044, 3045, 3046, 3050, 3043, 3044, 3047, 3047, - 3051, 3036, 3049, 3049, 0, 3038, 3052, 3052, 3054, 3041, - 3053, 3053, 3045, 3046, 3050, 3054, 3056, 3056, 3058, 3051, - 3057, 3057, 3060, 3063, 3064, 3058, 3065, 3060, 3063, 3066, - 3066, 3067, 3067, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3064, 0, 3065, 3071, 3071, 3071, 3071, + 3017, 3018, 3006, 3019, 3015, 3022, 3022, 3018, 3020, 3024, + 3024, 3025, 3026, 3027, 3014, 3028, 3029, 3026, 3016, 3017, + 3025, 3020, 3019, 3025, 3030, 3030, 3031, 3032, 3034, 3029, + 3036, 3031, 3027, 3041, 3028, 3035, 3035, 3037, 3037, 3039, + 3032, 3038, 3038, 3040, 3039, 3042, 3042, 3048, 3043, 3036, + 3040, 3050, 3041, 3043, 3034, 3044, 3046, 3044, 3045, 3045, + 3047, 3052, 3052, 3046, 3049, 3053, 3048, 3047, 3055, 3049, + 3050, 3056, 3057, 3055, 3058, 3062, 3056, 3059, 3059, 3061, + 3061, 3063, 3064, 3064, 3053, 3065, 3065, 0, 3066, 3068, + 3068, 3057, 3070, 3058, 3062, 3066, 3069, 3069, 3072, 3070, - 3071, 3071, 3071, 3072, 3072, 3072, 3072, 3072, 3072, 3072, - 3073, 3073, 3073, 3073, 3073, 3073, 3073, 3074, 3074, 3074, - 3074, 3074, 3074, 3074, 3075, 3075, 3075, 3075, 3075, 3075, - 3075, 3077, 3077, 0, 3077, 3077, 3077, 3077, 3078, 3078, - 0, 0, 0, 3078, 3078, 3079, 3079, 0, 0, 3079, - 0, 3079, 3080, 0, 0, 0, 0, 0, 3080, 3081, - 3081, 0, 0, 0, 3081, 3081, 3082, 0, 0, 0, - 0, 0, 3082, 3083, 3083, 0, 3083, 3083, 3083, 3083, - 3084, 3084, 0, 3084, 3084, 3084, 3084, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, + 3063, 3075, 3076, 3072, 3077, 0, 3075, 3078, 3078, 3079, + 3079, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3076, 0, 3077, 3083, 3083, 3083, 3083, 3083, 3083, + 3083, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3085, 3085, + 3085, 3085, 3085, 3085, 3085, 3086, 3086, 3086, 3086, 3086, + 3086, 3086, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3089, + 3089, 0, 3089, 3089, 3089, 3089, 3090, 3090, 0, 0, + 0, 3090, 3090, 3091, 3091, 0, 0, 3091, 0, 3091, + 3092, 0, 0, 0, 0, 0, 3092, 3093, 3093, 0, + 0, 0, 3093, 3093, 3094, 0, 0, 0, 0, 0, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, - 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070 + 3094, 3095, 3095, 0, 3095, 3095, 3095, 3095, 3096, 3096, + 0, 3096, 3096, 3096, 3096, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, 3082, + 3082, 3082, 3082, 3082, 3082, 3082 } ; static yy_state_type yy_last_accepting_state; @@ -2960,7 +2972,7 @@ static void config_end_include(void) } #endif -#line 2961 "" +#line 2973 "" #define YY_NO_INPUT 1 #line 184 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -2969,9 +2981,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 2970 "" +#line 2982 "" -#line 2972 "" +#line 2984 "" #define INITIAL 0 #define quotedstring 1 @@ -3193,7 +3205,7 @@ YY_DECL { #line 204 "./util/configlexer.lex" -#line 3194 "" +#line 3206 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3226,13 +3238,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 5988 ); + while ( yy_base[yy_current_state] != 6016 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4308,255 +4320,255 @@ YY_RULE_SETUP case 210: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 211: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 212: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 213: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 214: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 215: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 216: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 217: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 218: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 219: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 220: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 221: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 222: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 223: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 224: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 225: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 226: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 227: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 228: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 229: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 230: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 231: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 232: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 233: YY_RULE_SETUP -#line 442 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 441 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 234: YY_RULE_SETUP -#line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 442 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 235: YY_RULE_SETUP -#line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 444 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 236: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 237: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 238: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 239: YY_RULE_SETUP -#line 450 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 449 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 240: YY_RULE_SETUP -#line 452 "./util/configlexer.lex" +#line 450 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 241: YY_RULE_SETUP -#line 454 "./util/configlexer.lex" +#line 452 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 242: YY_RULE_SETUP -#line 456 "./util/configlexer.lex" +#line 454 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 243: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" +#line 456 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 244: YY_RULE_SETUP -#line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 458 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 245: YY_RULE_SETUP -#line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 460 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 246: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 247: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 249: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 250: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 251: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 252: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 253: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 254: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 255: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 256: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 257: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 258: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 259: YY_RULE_SETUP @@ -4566,200 +4578,210 @@ YY_RULE_SETUP case 260: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 261: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 262: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 263: YY_RULE_SETUP #line 479 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 264: YY_RULE_SETUP #line 480 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 265: YY_RULE_SETUP #line 481 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 266: YY_RULE_SETUP #line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 267: YY_RULE_SETUP #line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 268: YY_RULE_SETUP #line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 269: YY_RULE_SETUP #line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 270: YY_RULE_SETUP #line 486 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 271: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 487 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 272: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 488 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 273: YY_RULE_SETUP -#line 491 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 490 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 274: YY_RULE_SETUP #line 492 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 275: YY_RULE_SETUP #line 493 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 276: YY_RULE_SETUP #line 494 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 277: YY_RULE_SETUP #line 495 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 278: YY_RULE_SETUP #line 496 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 279: YY_RULE_SETUP #line 497 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 280: YY_RULE_SETUP #line 498 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 281: YY_RULE_SETUP #line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 282: YY_RULE_SETUP #line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 283: YY_RULE_SETUP #line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 284: YY_RULE_SETUP #line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 285: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 286: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 287: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 288: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 289: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 290: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 291: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 292: -/* rule 292 can match eol */ YY_RULE_SETUP #line 510 "./util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 511 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 294: +/* rule 294 can match eol */ +YY_RULE_SETUP +#line 512 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 293: +case 295: YY_RULE_SETUP -#line 513 "./util/configlexer.lex" +#line 515 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 514 "./util/configlexer.lex" +#line 516 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 294: +case 296: YY_RULE_SETUP -#line 519 "./util/configlexer.lex" +#line 521 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 295: -/* rule 295 can match eol */ +case 297: +/* rule 297 can match eol */ YY_RULE_SETUP -#line 520 "./util/configlexer.lex" +#line 522 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 296: +case 298: YY_RULE_SETUP -#line 522 "./util/configlexer.lex" +#line 524 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4772,34 +4794,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 297: +case 299: YY_RULE_SETUP -#line 534 "./util/configlexer.lex" +#line 536 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 535 "./util/configlexer.lex" +#line 537 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 298: +case 300: YY_RULE_SETUP -#line 540 "./util/configlexer.lex" +#line 542 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 299: -/* rule 299 can match eol */ +case 301: +/* rule 301 can match eol */ YY_RULE_SETUP -#line 541 "./util/configlexer.lex" +#line 543 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 300: +case 302: YY_RULE_SETUP -#line 543 "./util/configlexer.lex" +#line 545 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4812,38 +4834,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 301: +case 303: YY_RULE_SETUP -#line 555 "./util/configlexer.lex" +#line 557 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 557 "./util/configlexer.lex" +#line 559 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 302: -YY_RULE_SETUP -#line 561 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 303: -/* rule 303 can match eol */ -YY_RULE_SETUP -#line 562 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 304: YY_RULE_SETUP #line 563 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 305: +/* rule 305 can match eol */ YY_RULE_SETUP #line 564 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 306: +YY_RULE_SETUP +#line 565 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 307: +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4851,27 +4873,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 569 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 306: +case 308: YY_RULE_SETUP -#line 573 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 307: -/* rule 307 can match eol */ +case 309: +/* rule 309 can match eol */ YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 308: +case 310: YY_RULE_SETUP -#line 576 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4881,7 +4903,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 582 "./util/configlexer.lex" +#line 584 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4893,33 +4915,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 309: +case 311: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 310: +case 312: YY_RULE_SETUP -#line 597 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 311: +case 313: YY_RULE_SETUP -#line 601 "./util/configlexer.lex" +#line 603 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 312: +case 314: YY_RULE_SETUP -#line 605 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" ECHO; YY_BREAK -#line 4920 "" +#line 4942 "" case YY_END_OF_BUFFER: { @@ -5214,7 +5236,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5242,11 +5264,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3071 ) + if ( yy_current_state >= 3083 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3070); + yy_is_jam = (yy_current_state == 3082); return yy_is_jam ? 0 : yy_current_state; } @@ -5885,6 +5907,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 605 "./util/configlexer.lex" +#line 607 "./util/configlexer.lex" diff --git a/util/configparser.c b/util/configparser.c index 66f34071a..2c9b0a5c4 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -418,7 +418,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 539, VAR_RPZ_CNAME_OVERRIDE = 540, VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542 + VAR_RPZ_LOG_NAME = 542, + VAR_DYNLIB = 543, + VAR_DYNLIB_FILE = 544 }; #endif /* Tokens. */ @@ -707,6 +709,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 540 #define VAR_RPZ_LOG 541 #define VAR_RPZ_LOG_NAME 542 +#define VAR_DYNLIB 543 +#define VAR_DYNLIB_FILE 544 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -716,7 +720,7 @@ union YYSTYPE char* str; -#line 720 "util/configparser.c" +#line 724 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; @@ -966,19 +970,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 609 +#define YYLAST 615 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 288 +#define YYNTOKENS 290 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 311 +#define YYNNTS 315 /* YYNRULES -- Number of rules. */ -#define YYNRULES 600 +#define YYNRULES 606 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 893 +#define YYNSTATES 900 #define YYUNDEFTOK 2 -#define YYMAXUTOK 542 +#define YYMAXUTOK 544 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ @@ -1043,74 +1047,74 @@ static const yytype_uint16 yytranslate[] = 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287 + 285, 286, 287, 288, 289 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 179, 179, 179, 180, 180, 181, 181, 182, 182, - 182, 183, 183, 184, 184, 185, 189, 194, 195, 196, - 196, 196, 197, 197, 198, 198, 198, 199, 199, 200, - 200, 200, 201, 201, 202, 202, 202, 203, 203, 203, - 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, - 209, 209, 210, 210, 211, 211, 212, 212, 212, 213, - 213, 213, 214, 214, 214, 215, 215, 216, 216, 217, - 217, 218, 218, 219, 219, 219, 220, 220, 221, 221, - 222, 222, 222, 223, 223, 224, 224, 225, 225, 226, - 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, - 231, 231, 232, 232, 232, 233, 233, 234, 234, 234, - 235, 235, 235, 236, 236, 236, 237, 237, 237, 237, - 238, 239, 239, 239, 240, 240, 240, 241, 241, 242, - 242, 243, 243, 243, 244, 244, 245, 245, 245, 246, - 247, 247, 248, 248, 249, 250, 250, 251, 251, 252, - 252, 253, 254, 254, 255, 255, 256, 256, 257, 257, - 258, 258, 259, 259, 259, 260, 260, 261, 261, 262, - 262, 263, 263, 264, 264, 265, 265, 266, 266, 266, - 267, 267, 267, 268, 268, 268, 269, 269, 270, 271, - 271, 272, 272, 273, 273, 274, 274, 275, 275, 275, - 276, 276, 276, 277, 277, 277, 278, 278, 279, 279, - 280, 280, 281, 283, 295, 296, 297, 297, 297, 297, - 297, 298, 298, 300, 312, 313, 314, 314, 314, 314, - 315, 315, 317, 331, 332, 333, 333, 333, 333, 334, - 334, 334, 336, 353, 354, 355, 355, 355, 355, 356, - 356, 356, 357, 360, 379, 396, 404, 414, 422, 439, - 440, 441, 441, 441, 441, 441, 442, 442, 442, 443, - 443, 445, 454, 463, 474, 483, 492, 501, 512, 521, - 533, 547, 562, 573, 590, 607, 624, 641, 656, 671, - 684, 699, 708, 717, 726, 735, 744, 753, 762, 771, - 780, 789, 798, 807, 816, 825, 838, 847, 860, 869, - 878, 887, 894, 901, 910, 917, 926, 934, 941, 948, - 956, 965, 974, 983, 997, 1006, 1015, 1024, 1033, 1042, - 1051, 1058, 1065, 1091, 1099, 1106, 1113, 1120, 1127, 1135, - 1143, 1151, 1158, 1169, 1180, 1187, 1196, 1205, 1214, 1221, - 1228, 1236, 1244, 1254, 1264, 1274, 1288, 1296, 1309, 1320, - 1328, 1341, 1350, 1359, 1368, 1378, 1388, 1396, 1409, 1418, - 1426, 1435, 1443, 1456, 1465, 1472, 1482, 1492, 1502, 1512, - 1522, 1532, 1542, 1552, 1559, 1566, 1573, 1582, 1591, 1600, - 1609, 1616, 1626, 1646, 1653, 1671, 1684, 1697, 1706, 1715, - 1724, 1733, 1743, 1753, 1764, 1773, 1782, 1791, 1800, 1809, - 1818, 1831, 1844, 1853, 1860, 1869, 1878, 1887, 1896, 1904, - 1917, 1925, 1966, 1973, 1988, 1998, 2008, 2015, 2022, 2029, - 2038, 2046, 2060, 2081, 2102, 2114, 2126, 2138, 2147, 2168, - 2178, 2187, 2195, 2203, 2216, 2229, 2244, 2259, 2268, 2277, - 2283, 2292, 2301, 2311, 2321, 2334, 2347, 2359, 2373, 2385, - 2399, 2409, 2416, 2423, 2432, 2441, 2451, 2461, 2471, 2478, - 2485, 2494, 2503, 2513, 2523, 2530, 2537, 2544, 2552, 2562, - 2572, 2582, 2592, 2631, 2641, 2649, 2657, 2672, 2681, 2686, - 2687, 2688, 2688, 2688, 2689, 2689, 2689, 2690, 2690, 2692, - 2702, 2711, 2718, 2725, 2732, 2739, 2746, 2753, 2758, 2759, - 2760, 2760, 2761, 2761, 2761, 2762, 2763, 2763, 2764, 2764, - 2765, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2773, 2782, - 2789, 2796, 2805, 2812, 2819, 2826, 2833, 2842, 2851, 2858, - 2865, 2875, 2885, 2895, 2905, 2915, 2925, 2930, 2931, 2932, - 2934, 2940, 2950, 2957, 2966, 2974, 2979, 2980, 2982, 2982, - 2982, 2983, 2983, 2984, 2985, 2986, 2987, 2988, 2990, 3000, - 3009, 3016, 3025, 3032, 3041, 3049, 3062, 3070, 3083, 3088, - 3089, 3090, 3090, 3091, 3091, 3091, 3092, 3094, 3106, 3118, - 3130, 3145, 3158, 3171, 3182, 3187, 3188, 3189, 3189, 3191, - 3206 + 0, 180, 180, 180, 181, 181, 182, 182, 183, 183, + 183, 184, 184, 185, 185, 186, 186, 190, 195, 196, + 197, 197, 197, 198, 198, 199, 199, 199, 200, 200, + 201, 201, 201, 202, 202, 203, 203, 203, 204, 204, + 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, + 209, 210, 210, 211, 211, 212, 212, 213, 213, 213, + 214, 214, 214, 215, 215, 215, 216, 216, 217, 217, + 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, + 222, 223, 223, 223, 224, 224, 225, 225, 226, 226, + 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, + 231, 232, 232, 233, 233, 233, 234, 234, 235, 235, + 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, + 238, 239, 240, 240, 240, 241, 241, 241, 242, 242, + 243, 243, 244, 244, 244, 245, 245, 246, 246, 246, + 247, 248, 248, 249, 249, 250, 251, 251, 252, 252, + 253, 253, 254, 255, 255, 256, 256, 257, 257, 258, + 258, 259, 259, 260, 260, 260, 261, 261, 262, 262, + 263, 263, 264, 264, 265, 265, 266, 266, 267, 267, + 267, 268, 268, 268, 269, 269, 269, 270, 270, 271, + 272, 272, 273, 273, 274, 274, 275, 275, 276, 276, + 276, 277, 277, 277, 278, 278, 278, 279, 279, 280, + 280, 281, 281, 282, 284, 296, 297, 298, 298, 298, + 298, 298, 299, 299, 301, 313, 314, 315, 315, 315, + 315, 316, 316, 318, 332, 333, 334, 334, 334, 334, + 335, 335, 335, 337, 354, 355, 356, 356, 356, 356, + 357, 357, 357, 358, 361, 380, 397, 405, 415, 423, + 440, 441, 442, 442, 442, 442, 442, 443, 443, 443, + 444, 444, 446, 455, 464, 475, 484, 493, 502, 513, + 522, 534, 548, 563, 574, 591, 608, 625, 642, 657, + 672, 685, 700, 709, 718, 727, 736, 745, 754, 763, + 772, 781, 790, 799, 808, 817, 826, 839, 848, 861, + 870, 879, 888, 895, 902, 911, 918, 927, 935, 942, + 949, 957, 966, 975, 984, 998, 1007, 1016, 1025, 1034, + 1043, 1052, 1059, 1066, 1092, 1100, 1107, 1114, 1121, 1128, + 1136, 1144, 1152, 1159, 1170, 1181, 1188, 1197, 1206, 1215, + 1222, 1229, 1237, 1245, 1255, 1265, 1275, 1289, 1297, 1310, + 1321, 1329, 1342, 1351, 1360, 1369, 1379, 1389, 1397, 1410, + 1419, 1427, 1436, 1444, 1457, 1466, 1473, 1483, 1493, 1503, + 1513, 1523, 1533, 1543, 1553, 1560, 1567, 1574, 1583, 1592, + 1601, 1610, 1617, 1627, 1647, 1654, 1672, 1685, 1698, 1707, + 1716, 1725, 1734, 1744, 1754, 1765, 1774, 1783, 1792, 1801, + 1810, 1819, 1832, 1845, 1854, 1861, 1870, 1879, 1888, 1897, + 1905, 1918, 1926, 1967, 1974, 1989, 1999, 2009, 2016, 2023, + 2030, 2039, 2047, 2061, 2082, 2103, 2115, 2127, 2139, 2148, + 2169, 2179, 2188, 2196, 2204, 2217, 2230, 2245, 2260, 2269, + 2278, 2284, 2293, 2302, 2312, 2322, 2335, 2348, 2360, 2374, + 2386, 2400, 2410, 2417, 2424, 2433, 2442, 2452, 2462, 2472, + 2479, 2486, 2495, 2504, 2514, 2524, 2531, 2538, 2545, 2553, + 2563, 2573, 2583, 2593, 2632, 2642, 2650, 2658, 2673, 2682, + 2687, 2688, 2689, 2689, 2689, 2690, 2690, 2690, 2691, 2691, + 2693, 2703, 2712, 2719, 2726, 2733, 2740, 2747, 2754, 2759, + 2760, 2761, 2761, 2762, 2762, 2762, 2763, 2764, 2764, 2765, + 2765, 2766, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2774, + 2783, 2790, 2797, 2806, 2813, 2820, 2827, 2834, 2843, 2852, + 2859, 2866, 2876, 2886, 2896, 2906, 2916, 2926, 2931, 2932, + 2933, 2935, 2941, 2946, 2947, 2948, 2950, 2956, 2966, 2973, + 2982, 2990, 2995, 2996, 2998, 2998, 2998, 2999, 2999, 3000, + 3001, 3002, 3003, 3004, 3006, 3016, 3025, 3032, 3041, 3048, + 3057, 3065, 3078, 3086, 3099, 3104, 3105, 3106, 3106, 3107, + 3107, 3107, 3108, 3110, 3122, 3134, 3146, 3161, 3174, 3187, + 3198, 3203, 3204, 3205, 3205, 3207, 3222 }; #endif @@ -1224,14 +1228,15 @@ static const char *const yytname[] = "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", - "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "$accept", - "toplevelvars", "toplevelvar", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "authstart", "contents_auth", - "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", - "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", - "server_num_threads", "server_verbosity", "server_statistics_interval", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", + "VAR_DYNLIB", "VAR_DYNLIB_FILE", "$accept", "toplevelvars", + "toplevelvar", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", + "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", @@ -1336,10 +1341,10 @@ static const char *const yytname[] = "dt_dnstap_log_client_response_messages", "dt_dnstap_log_forwarder_query_messages", "dt_dnstap_log_forwarder_response_messages", "pythonstart", - "contents_py", "content_py", "py_script", - "server_disable_dnssec_lame_check", "server_log_identity", - "server_response_ip", "server_response_ip_data", "dnscstart", - "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", + "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl", + "content_dl", "dl_file", "server_disable_dnssec_lame_check", + "server_log_identity", "server_response_ip", "server_response_ip_data", + "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated", "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", @@ -1386,14 +1391,14 @@ static const yytype_uint16 yytoknum[] = 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542 + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544 }; # endif -#define YYPACT_NINF -272 +#define YYPACT_NINF -280 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-272))) + (!!((Yystate) == (-280))) #define YYTABLE_NINF -1 @@ -1404,96 +1409,96 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -272, 0, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, 271, -42, - -37, -41, -7, -43, -30, -136, -106, -177, -172, -271, - 2, 3, 4, 25, 26, 28, 31, 32, 33, 34, - 36, 37, 38, 39, 40, 52, 53, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 87, 88, 91, 93, 94, 95, 96, 97, - 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 201, 205, 206, - 207, 208, 209, 210, 211, 213, 214, 215, 216, 219, - 220, 222, 223, 224, 225, 226, 227, 228, 229, 237, - 243, 245, 246, 247, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 269, 270, 305, 306, 307, 308, 312, - 313, 314, 356, 357, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 358, - 359, 360, 361, 362, 363, 364, -272, -272, -272, -272, - -272, -272, -272, -272, 368, 372, 373, 398, 399, 400, - -272, -272, -272, -272, -272, -272, -272, 402, 413, 414, - 415, 416, 417, 418, -272, -272, -272, -272, -272, -272, - -272, -272, 419, 420, 421, 422, 423, 424, 425, 426, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 427, - 428, 429, 430, 431, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, 471, 473, 489, 490, 491, - 492, 493, 494, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 495, 496, 497, 498, 499, 506, 507, 508, - 509, 510, 511, 512, 514, 515, 516, 517, 518, 519, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 520, - -272, -272, 523, 526, 529, 530, 539, 540, 541, 543, - 544, 545, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, 546, 547, 548, 549, 550, 551, -272, - -272, -272, -272, -272, -272, -272, 552, 553, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, 554, 555, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, 556, 557, - 558, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, 559, 560, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 561, 562, 563, 564, 565, 566, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, 567, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 568, - -272, -272, 569, 570, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, 571, 572, 573, -272, -272, -272, -272, -272, - -272, -272, -272 + -280, 0, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + 277, -42, -37, -41, -7, -43, -30, -136, -106, -279, + -177, -172, -271, 2, 3, 4, 25, 26, 28, 31, + 32, 33, 34, 36, 37, 38, 39, 40, 52, 53, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 87, 88, 91, 93, 94, + 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 201, 205, 206, 207, 208, 209, 210, 211, 213, 214, + 215, 216, 219, 220, 222, 223, 224, 225, 226, 227, + 228, 229, 237, 243, 245, 246, 247, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 269, 270, 271, 273, + 274, 275, 276, 311, 312, 313, 314, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 318, 319, 320, 362, 363, 364, 365, -280, + -280, -280, -280, -280, -280, -280, -280, 366, 367, 368, + 369, 370, 374, -280, -280, -280, -280, -280, -280, -280, + 378, 379, 404, 405, 406, 408, 419, -280, -280, -280, + -280, -280, -280, -280, -280, 420, 421, 422, 423, 424, + 425, 426, 427, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 428, 429, 430, 431, 432, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 433, 434, + 435, 436, 437, 477, 479, 495, -280, -280, -280, -280, + -280, -280, -280, -280, -280, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 512, 513, 514, 515, 516, + 517, 518, 520, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 521, -280, -280, 522, -280, -280, 523, 524, + 525, 526, 529, 532, 535, 536, 545, 546, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, 547, + 549, 550, 551, 552, 553, -280, -280, -280, -280, -280, + -280, -280, 554, 555, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, 556, 557, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, 558, 559, 560, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, 561, 562, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 563, 564, + 565, 566, 567, 568, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, 569, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, 570, -280, -280, 571, 572, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, 573, + 574, 575, -280, -280, -280, -280, -280, -280, -280, -280 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1501,10 +1506,11 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 16, 213, 223, 488, 546, 507, 232, - 555, 578, 242, 594, 258, 3, 18, 215, 225, 234, - 244, 260, 490, 509, 548, 557, 580, 596, 4, 5, - 6, 10, 14, 15, 8, 9, 7, 11, 12, 13, + 2, 0, 1, 17, 214, 224, 489, 547, 508, 233, + 561, 584, 243, 600, 259, 552, 3, 19, 216, 226, + 235, 245, 261, 491, 510, 549, 554, 563, 586, 602, + 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, + 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1523,148 +1529,147 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 20, 21, + 84, 87, 96, 184, 185, 22, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 35, 75, 23, 88, + 89, 46, 68, 83, 24, 25, 28, 29, 26, 27, + 30, 31, 32, 33, 34, 119, 196, 120, 122, 123, + 124, 198, 203, 199, 210, 211, 212, 213, 180, 85, + 74, 100, 117, 118, 208, 205, 121, 36, 37, 38, + 39, 40, 76, 90, 91, 106, 62, 72, 63, 188, + 189, 101, 56, 57, 187, 58, 59, 110, 114, 128, + 137, 163, 140, 209, 111, 69, 41, 42, 43, 98, + 129, 130, 131, 44, 45, 47, 48, 50, 51, 49, + 135, 52, 53, 54, 60, 79, 115, 93, 136, 86, + 159, 94, 95, 112, 113, 206, 99, 55, 77, 80, + 61, 64, 102, 103, 78, 160, 104, 65, 66, 67, + 197, 116, 173, 174, 175, 176, 177, 178, 186, 105, + 73, 107, 108, 109, 161, 70, 71, 92, 81, 82, + 97, 125, 126, 207, 127, 132, 133, 134, 164, 165, + 167, 169, 170, 168, 171, 181, 138, 139, 143, 144, + 141, 142, 145, 146, 148, 147, 200, 202, 201, 162, + 172, 190, 192, 191, 193, 194, 195, 166, 179, 182, + 183, 204, 0, 0, 0, 0, 0, 0, 0, 215, + 217, 218, 219, 221, 222, 223, 220, 0, 0, 0, + 0, 0, 0, 225, 227, 228, 229, 230, 231, 232, + 0, 0, 0, 0, 0, 0, 0, 234, 236, 237, + 240, 241, 238, 242, 239, 0, 0, 0, 0, 0, + 0, 0, 0, 244, 246, 247, 248, 249, 253, 250, + 251, 252, 0, 0, 0, 0, 0, 264, 268, 269, + 270, 271, 260, 262, 263, 265, 266, 267, 0, 0, + 0, 0, 0, 0, 0, 0, 490, 492, 494, 493, + 499, 495, 496, 497, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 19, 20, 83, 86, 95, - 183, 184, 21, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 34, 74, 22, 87, 88, 45, 67, - 82, 23, 24, 27, 28, 25, 26, 29, 30, 31, - 32, 33, 118, 195, 119, 121, 122, 123, 197, 202, - 198, 209, 210, 211, 212, 179, 84, 73, 99, 116, - 117, 207, 204, 120, 35, 36, 37, 38, 39, 75, - 89, 90, 105, 61, 71, 62, 187, 188, 100, 55, - 56, 186, 57, 58, 109, 113, 127, 136, 162, 139, - 208, 110, 68, 40, 41, 42, 97, 128, 129, 130, - 43, 44, 46, 47, 49, 50, 48, 134, 51, 52, - 53, 59, 78, 114, 92, 135, 85, 158, 93, 94, - 111, 112, 205, 98, 54, 76, 79, 60, 63, 101, - 102, 77, 159, 103, 64, 65, 66, 196, 115, 172, - 173, 174, 175, 176, 177, 185, 104, 72, 106, 107, - 108, 160, 69, 70, 91, 80, 81, 96, 124, 125, - 206, 126, 131, 132, 133, 163, 164, 166, 168, 169, - 167, 170, 180, 137, 138, 142, 143, 140, 141, 144, - 145, 147, 146, 199, 201, 200, 161, 171, 189, 191, - 190, 192, 193, 194, 165, 178, 181, 182, 203, 0, - 0, 0, 0, 0, 0, 0, 214, 216, 217, 218, - 220, 221, 222, 219, 0, 0, 0, 0, 0, 0, - 224, 226, 227, 228, 229, 230, 231, 0, 0, 0, - 0, 0, 0, 0, 233, 235, 236, 239, 240, 237, - 241, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 243, 245, 246, 247, 248, 252, 249, 250, 251, 0, - 0, 0, 0, 0, 263, 267, 268, 269, 270, 259, - 261, 262, 264, 265, 266, 0, 0, 0, 0, 0, - 0, 0, 0, 489, 491, 493, 492, 498, 494, 495, - 496, 497, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 508, 510, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 0, - 547, 549, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 556, 558, 559, 560, 562, 563, 561, 564, - 565, 566, 567, 0, 0, 0, 0, 0, 0, 579, - 581, 582, 583, 584, 585, 586, 0, 0, 595, 597, - 598, 272, 271, 278, 291, 289, 301, 297, 298, 302, - 299, 300, 303, 304, 305, 306, 307, 330, 331, 332, - 333, 334, 359, 360, 361, 366, 367, 294, 368, 369, - 372, 370, 371, 374, 375, 376, 390, 345, 346, 348, - 349, 377, 393, 339, 341, 394, 400, 401, 402, 295, - 358, 418, 419, 340, 413, 323, 290, 335, 391, 397, - 378, 0, 0, 422, 296, 273, 322, 382, 274, 292, - 293, 336, 337, 420, 380, 384, 385, 275, 423, 362, - 389, 324, 344, 395, 396, 399, 412, 338, 416, 414, - 415, 350, 357, 386, 387, 351, 352, 379, 404, 325, - 326, 329, 308, 310, 311, 312, 313, 314, 424, 425, - 427, 363, 364, 365, 373, 428, 429, 430, 0, 0, - 0, 381, 353, 355, 551, 439, 443, 441, 440, 444, - 442, 0, 0, 447, 448, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 383, 398, 417, 452, 453, - 354, 431, 0, 0, 0, 0, 0, 0, 405, 406, - 407, 408, 409, 410, 411, 552, 347, 342, 403, 321, - 276, 277, 343, 454, 456, 455, 457, 458, 459, 309, - 316, 449, 451, 450, 315, 0, 328, 388, 426, 327, - 356, 317, 318, 320, 319, 460, 461, 462, 466, 465, - 463, 464, 467, 468, 469, 470, 472, 471, 481, 0, - 485, 486, 0, 0, 487, 473, 479, 474, 475, 476, - 478, 480, 477, 253, 254, 255, 256, 257, 499, 501, - 500, 503, 504, 505, 506, 502, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 550, 568, 569, 570, 573, 571, - 572, 574, 575, 576, 577, 587, 588, 589, 590, 591, - 592, 599, 600, 392, 421, 438, 553, 554, 445, 446, - 432, 433, 0, 0, 0, 437, 593, 482, 483, 484, - 436, 434, 435 + 0, 0, 0, 509, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 0, 548, 550, 0, 553, 555, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 562, 564, + 565, 566, 568, 569, 567, 570, 571, 572, 573, 0, + 0, 0, 0, 0, 0, 585, 587, 588, 589, 590, + 591, 592, 0, 0, 601, 603, 604, 273, 272, 279, + 292, 290, 302, 298, 299, 303, 300, 301, 304, 305, + 306, 307, 308, 331, 332, 333, 334, 335, 360, 361, + 362, 367, 368, 295, 369, 370, 373, 371, 372, 375, + 376, 377, 391, 346, 347, 349, 350, 378, 394, 340, + 342, 395, 401, 402, 403, 296, 359, 419, 420, 341, + 414, 324, 291, 336, 392, 398, 379, 0, 0, 423, + 297, 274, 323, 383, 275, 293, 294, 337, 338, 421, + 381, 385, 386, 276, 424, 363, 390, 325, 345, 396, + 397, 400, 413, 339, 417, 415, 416, 351, 358, 387, + 388, 352, 353, 380, 405, 326, 327, 330, 309, 311, + 312, 313, 314, 315, 425, 426, 428, 364, 365, 366, + 374, 429, 430, 431, 0, 0, 0, 382, 354, 356, + 557, 440, 444, 442, 441, 445, 443, 0, 0, 448, + 449, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 384, 399, 418, 453, 454, 355, 432, 0, 0, + 0, 0, 0, 0, 406, 407, 408, 409, 410, 411, + 412, 558, 348, 343, 404, 322, 277, 278, 344, 455, + 457, 456, 458, 459, 460, 310, 317, 450, 452, 451, + 316, 0, 329, 389, 427, 328, 357, 318, 319, 321, + 320, 461, 462, 463, 467, 466, 464, 465, 468, 469, + 470, 471, 473, 472, 482, 0, 486, 487, 0, 0, + 488, 474, 480, 475, 476, 477, 479, 481, 478, 254, + 255, 256, 257, 258, 500, 502, 501, 504, 505, 506, + 507, 503, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 551, 556, 574, 575, 576, 579, 577, 578, 580, 581, + 582, 583, 593, 594, 595, 596, 597, 598, 605, 606, + 393, 422, 439, 559, 560, 446, 447, 433, 434, 0, + 0, 0, 438, 599, 483, 484, 485, 437, 435, 436 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -23, 248, - 574, 575, 576, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, - -272 + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 576, 577, + 578, 579, 580, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 15, 16, 28, 234, 17, 29, 436, 18, - 30, 450, 19, 31, 464, 20, 32, 480, 494, 495, - 496, 497, 498, 21, 33, 499, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 437, 438, 439, 440, 441, - 442, 443, 451, 452, 453, 454, 455, 456, 481, 482, - 483, 484, 485, 486, 487, 488, 465, 466, 467, 468, - 469, 470, 471, 22, 34, 513, 514, 515, 516, 517, - 518, 519, 520, 521, 23, 35, 540, 541, 542, 543, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 24, 36, 560, 561, 424, - 425, 426, 427, 25, 37, 572, 573, 574, 575, 576, - 577, 578, 579, 580, 581, 582, 26, 38, 589, 590, - 591, 592, 593, 594, 595, 428, 27, 39, 598, 599, - 600 + -1, 1, 16, 17, 30, 237, 18, 31, 439, 19, + 32, 453, 20, 33, 467, 21, 34, 483, 497, 498, + 499, 500, 501, 22, 35, 502, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 440, 441, 442, 443, 444, + 445, 446, 454, 455, 456, 457, 458, 459, 484, 485, + 486, 487, 488, 489, 490, 491, 468, 469, 470, 471, + 472, 473, 474, 23, 36, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 24, 37, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 25, 38, 563, 564, 26, + 39, 566, 567, 427, 428, 429, 430, 27, 40, 578, + 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, + 28, 41, 595, 596, 597, 598, 599, 600, 601, 431, + 29, 42, 604, 605, 606 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1672,73 +1677,74 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 472, 429, 457, 430, 431, 559, 444, 596, 597, - 500, 3, 601, 602, 603, 445, 446, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 604, 605, 472, 606, 458, - 459, 607, 608, 609, 610, 4, 611, 612, 613, 614, - 615, 5, 562, 563, 564, 565, 566, 567, 568, 569, - 570, 571, 616, 617, 460, 432, 505, 506, 507, 508, - 509, 510, 511, 512, 583, 584, 585, 586, 587, 588, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 628, 629, 630, 631, 632, 6, 433, 633, 634, 434, - 447, 635, 448, 636, 637, 638, 639, 640, 641, 642, - 643, 7, 644, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, - 662, 461, 462, 663, 664, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, - 680, 681, 8, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, - 699, 463, 700, 701, 702, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, - 9, 738, 474, 475, 476, 739, 740, 741, 742, 743, - 744, 745, 479, 746, 747, 748, 749, 435, 10, 750, - 751, 449, 752, 753, 754, 755, 756, 757, 758, 759, - 489, 490, 491, 492, 493, 11, 473, 760, 474, 475, - 476, 477, 478, 761, 12, 762, 763, 764, 479, 765, - 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, - 776, 777, 778, 779, 780, 781, 782, 783, 13, 784, - 785, 501, 14, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 786, 787, 788, 789, 72, - 73, 74, 790, 791, 792, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 116, 117, 118, 802, 119, - 120, 121, 803, 804, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 805, 806, - 807, 146, 808, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, - 826, 827, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 828, 196, 829, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 830, - 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, - 212, 213, 214, 215, 216, 217, 841, 842, 843, 844, - 845, 846, 847, 218, 848, 849, 850, 851, 852, 853, - 854, 219, 220, 855, 221, 222, 856, 223, 224, 857, - 858, 225, 226, 227, 228, 229, 230, 231, 232, 859, - 860, 861, 233, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 0, 0, 0, 0, 0, 0, + 2, 475, 432, 460, 433, 434, 562, 447, 602, 603, + 565, 3, 607, 608, 609, 448, 449, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 610, 611, 475, 612, 461, + 462, 613, 614, 615, 616, 4, 617, 618, 619, 620, + 621, 5, 568, 569, 570, 571, 572, 573, 574, 575, + 576, 577, 622, 623, 463, 435, 508, 509, 510, 511, + 512, 513, 514, 515, 589, 590, 591, 592, 593, 594, + 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 6, 436, 639, 640, 437, + 450, 641, 451, 642, 643, 644, 645, 646, 647, 648, + 649, 7, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 464, 465, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, + 686, 687, 8, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 466, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, + 9, 744, 477, 478, 479, 745, 746, 747, 748, 749, + 750, 751, 482, 752, 753, 754, 755, 438, 10, 756, + 757, 452, 758, 759, 760, 761, 762, 763, 764, 765, + 492, 493, 494, 495, 496, 11, 476, 766, 477, 478, + 479, 480, 481, 767, 12, 768, 769, 770, 482, 771, + 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 784, 785, 786, 787, 788, 789, 13, 790, + 791, 792, 14, 793, 794, 795, 796, 0, 15, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 797, 798, 799, 800, 75, 76, 77, 801, 802, + 803, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 804, 805, 806, 807, 808, 809, 810, 811, + 812, 119, 120, 121, 813, 122, 123, 124, 814, 815, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 816, 817, 818, 149, 819, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 839, 199, 840, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 841, 842, 843, 844, 845, + 846, 847, 848, 849, 850, 851, 215, 216, 217, 218, + 219, 220, 852, 853, 854, 855, 856, 857, 858, 221, + 859, 860, 861, 862, 863, 864, 865, 222, 223, 866, + 224, 225, 867, 226, 227, 868, 869, 228, 229, 230, + 231, 232, 233, 234, 235, 870, 871, 872, 236, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 502, 503, 504 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 503, 504, 505, 506, 507 }; static const yytype_int16 yycheck[] = { 0, 44, 44, 44, 46, 47, 112, 44, 279, 280, - 33, 11, 10, 10, 10, 52, 53, 153, 154, 155, + 289, 11, 10, 10, 10, 52, 53, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 10, 10, 44, 10, 80, 81, 10, 10, 10, 10, 45, 10, 10, 10, 10, @@ -1765,106 +1771,107 @@ static const yytype_int16 yycheck[] = 257, 258, 259, 10, 254, 10, 10, 10, 265, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 278, 10, - 10, 33, 282, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 10, 10, 10, 10, 48, - 49, 50, 10, 10, 10, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 104, 105, 106, 10, 108, - 109, 110, 10, 10, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 10, 10, - 10, 140, 10, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 282, 10, 10, 10, 10, -1, 288, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 10, 10, 10, 10, 48, 49, 50, 10, 10, + 10, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 104, 105, 106, 10, 108, 109, 110, 10, 10, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 10, 10, 10, 140, 10, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 10, 211, 10, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 239, 240, 241, 242, 243, 244, 10, 10, 10, 10, - 10, 10, 10, 252, 10, 10, 10, 10, 10, 10, - 10, 260, 261, 10, 263, 264, 10, 266, 267, 10, - 10, 270, 271, 272, 273, 274, 275, 276, 277, 10, - 10, 10, 281, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 10, 211, 10, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 239, 240, 241, 242, + 243, 244, 10, 10, 10, 10, 10, 10, 10, 252, + 10, 10, 10, 10, 10, 10, 10, 260, 261, 10, + 263, 264, 10, 266, 267, 10, 10, 270, 271, 272, + 273, 274, 275, 276, 277, 10, 10, 10, 281, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, 33, 33 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35, 35, 35, 35, 35 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 289, 0, 11, 45, 51, 95, 111, 152, 210, - 228, 245, 254, 278, 282, 290, 291, 294, 297, 300, - 303, 311, 531, 542, 563, 571, 584, 594, 292, 295, - 298, 301, 304, 312, 532, 543, 564, 572, 585, 595, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 48, 49, 50, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 104, 105, 106, 108, - 109, 110, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 140, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 211, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 239, 240, 241, 242, 243, 244, 252, 260, - 261, 263, 264, 266, 267, 270, 271, 272, 273, 274, - 275, 276, 277, 281, 293, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 567, 568, 569, 570, 593, 44, - 46, 47, 107, 138, 141, 269, 296, 503, 504, 505, - 506, 507, 508, 509, 44, 52, 53, 137, 139, 268, - 299, 510, 511, 512, 513, 514, 515, 44, 80, 81, - 105, 172, 173, 212, 302, 524, 525, 526, 527, 528, - 529, 530, 44, 253, 255, 256, 257, 258, 259, 265, - 305, 516, 517, 518, 519, 520, 521, 522, 523, 283, - 284, 285, 286, 287, 306, 307, 308, 309, 310, 313, - 516, 517, 518, 519, 520, 96, 97, 98, 99, 100, - 101, 102, 103, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 112, - 565, 566, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 573, 574, 575, 576, 577, 578, 579, 580, - 581, 582, 583, 246, 247, 248, 249, 250, 251, 586, - 587, 588, 589, 590, 591, 592, 279, 280, 596, 597, - 598, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 0, 291, 0, 11, 45, 51, 95, 111, 152, 210, + 228, 245, 254, 278, 282, 288, 292, 293, 296, 299, + 302, 305, 313, 533, 544, 565, 569, 577, 590, 600, + 294, 297, 300, 303, 306, 314, 534, 545, 566, 570, + 578, 591, 601, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 48, 49, 50, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 104, + 105, 106, 108, 109, 110, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 140, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 239, 240, 241, 242, 243, + 244, 252, 260, 261, 263, 264, 266, 267, 270, 271, + 272, 273, 274, 275, 276, 277, 281, 295, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 573, 574, 575, + 576, 599, 44, 46, 47, 107, 138, 141, 269, 298, + 505, 506, 507, 508, 509, 510, 511, 44, 52, 53, + 137, 139, 268, 301, 512, 513, 514, 515, 516, 517, + 44, 80, 81, 105, 172, 173, 212, 304, 526, 527, + 528, 529, 530, 531, 532, 44, 253, 255, 256, 257, + 258, 259, 265, 307, 518, 519, 520, 521, 522, 523, + 524, 525, 283, 284, 285, 286, 287, 308, 309, 310, + 311, 312, 315, 518, 519, 520, 521, 522, 96, 97, + 98, 99, 100, 101, 102, 103, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, + 563, 564, 112, 567, 568, 289, 571, 572, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 246, + 247, 248, 249, 250, 251, 592, 593, 594, 595, 596, + 597, 598, 279, 280, 602, 603, 604, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1893,80 +1900,80 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 288, 289, 289, 290, 290, 290, 290, 290, 290, - 290, 290, 290, 290, 290, 290, 291, 292, 292, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 294, 295, 295, 296, 296, 296, 296, - 296, 296, 296, 297, 298, 298, 299, 299, 299, 299, - 299, 299, 300, 301, 301, 302, 302, 302, 302, 302, - 302, 302, 303, 304, 304, 305, 305, 305, 305, 305, - 305, 305, 305, 306, 307, 308, 309, 310, 311, 312, - 312, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 532, 533, 533, 533, 533, 533, 533, 533, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 543, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 545, 546, - 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, - 557, 558, 559, 560, 561, 562, 563, 564, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 572, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 574, 575, - 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, - 585, 586, 586, 586, 586, 586, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 595, 596, 596, 597, - 598 + 0, 290, 291, 291, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 293, 294, 294, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 296, 297, 297, 298, 298, 298, + 298, 298, 298, 298, 299, 300, 300, 301, 301, 301, + 301, 301, 301, 302, 303, 303, 304, 304, 304, 304, + 304, 304, 304, 305, 306, 306, 307, 307, 307, 307, + 307, 307, 307, 307, 308, 309, 310, 311, 312, 313, + 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 534, 535, 535, 535, 535, 535, 535, 535, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 545, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, + 558, 559, 560, 561, 562, 563, 564, 565, 566, 566, + 567, 568, 569, 570, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 578, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 588, 589, 590, 591, 591, 592, 592, 592, + 592, 592, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 601, 602, 602, 603, 604 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, + 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1986,13 +1993,13 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2004,28 +2011,28 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, - 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, + 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, + 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 3, 3, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, - 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, + 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, - 2 + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, + 1, 2, 1, 2, 0, 1, 2, 2, 2, 3, + 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, + 1, 2, 0, 1, 1, 2, 2 }; @@ -2709,16 +2716,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 16: -#line 190 "./util/configparser.y" + case 17: +#line 191 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); } -#line 2718 "util/configparser.c" +#line 2725 "util/configparser.c" break; - case 213: -#line 284 "./util/configparser.y" + case 214: +#line 285 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2729,11 +2736,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2733 "util/configparser.c" +#line 2740 "util/configparser.c" break; - case 223: -#line 301 "./util/configparser.y" + case 224: +#line 302 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2744,11 +2751,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2748 "util/configparser.c" +#line 2755 "util/configparser.c" break; - case 232: -#line 318 "./util/configparser.y" + case 233: +#line 319 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2761,11 +2768,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2765 "util/configparser.c" +#line 2772 "util/configparser.c" break; - case 242: -#line 337 "./util/configparser.y" + case 243: +#line 338 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2781,11 +2788,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2785 "util/configparser.c" +#line 2792 "util/configparser.c" break; - case 253: -#line 361 "./util/configparser.y" + case 254: +#line 362 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2802,11 +2809,11 @@ yyreduce: } } -#line 2806 "util/configparser.c" +#line 2813 "util/configparser.c" break; - case 254: -#line 380 "./util/configparser.y" + case 255: +#line 381 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2821,21 +2828,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2825 "util/configparser.c" +#line 2832 "util/configparser.c" break; - case 255: -#line 397 "./util/configparser.y" + case 256: +#line 398 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2835 "util/configparser.c" +#line 2842 "util/configparser.c" break; - case 256: -#line 405 "./util/configparser.y" + case 257: +#line 406 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2843,21 +2850,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2847 "util/configparser.c" +#line 2854 "util/configparser.c" break; - case 257: -#line 415 "./util/configparser.y" + case 258: +#line 416 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2857 "util/configparser.c" +#line 2864 "util/configparser.c" break; - case 258: -#line 423 "./util/configparser.y" + case 259: +#line 424 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2873,11 +2880,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2877 "util/configparser.c" +#line 2884 "util/configparser.c" break; - case 271: -#line 446 "./util/configparser.y" + case 272: +#line 447 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2885,11 +2892,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2889 "util/configparser.c" +#line 2896 "util/configparser.c" break; - case 272: -#line 455 "./util/configparser.y" + case 273: +#line 456 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2897,11 +2904,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2901 "util/configparser.c" +#line 2908 "util/configparser.c" break; - case 273: -#line 464 "./util/configparser.y" + case 274: +#line 465 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2911,11 +2918,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2915 "util/configparser.c" +#line 2922 "util/configparser.c" break; - case 274: -#line 475 "./util/configparser.y" + case 275: +#line 476 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2923,11 +2930,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2927 "util/configparser.c" +#line 2934 "util/configparser.c" break; - case 275: -#line 484 "./util/configparser.y" + case 276: +#line 485 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2935,11 +2942,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2939 "util/configparser.c" +#line 2946 "util/configparser.c" break; - case 276: -#line 493 "./util/configparser.y" + case 277: +#line 494 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2947,11 +2954,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2951 "util/configparser.c" +#line 2958 "util/configparser.c" break; - case 277: -#line 502 "./util/configparser.y" + case 278: +#line 503 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2961,11 +2968,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2965 "util/configparser.c" +#line 2972 "util/configparser.c" break; - case 278: -#line 513 "./util/configparser.y" + case 279: +#line 514 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2973,11 +2980,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2977 "util/configparser.c" +#line 2984 "util/configparser.c" break; - case 279: -#line 522 "./util/configparser.y" + case 280: +#line 523 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2988,11 +2995,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 2992 "util/configparser.c" +#line 2999 "util/configparser.c" break; - case 280: -#line 534 "./util/configparser.y" + case 281: +#line 535 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3004,11 +3011,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3008 "util/configparser.c" +#line 3015 "util/configparser.c" break; - case 281: -#line 548 "./util/configparser.y" + case 282: +#line 549 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3022,11 +3029,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3026 "util/configparser.c" +#line 3033 "util/configparser.c" break; - case 282: -#line 563 "./util/configparser.y" + case 283: +#line 564 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3036,11 +3043,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3040 "util/configparser.c" +#line 3047 "util/configparser.c" break; - case 283: -#line 574 "./util/configparser.y" + case 284: +#line 575 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3056,11 +3063,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3060 "util/configparser.c" +#line 3067 "util/configparser.c" break; - case 284: -#line 591 "./util/configparser.y" + case 285: +#line 592 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3076,11 +3083,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3080 "util/configparser.c" +#line 3087 "util/configparser.c" break; - case 285: -#line 608 "./util/configparser.y" + case 286: +#line 609 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3096,11 +3103,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3100 "util/configparser.c" +#line 3107 "util/configparser.c" break; - case 286: -#line 625 "./util/configparser.y" + case 287: +#line 626 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3116,11 +3123,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3120 "util/configparser.c" +#line 3127 "util/configparser.c" break; - case 287: -#line 642 "./util/configparser.y" + case 288: +#line 643 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3134,11 +3141,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3138 "util/configparser.c" +#line 3145 "util/configparser.c" break; - case 288: -#line 657 "./util/configparser.y" + case 289: +#line 658 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3152,11 +3159,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3156 "util/configparser.c" +#line 3163 "util/configparser.c" break; - case 289: -#line 672 "./util/configparser.y" + case 290: +#line 673 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3168,11 +3175,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3172 "util/configparser.c" +#line 3179 "util/configparser.c" break; - case 290: -#line 685 "./util/configparser.y" + case 291: +#line 686 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3186,11 +3193,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3190 "util/configparser.c" +#line 3197 "util/configparser.c" break; - case 291: -#line 700 "./util/configparser.y" + case 292: +#line 701 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3198,11 +3205,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3209 "util/configparser.c" break; - case 292: -#line 709 "./util/configparser.y" + case 293: +#line 710 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3210,11 +3217,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3214 "util/configparser.c" +#line 3221 "util/configparser.c" break; - case 293: -#line 718 "./util/configparser.y" + case 294: +#line 719 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3222,11 +3229,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3226 "util/configparser.c" +#line 3233 "util/configparser.c" break; - case 294: -#line 727 "./util/configparser.y" + case 295: +#line 728 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3234,11 +3241,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" +#line 3245 "util/configparser.c" break; - case 295: -#line 736 "./util/configparser.y" + case 296: +#line 737 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3246,11 +3253,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3250 "util/configparser.c" +#line 3257 "util/configparser.c" break; - case 296: -#line 745 "./util/configparser.y" + case 297: +#line 746 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3258,11 +3265,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3262 "util/configparser.c" +#line 3269 "util/configparser.c" break; - case 297: -#line 754 "./util/configparser.y" + case 298: +#line 755 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3270,11 +3277,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3274 "util/configparser.c" +#line 3281 "util/configparser.c" break; - case 298: -#line 763 "./util/configparser.y" + case 299: +#line 764 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3282,11 +3289,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3286 "util/configparser.c" +#line 3293 "util/configparser.c" break; - case 299: -#line 772 "./util/configparser.y" + case 300: +#line 773 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3294,11 +3301,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3298 "util/configparser.c" +#line 3305 "util/configparser.c" break; - case 300: -#line 781 "./util/configparser.y" + case 301: +#line 782 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3306,11 +3313,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3310 "util/configparser.c" +#line 3317 "util/configparser.c" break; - case 301: -#line 790 "./util/configparser.y" + case 302: +#line 791 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3318,11 +3325,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3322 "util/configparser.c" +#line 3329 "util/configparser.c" break; - case 302: -#line 799 "./util/configparser.y" + case 303: +#line 800 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3330,11 +3337,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3334 "util/configparser.c" +#line 3341 "util/configparser.c" break; - case 303: -#line 808 "./util/configparser.y" + case 304: +#line 809 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3342,11 +3349,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3346 "util/configparser.c" +#line 3353 "util/configparser.c" break; - case 304: -#line 817 "./util/configparser.y" + case 305: +#line 818 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3354,11 +3361,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3358 "util/configparser.c" +#line 3365 "util/configparser.c" break; - case 305: -#line 826 "./util/configparser.y" + case 306: +#line 827 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3370,11 +3377,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3374 "util/configparser.c" +#line 3381 "util/configparser.c" break; - case 306: -#line 839 "./util/configparser.y" + case 307: +#line 840 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3382,11 +3389,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3386 "util/configparser.c" +#line 3393 "util/configparser.c" break; - case 307: -#line 848 "./util/configparser.y" + case 308: +#line 849 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3398,11 +3405,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" +#line 3409 "util/configparser.c" break; - case 308: -#line 861 "./util/configparser.y" + case 309: +#line 862 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3410,11 +3417,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3414 "util/configparser.c" +#line 3421 "util/configparser.c" break; - case 309: -#line 870 "./util/configparser.y" + case 310: +#line 871 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3422,11 +3429,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3426 "util/configparser.c" +#line 3433 "util/configparser.c" break; - case 310: -#line 879 "./util/configparser.y" + case 311: +#line 880 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3434,31 +3441,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3438 "util/configparser.c" +#line 3445 "util/configparser.c" break; - case 311: -#line 888 "./util/configparser.y" + case 312: +#line 889 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3448 "util/configparser.c" +#line 3455 "util/configparser.c" break; - case 312: -#line 895 "./util/configparser.y" + case 313: +#line 896 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3458 "util/configparser.c" +#line 3465 "util/configparser.c" break; - case 313: -#line 902 "./util/configparser.y" + case 314: +#line 903 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3466,21 +3473,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3470 "util/configparser.c" +#line 3477 "util/configparser.c" break; - case 314: -#line 911 "./util/configparser.y" + case 315: +#line 912 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3480 "util/configparser.c" +#line 3487 "util/configparser.c" break; - case 315: -#line 918 "./util/configparser.y" + case 316: +#line 919 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3488,53 +3495,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3492 "util/configparser.c" +#line 3499 "util/configparser.c" break; - case 316: -#line 927 "./util/configparser.y" + case 317: +#line 928 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3503 "util/configparser.c" +#line 3510 "util/configparser.c" break; - case 317: -#line 935 "./util/configparser.y" + case 318: +#line 936 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3513 "util/configparser.c" +#line 3520 "util/configparser.c" break; - case 318: -#line 942 "./util/configparser.y" + case 319: +#line 943 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3523 "util/configparser.c" +#line 3530 "util/configparser.c" break; - case 319: -#line 949 "./util/configparser.y" + case 320: +#line 950 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3534 "util/configparser.c" +#line 3541 "util/configparser.c" break; - case 320: -#line 957 "./util/configparser.y" + case 321: +#line 958 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3542,11 +3549,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3546 "util/configparser.c" +#line 3553 "util/configparser.c" break; - case 321: -#line 966 "./util/configparser.y" + case 322: +#line 967 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3554,11 +3561,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3558 "util/configparser.c" +#line 3565 "util/configparser.c" break; - case 322: -#line 975 "./util/configparser.y" + case 323: +#line 976 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3566,11 +3573,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3570 "util/configparser.c" +#line 3577 "util/configparser.c" break; - case 323: -#line 984 "./util/configparser.y" + case 324: +#line 985 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3583,11 +3590,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" +#line 3594 "util/configparser.c" break; - case 324: -#line 998 "./util/configparser.y" + case 325: +#line 999 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3595,11 +3602,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3599 "util/configparser.c" +#line 3606 "util/configparser.c" break; - case 325: -#line 1007 "./util/configparser.y" + case 326: +#line 1008 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3607,11 +3614,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3611 "util/configparser.c" +#line 3618 "util/configparser.c" break; - case 326: -#line 1016 "./util/configparser.y" + case 327: +#line 1017 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3619,11 +3626,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3623 "util/configparser.c" +#line 3630 "util/configparser.c" break; - case 327: -#line 1025 "./util/configparser.y" + case 328: +#line 1026 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3631,11 +3638,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3635 "util/configparser.c" +#line 3642 "util/configparser.c" break; - case 328: -#line 1034 "./util/configparser.y" + case 329: +#line 1035 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3643,11 +3650,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3647 "util/configparser.c" +#line 3654 "util/configparser.c" break; - case 329: -#line 1043 "./util/configparser.y" + case 330: +#line 1044 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3655,31 +3662,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3659 "util/configparser.c" +#line 3666 "util/configparser.c" break; - case 330: -#line 1052 "./util/configparser.y" + case 331: +#line 1053 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3669 "util/configparser.c" +#line 3676 "util/configparser.c" break; - case 331: -#line 1059 "./util/configparser.y" + case 332: +#line 1060 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3679 "util/configparser.c" +#line 3686 "util/configparser.c" break; - case 332: -#line 1066 "./util/configparser.y" + case 333: +#line 1067 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3704,105 +3711,105 @@ yyreduce: } } } -#line 3708 "util/configparser.c" +#line 3715 "util/configparser.c" break; - case 333: -#line 1092 "./util/configparser.y" + case 334: +#line 1093 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3719 "util/configparser.c" +#line 3726 "util/configparser.c" break; - case 334: -#line 1100 "./util/configparser.y" + case 335: +#line 1101 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3729 "util/configparser.c" +#line 3736 "util/configparser.c" break; - case 335: -#line 1107 "./util/configparser.y" + case 336: +#line 1108 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3739 "util/configparser.c" +#line 3746 "util/configparser.c" break; - case 336: -#line 1114 "./util/configparser.y" + case 337: +#line 1115 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 3749 "util/configparser.c" +#line 3756 "util/configparser.c" break; - case 337: -#line 1121 "./util/configparser.y" + case 338: +#line 1122 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3759 "util/configparser.c" +#line 3766 "util/configparser.c" break; - case 338: -#line 1128 "./util/configparser.y" + case 339: +#line 1129 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3770 "util/configparser.c" +#line 3777 "util/configparser.c" break; - case 339: -#line 1136 "./util/configparser.y" + case 340: +#line 1137 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3781 "util/configparser.c" +#line 3788 "util/configparser.c" break; - case 340: -#line 1144 "./util/configparser.y" + case 341: +#line 1145 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3792 "util/configparser.c" +#line 3799 "util/configparser.c" break; - case 341: -#line 1152 "./util/configparser.y" + case 342: +#line 1153 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3802 "util/configparser.c" +#line 3809 "util/configparser.c" break; - case 342: -#line 1159 "./util/configparser.y" + case 343: +#line 1160 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3812,11 +3819,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3816 "util/configparser.c" +#line 3823 "util/configparser.c" break; - case 343: -#line 1170 "./util/configparser.y" + case 344: +#line 1171 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3826,21 +3833,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" +#line 3837 "util/configparser.c" break; - case 344: -#line 1181 "./util/configparser.y" + case 345: +#line 1182 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3840 "util/configparser.c" +#line 3847 "util/configparser.c" break; - case 345: -#line 1188 "./util/configparser.y" + case 346: +#line 1189 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3848,11 +3855,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3852 "util/configparser.c" +#line 3859 "util/configparser.c" break; - case 346: -#line 1197 "./util/configparser.y" + case 347: +#line 1198 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3860,11 +3867,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3864 "util/configparser.c" +#line 3871 "util/configparser.c" break; - case 347: -#line 1206 "./util/configparser.y" + case 348: +#line 1207 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3872,53 +3879,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3876 "util/configparser.c" +#line 3883 "util/configparser.c" break; - case 348: -#line 1215 "./util/configparser.y" + case 349: +#line 1216 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3886 "util/configparser.c" +#line 3893 "util/configparser.c" break; - case 349: -#line 1222 "./util/configparser.y" + case 350: +#line 1223 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3896 "util/configparser.c" +#line 3903 "util/configparser.c" break; - case 350: -#line 1229 "./util/configparser.y" + case 351: +#line 1230 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3907 "util/configparser.c" +#line 3914 "util/configparser.c" break; - case 351: -#line 1237 "./util/configparser.y" + case 352: +#line 1238 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3918 "util/configparser.c" +#line 3925 "util/configparser.c" break; - case 352: -#line 1245 "./util/configparser.y" + case 353: +#line 1246 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3927,11 +3934,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3931 "util/configparser.c" +#line 3938 "util/configparser.c" break; - case 353: -#line 1255 "./util/configparser.y" + case 354: +#line 1256 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3940,11 +3947,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3944 "util/configparser.c" +#line 3951 "util/configparser.c" break; - case 354: -#line 1265 "./util/configparser.y" + case 355: +#line 1266 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3953,11 +3960,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3957 "util/configparser.c" +#line 3964 "util/configparser.c" break; - case 355: -#line 1275 "./util/configparser.y" + case 356: +#line 1276 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3970,22 +3977,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3974 "util/configparser.c" +#line 3981 "util/configparser.c" break; - case 356: -#line 1289 "./util/configparser.y" + case 357: +#line 1290 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3985 "util/configparser.c" +#line 3992 "util/configparser.c" break; - case 357: -#line 1297 "./util/configparser.y" + case 358: +#line 1298 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3997,11 +4004,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4001 "util/configparser.c" +#line 4008 "util/configparser.c" break; - case 358: -#line 1310 "./util/configparser.y" + case 359: +#line 1311 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4011,22 +4018,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4022 "util/configparser.c" break; - case 359: -#line 1321 "./util/configparser.y" + case 360: +#line 1322 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4026 "util/configparser.c" +#line 4033 "util/configparser.c" break; - case 360: -#line 1329 "./util/configparser.y" + case 361: +#line 1330 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4038,11 +4045,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4042 "util/configparser.c" +#line 4049 "util/configparser.c" break; - case 361: -#line 1342 "./util/configparser.y" + case 362: +#line 1343 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4050,11 +4057,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4054 "util/configparser.c" +#line 4061 "util/configparser.c" break; - case 362: -#line 1351 "./util/configparser.y" + case 363: +#line 1352 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4062,11 +4069,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4066 "util/configparser.c" +#line 4073 "util/configparser.c" break; - case 363: -#line 1360 "./util/configparser.y" + case 364: +#line 1361 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4074,11 +4081,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4078 "util/configparser.c" +#line 4085 "util/configparser.c" break; - case 364: -#line 1369 "./util/configparser.y" + case 365: +#line 1370 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4087,11 +4094,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4091 "util/configparser.c" +#line 4098 "util/configparser.c" break; - case 365: -#line 1379 "./util/configparser.y" + case 366: +#line 1380 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4100,22 +4107,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4104 "util/configparser.c" +#line 4111 "util/configparser.c" break; - case 366: -#line 1389 "./util/configparser.y" + case 367: +#line 1390 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4115 "util/configparser.c" +#line 4122 "util/configparser.c" break; - case 367: -#line 1397 "./util/configparser.y" + case 368: +#line 1398 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4127,11 +4134,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4131 "util/configparser.c" +#line 4138 "util/configparser.c" break; - case 368: -#line 1410 "./util/configparser.y" + case 369: +#line 1411 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4139,22 +4146,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4143 "util/configparser.c" +#line 4150 "util/configparser.c" break; - case 369: -#line 1419 "./util/configparser.y" + case 370: +#line 1420 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4154 "util/configparser.c" +#line 4161 "util/configparser.c" break; - case 370: -#line 1427 "./util/configparser.y" + case 371: +#line 1428 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4162,22 +4169,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4166 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 371: -#line 1436 "./util/configparser.y" + case 372: +#line 1437 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4177 "util/configparser.c" +#line 4184 "util/configparser.c" break; - case 372: -#line 1444 "./util/configparser.y" + case 373: +#line 1445 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4189,11 +4196,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4193 "util/configparser.c" +#line 4200 "util/configparser.c" break; - case 373: -#line 1457 "./util/configparser.y" + case 374: +#line 1458 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4201,21 +4208,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4205 "util/configparser.c" +#line 4212 "util/configparser.c" break; - case 374: -#line 1466 "./util/configparser.y" + case 375: +#line 1467 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4215 "util/configparser.c" +#line 4222 "util/configparser.c" break; - case 375: -#line 1473 "./util/configparser.y" + case 376: +#line 1474 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4224,11 +4231,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4228 "util/configparser.c" +#line 4235 "util/configparser.c" break; - case 376: -#line 1483 "./util/configparser.y" + case 377: +#line 1484 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4237,11 +4244,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4241 "util/configparser.c" +#line 4248 "util/configparser.c" break; - case 377: -#line 1493 "./util/configparser.y" + case 378: +#line 1494 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4250,11 +4257,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4254 "util/configparser.c" +#line 4261 "util/configparser.c" break; - case 378: -#line 1503 "./util/configparser.y" + case 379: +#line 1504 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4263,11 +4270,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4267 "util/configparser.c" +#line 4274 "util/configparser.c" break; - case 379: -#line 1513 "./util/configparser.y" + case 380: +#line 1514 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4276,11 +4283,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4287 "util/configparser.c" break; - case 380: -#line 1523 "./util/configparser.y" + case 381: +#line 1524 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4289,11 +4296,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4293 "util/configparser.c" +#line 4300 "util/configparser.c" break; - case 381: -#line 1533 "./util/configparser.y" + case 382: +#line 1534 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4302,11 +4309,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4306 "util/configparser.c" +#line 4313 "util/configparser.c" break; - case 382: -#line 1543 "./util/configparser.y" + case 383: +#line 1544 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4315,41 +4322,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4319 "util/configparser.c" +#line 4326 "util/configparser.c" break; - case 383: -#line 1553 "./util/configparser.y" + case 384: +#line 1554 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4329 "util/configparser.c" +#line 4336 "util/configparser.c" break; - case 384: -#line 1560 "./util/configparser.y" + case 385: +#line 1561 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4339 "util/configparser.c" +#line 4346 "util/configparser.c" break; - case 385: -#line 1567 "./util/configparser.y" + case 386: +#line 1568 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4349 "util/configparser.c" +#line 4356 "util/configparser.c" break; - case 386: -#line 1574 "./util/configparser.y" + case 387: +#line 1575 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4357,11 +4364,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4368 "util/configparser.c" break; - case 387: -#line 1583 "./util/configparser.y" + case 388: +#line 1584 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4369,11 +4376,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4380 "util/configparser.c" break; - case 388: -#line 1592 "./util/configparser.y" + case 389: +#line 1593 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4381,11 +4388,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4392 "util/configparser.c" break; - case 389: -#line 1601 "./util/configparser.y" + case 390: +#line 1602 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4393,21 +4400,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4397 "util/configparser.c" +#line 4404 "util/configparser.c" break; - case 390: -#line 1610 "./util/configparser.y" + case 391: +#line 1611 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4407 "util/configparser.c" +#line 4414 "util/configparser.c" break; - case 391: -#line 1617 "./util/configparser.y" + case 392: +#line 1618 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4416,11 +4423,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4420 "util/configparser.c" +#line 4427 "util/configparser.c" break; - case 392: -#line 1627 "./util/configparser.y" + case 393: +#line 1628 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -4439,21 +4446,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 4443 "util/configparser.c" +#line 4450 "util/configparser.c" break; - case 393: -#line 1647 "./util/configparser.y" + case 394: +#line 1648 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4453 "util/configparser.c" +#line 4460 "util/configparser.c" break; - case 394: -#line 1654 "./util/configparser.y" + case 395: +#line 1655 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4470,11 +4477,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4474 "util/configparser.c" +#line 4481 "util/configparser.c" break; - case 395: -#line 1672 "./util/configparser.y" + case 396: +#line 1673 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4486,11 +4493,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4490 "util/configparser.c" +#line 4497 "util/configparser.c" break; - case 396: -#line 1685 "./util/configparser.y" + case 397: +#line 1686 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4502,11 +4509,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4506 "util/configparser.c" +#line 4513 "util/configparser.c" break; - case 397: -#line 1698 "./util/configparser.y" + case 398: +#line 1699 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4514,11 +4521,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4518 "util/configparser.c" +#line 4525 "util/configparser.c" break; - case 398: -#line 1707 "./util/configparser.y" + case 399: +#line 1708 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4526,11 +4533,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4530 "util/configparser.c" +#line 4537 "util/configparser.c" break; - case 399: -#line 1716 "./util/configparser.y" + case 400: +#line 1717 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4538,11 +4545,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4542 "util/configparser.c" +#line 4549 "util/configparser.c" break; - case 400: -#line 1725 "./util/configparser.y" + case 401: +#line 1726 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4550,11 +4557,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4554 "util/configparser.c" +#line 4561 "util/configparser.c" break; - case 401: -#line 1734 "./util/configparser.y" + case 402: +#line 1735 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4563,11 +4570,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" +#line 4574 "util/configparser.c" break; - case 402: -#line 1744 "./util/configparser.y" + case 403: +#line 1745 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4576,11 +4583,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4580 "util/configparser.c" +#line 4587 "util/configparser.c" break; - case 403: -#line 1754 "./util/configparser.y" + case 404: +#line 1755 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4590,11 +4597,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4594 "util/configparser.c" +#line 4601 "util/configparser.c" break; - case 404: -#line 1765 "./util/configparser.y" + case 405: +#line 1766 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4602,11 +4609,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4606 "util/configparser.c" +#line 4613 "util/configparser.c" break; - case 405: -#line 1774 "./util/configparser.y" + case 406: +#line 1775 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4614,11 +4621,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4618 "util/configparser.c" +#line 4625 "util/configparser.c" break; - case 406: -#line 1783 "./util/configparser.y" + case 407: +#line 1784 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4626,11 +4633,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4630 "util/configparser.c" +#line 4637 "util/configparser.c" break; - case 407: -#line 1792 "./util/configparser.y" + case 408: +#line 1793 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4638,11 +4645,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4642 "util/configparser.c" +#line 4649 "util/configparser.c" break; - case 408: -#line 1801 "./util/configparser.y" + case 409: +#line 1802 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4650,11 +4657,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4654 "util/configparser.c" +#line 4661 "util/configparser.c" break; - case 409: -#line 1810 "./util/configparser.y" + case 410: +#line 1811 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4662,11 +4669,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4666 "util/configparser.c" +#line 4673 "util/configparser.c" break; - case 410: -#line 1819 "./util/configparser.y" + case 411: +#line 1820 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4678,11 +4685,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4682 "util/configparser.c" +#line 4689 "util/configparser.c" break; - case 411: -#line 1832 "./util/configparser.y" + case 412: +#line 1833 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4694,11 +4701,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 4698 "util/configparser.c" +#line 4705 "util/configparser.c" break; - case 412: -#line 1845 "./util/configparser.y" + case 413: +#line 1846 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4706,21 +4713,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4710 "util/configparser.c" +#line 4717 "util/configparser.c" break; - case 413: -#line 1854 "./util/configparser.y" + case 414: +#line 1855 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 4720 "util/configparser.c" +#line 4727 "util/configparser.c" break; - case 414: -#line 1861 "./util/configparser.y" + case 415: +#line 1862 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4728,11 +4735,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4732 "util/configparser.c" +#line 4739 "util/configparser.c" break; - case 415: -#line 1870 "./util/configparser.y" + case 416: +#line 1871 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4740,11 +4747,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4744 "util/configparser.c" +#line 4751 "util/configparser.c" break; - case 416: -#line 1879 "./util/configparser.y" + case 417: +#line 1880 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4752,11 +4759,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4756 "util/configparser.c" +#line 4763 "util/configparser.c" break; - case 417: -#line 1888 "./util/configparser.y" + case 418: +#line 1889 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4765,22 +4772,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4769 "util/configparser.c" +#line 4776 "util/configparser.c" break; - case 418: -#line 1897 "./util/configparser.y" + case 419: +#line 1898 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4780 "util/configparser.c" +#line 4787 "util/configparser.c" break; - case 419: -#line 1905 "./util/configparser.y" + case 420: +#line 1906 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4792,22 +4799,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4796 "util/configparser.c" +#line 4803 "util/configparser.c" break; - case 420: -#line 1918 "./util/configparser.y" + case 421: +#line 1919 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4807 "util/configparser.c" +#line 4814 "util/configparser.c" break; - case 421: -#line 1926 "./util/configparser.y" + case 422: +#line 1927 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4847,21 +4854,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4851 "util/configparser.c" +#line 4858 "util/configparser.c" break; - case 422: -#line 1967 "./util/configparser.y" + case 423: +#line 1968 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 4861 "util/configparser.c" +#line 4868 "util/configparser.c" break; - case 423: -#line 1974 "./util/configparser.y" + case 424: +#line 1975 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4875,11 +4882,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4879 "util/configparser.c" +#line 4886 "util/configparser.c" break; - case 424: -#line 1989 "./util/configparser.y" + case 425: +#line 1990 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4888,11 +4895,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4892 "util/configparser.c" +#line 4899 "util/configparser.c" break; - case 425: -#line 1999 "./util/configparser.y" + case 426: +#line 2000 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4901,41 +4908,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4905 "util/configparser.c" +#line 4912 "util/configparser.c" break; - case 426: -#line 2009 "./util/configparser.y" + case 427: +#line 2010 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4915 "util/configparser.c" +#line 4922 "util/configparser.c" break; - case 427: -#line 2016 "./util/configparser.y" + case 428: +#line 2017 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4925 "util/configparser.c" +#line 4932 "util/configparser.c" break; - case 428: -#line 2023 "./util/configparser.y" + case 429: +#line 2024 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4935 "util/configparser.c" +#line 4942 "util/configparser.c" break; - case 429: -#line 2030 "./util/configparser.y" + case 430: +#line 2031 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4943,22 +4950,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4947 "util/configparser.c" +#line 4954 "util/configparser.c" break; - case 430: -#line 2039 "./util/configparser.y" + case 431: +#line 2040 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 4958 "util/configparser.c" +#line 4965 "util/configparser.c" break; - case 431: -#line 2047 "./util/configparser.y" + case 432: +#line 2048 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4971,11 +4978,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4975 "util/configparser.c" +#line 4982 "util/configparser.c" break; - case 432: -#line 2061 "./util/configparser.y" + case 433: +#line 2062 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4995,11 +5002,11 @@ yyreduce: } } } -#line 4999 "util/configparser.c" +#line 5006 "util/configparser.c" break; - case 433: -#line 2082 "./util/configparser.y" + case 434: +#line 2083 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5019,11 +5026,11 @@ yyreduce: } } } -#line 5023 "util/configparser.c" +#line 5030 "util/configparser.c" break; - case 434: -#line 2103 "./util/configparser.y" + case 435: +#line 2104 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5034,11 +5041,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5038 "util/configparser.c" +#line 5045 "util/configparser.c" break; - case 435: -#line 2115 "./util/configparser.y" + case 436: +#line 2116 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5049,11 +5056,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5053 "util/configparser.c" +#line 5060 "util/configparser.c" break; - case 436: -#line 2127 "./util/configparser.y" + case 437: +#line 2128 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5064,11 +5071,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5068 "util/configparser.c" +#line 5075 "util/configparser.c" break; - case 437: -#line 2139 "./util/configparser.y" + case 438: +#line 2140 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5076,11 +5083,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5080 "util/configparser.c" +#line 5087 "util/configparser.c" break; - case 438: -#line 2148 "./util/configparser.y" + case 439: +#line 2149 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5100,11 +5107,11 @@ yyreduce: } } } -#line 5104 "util/configparser.c" +#line 5111 "util/configparser.c" break; - case 439: -#line 2169 "./util/configparser.y" + case 440: +#line 2170 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5112,11 +5119,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5123 "util/configparser.c" break; - case 440: -#line 2179 "./util/configparser.y" + case 441: +#line 2180 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5124,33 +5131,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" +#line 5135 "util/configparser.c" break; - case 441: -#line 2188 "./util/configparser.y" + case 442: +#line 2189 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5139 "util/configparser.c" +#line 5146 "util/configparser.c" break; - case 442: -#line 2196 "./util/configparser.y" + case 443: +#line 2197 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5150 "util/configparser.c" +#line 5157 "util/configparser.c" break; - case 443: -#line 2204 "./util/configparser.y" + case 444: +#line 2205 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5162,11 +5169,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5166 "util/configparser.c" +#line 5173 "util/configparser.c" break; - case 444: -#line 2217 "./util/configparser.y" + case 445: +#line 2218 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5178,11 +5185,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5182 "util/configparser.c" +#line 5189 "util/configparser.c" break; - case 445: -#line 2230 "./util/configparser.y" + case 446: +#line 2231 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5196,11 +5203,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5200 "util/configparser.c" +#line 5207 "util/configparser.c" break; - case 446: -#line 2245 "./util/configparser.y" + case 447: +#line 2246 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5214,11 +5221,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5218 "util/configparser.c" +#line 5225 "util/configparser.c" break; - case 447: -#line 2260 "./util/configparser.y" + case 448: +#line 2261 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5226,11 +5233,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5230 "util/configparser.c" +#line 5237 "util/configparser.c" break; - case 448: -#line 2269 "./util/configparser.y" + case 449: +#line 2270 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5238,20 +5245,20 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5242 "util/configparser.c" +#line 5249 "util/configparser.c" break; - case 449: -#line 2278 "./util/configparser.y" + case 450: +#line 2279 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5251 "util/configparser.c" +#line 5258 "util/configparser.c" break; - case 450: -#line 2284 "./util/configparser.y" + case 451: +#line 2285 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5259,11 +5266,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5263 "util/configparser.c" +#line 5270 "util/configparser.c" break; - case 451: -#line 2293 "./util/configparser.y" + case 452: +#line 2294 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5271,11 +5278,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5275 "util/configparser.c" +#line 5282 "util/configparser.c" break; - case 452: -#line 2302 "./util/configparser.y" + case 453: +#line 2303 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5284,11 +5291,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5288 "util/configparser.c" +#line 5295 "util/configparser.c" break; - case 453: -#line 2312 "./util/configparser.y" + case 454: +#line 2313 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5297,11 +5304,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5301 "util/configparser.c" +#line 5308 "util/configparser.c" break; - case 454: -#line 2322 "./util/configparser.y" + case 455: +#line 2323 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5313,11 +5320,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5317 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 455: -#line 2335 "./util/configparser.y" + case 456: +#line 2336 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5329,11 +5336,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5333 "util/configparser.c" +#line 5340 "util/configparser.c" break; - case 456: -#line 2348 "./util/configparser.y" + case 457: +#line 2349 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5344,11 +5351,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5348 "util/configparser.c" +#line 5355 "util/configparser.c" break; - case 457: -#line 2360 "./util/configparser.y" + case 458: +#line 2361 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5361,11 +5368,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5365 "util/configparser.c" +#line 5372 "util/configparser.c" break; - case 458: -#line 2374 "./util/configparser.y" + case 459: +#line 2375 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5376,11 +5383,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5380 "util/configparser.c" +#line 5387 "util/configparser.c" break; - case 459: -#line 2386 "./util/configparser.y" + case 460: +#line 2387 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5393,11 +5400,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5397 "util/configparser.c" +#line 5404 "util/configparser.c" break; - case 460: -#line 2400 "./util/configparser.y" + case 461: +#line 2401 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5406,31 +5413,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5410 "util/configparser.c" +#line 5417 "util/configparser.c" break; - case 461: -#line 2410 "./util/configparser.y" + case 462: +#line 2411 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5420 "util/configparser.c" +#line 5427 "util/configparser.c" break; - case 462: -#line 2417 "./util/configparser.y" + case 463: +#line 2418 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5430 "util/configparser.c" +#line 5437 "util/configparser.c" break; - case 463: -#line 2424 "./util/configparser.y" + case 464: +#line 2425 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5438,11 +5445,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5442 "util/configparser.c" +#line 5449 "util/configparser.c" break; - case 464: -#line 2433 "./util/configparser.y" + case 465: +#line 2434 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5450,11 +5457,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5454 "util/configparser.c" +#line 5461 "util/configparser.c" break; - case 465: -#line 2442 "./util/configparser.y" + case 466: +#line 2443 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5463,11 +5470,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5467 "util/configparser.c" +#line 5474 "util/configparser.c" break; - case 466: -#line 2452 "./util/configparser.y" + case 467: +#line 2453 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5476,11 +5483,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5480 "util/configparser.c" +#line 5487 "util/configparser.c" break; - case 467: -#line 2462 "./util/configparser.y" + case 468: +#line 2463 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -5489,31 +5496,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 5493 "util/configparser.c" +#line 5500 "util/configparser.c" break; - case 468: -#line 2472 "./util/configparser.y" + case 469: +#line 2473 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5503 "util/configparser.c" +#line 5510 "util/configparser.c" break; - case 469: -#line 2479 "./util/configparser.y" + case 470: +#line 2480 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5513 "util/configparser.c" +#line 5520 "util/configparser.c" break; - case 470: -#line 2486 "./util/configparser.y" + case 471: +#line 2487 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5521,11 +5528,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5525 "util/configparser.c" +#line 5532 "util/configparser.c" break; - case 471: -#line 2495 "./util/configparser.y" + case 472: +#line 2496 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5533,11 +5540,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5537 "util/configparser.c" +#line 5544 "util/configparser.c" break; - case 472: -#line 2504 "./util/configparser.y" + case 473: +#line 2505 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5546,11 +5553,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5550 "util/configparser.c" +#line 5557 "util/configparser.c" break; - case 473: -#line 2514 "./util/configparser.y" + case 474: +#line 2515 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -5559,52 +5566,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 5563 "util/configparser.c" +#line 5570 "util/configparser.c" break; - case 474: -#line 2524 "./util/configparser.y" + case 475: +#line 2525 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 5573 "util/configparser.c" +#line 5580 "util/configparser.c" break; - case 475: -#line 2531 "./util/configparser.y" + case 476: +#line 2532 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5583 "util/configparser.c" +#line 5590 "util/configparser.c" break; - case 476: -#line 2538 "./util/configparser.y" + case 477: +#line 2539 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5593 "util/configparser.c" +#line 5600 "util/configparser.c" break; - case 477: -#line 2545 "./util/configparser.y" + case 478: +#line 2546 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5604 "util/configparser.c" +#line 5611 "util/configparser.c" break; - case 478: -#line 2553 "./util/configparser.y" + case 479: +#line 2554 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5613,11 +5620,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5617 "util/configparser.c" +#line 5624 "util/configparser.c" break; - case 479: -#line 2563 "./util/configparser.y" + case 480: +#line 2564 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5626,11 +5633,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5630 "util/configparser.c" +#line 5637 "util/configparser.c" break; - case 480: -#line 2573 "./util/configparser.y" + case 481: +#line 2574 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5639,11 +5646,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5643 "util/configparser.c" +#line 5650 "util/configparser.c" break; - case 481: -#line 2583 "./util/configparser.y" + case 482: +#line 2584 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -5652,11 +5659,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 5656 "util/configparser.c" +#line 5663 "util/configparser.c" break; - case 482: -#line 2593 "./util/configparser.y" + case 483: +#line 2594 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5694,11 +5701,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5698 "util/configparser.c" +#line 5705 "util/configparser.c" break; - case 483: -#line 2632 "./util/configparser.y" + case 484: +#line 2633 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5707,33 +5714,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 5711 "util/configparser.c" +#line 5718 "util/configparser.c" break; - case 484: -#line 2642 "./util/configparser.y" + case 485: +#line 2643 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5722 "util/configparser.c" +#line 5729 "util/configparser.c" break; - case 485: -#line 2650 "./util/configparser.y" + case 486: +#line 2651 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 5733 "util/configparser.c" +#line 5740 "util/configparser.c" break; - case 486: -#line 2658 "./util/configparser.y" + case 487: +#line 2659 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5747,11 +5754,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5751 "util/configparser.c" +#line 5758 "util/configparser.c" break; - case 487: -#line 2673 "./util/configparser.y" + case 488: +#line 2674 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5759,19 +5766,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5763 "util/configparser.c" +#line 5770 "util/configparser.c" break; - case 488: -#line 2682 "./util/configparser.y" + case 489: +#line 2683 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } -#line 5771 "util/configparser.c" +#line 5778 "util/configparser.c" break; - case 499: -#line 2693 "./util/configparser.y" + case 500: +#line 2694 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5780,11 +5787,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5784 "util/configparser.c" +#line 5791 "util/configparser.c" break; - case 500: -#line 2703 "./util/configparser.y" + case 501: +#line 2704 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5792,79 +5799,79 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5796 "util/configparser.c" +#line 5803 "util/configparser.c" break; - case 501: -#line 2712 "./util/configparser.y" + case 502: +#line 2713 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5806 "util/configparser.c" +#line 5813 "util/configparser.c" break; - case 502: -#line 2719 "./util/configparser.y" + case 503: +#line 2720 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5816 "util/configparser.c" +#line 5823 "util/configparser.c" break; - case 503: -#line 2726 "./util/configparser.y" + case 504: +#line 2727 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5826 "util/configparser.c" +#line 5833 "util/configparser.c" break; - case 504: -#line 2733 "./util/configparser.y" + case 505: +#line 2734 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5836 "util/configparser.c" +#line 5843 "util/configparser.c" break; - case 505: -#line 2740 "./util/configparser.y" + case 506: +#line 2741 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5846 "util/configparser.c" +#line 5853 "util/configparser.c" break; - case 506: -#line 2747 "./util/configparser.y" + case 507: +#line 2748 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5856 "util/configparser.c" +#line 5863 "util/configparser.c" break; - case 507: -#line 2754 "./util/configparser.y" + case 508: +#line 2755 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } -#line 5864 "util/configparser.c" +#line 5871 "util/configparser.c" break; - case 528: -#line 2774 "./util/configparser.y" + case 529: +#line 2775 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5872,31 +5879,31 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5876 "util/configparser.c" +#line 5883 "util/configparser.c" break; - case 529: -#line 2783 "./util/configparser.y" + case 530: +#line 2784 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5886 "util/configparser.c" +#line 5893 "util/configparser.c" break; - case 530: -#line 2790 "./util/configparser.y" + case 531: +#line 2791 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 5896 "util/configparser.c" +#line 5903 "util/configparser.c" break; - case 531: -#line 2797 "./util/configparser.y" + case 532: +#line 2798 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5904,51 +5911,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5908 "util/configparser.c" +#line 5915 "util/configparser.c" break; - case 532: -#line 2806 "./util/configparser.y" + case 533: +#line 2807 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 5918 "util/configparser.c" +#line 5925 "util/configparser.c" break; - case 533: -#line 2813 "./util/configparser.y" + case 534: +#line 2814 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 5928 "util/configparser.c" +#line 5935 "util/configparser.c" break; - case 534: -#line 2820 "./util/configparser.y" + case 535: +#line 2821 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 5938 "util/configparser.c" +#line 5945 "util/configparser.c" break; - case 535: -#line 2827 "./util/configparser.y" + case 536: +#line 2828 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 5948 "util/configparser.c" +#line 5955 "util/configparser.c" break; - case 536: -#line 2834 "./util/configparser.y" + case 537: +#line 2835 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5956,11 +5963,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5960 "util/configparser.c" +#line 5967 "util/configparser.c" break; - case 537: -#line 2843 "./util/configparser.y" + case 538: +#line 2844 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5968,31 +5975,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5972 "util/configparser.c" +#line 5979 "util/configparser.c" break; - case 538: -#line 2852 "./util/configparser.y" + case 539: +#line 2853 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5982 "util/configparser.c" +#line 5989 "util/configparser.c" break; - case 539: -#line 2859 "./util/configparser.y" + case 540: +#line 2860 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5992 "util/configparser.c" +#line 5999 "util/configparser.c" break; - case 540: -#line 2866 "./util/configparser.y" + case 541: +#line 2867 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6001,11 +6008,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6005 "util/configparser.c" +#line 6012 "util/configparser.c" break; - case 541: -#line 2876 "./util/configparser.y" + case 542: +#line 2877 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6014,11 +6021,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6018 "util/configparser.c" +#line 6025 "util/configparser.c" break; - case 542: -#line 2886 "./util/configparser.y" + case 543: +#line 2887 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6027,11 +6034,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6031 "util/configparser.c" +#line 6038 "util/configparser.c" break; - case 543: -#line 2896 "./util/configparser.y" + case 544: +#line 2897 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6040,11 +6047,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6044 "util/configparser.c" +#line 6051 "util/configparser.c" break; - case 544: -#line 2906 "./util/configparser.y" + case 545: +#line 2907 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6053,11 +6060,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6057 "util/configparser.c" +#line 6064 "util/configparser.c" break; - case 545: -#line 2916 "./util/configparser.y" + case 546: +#line 2917 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6066,29 +6073,47 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6070 "util/configparser.c" +#line 6077 "util/configparser.c" break; - case 546: -#line 2926 "./util/configparser.y" + case 547: +#line 2927 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); } -#line 6078 "util/configparser.c" +#line 6085 "util/configparser.c" break; - case 550: -#line 2935 "./util/configparser.y" + case 551: +#line 2936 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6088 "util/configparser.c" +#line 6095 "util/configparser.c" break; - case 551: -#line 2941 "./util/configparser.y" + case 552: +#line 2942 "./util/configparser.y" + { + OUTYY(("\nP(dynlib:)\n")); + } +#line 6103 "util/configparser.c" + break; + + case 556: +#line 2951 "./util/configparser.y" + { + OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 6113 "util/configparser.c" + break; + + case 557: +#line 2957 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6097,21 +6122,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6101 "util/configparser.c" +#line 6126 "util/configparser.c" break; - case 552: -#line 2951 "./util/configparser.y" + case 558: +#line 2967 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6111 "util/configparser.c" +#line 6136 "util/configparser.c" break; - case 553: -#line 2958 "./util/configparser.y" + case 559: +#line 2974 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6119,30 +6144,30 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6123 "util/configparser.c" +#line 6148 "util/configparser.c" break; - case 554: -#line 2967 "./util/configparser.y" + case 560: +#line 2983 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6134 "util/configparser.c" +#line 6159 "util/configparser.c" break; - case 555: -#line 2975 "./util/configparser.y" + case 561: +#line 2991 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } -#line 6142 "util/configparser.c" +#line 6167 "util/configparser.c" break; - case 568: -#line 2991 "./util/configparser.y" + case 574: +#line 3007 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6150,11 +6175,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6154 "util/configparser.c" +#line 6179 "util/configparser.c" break; - case 569: -#line 3001 "./util/configparser.y" + case 575: +#line 3017 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6162,21 +6187,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6166 "util/configparser.c" +#line 6191 "util/configparser.c" break; - case 570: -#line 3010 "./util/configparser.y" + case 576: +#line 3026 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6176 "util/configparser.c" +#line 6201 "util/configparser.c" break; - case 571: -#line 3017 "./util/configparser.y" + case 577: +#line 3033 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6184,21 +6209,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6188 "util/configparser.c" +#line 6213 "util/configparser.c" break; - case 572: -#line 3026 "./util/configparser.y" + case 578: +#line 3042 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6198 "util/configparser.c" +#line 6223 "util/configparser.c" break; - case 573: -#line 3033 "./util/configparser.y" + case 579: +#line 3049 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6206,22 +6231,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6210 "util/configparser.c" +#line 6235 "util/configparser.c" break; - case 574: -#line 3042 "./util/configparser.y" + case 580: +#line 3058 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6221 "util/configparser.c" +#line 6246 "util/configparser.c" break; - case 575: -#line 3050 "./util/configparser.y" + case 581: +#line 3066 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6233,22 +6258,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6237 "util/configparser.c" +#line 6262 "util/configparser.c" break; - case 576: -#line 3063 "./util/configparser.y" + case 582: +#line 3079 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6248 "util/configparser.c" +#line 6273 "util/configparser.c" break; - case 577: -#line 3071 "./util/configparser.y" + case 583: +#line 3087 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6260,19 +6285,19 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6264 "util/configparser.c" +#line 6289 "util/configparser.c" break; - case 578: -#line 3084 "./util/configparser.y" + case 584: +#line 3100 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } -#line 6272 "util/configparser.c" +#line 6297 "util/configparser.c" break; - case 587: -#line 3095 "./util/configparser.y" + case 593: +#line 3111 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6283,11 +6308,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6287 "util/configparser.c" +#line 6312 "util/configparser.c" break; - case 588: -#line 3107 "./util/configparser.y" + case 594: +#line 3123 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6298,11 +6323,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6302 "util/configparser.c" +#line 6327 "util/configparser.c" break; - case 589: -#line 3119 "./util/configparser.y" + case 595: +#line 3135 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6313,11 +6338,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6317 "util/configparser.c" +#line 6342 "util/configparser.c" break; - case 590: -#line 3131 "./util/configparser.y" + case 596: +#line 3147 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6331,11 +6356,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6335 "util/configparser.c" +#line 6360 "util/configparser.c" break; - case 591: -#line 3146 "./util/configparser.y" + case 597: +#line 3162 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6347,11 +6372,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6351 "util/configparser.c" +#line 6376 "util/configparser.c" break; - case 592: -#line 3159 "./util/configparser.y" + case 598: +#line 3175 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -6363,11 +6388,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6367 "util/configparser.c" +#line 6392 "util/configparser.c" break; - case 593: -#line 3172 "./util/configparser.y" + case 599: +#line 3188 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -6377,19 +6402,19 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 6381 "util/configparser.c" +#line 6406 "util/configparser.c" break; - case 594: -#line 3183 "./util/configparser.y" + case 600: +#line 3199 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } -#line 6389 "util/configparser.c" +#line 6414 "util/configparser.c" break; - case 599: -#line 3192 "./util/configparser.y" + case 605: +#line 3208 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -6403,11 +6428,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6407 "util/configparser.c" +#line 6432 "util/configparser.c" break; - case 600: -#line 3207 "./util/configparser.y" + case 606: +#line 3223 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -6421,11 +6446,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6425 "util/configparser.c" +#line 6450 "util/configparser.c" break; -#line 6429 "util/configparser.c" +#line 6454 "util/configparser.c" default: break; } @@ -6657,7 +6682,7 @@ yyreturn: #endif return yyresult; } -#line 3221 "./util/configparser.y" +#line 3237 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 184810a2a..66662409e 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -333,7 +333,9 @@ extern int yydebug; VAR_RPZ_ACTION_OVERRIDE = 539, VAR_RPZ_CNAME_OVERRIDE = 540, VAR_RPZ_LOG = 541, - VAR_RPZ_LOG_NAME = 542 + VAR_RPZ_LOG_NAME = 542, + VAR_DYNLIB = 543, + VAR_DYNLIB_FILE = 544 }; #endif /* Tokens. */ @@ -622,6 +624,8 @@ extern int yydebug; #define VAR_RPZ_CNAME_OVERRIDE 540 #define VAR_RPZ_LOG 541 #define VAR_RPZ_LOG_NAME 542 +#define VAR_DYNLIB 543 +#define VAR_DYNLIB_FILE 544 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -631,7 +635,7 @@ union YYSTYPE char* str; -#line 635 "util/configparser.h" +#line 639 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; From 510e79a053d1eee94bf0548deff23b107236d82b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 15 May 2020 16:42:45 +0200 Subject: [PATCH 10/38] - For PR #93: Fix warnings for dynlibmodule. --- doc/Changelog | 1 + dynlibmod/dynlibmod.c | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index fbbe22641..86246ad6e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. - Fixed conflicts for PR #93 and make configure, yacc, lex. + - For PR #93: Fix warnings for dynlibmodule. 15 May 2020: Ralph - Cache ECS answers with longest scope of CNAME chain. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 5a93a7ce5..4e022a82f 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -81,7 +81,13 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - __DYNSYM initializer = __LOADSYM(dynamic_library,"init"); + __DYNSYM initializer; + __DYNSYM deinitializer; + __DYNSYM operate; + __DYNSYM inform; + __DYNSYM clear; + __DYNSYM get_mem; + initializer = __LOADSYM(dynamic_library,"init"); if (initializer == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -89,7 +95,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_init = (func_init_t) initializer; } - __DYNSYM deinitializer = __LOADSYM(dynamic_library,"deinit"); + deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -97,7 +103,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_deinit = (func_deinit_t) deinitializer; } - __DYNSYM operate = __LOADSYM(dynamic_library,"operate"); + operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -105,7 +111,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_operate = (func_operate_t) operate; } - __DYNSYM inform = __LOADSYM(dynamic_library,"inform_super"); + inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -113,7 +119,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_inform = (func_inform_t) inform; } - __DYNSYM clear = __LOADSYM(dynamic_library,"clear"); + clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -121,7 +127,7 @@ int dynlibmod_init(struct module_env* env, int id) { } else { de->func_clear = (func_clear_t) clear; } - __DYNSYM get_mem = __LOADSYM(dynamic_library,"get_mem"); + get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -171,11 +177,12 @@ void dynlibmod_clear(struct module_qstate* qstate, int id) { /** dynlib module alloc size routine */ size_t dynlibmod_get_mem(struct module_env* env, int id) { struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id]; + size_t size; verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de); if(!de) return 0; - size_t size = de->func_get_mem(env, id); + size = de->func_get_mem(env, id); return size + sizeof(*de); } @@ -185,7 +192,7 @@ int dynlib_inplace_cb_reply_generic(struct query_info* qinfo, struct comm_reply* repinfo, struct regional* region, int id, void* callback) { struct cb_pair* cb_pair = (struct cb_pair*) callback; - ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); + return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg); } int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, @@ -193,19 +200,19 @@ int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* callback) { struct cb_pair* cb_pair = (struct cb_pair*) callback; - ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); + return ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg); } int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate, int id, void* cb_args) { struct cb_pair* cb_pair = (struct cb_pair*) cb_args; - ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); + return ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg); } int dynlib_inplace_cb_query_response(struct module_qstate* qstate, struct dns_msg* response, int id, void* cb_args) { struct cb_pair* cb_pair = (struct cb_pair*) cb_args; - ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); + return ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg); } int From 01db6c365c1845f9f6370ce5a7ad066f40b00c52 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:11:16 +0200 Subject: [PATCH 11/38] - For PR #93: dynlibmod can handle reloads and deinit and inits again, with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. --- doc/Changelog | 6 +++++ dynlibmod/dynlibmod.c | 19 +++++++++++++- dynlibmod/dynlibmod.h | 2 ++ smallapp/unbound-checkconf.c | 48 ++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 86246ad6e..637b31368 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +18 May 2020: Wouter + - For PR #93: dynlibmod can handle reloads and deinit and inits again, + with dlclose and dlopen of the library again. Also for multiple + modules. Fix memory leak by not closing dlopened content. Fix + to allow one dynlibmod instance by unbound-checkconf. + 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. - Fixed conflicts for PR #93 and make configure, yacc, lex. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 4e022a82f..6ae23e86c 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -34,6 +34,11 @@ void log_dlerror() { HMODULE open_library(const char* fname) { return LoadLibrary(fname); } + +void close_library(const char* fname, __DYNMOD handle) { + (void)fname; + (void)handle; +} #else #include #define __DYNMOD void* @@ -46,11 +51,20 @@ void log_dlerror() { void* open_library(const char* fname) { return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL); } + +void close_library(const char* fname, __DYNMOD handle) { + if(!handle) return; + if(dlclose(handle) != 0) { + log_err("dlclose %s: %s", fname, strerror(errno)); + } +} #endif +/** module counter for multiple dynlib modules */ +static int dynlib_mod_count = 0; + /** dynlib module init */ int dynlibmod_init(struct module_env* env, int id) { - static int dynlib_mod_count; int dynlib_mod_idx = dynlib_mod_count++; struct config_strlist* cfg_item = env->cfg->dynlib_file; struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env)); @@ -76,6 +90,7 @@ int dynlibmod_init(struct module_env* env, int id) { } verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname); dynamic_library = open_library(de->fname); + de->dynamic_library = (void*)dynamic_library; if (dynamic_library == NULL) { log_dlerror(); log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname); @@ -147,6 +162,8 @@ void dynlibmod_deinit(struct module_env* env, int id) { if(de == NULL) return; de->func_deinit(env, id); + close_library(de->fname, (__DYNMOD)de->dynamic_library); + dynlib_mod_count--; de->fname = NULL; free(de); } diff --git a/dynlibmod/dynlibmod.h b/dynlibmod/dynlibmod.h index 1097db1e7..c34cf0e88 100644 --- a/dynlibmod/dynlibmod.h +++ b/dynlibmod/dynlibmod.h @@ -114,6 +114,8 @@ typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, v struct dynlibmod_env { /** Dynamic library filename. */ const char* fname; + /** dynamic library handle */ + void* dynamic_library; /** Module init function */ func_init_t func_init; /** Module deinit function */ diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 3fc638cae..77c558981 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -569,6 +569,54 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "python dns64 iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0 #endif +#ifdef WITH_DYNLIBMODULE + && strcmp(cfg->module_conf, "dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dns64 validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dns64 validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dns64 dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip validator cachedb iterator") != 0 + && strcmp(cfg->module_conf, "cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip validator cachedb dynlib iterator") != 0 + && strcmp(cfg->module_conf, "validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "respip validator dynlib cachedb iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib respip subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "respip subnetcache validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib ipsecmod respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod dynlib respip validator iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod validator dynlib iterator") != 0 + && strcmp(cfg->module_conf, "ipsecmod respip validator dynlib iterator") != 0 +#endif #ifdef USE_CACHEDB && strcmp(cfg->module_conf, "validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0 From 84e95d6c6825191ea920485f53d3611d2c279e82 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:16:40 +0200 Subject: [PATCH 12/38] - For PR #93: checkconf allow multiple dynlib in module-config, for a couple cases. --- doc/Changelog | 2 ++ smallapp/unbound-checkconf.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 637b31368..f16e6d63d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,8 @@ with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. + - For PR #93: checkconf allow multiple dynlib in module-config, for + a couple cases. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 77c558981..97cacc012 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -571,8 +571,12 @@ morechecks(struct config_file* cfg) #endif #ifdef WITH_DYNLIBMODULE && strcmp(cfg->module_conf, "dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 From a77ebed5504a8815795bed406d8a68adf8d99a57 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:18:28 +0200 Subject: [PATCH 13/38] - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. --- doc/Changelog | 4 +++- smallapp/unbound-checkconf.c | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index f16e6d63d..5413eb7fa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,7 +3,9 @@ with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. - - For PR #93: checkconf allow multiple dynlib in module-config, for + - For PR #93: checkconf allows multiple dynlib in module-config, for + a couple cases. + - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. 15 May 2020: Wouter diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 97cacc012..54a0ab78c 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -573,10 +573,16 @@ morechecks(struct config_file* cfg) && strcmp(cfg->module_conf, "dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib validator iterator") != 0 + && strcmp(cfg->module_conf, "python dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 From a238f35d7d87cb88906077733e04cbfe094cba76 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 10:22:00 +0200 Subject: [PATCH 14/38] - For PR #93: man page spelling reference fix. --- doc/Changelog | 1 + doc/unbound.conf.5.in | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 5413eb7fa..31ce01dea 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,7 @@ a couple cases. - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. + - For PR #93: man page spelling reference fix. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 03305ddd4..2f2733773 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1836,7 +1836,7 @@ added to the \fBmodule\-config:\fR option. .LP The .B dynlib: -clause gives the settings for the \fIdynlib\fR(1) module. This module is only +clause gives the settings for the \fIdynlib\fR module. This module is only a very small wrapper that allows dynamic modules to be loaded on runtime instead of being compiled into the application. To enable the dynlib module it has to be compiled into the daemon, and the word "dynlib" has to be put in the From 4ccac696caf8826995c9db78af6074a5a1381f00 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 18 May 2020 17:26:01 +0200 Subject: [PATCH 15/38] - For PR #93: fix link of other executables for dynlibmod dependency. --- Makefile.in | 22 +++++++++++----------- doc/Changelog | 1 + 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Makefile.in b/Makefile.in index 029b4d3b3..bac212df2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -343,10 +343,10 @@ unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la - $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) @@ -364,34 +364,34 @@ anchor-update$(EXEEXT): $(ANCHORUPD_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) unittest$(EXEEXT): $(UNITTEST_OBJ_LINK) - $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK) - $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK) - $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) petal$(EXEEXT): $(PETAL_OBJ_LINK) $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS) pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK) - $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) - $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) - $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) perf$(EXEEXT): $(PERF_OBJ_LINK) - $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) delayer$(EXEEXT): $(DELAYER_OBJ_LINK) - $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) signit$(EXEEXT): testcode/signit.c $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS) @@ -414,7 +414,7 @@ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) - $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) + $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h diff --git a/doc/Changelog b/doc/Changelog index 31ce01dea..91e69e3f4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. - For PR #93: man page spelling reference fix. + - For PR #93: fix link of other executables for dynlibmod dependency. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. From ba0f382eee814e56900a535778d13206b86b6d49 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 10:27:27 +0200 Subject: [PATCH 16/38] - CVE-2020-12662 Unbound can be tricked into amplifying an incoming query into a large number of queries directed to a target. - CVE-2020-12663 Malformed answers from upstream name servers can be used to make Unbound unresponsive. --- doc/Changelog | 6 ++ iterator/iter_delegpt.c | 51 ++++++++------ iterator/iter_delegpt.h | 28 ++++++-- iterator/iter_scrub.c | 24 +++++-- iterator/iter_utils.c | 4 +- iterator/iterator.c | 153 ++++++++++++++++++++++++++++++++-------- iterator/iterator.h | 12 +++- services/cache/dns.c | 10 +-- util/data/dname.c | 30 ++++++++ util/data/msgparse.c | 6 +- 10 files changed, 252 insertions(+), 72 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 91e69e3f4..223b13b90 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +19 May 2020: Wouter + - CVE-2020-12662 Unbound can be tricked into amplifying an incoming + query into a large number of queries directed to a target. + - CVE-2020-12663 Malformed answers from upstream name servers can be + used to make Unbound unresponsive. + 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, with dlclose and dlopen of the library again. Also for multiple diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index f88b3e115..9a672b0af 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -84,7 +84,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) } for(a = dp->target_list; a; a = a->next_target) { if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, - a->bogus, a->lame, a->tls_auth_name)) + a->bogus, a->lame, a->tls_auth_name, NULL)) return NULL; } return copy; @@ -161,7 +161,7 @@ delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, int delegpt_add_target(struct delegpt* dp, struct regional* region, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame) + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); log_assert(!dp->dp_type_mlc); @@ -176,13 +176,14 @@ delegpt_add_target(struct delegpt* dp, struct regional* region, if(ns->got4 && ns->got6) ns->resolved = 1; } - return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL); + return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL, + additions); } int delegpt_add_addr(struct delegpt* dp, struct regional* region, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, - uint8_t lame, char* tls_auth_name) + uint8_t lame, char* tls_auth_name, int* additions) { struct delegpt_addr* a; log_assert(!dp->dp_type_mlc); @@ -194,6 +195,8 @@ delegpt_add_addr(struct delegpt* dp, struct regional* region, a->lame = 0; return 1; } + if(additions) + *additions = 1; a = (struct delegpt_addr*)regional_alloc(region, sizeof(struct delegpt_addr)); @@ -382,10 +385,10 @@ delegpt_from_message(struct dns_msg* msg, struct regional* region) continue; if(ntohs(s->rk.type) == LDNS_RR_TYPE_A) { - if(!delegpt_add_rrset_A(dp, region, s, 0)) + if(!delegpt_add_rrset_A(dp, region, s, 0, NULL)) return NULL; } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA) { - if(!delegpt_add_rrset_AAAA(dp, region, s, 0)) + if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL)) return NULL; } } @@ -416,7 +419,7 @@ delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -432,7 +435,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, memmove(&sa.sin_addr, d->rr_data[i]+2, INET_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -440,7 +443,7 @@ delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* ak, uint8_t lame) + struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; @@ -456,7 +459,7 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, memmove(&sa.sin6_addr, d->rr_data[i]+2, INET6_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, - len, (d->security==sec_status_bogus), lame)) + len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; @@ -464,20 +467,33 @@ delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, int delegpt_add_rrset(struct delegpt* dp, struct regional* region, - struct ub_packed_rrset_key* rrset, uint8_t lame) + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions) { if(!rrset) return 1; if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NS) return delegpt_rrset_add_ns(dp, region, rrset, lame); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A) - return delegpt_add_rrset_A(dp, region, rrset, lame); + return delegpt_add_rrset_A(dp, region, rrset, lame, additions); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA) - return delegpt_add_rrset_AAAA(dp, region, rrset, lame); + return delegpt_add_rrset_AAAA(dp, region, rrset, lame, + additions); log_warn("Unknown rrset type added to delegpt"); return 1; } +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype) +{ + if(ns) { + if(qtype == LDNS_RR_TYPE_A) + ns->got4 = 2; + else if(qtype == LDNS_RR_TYPE_AAAA) + ns->got6 = 2; + if(ns->got4 && ns->got6) + ns->resolved = 1; + } +} + void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) { struct reply_info* rep = (struct reply_info*)msg->entry.data; @@ -487,14 +503,7 @@ void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) if(FLAGS_GET_RCODE(rep->flags) != 0 || rep->an_numrrsets == 0) { struct delegpt_ns* ns = delegpt_find_ns(dp, msg->key.qname, msg->key.qname_len); - if(ns) { - if(msg->key.qtype == LDNS_RR_TYPE_A) - ns->got4 = 1; - else if(msg->key.qtype == LDNS_RR_TYPE_AAAA) - ns->got6 = 1; - if(ns->got4 && ns->got6) - ns->resolved = 1; - } + delegpt_mark_neg(ns, msg->key.qtype); } } diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 6c0882645..138eb6e1b 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -106,9 +106,10 @@ struct delegpt_ns { * and marked true if got4 and got6 are both true. */ int resolved; - /** if the ipv4 address is in the delegpt */ + /** if the ipv4 address is in the delegpt, 0=not, 1=yes 2=negative, + * negative means it was done, but no content. */ uint8_t got4; - /** if the ipv6 address is in the delegpt */ + /** if the ipv6 address is in the delegpt, 0=not, 1=yes 2=negative */ uint8_t got6; /** * If the name is parent-side only and thus dispreferred. @@ -215,11 +216,12 @@ int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional, * @param addrlen: the length of addr. * @param bogus: security status for the address, pass true if bogus. * @param lame: address is lame. + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_target(struct delegpt* dp, struct regional* regional, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, - socklen_t addrlen, uint8_t bogus, uint8_t lame); + socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions); /** * Add A RRset to delegpt. @@ -227,10 +229,11 @@ int delegpt_add_target(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset A to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add AAAA RRset to delegpt. @@ -238,10 +241,11 @@ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset AAAA to add. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add any RRset to delegpt. @@ -250,10 +254,11 @@ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, * @param regional: where to allocate the info. * @param rrset: RRset to add, NS, A, AAAA. * @param lame: rrset is lame, disprefer it. + * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, - struct ub_packed_rrset_key* rrset, uint8_t lame); + struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add address to the delegation point. No servername is associated or checked. @@ -264,11 +269,12 @@ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). + * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_addr(struct delegpt* dp, struct regional* regional, struct sockaddr_storage* addr, socklen_t addrlen, - uint8_t bogus, uint8_t lame, char* tls_auth_name); + uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions); /** * Find NS record in name list of delegation point. @@ -341,6 +347,14 @@ size_t delegpt_count_targets(struct delegpt* dp); struct delegpt* delegpt_from_message(struct dns_msg* msg, struct regional* regional); +/** + * Mark negative return in delegation point for specific nameserver. + * sets the got4 or got6 to negative, updates the ns->resolved. + * @param ns: the nameserver in the delegpt. + * @param qtype: A or AAAA (host order). + */ +void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype); + /** * Add negative message to delegation point. * @param dp: delegation point. diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index cceec3d56..aae934dd4 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -185,8 +185,9 @@ mark_additional_rrset(sldns_buffer* pkt, struct msg_parse* msg, /** Get target name of a CNAME */ static int parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, - size_t* snamelen) + size_t* snamelen, sldns_buffer* pkt) { + size_t oldpos, dlen; if(rrset->rr_count != 1) { struct rr_parse* sig; verbose(VERB_ALGO, "Found CNAME rrset with " @@ -204,6 +205,19 @@ parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, *sname = rrset->rr_first->ttl_data + sizeof(uint32_t) + sizeof(uint16_t); /* skip ttl, rdatalen */ *snamelen = rrset->rr_first->size - sizeof(uint16_t); + + if(rrset->rr_first->outside_packet) { + if(!dname_valid(*sname, *snamelen)) + return 0; + return 1; + } + oldpos = sldns_buffer_position(pkt); + sldns_buffer_set_position(pkt, (size_t)(*sname - sldns_buffer_begin(pkt))); + dlen = pkt_dname_len(pkt); + sldns_buffer_set_position(pkt, oldpos); + if(dlen == 0) + return 0; /* parse fail on the rdata name */ + *snamelen = dlen; return 1; } @@ -215,7 +229,7 @@ synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset, /* we already know that sname is a strict subdomain of DNAME owner */ uint8_t* dtarg = NULL; size_t dtarglen; - if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen)) + if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen, pkt)) return 0; if(qnamelen <= dname_rrset->dname_len) return 0; @@ -388,7 +402,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, /* check next cname */ uint8_t* t = NULL; size_t tlen = 0; - if(!parse_get_cname_target(nx, &t, &tlen)) + if(!parse_get_cname_target(nx, &t, &tlen, pkt)) return 0; if(dname_pkt_compare(pkt, alias, t) == 0) { /* it's OK and better capitalized */ @@ -439,7 +453,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, size_t tlen = 0; if(synth_cname(sname, snamelen, nx, alias, &aliaslen, pkt) && - parse_get_cname_target(rrset, &t, &tlen) && + parse_get_cname_target(rrset, &t, &tlen, pkt) && dname_pkt_compare(pkt, alias, t) == 0) { /* the synthesized CNAME equals the * current CNAME. This CNAME is the @@ -460,7 +474,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, } /* move to next name in CNAME chain */ - if(!parse_get_cname_target(rrset, &sname, &snamelen)) + if(!parse_get_cname_target(rrset, &sname, &snamelen, pkt)) return 0; prev = rrset; rrset = rrset->rrset_all_next; diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index c726ba6b3..7bc67da69 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -1199,7 +1199,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside4 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_A(dp, region, akey, 1)) + if(!delegpt_add_rrset_A(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } @@ -1211,7 +1211,7 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside6 = 1; /* a negative-cache-element has no addresses it adds */ - if(!delegpt_add_rrset_AAAA(dp, region, akey, 1)) + if(!delegpt_add_rrset_AAAA(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } diff --git a/iterator/iterator.c b/iterator/iterator.c index eea2f2fb2..23b07ea90 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -72,6 +72,8 @@ /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; +static void target_count_increase_nx(struct iter_qstate* iq, int num); + int iter_init(struct module_env* env, int id) { @@ -150,6 +152,7 @@ iter_new(struct module_qstate* qstate, int id) iq->sent_count = 0; iq->ratelimit_ok = 0; iq->target_count = NULL; + iq->dp_target_count = 0; iq->wait_priming_stub = 0; iq->refetch_glue = 0; iq->dnssec_expected = 0; @@ -221,6 +224,7 @@ final_state(struct iter_qstate* iq) static void error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* super_iq = (struct iter_qstate*)super->minfo[id]; if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || @@ -246,7 +250,11 @@ error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) super->region, super_iq->dp)) log_err("out of memory adding missing"); } + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* mark as failed */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(super_iq, 1); } if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { /* prime failed to get delegation */ @@ -621,7 +629,7 @@ static void target_count_create(struct iter_qstate* iq) { if(!iq->target_count) { - iq->target_count = (int*)calloc(2, sizeof(int)); + iq->target_count = (int*)calloc(3, sizeof(int)); /* if calloc fails we simply do not track this number */ if(iq->target_count) iq->target_count[0] = 1; @@ -634,6 +642,15 @@ target_count_increase(struct iter_qstate* iq, int num) target_count_create(iq); if(iq->target_count) iq->target_count[1] += num; + iq->dp_target_count++; +} + +static void +target_count_increase_nx(struct iter_qstate* iq, int num) +{ + target_count_create(iq); + if(iq->target_count) + iq->target_count[2] += num; } /** @@ -656,13 +673,15 @@ target_count_increase(struct iter_qstate* iq, int num) * @param subq_ret: if newly allocated, the subquerystate, or NULL if it does * not need initialisation. * @param v: if true, validation is done on the subquery. + * @param detached: true if this qstate should not attach to the subquery * @return false on error (malloc). */ static int generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct module_qstate* qstate, int id, struct iter_qstate* iq, enum iter_state initial_state, - enum iter_state finalstate, struct module_qstate** subq_ret, int v) + enum iter_state finalstate, struct module_qstate** subq_ret, int v, + int detached) { struct module_qstate* subq = NULL; struct iter_qstate* subiq = NULL; @@ -689,11 +708,23 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, valrec = 1; } - /* attach subquery, lookup existing or make a new one */ - fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); - if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, valrec, - &subq)) { - return 0; + if(detached) { + struct mesh_state* sub = NULL; + fptr_ok(fptr_whitelist_modenv_add_sub( + qstate->env->add_sub)); + if(!(*qstate->env->add_sub)(qstate, &qinf, + qflags, prime, valrec, &subq, &sub)){ + return 0; + } + } + else { + /* attach subquery, lookup existing or make a new one */ + fptr_ok(fptr_whitelist_modenv_attach_sub( + qstate->env->attach_sub)); + if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, + valrec, &subq)) { + return 0; + } } *subq_ret = subq; if(subq) { @@ -716,6 +747,7 @@ generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, subiq->target_count = iq->target_count; if(iq->target_count) iq->target_count[0] ++; /* extra reference */ + subiq->dp_target_count = 0; subiq->num_current_queries = 0; subiq->depth = iq->depth+1; outbound_list_init(&subiq->outlist); @@ -759,7 +791,7 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, * the normal INIT state logic (which would cause an infloop). */ if(!generate_sub_request((uint8_t*)"\000", 1, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, - &subq, 0)) { + &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime root"); return 0; } @@ -850,7 +882,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, * redundant INIT state processing. */ if(!generate_sub_request(stub_dp->name, stub_dp->namelen, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, - QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0)) { + QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime stub"); errinf(qstate, "could not generate lookup for stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); @@ -1025,7 +1057,7 @@ generate_a_aaaa_check(struct module_qstate* qstate, struct iter_qstate* iq, if(!generate_sub_request(s->rk.dname, s->rk.dname_len, ntohs(s->rk.type), ntohs(s->rk.rrset_class), qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate addr check"); return; } @@ -1069,7 +1101,7 @@ generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dp->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate ns check"); return; } @@ -1126,7 +1158,7 @@ generate_dnskey_prefetch(struct module_qstate* qstate, iq->dp->name, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { /* we'll be slower, but it'll work */ verbose(VERB_ALGO, "could not generate dnskey prefetch"); return; @@ -1315,6 +1347,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 0; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; @@ -1693,7 +1726,7 @@ generate_parentside_target_query(struct module_qstate* qstate, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; if(subq) { struct iter_qstate* subiq = @@ -1744,7 +1777,7 @@ generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq, { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, - id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) + id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; log_nametypeclass(VERB_QUERY, "new target", name, qtype, qclass); return 1; @@ -1783,6 +1816,14 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, "number of glue fetches %d", s, iq->target_count[1]); return 0; } + if(iq->dp_target_count > MAX_DP_TARGET_COUNT) { + char s[LDNS_MAX_DOMAINLEN+1]; + dname_str(qstate->qinfo.qname, s); + verbose(VERB_QUERY, "request %s has exceeded the maximum " + "number of glue fetches %d to a single delegation point", + s, iq->dp_target_count); + return 0; + } iter_mark_cycle_targets(qstate, iq->dp); missing = (int)delegpt_count_missing_targets(iq->dp); @@ -1896,7 +1937,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, for(a = p->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, - a->lame, a->tls_auth_name); + a->lame, a->tls_auth_name, NULL); } } iq->dp->has_parent_side_NS = 1; @@ -1913,6 +1954,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, iq->refetch_glue = 1; iq->query_restart_count++; iq->sent_count = 0; + iq->dp_target_count = 0; if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); @@ -2078,7 +2120,7 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) iq->dsns_point, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dsns_point, iq->dsns_point_len, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { errinf_dname(qstate, "for DS query parent-child nameserver search, could not generate NS lookup for", iq->dsns_point); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -2136,6 +2178,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "exceeded the maximum number of sends"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } + if(iq->target_count && iq->target_count[2] > MAX_TARGET_NX) { + verbose(VERB_QUERY, "request has exceeded the maximum " + " number of nxdomain nameserver lookups with %d", + iq->target_count[2]); + errinf(qstate, "exceeded the maximum nameserver nxdomains"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ @@ -2240,12 +2289,41 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->qinfo_out.qtype, iq->qinfo_out.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 0); - if(msg && msg->rep->an_numrrsets == 0 - && FLAGS_GET_RCODE(msg->rep->flags) == + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NOERROR) /* no need to send query if it is already - * cached as NOERROR/NODATA */ + * cached as NOERROR */ return 1; + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN && + qstate->env->need_to_validate && + qstate->env->cfg->harden_below_nxdomain) { + if(msg->rep->security == sec_status_secure) { + iq->response = msg; + return final_state(iq); + } + if(msg->rep->security == sec_status_unchecked) { + struct module_qstate* subq = NULL; + if(!generate_sub_request( + iq->qinfo_out.qname, + iq->qinfo_out.qname_len, + iq->qinfo_out.qtype, + iq->qinfo_out.qclass, + qstate, id, iq, + INIT_REQUEST_STATE, + FINISHED_STATE, &subq, 1, 1)) + verbose(VERB_ALGO, + "could not validate NXDOMAIN " + "response"); + } + } + if(msg && FLAGS_GET_RCODE(msg->rep->flags) == + LDNS_RCODE_NXDOMAIN) { + /* return and add a label in the next + * minimisation iteration. + */ + return 1; + } } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { @@ -2321,6 +2399,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, * generated query will immediately be discarded due to depth and * that servfail is cached, which is not good as opportunism goes. */ if(iq->depth < ie->max_dependency_depth + && iq->num_target_queries == 0 + && (!iq->target_count || iq->target_count[2]==0) && iq->sent_count < TARGET_FETCH_STOP) { tf_policy = ie->target_fetch_policy[iq->depth]; } @@ -2366,6 +2446,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2453,6 +2534,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; + iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } @@ -2748,7 +2830,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Make subrequest to validate intermediate * NXDOMAIN if harden-below-nxdomain is * enabled. */ - if(qstate->env->cfg->harden_below_nxdomain) { + if(qstate->env->cfg->harden_below_nxdomain && + qstate->env->need_to_validate) { struct module_qstate* subq = NULL; log_query_info(VERB_QUERY, "schedule NXDOMAIN validation:", @@ -2760,16 +2843,10 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->response->qinfo.qclass, qstate, id, iq, INIT_REQUEST_STATE, - FINISHED_STATE, &subq, 1)) + FINISHED_STATE, &subq, 1, 1)) verbose(VERB_ALGO, "could not validate NXDOMAIN " "response"); - outbound_list_clear(&iq->outlist); - iq->num_current_queries = 0; - fptr_ok(fptr_whitelist_modenv_detach_subs( - qstate->env->detach_subs)); - (*qstate->env->detach_subs)(qstate); - iq->num_target_queries = 0; } } return next_state(iq, QUERYTARGETS_STATE); @@ -2853,6 +2930,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Count this as a referral. */ iq->referral_count++; iq->sent_count = 0; + iq->dp_target_count = 0; /* see if the next dp is a trust anchor, or a DS was sent * along, indicating dnssec is expected for next zone */ iq->dnssec_expected = iter_indicates_dnssec(qstate->env, @@ -2929,6 +3007,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, iq->dsns_point = NULL; iq->auth_zone_response = 0; iq->sent_count = 0; + iq->dp_target_count = 0; if(iq->minimisation_state != MINIMISE_STATE) /* Only count as query restart when it is not an extra * query as result of qname minimisation. */ @@ -3121,7 +3200,7 @@ processPrimeResponse(struct module_qstate* qstate, int id) if(!generate_sub_request(qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate, id, iq, - INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate prime check"); } generate_a_aaaa_check(qstate, iq, id); @@ -3149,6 +3228,7 @@ static void processTargetResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { + struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct ub_packed_rrset_key* rrset; @@ -3186,7 +3266,7 @@ processTargetResponse(struct module_qstate* qstate, int id, log_rrset_key(VERB_ALGO, "add parentside glue to dp", iq->pside_glue); if(!delegpt_add_rrset(foriq->dp, forq->region, - iq->pside_glue, 1)) + iq->pside_glue, 1, NULL)) log_err("out of memory adding pside glue"); } @@ -3197,6 +3277,7 @@ processTargetResponse(struct module_qstate* qstate, int id, * response type was ANSWER. */ rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); if(rrset) { + int additions = 0; /* if CNAMEs have been followed - add new NS to delegpt. */ /* BTW. RFC 1918 says NS should not have got CNAMEs. Robust. */ if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, @@ -3208,13 +3289,23 @@ processTargetResponse(struct module_qstate* qstate, int id, } /* if dpns->lame then set the address(es) lame too */ if(!delegpt_add_rrset(foriq->dp, forq->region, rrset, - dpns->lame)) + dpns->lame, &additions)) log_err("out of memory adding targets"); + if(!additions) { + /* no new addresses, increase the nxns counter, like + * this could be a list of wildcards with no new + * addresses */ + target_count_increase_nx(foriq, 1); + } verbose(VERB_ALGO, "added target response"); delegpt_log(VERB_ALGO, foriq->dp); } else { verbose(VERB_ALGO, "iterator TargetResponse failed"); + delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* fail the target */ + if((dpns->got4 == 2 || !ie->supports_ipv4) && + (dpns->got6 == 2 || !ie->supports_ipv6)) + target_count_increase_nx(foriq, 1); } } @@ -3388,7 +3479,7 @@ processCollectClass(struct module_qstate* qstate, int id) qstate->qinfo.qname_len, qstate->qinfo.qtype, c, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, - (int)!(qstate->query_flags&BIT_CD))) { + (int)!(qstate->query_flags&BIT_CD), 0)) { errinf(qstate, "could not generate class ANY" " lookup query"); return error_response(qstate, id, diff --git a/iterator/iterator.h b/iterator/iterator.h index 26ff39559..342ac207e 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -55,6 +55,11 @@ struct rbtree_type; /** max number of targets spawned for a query and its subqueries */ #define MAX_TARGET_COUNT 64 +/** max number of target lookups per qstate, per delegation point */ +#define MAX_DP_TARGET_COUNT 16 +/** max number of nxdomains allowed for target lookups for a query and + * its subqueries */ +#define MAX_TARGET_NX 5 /** max number of query restarts. Determines max number of CNAME chain. */ #define MAX_RESTART_COUNT 8 /** max number of referrals. Makes sure resolver does not run away */ @@ -305,9 +310,14 @@ struct iter_qstate { int sent_count; /** number of target queries spawned in [1], for this query and its - * subqueries, the malloced-array is shared, [0] refcount. */ + * subqueries, the malloced-array is shared, [0] refcount. + * in [2] the number of nxdomains is counted. */ int* target_count; + /** number of target lookups per delegation point. Reset to 0 after + * receiving referral answer. Not shared with subqueries. */ + int dp_target_count; + /** if true, already tested for ratelimiting and passed the test */ int ratelimit_ok; diff --git a/services/cache/dns.c b/services/cache/dns.c index 2a5bca4ac..7b6e142c9 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -273,7 +273,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, 0)) { + if(!delegpt_add_rrset_A(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -293,7 +293,7 @@ find_add_addrs(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, 0)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -327,7 +327,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_A(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_A(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } @@ -347,7 +348,8 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { - if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame)) { + if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame, + NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } diff --git a/util/data/dname.c b/util/data/dname.c index c8f09ddbc..76b2ec7d6 100644 --- a/util/data/dname.c +++ b/util/data/dname.c @@ -233,17 +233,28 @@ int dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2) { uint8_t len1, len2; + int count1 = 0, count2 = 0; log_assert(pkt && d1 && d2); len1 = *d1++; len2 = *d2++; while( len1 != 0 || len2 != 0 ) { /* resolve ptrs */ if(LABEL_IS_PTR(len1)) { + if((size_t)PTR_OFFSET(len1, *d1) + >= sldns_buffer_limit(pkt)) + return -1; + if(count1++ > MAX_COMPRESS_PTRS) + return -1; d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1)); len1 = *d1++; continue; } if(LABEL_IS_PTR(len2)) { + if((size_t)PTR_OFFSET(len2, *d2) + >= sldns_buffer_limit(pkt)) + return 1; + if(count2++ > MAX_COMPRESS_PTRS) + return 1; d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2)); len2 = *d2++; continue; @@ -302,12 +313,18 @@ dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h) uint8_t labuf[LDNS_MAX_LABELLEN+1]; uint8_t lablen; int i; + int count = 0; /* preserve case of query, make hash label by label */ lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return h; + if(count++ > MAX_COMPRESS_PTRS) + return h; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -341,6 +358,9 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) return; } /* follow pointer */ + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) + return; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; @@ -369,6 +389,7 @@ void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; + int count = 0; if(!out) out = stdout; if(!dname) return; @@ -382,6 +403,15 @@ void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) fputs("??compressionptr??", out); return; } + if((size_t)PTR_OFFSET(lablen, *dname) + >= sldns_buffer_limit(pkt)) { + fputs("??compressionptr??", out); + return; + } + if(count++ > MAX_COMPRESS_PTRS) { + fputs("??compressionptr??", out); + return; + } dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; diff --git a/util/data/msgparse.c b/util/data/msgparse.c index fb3123703..7c32618a3 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -55,7 +55,11 @@ smart_compare(sldns_buffer* pkt, uint8_t* dnow, { if(LABEL_IS_PTR(*dnow)) { /* ptr points to a previous dname */ - uint8_t* p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); + uint8_t* p; + if((size_t)PTR_OFFSET(dnow[0], dnow[1]) + >= sldns_buffer_limit(pkt)) + return -1; + p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); if( p == dprfirst || p == dprlast ) return 0; /* prev dname is also a ptr, both ptrs are the same. */ From a1d4e151eec2f6b47ffa3500b88b5dc0bf7e2821 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 10:29:37 +0200 Subject: [PATCH 17/38] - Release 1.10.1 is 1.10.0 with fixes, code repository continues, including those fixes, towards the next release. Configure has version 1.10.2 version number in it. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 3 +++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 2d6aa6a05..6c3e695fa 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.10.1. +# Generated by GNU Autoconf 2.69 for unbound 1.10.2. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.10.1' -PACKAGE_STRING='unbound 1.10.1' +PACKAGE_VERSION='1.10.2' +PACKAGE_STRING='unbound 1.10.2' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1458,7 +1458,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.10.1 to adapt to many kinds of systems. +\`configure' configures unbound 1.10.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1523,7 +1523,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.10.1:";; + short | recursive ) echo "Configuration of unbound 1.10.2:";; esac cat <<\_ACEOF @@ -1750,7 +1750,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.10.1 +unbound configure 1.10.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2459,7 +2459,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.10.1, which was +It was created by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2811,11 +2811,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=10 -UNBOUND_VERSION_MICRO=1 +UNBOUND_VERSION_MICRO=2 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2891,6 +2891,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -21618,7 +21619,7 @@ _ACEOF -version=1.10.1 +version=1.10.2 date=`date +'%b %e, %Y'` @@ -22137,7 +22138,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.10.1, which was +This file was extended by unbound $as_me 1.10.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22203,7 +22204,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.10.1 +unbound config.status 1.10.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 113c4ec18..d1f7998e2 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[10]) -m4_define([VERSION_MICRO],[1]) +m4_define([VERSION_MICRO],[2]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=8 +LIBUNBOUND_REVISION=9 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -94,6 +94,7 @@ LIBUNBOUND_AGE=1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 +# 1.10.2 had 9:9:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 223b13b90..8b1c535ba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,9 @@ query into a large number of queries directed to a target. - CVE-2020-12663 Malformed answers from upstream name servers can be used to make Unbound unresponsive. + - Release 1.10.1 is 1.10.0 with fixes, code repository continues, + including those fixes, towards the next release. Configure has + version 1.10.2 version number in it. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, From 711c0548f0bcb6593ce029b1b7aee86c4c923310 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 14:36:57 +0200 Subject: [PATCH 18/38] - For PR #93: windows compile warnings removal - windows compile warnings removal for ip dscp option code. --- doc/Changelog | 2 ++ dynlibmod/dynlibmod.c | 16 ++++++++-------- services/listen_dnsport.c | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 8b1c535ba..780622a7f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,8 @@ - Release 1.10.1 is 1.10.0 with fixes, code repository continues, including those fixes, towards the next release. Configure has version 1.10.2 version number in it. + - For PR #93: windows compile warnings removal + - windows compile warnings removal for ip dscp option code. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 6ae23e86c..09b6cd40f 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -15,7 +15,7 @@ void log_dlerror() { DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM ; - if(dwBufferLength = FormatMessageA( + if((dwBufferLength = FormatMessageA( dwFormatFlags, NULL, // module to get message from (NULL == system) dwLastError, @@ -23,7 +23,7 @@ void log_dlerror() { (LPSTR) &MessageBuffer, 0, NULL - )) + ))) { log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError); LocalFree(MessageBuffer); @@ -108,7 +108,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_init = (func_init_t) initializer; + de->func_init = (func_init_t)(void*)initializer; } deinitializer = __LOADSYM(dynamic_library,"deinit"); if (deinitializer == NULL) { @@ -116,7 +116,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_deinit = (func_deinit_t) deinitializer; + de->func_deinit = (func_deinit_t)(void*)deinitializer; } operate = __LOADSYM(dynamic_library,"operate"); if (operate == NULL) { @@ -124,7 +124,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_operate = (func_operate_t) operate; + de->func_operate = (func_operate_t)(void*)operate; } inform = __LOADSYM(dynamic_library,"inform_super"); if (inform == NULL) { @@ -132,7 +132,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_inform = (func_inform_t) inform; + de->func_inform = (func_inform_t)(void*)inform; } clear = __LOADSYM(dynamic_library,"clear"); if (clear == NULL) { @@ -140,7 +140,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_clear = (func_clear_t) clear; + de->func_clear = (func_clear_t)(void*)clear; } get_mem = __LOADSYM(dynamic_library,"get_mem"); if (get_mem == NULL) { @@ -148,7 +148,7 @@ int dynlibmod_init(struct module_env* env, int id) { log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname); return 0; } else { - de->func_get_mem = (func_get_mem_t) get_mem; + de->func_get_mem = (func_get_mem_t)(void*)get_mem; } } de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped; diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 51d5a3fdb..cc56d3fd3 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -884,11 +884,11 @@ set_ip_dscp(int socket, int addrfamily, int dscp) ds = dscp << 2; switch(addrfamily) { case AF_INET6: - if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; default: - if(setsockopt(socket, IPPROTO_IP, IP_TOS, &ds, sizeof(ds)) < 0) + if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; } From f37242566b3187c1d715af6d0e4e0c5b75ccafeb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 19 May 2020 15:49:08 +0200 Subject: [PATCH 19/38] - For PR #93: unit test for dynlib module. --- doc/Changelog | 1 + testdata/dynlibmod.tdir/dynlibmod.conf | 32 +++++++++ testdata/dynlibmod.tdir/dynlibmod.dsc | 16 +++++ testdata/dynlibmod.tdir/dynlibmod.post | 15 +++++ testdata/dynlibmod.tdir/dynlibmod.pre | 35 ++++++++++ testdata/dynlibmod.tdir/dynlibmod.test | 74 +++++++++++++++++++++ testdata/dynlibmod.tdir/dynlibmod.testns | 22 ++++++ testdata/dynlibmod.tdir/unbound_control.key | 15 +++++ testdata/dynlibmod.tdir/unbound_control.pem | 11 +++ testdata/dynlibmod.tdir/unbound_server.key | 15 +++++ testdata/dynlibmod.tdir/unbound_server.pem | 11 +++ 11 files changed, 247 insertions(+) create mode 100644 testdata/dynlibmod.tdir/dynlibmod.conf create mode 100644 testdata/dynlibmod.tdir/dynlibmod.dsc create mode 100644 testdata/dynlibmod.tdir/dynlibmod.post create mode 100644 testdata/dynlibmod.tdir/dynlibmod.pre create mode 100644 testdata/dynlibmod.tdir/dynlibmod.test create mode 100644 testdata/dynlibmod.tdir/dynlibmod.testns create mode 100644 testdata/dynlibmod.tdir/unbound_control.key create mode 100644 testdata/dynlibmod.tdir/unbound_control.pem create mode 100644 testdata/dynlibmod.tdir/unbound_server.key create mode 100644 testdata/dynlibmod.tdir/unbound_server.pem diff --git a/doc/Changelog b/doc/Changelog index 780622a7f..ec84296f8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -8,6 +8,7 @@ version 1.10.2 version number in it. - For PR #93: windows compile warnings removal - windows compile warnings removal for ip dscp option code. + - For PR #93: unit test for dynlib module. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, diff --git a/testdata/dynlibmod.tdir/dynlibmod.conf b/testdata/dynlibmod.tdir/dynlibmod.conf new file mode 100644 index 000000000..d59444344 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.conf @@ -0,0 +1,32 @@ +server: + verbosity: 2 + num-threads: 3 + outgoing-range: 16 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + local-zone: "example.net." redirect + local-data: "example.net. IN A 10.20.30.41" + module-config: "dynlib iterator" + +dynlib: + dynlib-file: "@DLL_FILE@" + +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/dynlibmod.tdir/dynlibmod.dsc b/testdata/dynlibmod.tdir/dynlibmod.dsc new file mode 100644 index 000000000..b1a83910d --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.dsc @@ -0,0 +1,16 @@ +BaseName: dynlibmod +Version: 1.0 +Description: test dynlibmod module +CreationDate: Tue May 19 15:00:38 CET 2020 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dynlibmod.pre +Post: dynlibmod.post +Test: dynlibmod.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dynlibmod.tdir/dynlibmod.post b/testdata/dynlibmod.tdir/dynlibmod.post new file mode 100644 index 000000000..caa0da4f5 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.post @@ -0,0 +1,15 @@ +# #-- dynlibmod.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +kill_pid $FWD_PID +kill $UNBOUND_PID +kill $UNBOUND_PID >/dev/null 2>&1 +cat unbound.log +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.pre b/testdata/dynlibmod.tdir/dynlibmod.pre new file mode 100644 index 000000000..94adaa723 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.pre @@ -0,0 +1,35 @@ +# #-- dynlibmod.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh + +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dynlibmod.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +if grep "define USE_WINSOCK 1" $PRE/config.h; then + DLL_FILE="helloworld.dll" +else + DLL_FILE="helloworld.so" +fi +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@DLL_FILE\@/'$DLL_FILE'/' < dynlibmod.conf > ub.conf + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log diff --git a/testdata/dynlibmod.tdir/dynlibmod.test b/testdata/dynlibmod.tdir/dynlibmod.test new file mode 100644 index 000000000..f99f6fbc4 --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.test @@ -0,0 +1,74 @@ +# #-- dynlibmod.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi + +# compile the dynamic library module +if grep "define USE_WINSOCK 1" $PRE/config.h; then + echo "compile dynamic library dll for mingw" + echo "x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a" + x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a + if test $? != 0; then + echo "compile failure" + exit 1; + fi +else + echo "compile dynamic library" + echo "gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c" + gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c + if test $? != 0; then + echo "compile failure" + exit 1; + fi +fi + +# start unbound in the background +LD_LIBRARY_PATH="." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +wait_unbound_up unbound.log + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> check log for dynlibmod info" +# wait for a moment for filesystem to catch up. +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi +if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 10; fi +if grep "hello world from operate" unbound.log; then echo "yes it is in unbound.log"; +else + echo "information not in unbound.log" + echo "failed" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/dynlibmod.tdir/dynlibmod.testns b/testdata/dynlibmod.tdir/dynlibmod.testns new file mode 100644 index 000000000..0c911ca5b --- /dev/null +++ b/testdata/dynlibmod.tdir/dynlibmod.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/dynlibmod.tdir/unbound_control.key b/testdata/dynlibmod.tdir/unbound_control.key new file mode 100644 index 000000000..d7c43a06b --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_control.pem b/testdata/dynlibmod.tdir/unbound_control.pem new file mode 100644 index 000000000..8f1ba87f1 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/dynlibmod.tdir/unbound_server.key b/testdata/dynlibmod.tdir/unbound_server.key new file mode 100644 index 000000000..4256c421d --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_server.pem b/testdata/dynlibmod.tdir/unbound_server.pem new file mode 100644 index 000000000..aeda3ff11 --- /dev/null +++ b/testdata/dynlibmod.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- From 8af3d73b9bc98a78f1d1758cb23b5ac4b504e611 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 21 May 2020 22:48:57 +0200 Subject: [PATCH 20/38] - Fix for integer overflow when printing RDF_TYPE_TIME. --- doc/Changelog | 3 +++ sldns/parseutil.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index ec84296f8..75b3822d3 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 May 2020: George + - Fix for integer overflow when printing RDF_TYPE_TIME. + 19 May 2020: Wouter - CVE-2020-12662 Unbound can be tricked into amplifying an incoming query into a large number of queries directed to a target. diff --git a/sldns/parseutil.c b/sldns/parseutil.c index 82dbc0fe1..3515d64c5 100644 --- a/sldns/parseutil.c +++ b/sldns/parseutil.c @@ -167,7 +167,7 @@ sldns_gmtime64_r(int64_t clock, struct tm *result) static int64_t sldns_serial_arithmetics_time(int32_t time, time_t now) { - int32_t offset = time - (int32_t) now; + int32_t offset = (int32_t)((uint32_t) time - (uint32_t) now); return (int64_t) now + offset; } From 21cd836e82dd3dd03079096eea338901b637164b Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 25 May 2020 11:47:51 +0200 Subject: [PATCH 21/38] - Update contrib/aaaa-filter-iterator.patch for the recent generate_sub_request() change and to apply cleanly. --- contrib/aaaa-filter-iterator.patch | 14 +++++++------- doc/Changelog | 4 ++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/contrib/aaaa-filter-iterator.patch b/contrib/aaaa-filter-iterator.patch index b5c526822..9881bde89 100644 --- a/contrib/aaaa-filter-iterator.patch +++ b/contrib/aaaa-filter-iterator.patch @@ -13,9 +13,9 @@ Index: trunk/doc/unbound.conf.5.in +This also causes an additional A query to be sent for each AAAA query. +This breaks DNSSEC! +.TP - .B private\-address: \fI - Give IPv4 of IPv6 addresses or classless subnets. These are addresses - on your private network, and are not allowed to be returned for + .B aggressive\-nsec: \fI + Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN + and other denials, using information from previous NXDOMAINs answers. Index: trunk/iterator/iter_scrub.c =================================================================== --- trunk/iterator/iter_scrub.c (revision 4357) @@ -125,7 +125,7 @@ Index: trunk/iterator/iterator.c + * ASN: This event state was added as an intermediary step between + * QUERYTARGETS_STATE and the next step, in order to cast a subquery for the + * purpose of caching A records for the queried name. -+ * ++ * + * @param qstate: query state. + * @param iq: iterator query state. + * @param ie: iterator shared global environment. @@ -147,9 +147,9 @@ Index: trunk/iterator/iterator.c + + /* re-throw same query, but with a different type */ + if(!generate_sub_request(iq->qchase.qname, -+ iq->qchase.qname_len, LDNS_RR_TYPE_A, ++ iq->qchase.qname_len, LDNS_RR_TYPE_A, + iq->qchase.qclass, qstate, id, iq, -+ INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) { ++ INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: failed " + "preloading of A record for", + iq->qchase.qname, LDNS_RR_TYPE_A, @@ -188,7 +188,7 @@ Index: trunk/iterator/iterator.c return 0; } -+/** ++/** + * ASN: Do final processing on responses to A queries originated from AAAA + * queries. Events reach this state after the iterative resolution algorithm + * terminates. diff --git a/doc/Changelog b/doc/Changelog index 75b3822d3..0fa850ed0 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +25 May 2020: George + - Update contrib/aaaa-filter-iterator.patch for the recent + generate_sub_request() change and to apply cleanly. + 21 May 2020: George - Fix for integer overflow when printing RDF_TYPE_TIME. From c93b4b3158ce451b3dbc4658e3cdf1568f79fc4b Mon Sep 17 00:00:00 2001 From: Robert Edmonds Date: Mon, 25 May 2020 17:58:37 -0400 Subject: [PATCH 22/38] contrib/libunbound.pc.in: Do not use "Requires:" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit updates contrib/libunbound.pc.in to remove the "Requires:" directive and move its contents to "Requires.private:". The pkg-config manpage documents the Requires/Libs fields as follows: Requires: This is a comma-separated list of packages that are required by your package. Flags from dependent packages will be merged in to the flags reported for your package. Optionally, you can specify the version of the required package (using the operators =, <, >, >=, <=); specifying a version allows pkg-config to perform extra sanity checks. You may only mention the same package one time on the Requires: line. If the version of a package is un‐ specified, any version will be used with no checking. Requires.private: A list of packages required by this package. The difference from Requires is that the packages listed under Requires.private are not taken into account when a flag list is computed for dynami‐ cally linked executable (i.e., when --static was not specified). In the situation where each .pc file corresponds to a library, Requires.private shall be used exclusively to specify the depen‐ dencies between the libraries. Libs: This line should give the link flags specific to your package. Don't add any flags for required packages; pkg-config will add those automatically. Libs.private: This line should list any private libraries in use. Private li‐ braries are libraries which are not exposed through your li‐ brary, but are needed in the case of static linking. This dif‐ fers from Requires.private in that it references libraries that do not have package files installed. In other words: 1) "Requires:" should specify the name of .pc packages that are required to be installed to compile and dynamically link against libunbound. This corresponds to needing the -dev (or -devel) package containing the .pc file to be installed on the system. Since libunbound's header files actually do not have any includes on any other library's headers, the "Requires:" directive should be empty. 2) "Requires.private:" specifies the name of .pc packages that correspond to libraries that are required to be installed to statically link against libunbound. E.g., if libunbound.a has undefined symbols event_* that are in libevent.a, statically linking against libunbound.a requires statically linking libevent.a, and because libevent has a .pc file, this means "libevent" should appear in libunbound.pc's "Requires.private:" directive. 3) "Libs:" specifies the link flags needed to link against libunbound, only, not including any dependencies. 4) "Libs.private:" specifies the link flags needed to statically link against libraries that libunbound depends on that do not have .pc files. I think it's possible for unbound's build system to actually declare link flags under "Libs.private:" for some libraries that do have .pc files (e.g. libcrypto/-lcrypto, libssl/-lssl, for OpenSSL) but in practice this appears to be harmless. Given #1 above that libunbound does not have any header dependencies against any other packages it does not appear that "Requires:" is needed at all. See https://bugs.debian.org/958331 for an example of a bug report that this causes. We should not need to install the nettle-dev package only for building binaries that compile against the libunbound headers and link against the libunbound library. --- contrib/libunbound.pc.in | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/libunbound.pc.in b/contrib/libunbound.pc.in index 1442ed523..453bf7d4f 100644 --- a/contrib/libunbound.pc.in +++ b/contrib/libunbound.pc.in @@ -7,8 +7,7 @@ Name: unbound Description: Library with validating, recursive, and caching DNS resolver URL: http://www.unbound.net Version: @PACKAGE_VERSION@ -Requires: @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@ -Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ +Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@ Libs: -L${libdir} -lunbound Libs.private: @SSLLIB@ @LIBS@ Cflags: -I${includedir} From 062f7b7ba2f32b6edb59f11ef24afd8cb113c75b Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 27 May 2020 18:25:29 +0200 Subject: [PATCH 23/38] - Changelog entry for PR #241. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 0fa850ed0..ef0c7e18f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +27 May 2020: George + - Merge PR #241 by Robert Edmonds: contrib/libunbound.pc.in: Do not use + "Requires:". + 25 May 2020: George - Update contrib/aaaa-filter-iterator.patch for the recent generate_sub_request() change and to apply cleanly. From c053513cbddb31340a578d4f9a39763c0ce465b0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 8 Jun 2020 08:35:10 +0200 Subject: [PATCH 24/38] - Mention tls name possible when tls is enabled for stub-addr in the man page. --- doc/Changelog | 4 ++++ doc/unbound.conf.5.in | 3 +++ 2 files changed, 7 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ef0c7e18f..4f847da48 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +8 June 2020: Wouter + - Mention tls name possible when tls is enabled for stub-addr in the + man page. + 27 May 2020: George - Merge PR #241 by Robert Edmonds: contrib/libunbound.pc.in: Do not use "Requires:". diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 2f2733773..6bb7ca09f 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1614,6 +1614,9 @@ Name of stub zone nameserver. Is itself resolved before it is used. .B stub\-addr: \fI IP address of stub zone nameserver. Can be IP 4 or IP 6. To use a nondefault port for DNS communication append '@' with the port number. +If tls is enabled, then you can append a '#' and a name, then it'll check +the tls authentication certificates with that name. If you combine +the '@' and '#', the '@' comes first. .TP .B stub\-prime: \fI This option is by default no. If enabled it performs NS set priming, From 6e0756e819779d9cc2a14741b501cadffe446c93 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 17 Jun 2020 08:20:52 +0200 Subject: [PATCH 25/38] - Fix default explanation in man page for qname-minimisation-strict. --- doc/Changelog | 3 +++ doc/unbound.conf.5.in | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 4f847da48..17bbc3bad 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +17 June 2020: Wouter + - Fix default explanation in man page for qname-minimisation-strict. + 8 June 2020: Wouter - Mention tls name possible when tls is enabled for stub-addr in the man page. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 6bb7ca09f..de5a333bd 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -864,7 +864,7 @@ NXDOMAIN from a DNSSEC signed zone. Default is yes. QNAME minimisation in strict mode. Do not fall-back to sending full QNAME to potentially broken nameservers. A lot of domains will not be resolvable when this option in enabled. Only use if you know what you are doing. -This option only has effect when qname-minimisation is enabled. Default is off. +This option only has effect when qname-minimisation is enabled. Default is no. .TP .B aggressive\-nsec: \fI Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN From 5203954068285d2260a65a6997fd60928b80a581 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 17 Jun 2020 14:32:57 +0200 Subject: [PATCH 26/38] - Fix display of event loop method with libev. --- doc/Changelog | 1 + util/ub_event.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 17bbc3bad..00d2ecfcf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 17 June 2020: Wouter - Fix default explanation in man page for qname-minimisation-strict. + - Fix display of event loop method with libev. 8 June 2020: Wouter - Mention tls name possible when tls is enabled for stub-addr in the diff --git a/util/ub_event.c b/util/ub_event.c index 9af476ad4..68f633bb0 100644 --- a/util/ub_event.c +++ b/util/ub_event.c @@ -148,7 +148,7 @@ const char* ub_event_get_version(void) return event_get_version(); } -#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT) +#if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EV_FEATURE_BACKENDS) static const char* ub_ev_backend2str(int b) { switch(b) { @@ -184,7 +184,7 @@ ub_get_event_sys(struct ub_event_base* base, const char** n, const char** s, *n = "libev"; if (!b) b = (struct event_base*)ev_default_loop(EVFLAG_AUTO); -# ifdef EVBACKEND_SELECT +# ifdef EV_FEATURE_BACKENDS *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b)); # else *m = "not obtainable"; From be1182c3db4347ba4314ebd199a75da9bab64d46 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Jun 2020 13:33:47 +0200 Subject: [PATCH 27/38] - iana portlist updated. --- doc/Changelog | 3 +++ util/iana_ports.inc | 2 ++ 2 files changed, 5 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 00d2ecfcf..9b54f491a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +24 June 2020: Wouter + - iana portlist updated. + 17 June 2020: Wouter - Fix default explanation in man page for qname-minimisation-strict. - Fix display of event loop method with libev. diff --git a/util/iana_ports.inc b/util/iana_ports.inc index b26677efb..79488f49a 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -3771,6 +3771,7 @@ 4188, 4191, 4192, +4195, 4197, 4199, 4300, @@ -5230,6 +5231,7 @@ 18241, 18262, 18463, +18516, 18634, 18635, 18668, From 2a90e8fa1e22aa75d1cf67a1f71ebbf3f920366b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 24 Jun 2020 13:37:43 +0200 Subject: [PATCH 28/38] - doxygen file comments for dynlibmodule. --- doc/Changelog | 1 + dynlibmod/dynlibmod.c | 6 ++++++ dynlibmod/examples/helloworld.c | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 9b54f491a..ff3810b9d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 24 June 2020: Wouter - iana portlist updated. + - doxygen file comments for dynlibmodule. 17 June 2020: Wouter - Fix default explanation in man page for qname-minimisation-strict. diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 09b6cd40f..f9751d8c6 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -1,3 +1,9 @@ +/** + * \file + * This file contains the dynamic library module for Unbound. + * This loads a dynamic library (.dll, .so) and calls that for the + * module actions. + */ #include "config.h" #include "util/module.h" #include "util/config_file.h" diff --git a/dynlibmod/examples/helloworld.c b/dynlibmod/examples/helloworld.c index 2ec50223e..acb6b5d9b 100644 --- a/dynlibmod/examples/helloworld.c +++ b/dynlibmod/examples/helloworld.c @@ -1,4 +1,6 @@ -/* +/** + * \file + * * This is an example to show how dynamic libraries can be made to work with * unbound. To build a .so file simply run: * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c From 8ac054733ba9e9ac59ba5c4f66e6ebcea5bfdeeb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 30 Jun 2020 13:41:26 +0200 Subject: [PATCH 29/38] - Move reply list clean for serve expired mesh callback to after the reply is sent, so that script callbacks have reply_info. --- doc/Changelog | 4 ++++ services/mesh.c | 16 ++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index ff3810b9d..197e4b29b 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +29 June 2020: Wouter + - Move reply list clean for serve expired mesh callback to after + the reply is sent, so that script callbacks have reply_info. + 24 June 2020: Wouter - iana portlist updated. - doxygen file comments for dynlibmodule. diff --git a/services/mesh.c b/services/mesh.c index 4bc4341c4..223414415 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1959,14 +1959,6 @@ mesh_serve_expired_callback(void* arg) log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep); r = mstate->reply_list; - mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list && r) { - log_assert(mesh->num_reply_states > 0); - mesh->num_reply_states--; - if(mstate->super_set.count == 0) { - mesh->num_detached_states++; - } - } for(; r; r = r->next) { /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ @@ -2000,6 +1992,14 @@ mesh_serve_expired_callback(void* arg) mesh->ans_expired++; } + mstate->reply_list = NULL; + if(!mstate->reply_list && !mstate->cb_list && r) { + log_assert(mesh->num_reply_states > 0); + mesh->num_reply_states--; + if(mstate->super_set.count == 0) { + mesh->num_detached_states++; + } + } while((c = mstate->cb_list) != NULL) { /* take this cb off the list; so that the list can be * changed, eg. by adds from the callback routine */ From 6f0c2956ac8834a1854fb1e811983d23d3ef0f92 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 30 Jun 2020 15:48:11 +0200 Subject: [PATCH 30/38] - Also move reply list clean for mesh callbacks to the scrip callback can see the reply_info. - Fix for mesh accounting if the reply list already empty to begin with. --- doc/Changelog | 4 ++++ services/mesh.c | 46 ++++++++++++++++++++-------------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 197e4b29b..64e1f50aa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,10 @@ 29 June 2020: Wouter - Move reply list clean for serve expired mesh callback to after the reply is sent, so that script callbacks have reply_info. + - Also move reply list clean for mesh callbacks to the scrip callback + can see the reply_info. + - Fix for mesh accounting if the reply list already empty to begin + with. 24 June 2020: Wouter - iana portlist updated. diff --git a/services/mesh.c b/services/mesh.c index 223414415..b5d4aeeab 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1320,26 +1320,7 @@ void mesh_query_done(struct mesh_state* mstate) free(err); } } - if(mstate->reply_list) { - /* set the reply_list to NULL during the mesh_query_done - * processing, so that calls back into the mesh from - * tcp_req_info (deciding to drop the reply and thus - * unregister the mesh_reply from the mstate) are stopped - * because the list is empty. - * The mstate is then likely not a reply_state, and maybe - * also a detached_state. - */ - reply_list = mstate->reply_list; - mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list) { - /* was a reply state, not anymore */ - log_assert(mstate->s.env->mesh->num_reply_states > 0); - mstate->s.env->mesh->num_reply_states--; - } - if(!mstate->reply_list && !mstate->cb_list && - mstate->super_set.count == 0) - mstate->s.env->mesh->num_detached_states++; - } + reply_list = mstate->reply_list; for(r = reply_list; r; r = r->next) { /* if a response-ip address block has been stored the * information should be logged for each client. */ @@ -1381,6 +1362,17 @@ void mesh_query_done(struct mesh_state* mstate) prev_buffer = r_buffer; } } + if(mstate->reply_list) { + mstate->reply_list = NULL; + if(!mstate->reply_list && !mstate->cb_list) { + /* was a reply state, not anymore */ + log_assert(mstate->s.env->mesh->num_reply_states > 0); + mstate->s.env->mesh->num_reply_states--; + } + if(!mstate->reply_list && !mstate->cb_list && + mstate->super_set.count == 0) + mstate->s.env->mesh->num_detached_states++; + } mstate->replies_sent = 1; while((c = mstate->cb_list) != NULL) { /* take this cb off the list; so that the list can be @@ -1992,12 +1984,14 @@ mesh_serve_expired_callback(void* arg) mesh->ans_expired++; } - mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list && r) { - log_assert(mesh->num_reply_states > 0); - mesh->num_reply_states--; - if(mstate->super_set.count == 0) { - mesh->num_detached_states++; + if(mstate->reply_list) { + mstate->reply_list = NULL; + if(!mstate->reply_list && !mstate->cb_list && r) { + log_assert(mesh->num_reply_states > 0); + mesh->num_reply_states--; + if(mstate->super_set.count == 0) { + mesh->num_detached_states++; + } } } while((c = mstate->cb_list) != NULL) { From 84b020795676bf08730ff53c2b0bd594309e6c1b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 30 Jun 2020 16:20:09 +0200 Subject: [PATCH 31/38] - Fix for mesh accounting when rpz decides to drop a reply with a tcp stream waiting for it. --- doc/Changelog | 2 ++ services/mesh.c | 16 +++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 64e1f50aa..878ea3aa7 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -5,6 +5,8 @@ can see the reply_info. - Fix for mesh accounting if the reply list already empty to begin with. + - Fix for mesh accounting when rpz decides to drop a reply with a + tcp stream waiting for it. 24 June 2020: Wouter - iana portlist updated. diff --git a/services/mesh.c b/services/mesh.c index b5d4aeeab..12f861c7b 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1296,7 +1296,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, void mesh_query_done(struct mesh_state* mstate) { - struct mesh_reply* r, *reply_list = NULL; + struct mesh_reply* r; struct mesh_reply* prev = NULL; struct sldns_buffer* prev_buffer = NULL; struct mesh_cb* c; @@ -1320,8 +1320,7 @@ void mesh_query_done(struct mesh_state* mstate) free(err); } } - reply_list = mstate->reply_list; - for(r = reply_list; r; r = r->next) { + for(r = mstate->reply_list; r; r = r->next) { /* if a response-ip address block has been stored the * information should be logged for each client. */ if(mstate->s.respip_action_info && @@ -1345,7 +1344,15 @@ void mesh_query_done(struct mesh_state* mstate) /* if this query is determined to be dropped during the * mesh processing, this is the point to take that action. */ if(mstate->s.is_drop) { + /* briefly set the reply_list to NULL, so that the + * tcp req info cleanup routine that calls the mesh + * to deregister the meshstate for it is not done + * because the list is NULL and also accounting is not + * done there, but instead we do that here. */ + struct mesh_reply* reply_list = mstate->reply_list; + mstate->reply_list = NULL; comm_point_drop_reply(&r->query_reply); + mstate->reply_list = reply_list; } else { struct sldns_buffer* r_buffer = r->query_reply.c->buffer; if(r->query_reply.c->tcp_req_info) { @@ -1950,8 +1957,7 @@ mesh_serve_expired_callback(void* arg) if(verbosity >= VERB_ALGO) log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep); - r = mstate->reply_list; - for(; r; r = r->next) { + for(r = mstate->reply_list; r; r = r->next) { /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { From 52774b6b20a6d79f5500386976dc59cbe38a31f0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 30 Jun 2020 16:35:48 +0200 Subject: [PATCH 32/38] - Review fix for number of detached states due to use of variable after end of loop. --- doc/Changelog | 2 ++ services/mesh.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 878ea3aa7..a9c23bcab 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -7,6 +7,8 @@ with. - Fix for mesh accounting when rpz decides to drop a reply with a tcp stream waiting for it. + - Review fix for number of detached states due to use of variable + after end of loop. 24 June 2020: Wouter - iana portlist updated. diff --git a/services/mesh.c b/services/mesh.c index 12f861c7b..922e6b32e 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1992,7 +1992,7 @@ mesh_serve_expired_callback(void* arg) } if(mstate->reply_list) { mstate->reply_list = NULL; - if(!mstate->reply_list && !mstate->cb_list && r) { + if(!mstate->reply_list && !mstate->cb_list) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; if(mstate->super_set.count == 0) { From 06d33f61c1f90aa551b644d12d9c70594f5377f7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 30 Jun 2020 17:22:43 +0200 Subject: [PATCH 33/38] - Fix tcp req info drop due to size call into mesh accounting removal of mesh state during mesh send reply. --- doc/Changelog | 2 ++ services/mesh.c | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index a9c23bcab..f5aca5af6 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -9,6 +9,8 @@ tcp stream waiting for it. - Review fix for number of detached states due to use of variable after end of loop. + - Fix tcp req info drop due to size call into mesh accounting + removal of mesh state during mesh send reply. 24 June 2020: Wouter - iana portlist updated. diff --git a/services/mesh.c b/services/mesh.c index 922e6b32e..4b0c5db41 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -1355,12 +1355,20 @@ void mesh_query_done(struct mesh_state* mstate) mstate->reply_list = reply_list; } else { struct sldns_buffer* r_buffer = r->query_reply.c->buffer; + struct mesh_reply* rlist = mstate->reply_list; if(r->query_reply.c->tcp_req_info) { r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; prev_buffer = NULL; } + /* briefly set the replylist to null in case the + * meshsendreply calls tcpreqinfo sendreply that + * comm_point_drops because of size, and then the + * null stops the mesh state remove and thus + * reply_list modification and accounting */ + mstate->reply_list = NULL; mesh_send_reply(mstate, mstate->s.return_rcode, rep, r, r_buffer, prev, prev_buffer); + mstate->reply_list = rlist; if(r->query_reply.c->tcp_req_info) { tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); r_buffer = NULL; @@ -1874,7 +1882,7 @@ mesh_serve_expired_callback(void* arg) { struct mesh_state* mstate = (struct mesh_state*) arg; struct module_qstate* qstate = &mstate->s; - struct mesh_reply* r; + struct mesh_reply* r, *rlist; struct mesh_area* mesh = qstate->env->mesh; struct dns_msg* msg; struct mesh_cb* c; @@ -1979,8 +1987,15 @@ mesh_serve_expired_callback(void* arg) r_buffer = r->query_reply.c->buffer; if(r->query_reply.c->tcp_req_info) r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; + /* briefly set the replylist to null in case the meshsendreply + * calls tcpreqinfo sendreply that comm_point_drops because + * of size, and then the null stops the mesh state remove and + * thus reply_list modification and accounting */ + rlist = mstate->reply_list; + mstate->reply_list = NULL; mesh_send_reply(mstate, LDNS_RCODE_NOERROR, msg->rep, r, r_buffer, prev, prev_buffer); + mstate->reply_list = rlist; if(r->query_reply.c->tcp_req_info) tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); prev = r; From 233c14a47699b16792c05507c496eadab5679634 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 6 Jul 2020 11:33:07 +0200 Subject: [PATCH 34/38] - run_vm cleanup better and removes trailing slash on single argument. --- doc/Changelog | 3 +++ testcode/run_vm.sh | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index f5aca5af6..58f0493bd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +6 July 2020: Wouter + - run_vm cleanup better and removes trailing slash on single argument. + 29 June 2020: Wouter - Move reply list clean for serve expired mesh callback to after the reply is sent, so that script callbacks have reply_info. diff --git a/testcode/run_vm.sh b/testcode/run_vm.sh index d14c63742..5f599e144 100644 --- a/testcode/run_vm.sh +++ b/testcode/run_vm.sh @@ -26,12 +26,17 @@ cd testdata TPKG=../testcode/mini_tdir.sh #RUNLIST=`(ls -1d *.tdir|grep -v '^0[016]')` RUNLIST=`(ls -1d *.tdir)` -if test "$#" = "1"; then RUNLIST="$1"; fi +if test "$#" = "1"; then + RUNLIST="$1"; + if echo "$RUNLIST" | grep '/$' >/dev/null; then + RUNLIST=`echo "$RUNLIST" | sed -e 's?/$??'` + fi +fi # fix up tdir that was edited on keyboard interrupt. cleanup() { echo cleanup - if test -f "$t.bak"; then mv "$t.bak" "$t"; fi + if test -f "$t.bak"; then rm -fr "${t}"; mv "$t.bak" "$t"; fi exit 0 } trap cleanup INT From 4d009e19fc80b2642c2ce0fd04b819ca70102ca4 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 7 Jul 2020 09:00:04 +0200 Subject: [PATCH 35/38] - Fix #259: Fix unbound-checkconf does not check view existence. unbound-checkconf checks access-control-view, access-control-tags, access-control-tag-actions and access-control-tag-datas. - Fix offset of error printout for access-control-tag-datas. --- daemon/acl_list.c | 2 +- doc/Changelog | 6 +++ smallapp/unbound-checkconf.c | 90 ++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) diff --git a/daemon/acl_list.c b/daemon/acl_list.c index c16a920d9..84324575e 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -273,7 +273,7 @@ check_data(const char* data, const struct config_strlist* head) if(res == 0) return 1; log_err("rr data [char %d] parse error %s", - (int)LDNS_WIREPARSE_OFFSET(res)-13, + (int)LDNS_WIREPARSE_OFFSET(res)-2, sldns_get_errorstr_parse(res)); return 0; } diff --git a/doc/Changelog b/doc/Changelog index 58f0493bd..93d69d945 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,9 @@ +7 July 2020: Wouter + - Fix #259: Fix unbound-checkconf does not check view existence. + unbound-checkconf checks access-control-view, access-control-tags, + access-control-tag-actions and access-control-tag-datas. + - Fix offset of error printout for access-control-tag-datas. + 6 July 2020: Wouter - run_vm cleanup better and removes trailing slash on single argument. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 54a0ab78c..409d29fea 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -58,6 +58,7 @@ #include "services/authzone.h" #include "respip/respip.h" #include "sldns/sbuffer.h" +#include "sldns/str2wire.h" #ifdef HAVE_GETOPT_H #include #endif @@ -194,6 +195,94 @@ localzonechecks(struct config_file* cfg) local_zones_delete(zs); } +/** checks for acl and views */ +static void +acl_view_checks(struct config_file* cfg, struct views* views) +{ + int d; + struct sockaddr_storage a; + socklen_t alen; + struct config_str2list* acl; + struct config_str3list* s3; + struct config_strbytelist* sb; + struct view* v; + + /* acl_view */ + for(acl=cfg->acl_view; acl; acl = acl->next) { + if(!netblockstrtoaddr(acl->str, UNBOUND_DNS_PORT, &a, &alen, + &d)) { + fatal_exit("cannot parse access-control-view " + "address %s %s", acl->str, acl->str2); + } + v = views_find_view(views, acl->str2, 0); + if(!v) { + fatal_exit("cannot find view for " + "access-control-view: %s %s", + acl->str, acl->str2); + } + lock_rw_unlock(&v->lock); + } + + /* acl_tags */ + for(sb=cfg->acl_tags; sb; sb = sb->next) { + if(!netblockstrtoaddr(sb->str, UNBOUND_DNS_PORT, &a, &alen, + &d)) { + fatal_exit("cannot parse access-control-tags " + "address %s", sb->str); + } + } + + /* acl_tag_actions */ + for(s3=cfg->acl_tag_actions; s3; s3 = s3->next) { + enum localzone_type t; + if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen, + &d)) { + fatal_exit("cannot parse access-control-tag-actions " + "address %s %s %s", + s3->str, s3->str2, s3->str3); + } + if(find_tag_id(cfg, s3->str2) == -1) { + fatal_exit("cannot parse tag %s (define-tag it), " + "for access-control-tag-actions: %s %s %s", + s3->str2, s3->str, s3->str2, s3->str3); + } + if(!local_zone_str2type(s3->str3, &t)) { + fatal_exit("cannot parse access control action type %s" + " for access-control-tag-actions: %s %s %s", + s3->str3, s3->str, s3->str2, s3->str3); + } + } + + /* acl_tag_datas */ + for(s3=cfg->acl_tag_datas; s3; s3 = s3->next) { + char buf[65536]; + uint8_t rr[LDNS_RR_BUF_SIZE]; + size_t len = sizeof(rr); + int res; + if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen, + &d)) { + fatal_exit("cannot parse access-control-tag-datas address %s %s '%s'", + s3->str, s3->str2, s3->str3); + } + if(find_tag_id(cfg, s3->str2) == -1) { + fatal_exit("cannot parse tag %s (define-tag it), " + "for access-control-tag-datas: %s %s '%s'", + s3->str2, s3->str, s3->str2, s3->str3); + } + /* '.' is sufficient for validation, and it makes the call to + * sldns_wirerr_get_type() simpler below. */ + snprintf(buf, sizeof(buf), "%s %s", ".", s3->str3); + res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, + 0, NULL, 0); + if(res != 0) { + fatal_exit("cannot parse rr data [char %d] parse error %s, for access-control-tag-datas: %s %s '%s'", + (int)LDNS_WIREPARSE_OFFSET(res)-2, + sldns_get_errorstr_parse(res), + s3->str, s3->str2, s3->str3); + } + } +} + /** check view and response-ip configuration */ static void view_and_respipchecks(struct config_file* cfg) @@ -211,6 +300,7 @@ view_and_respipchecks(struct config_file* cfg) fatal_exit("Could not setup respip set"); if(!respip_views_apply_cfg(views, cfg, &ignored)) fatal_exit("Could not setup per-view respip sets"); + acl_view_checks(cfg, views); views_delete(views); respip_set_delete(respip); } From d84529cc0ec73564a761c732e709702c72a44d32 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 7 Jul 2020 10:18:56 +0200 Subject: [PATCH 36/38] - Review fixes for checkconf #259 change. --- doc/Changelog | 1 + smallapp/unbound-checkconf.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 93d69d945..ff1f36bbe 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,7 @@ unbound-checkconf checks access-control-view, access-control-tags, access-control-tag-actions and access-control-tag-datas. - Fix offset of error printout for access-control-tag-datas. + - Review fixes for checkconf #259 change. 6 July 2020: Wouter - run_vm cleanup better and removes trailing slash on single argument. diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 409d29fea..0cf348add 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -197,7 +197,7 @@ localzonechecks(struct config_file* cfg) /** checks for acl and views */ static void -acl_view_checks(struct config_file* cfg, struct views* views) +acl_view_tag_checks(struct config_file* cfg, struct views* views) { int d; struct sockaddr_storage a; @@ -205,10 +205,10 @@ acl_view_checks(struct config_file* cfg, struct views* views) struct config_str2list* acl; struct config_str3list* s3; struct config_strbytelist* sb; - struct view* v; /* acl_view */ for(acl=cfg->acl_view; acl; acl = acl->next) { + struct view* v; if(!netblockstrtoaddr(acl->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access-control-view " @@ -300,7 +300,7 @@ view_and_respipchecks(struct config_file* cfg) fatal_exit("Could not setup respip set"); if(!respip_views_apply_cfg(views, cfg, &ignored)) fatal_exit("Could not setup per-view respip sets"); - acl_view_checks(cfg, views); + acl_view_tag_checks(cfg, views); views_delete(views); respip_set_delete(respip); } From ff50993f3614c11c5c367b83e4e259f8b3e673fb Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 8 Jul 2020 11:43:50 +0200 Subject: [PATCH 37/38] - Fix add missing DSA header, for compilation without deprecated OpenSSL APIs. --- doc/Changelog | 4 ++++ validator/val_secalgo.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ff1f36bbe..5c257c7dc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +8 July 2020: Wouter + - Fix add missing DSA header, for compilation without deprecated + OpenSSL APIs. + 7 July 2020: Wouter - Fix #259: Fix unbound-checkconf does not check view existence. unbound-checkconf checks access-control-view, access-control-tags, diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 3dbbe9ac9..65bca8b69 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -77,6 +77,10 @@ int fake_sha1 = 0; #include #endif +#if defined(HAVE_OPENSSL_DSA_H) && defined(USE_DSA) +#include +#endif + /** * Output a libcrypto openssl error to the logfile. * @param str: string to add to it. From e99b5046ebaca64d48b5fa26b323a14f8bb1b6ef Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 8 Jul 2020 16:22:39 +0200 Subject: [PATCH 38/38] - Fix to use SSL_CTX_set_tlsext_ticket_key_evp_cb in OpenSSL 3.0.0-alpha4. - Longer keys for the test set, this avoids weak crypto errors. --- config.h.in | 8 ++- configure | 6 +- configure.ac | 6 +- doc/Changelog | 3 + .../09-unbound-control.tdir/bad_control.key | 50 ++++++++++---- .../09-unbound-control.tdir/bad_control.pem | 29 +++++--- .../09-unbound-control.tdir/bad_server.key | 50 ++++++++++---- .../09-unbound-control.tdir/bad_server.pem | 29 +++++--- .../unbound_control.key | 50 ++++++++++---- .../unbound_control.pem | 29 +++++--- .../unbound_server.key | 50 ++++++++++---- .../unbound_server.pem | 29 +++++--- .../10-unbound-anchor.tdir/keys/test_cert.pem | 26 +++---- .../keys/unbound-control-setup | 2 +- .../keys/unbound_control.key | 56 ++++++++++------ .../keys/unbound_control.pem | 29 ++++---- .../keys/unbound_server.key | 56 ++++++++++------ .../keys/unbound_server.pem | 32 +++++---- testdata/ctrl_itr.tdir/unbound_control.key | 50 ++++++++++---- testdata/ctrl_itr.tdir/unbound_control.pem | 29 +++++--- testdata/ctrl_itr.tdir/unbound_server.key | 50 ++++++++++---- testdata/ctrl_itr.tdir/unbound_server.pem | 29 +++++--- testdata/ctrl_pipe.tdir/unbound_control.key | 50 ++++++++++---- testdata/ctrl_pipe.tdir/unbound_control.pem | 29 +++++--- testdata/ctrl_pipe.tdir/unbound_server.key | 50 ++++++++++---- testdata/ctrl_pipe.tdir/unbound_server.pem | 29 +++++--- testdata/dnstap.tdir/unbound_control.key | 50 ++++++++++---- testdata/dnstap.tdir/unbound_control.pem | 29 +++++--- testdata/dnstap.tdir/unbound_server.key | 50 ++++++++++---- testdata/dnstap.tdir/unbound_server.pem | 29 +++++--- .../dnstap_reconnect.tdir/unbound_control.key | 50 ++++++++++---- .../dnstap_reconnect.tdir/unbound_control.pem | 29 +++++--- .../dnstap_reconnect.tdir/unbound_server.key | 50 ++++++++++---- .../dnstap_reconnect.tdir/unbound_server.pem | 29 +++++--- testdata/dnstap_tcp.tdir/unbound_control.key | 50 ++++++++++---- testdata/dnstap_tcp.tdir/unbound_control.pem | 29 +++++--- testdata/dnstap_tcp.tdir/unbound_server.key | 50 ++++++++++---- testdata/dnstap_tcp.tdir/unbound_server.pem | 29 +++++--- testdata/dnstap_tls.tdir/unbound_control.key | 50 ++++++++++---- testdata/dnstap_tls.tdir/unbound_control.pem | 29 +++++--- testdata/dnstap_tls.tdir/unbound_server.key | 50 ++++++++++---- testdata/dnstap_tls.tdir/unbound_server.pem | 29 +++++--- .../unbound_control.key | 50 ++++++++++---- .../unbound_control.pem | 29 +++++--- .../unbound_server.key | 50 ++++++++++---- .../unbound_server.pem | 29 +++++--- .../unbound_control.key | 50 ++++++++++---- .../unbound_control.pem | 29 +++++--- .../unbound_server.key | 50 ++++++++++---- .../unbound_server.pem | 29 +++++--- .../unbound_control.key | 50 ++++++++++---- .../unbound_control.pem | 29 +++++--- .../unbound_server.key | 50 ++++++++++---- .../unbound_server.pem | 29 +++++--- .../unbound_control.key | 50 ++++++++++---- .../unbound_control.pem | 29 +++++--- .../unbound_server.key | 50 ++++++++++---- .../unbound_server.pem | 29 +++++--- testdata/dynlibmod.tdir/unbound_control.key | 50 ++++++++++---- testdata/dynlibmod.tdir/unbound_control.pem | 29 +++++--- testdata/dynlibmod.tdir/unbound_server.key | 50 ++++++++++---- testdata/dynlibmod.tdir/unbound_server.pem | 29 +++++--- testdata/fwd_bogus.tdir/unbound_control.key | 50 ++++++++++---- testdata/fwd_bogus.tdir/unbound_control.pem | 29 +++++--- testdata/fwd_bogus.tdir/unbound_server.key | 50 ++++++++++---- testdata/fwd_bogus.tdir/unbound_server.pem | 29 +++++--- .../remote-threaded.tdir/unbound_control.key | 50 ++++++++++---- .../remote-threaded.tdir/unbound_control.pem | 29 +++++--- .../remote-threaded.tdir/unbound_server.key | 50 ++++++++++---- .../remote-threaded.tdir/unbound_server.pem | 29 +++++--- .../ssl_req_order.tdir/unbound_server.key | 50 ++++++++++---- .../ssl_req_order.tdir/unbound_server.pem | 29 +++++--- .../ssl_req_timeout.tdir/unbound_server.key | 50 ++++++++++---- .../ssl_req_timeout.tdir/unbound_server.pem | 29 +++++--- testdata/stream_ssl.tdir/unbound_control.key | 50 ++++++++++---- testdata/stream_ssl.tdir/unbound_control.pem | 29 +++++--- testdata/stream_ssl.tdir/unbound_server.key | 50 ++++++++++---- testdata/stream_ssl.tdir/unbound_server.pem | 29 +++++--- util/net_help.c | 67 ++++++++++++++++++- util/net_help.h | 14 ---- 80 files changed, 2142 insertions(+), 849 deletions(-) diff --git a/config.h.in b/config.h.in index aa3e6665b..f7a4095ed 100644 --- a/config.h.in +++ b/config.h.in @@ -386,6 +386,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_CONF_H +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_CORE_NAMES_H + /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_DH_H @@ -500,8 +503,9 @@ /* Define to 1 if you have the `SSL_CTX_set_security_level' function. */ #undef HAVE_SSL_CTX_SET_SECURITY_LEVEL -/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_cb' function. */ -#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_CB +/* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_evp_cb' + function. */ +#undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB /* Define to 1 if you have the `SSL_get0_peername' function. */ #undef HAVE_SSL_GET0_PEERNAME diff --git a/configure b/configure index 6c3e695fa..ae72d891e 100755 --- a/configure +++ b/configure @@ -18326,7 +18326,7 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -for ac_header in openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h +for ac_header in openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default @@ -18340,7 +18340,7 @@ fi done -for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback +for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -18356,7 +18356,7 @@ done # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites +for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index d1f7998e2..5c373d9d8 100644 --- a/configure.ac +++ b/configure.ac @@ -850,13 +850,13 @@ if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/ else AC_MSG_RESULT([no]) fi -AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT]) -AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback]) +AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h],,, [AC_INCLUDES_DEFAULT]) +AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback]) # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" -AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites]) +AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb]) LIBS="$BAKLIBS" AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ diff --git a/doc/Changelog b/doc/Changelog index 5c257c7dc..f4304bddf 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,9 @@ 8 July 2020: Wouter - Fix add missing DSA header, for compilation without deprecated OpenSSL APIs. + - Fix to use SSL_CTX_set_tlsext_ticket_key_evp_cb in OpenSSL + 3.0.0-alpha4. + - Longer keys for the test set, this avoids weak crypto errors. 7 July 2020: Wouter - Fix #259: Fix unbound-checkconf does not check view existence. diff --git a/testdata/09-unbound-control.tdir/bad_control.key b/testdata/09-unbound-control.tdir/bad_control.key index d29cdbc91..84d3883ed 100644 --- a/testdata/09-unbound-control.tdir/bad_control.key +++ b/testdata/09-unbound-control.tdir/bad_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/bad_control.pem b/testdata/09-unbound-control.tdir/bad_control.pem index e06b84720..0785acaeb 100644 --- a/testdata/09-unbound-control.tdir/bad_control.pem +++ b/testdata/09-unbound-control.tdir/bad_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt -i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva -UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x -nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK -4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH -5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F +MIIDszCCAhsCFEm6EpzKglG+V66IyIlx6Q2y3y8nMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3 +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQC3/c89kYzt5J0KcRDTh/pj5eeanXTmC3GqgfEd/IYUbyWM +1J1PWEoGOuDUFFWzNOD5N3lX5ji8AdbbkS2+6+DQNAE0Mq2sxNNtNkpBtPoDteDK +njY6PwTJcVazwE3H+OgjWwAxSIKM8qkoAjlsgdXXwi3ifbwxdZNVfmZ/ByPzZc9N +CU7o6FNe0DjmJ08sUqQKngfzv0Qh8ijWx+T45MuOhI0tcU3cGgj0IhPpZkqtjSkC +J4uN2i1KWKvH9SnCmiMCnohXHONnY8ecllsHAfFU9ifKwyiBwpD0LIvWMFPamFZV +7YlgkXDAaDOIkfkIkQZWBaRy0S2C4q5vNIIh/1G5fqP+ffZlG0B5yGbY6LZbDEav +20W7MteBiy78xD4CHNwU/UwQaXIKTIvZ/GAOvLfhGrtFVBAv0+iWEFiTaithOWyM +JVGQbNe+kUgXw48MQSxfPZNMzaeSIKVrUaqwZcvfG48WMYP4IQwjmMHtT6PW4vb7 +Fv+BVQwDG+k0cANxbX8CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEATI+xHWEiq3SK +9Dw2FBiD7GPaaPAh/u5h+QxaLS9G5a6Djh6F9RT3To+gRVeiaAaIPg53asGM5TGR +ojv9nI8cIvi3dL6VKhHSdomldFjfQYmF/uSKEYsHaggceGE/GsG8J8g79HXGRp2y +m5hkACKFh5ZcSHeJBplv7agDbBZ6w5qQaY6QsnYLrAK7B3Jo1Xx+JEKzmgnp4TwV +Ni4wezgLiG+buJ5lXEYr2Rm7HR/cxLRN7CFrpUoavFUvqLKNpXO8MJFx+BkO5/JT +pgv0O/ll9aT+kuegUpf9kcUzhpsw1N4W/JzZOyJAdxrrQ88aNZm+7d433wDBt/WF +BCV4d5wEASxfQALEQa+/1FebIsDfQyBAOHdTAVkupZ00oeNerKe+mHFmNjj04vn8 +LwGgVuADCBJVCDhEqHLEXUqiGeSHJhAJO9pjma7r7H81OtAs/xVC8j8hqe8wLBKg +XNjWQ9QmNXt9VVQCMomro9lmoDozr9k1vsGtUsT3yQEAABQYwIjp -----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/bad_server.key b/testdata/09-unbound-control.tdir/bad_server.key index 0dbb134b5..d64d05bf5 100644 --- a/testdata/09-unbound-control.tdir/bad_server.key +++ b/testdata/09-unbound-control.tdir/bad_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/bad_server.pem b/testdata/09-unbound-control.tdir/bad_server.pem index 983247ac7..b81fb19f2 100644 --- a/testdata/09-unbound-control.tdir/bad_server.pem +++ b/testdata/09-unbound-control.tdir/bad_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B -RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ -DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV -Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy -zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm -O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu -oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== +MIIDqzCCAhMCFFzmVNbhjiApmjK3VeO/j9TBp8yOMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAr7FId+AlZUWP6MK9xfV0hJ9ooJdcL0sm9yZsWY4UYOlqcTGERah/XvQm +sOaKcMg8Wof24LAvo2vmariBYZoS61AAi6MeHHrPh8M2ZDMZQgW4nZC8A0biro93 +nMLU1VxgycSVmj29p18IdNzsYWxC7t+/6AWQSlwD+9YFOYrVWQYxEcSZ7gZqoh08 +mDsNRjnVs7nagPAbk/B9jj9zhvgp+0d5h25Ms7Td22t7DfsGlL8Ei3ewFwaqjThh +hVHEVwARBLYGb2ZsZS5EMJv2W/V0k6yQZ+rV07+i0oZQ0cGxOuUy9TNO7HfiI4ri +2x26Wm0YH1qgK5miUIAkbL2E/iWVxMfQOdEAZuOmUpUFOFpm/XHL1/pCyiqOb98j +jLE93UoNPZdsjrbjfQ/WPkap+vtigVZJJPet6F9x4S5XvrhXkV2JWIYMvhnrs9Np +veCOe1lcxNVSsIAtMxsZKi2dIq+mRhfm9/UGoOmj8UxIQUepJJv1IHcdASWkTAMm +USyF7z7DAgMBAAEwDQYJKoZIhvcNAQELBQADggGBAG+IhOsdEiaVCOB8PBRGJQ8F +/kyeQOtE7pPPkH57qYwAW9cxdSoiIxrvase30IGLWmOzjiAc/igf1qz/bVpwFXQr +XohzyeQJ2znlGzUbo67c8rocvWxHzvZwFuQEysJp/E9ft5kiWwoU/xVpoK5p9sxW +zRTTdpA24x6rqvk1ZFzwWGSg0yhjOYfwvwg3kGCbwe3GzAk1J65E+uJPFoLySbNL +p3eUDA2rUKDjVobJOEhtV8k/l+hB0kKwiz/A2sbMT/OoByWMNFKSkmDbNi5m5gJH +FHsZsucbL6ppLy7fmOiPlx6xejbiTR3uAn0aQImdHA5kyfAXLKhTkyYdjWHiHqdQ +XMxi0Ci7/HO9mRupbcjRZEPs//ozMxjOAg4VNasDLdnDI4EKrClqYPjsfoXXXiZf +YTPH9QypxJFGmGEH865BNacEjDBeag8ck1ZTiK/GlrAJMqfV5/60GWBGRQVV/Tvd +WXWY2x0gVp2fxtxF8JCvHKAcfUg2+LrUS7fbMx2Niw== -----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/unbound_control.key b/testdata/09-unbound-control.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/09-unbound-control.tdir/unbound_control.key +++ b/testdata/09-unbound-control.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/unbound_control.pem b/testdata/09-unbound-control.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/09-unbound-control.tdir/unbound_control.pem +++ b/testdata/09-unbound-control.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/unbound_server.key b/testdata/09-unbound-control.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/09-unbound-control.tdir/unbound_server.key +++ b/testdata/09-unbound-control.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/unbound_server.pem b/testdata/09-unbound-control.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/09-unbound-control.tdir/unbound_server.pem +++ b/testdata/09-unbound-control.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/10-unbound-anchor.tdir/keys/test_cert.pem b/testdata/10-unbound-anchor.tdir/keys/test_cert.pem index 6e588a4ab..1db9680cb 100644 --- a/testdata/10-unbound-anchor.tdir/keys/test_cert.pem +++ b/testdata/10-unbound-anchor.tdir/keys/test_cert.pem @@ -1,15 +1,15 @@ -----BEGIN CERTIFICATE----- -MIICWTCCAYKgAwIBAgIJAN5YIkuCvJf5MA0GCSqGSIb3DQEBBQUAMCYxDjAMBgNV -BAMTBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0xMzAxMTcxMTUyNDVa -Fw0zMjEwMDQxMTUyNDVaMCYxDjAMBgNVBAMTBXBldGFsMRQwEgYJKoZIhvcNAQkB -FgVwZXRhbDCB3zANBgkqhkiG9w0BAQEFAAOBzQAwgckCgcEAuPBoYZiFOuk2SnN0 -IsheC+W7JvAJcv8tksyz/hgAnqStDnDrQ4trF607aCQ7xjj2fSAqpiMvLv0P3Ctu -rcTRHmRXApS3GBf1PjWqoxMK8JBxCIHN4PKpyq4czOtSPH6AFlU+3KsRRwymLgpT -SE15NYv/2M6Z3/cL1SkOdVvVDrZv1gO4OCAxwrgI6HMsjQtwe16mGsBQzrHTCOGV -u4QtISEUDrwZL272PFsZrEpHXd9LtSpqCEoOMujr54pKxBEJAgMBAAGjDzANMAsG -A1UdDwQEAwIChDANBgkqhkiG9w0BAQUFAAOBwQCaA3ys5hDPMNV1oXIxH6u2KfAX -C9tYJId/SR0x8whsZuNaSEZAgImdM5dnyWdjey8Pio772E9/F2aUBGFkdadZx4My -d7hBfEi/NECEKs86k9g0ijbin41NKtnajb6GwyNQ9vDx7Z5FS8BZ3CD0BZIdCQUE -gKuDSWBROQU3tqrjdk2QTwGQkj2mgzT871Jn1MwZw0mczPjS1y469Ejym8wi3uCd -EboDOoGBCpmUQbxBv6JI75cUCdmNNEwjQjZ0XQw= +MIICZDCCAY2gAwIBAgIURC8vM7SbxPTMmosTyBzLlqxgsUAwDQYJKoZIhvcNAQEF +BQAwJjEOMAwGA1UEAwwFcGV0YWwxFDASBgkqhkiG9w0BCQEWBXBldGFsMB4XDTIw +MDcwODE0MDk0MloXDTQwMDMyNTE0MDk0MlowJjEOMAwGA1UEAwwFcGV0YWwxFDAS +BgkqhkiG9w0BCQEWBXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC4 +8GhhmIU66TZKc3QiyF4L5bsm8Aly/y2SzLP+GACepK0OcOtDi2sXrTtoJDvGOPZ9 +ICqmIy8u/Q/cK26txNEeZFcClLcYF/U+NaqjEwrwkHEIgc3g8qnKrhzM61I8foAW +VT7cqxFHDKYuClNITXk1i//Yzpnf9wvVKQ51W9UOtm/WA7g4IDHCuAjocyyNC3B7 +XqYawFDOsdMI4ZW7hC0hIRQOvBkvbvY8WxmsSkdd30u1KmoISg4y6OvnikrEEQkC +AwEAAaMPMA0wCwYDVR0PBAQDAgKEMA0GCSqGSIb3DQEBBQUAA4HBAHX0rIirg2Rt ++rp7BnR3riq81b0cWm4Y/UUdGmLtbPTJLuZogfLZhb9hf+185ub/8ZbuwuUFaiUY +zEcAjaOlPjBeRbNku1xnAVhlgtCIsCOyI37Ey+65OuJxL+0Rpwsyfh0WuR8SdBE5 +OdJ2DuH2yRkTd2JEsNi+DZVIEeaKwXtLGUvsqYWu0GrnXORwGsezfiLM4uAJW+tp +VA95CKpfS98l1MJIHtlcpffAjfRVZAJnGcXv+P/DtefC8aNukoiqvA== -----END CERTIFICATE----- diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup index 3e5931199..2492f47b4 100755 --- a/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup +++ b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup @@ -46,7 +46,7 @@ CLIENTNAME=unbound-anchor DAYS=7200 # size of keys in bits -BITS=1536 +BITS=3072 # hash algorithm HASH=sha1 diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound_control.key b/testdata/10-unbound-anchor.tdir/keys/unbound_control.key index 47d15dd37..68b514f83 100644 --- a/testdata/10-unbound-anchor.tdir/keys/unbound_control.key +++ b/testdata/10-unbound-anchor.tdir/keys/unbound_control.key @@ -1,21 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound_control.pem b/testdata/10-unbound-anchor.tdir/keys/unbound_control.pem index ec7cd7e78..e7fe79bc3 100644 --- a/testdata/10-unbound-anchor.tdir/keys/unbound_control.pem +++ b/testdata/10-unbound-anchor.tdir/keys/unbound_control.pem @@ -1,14 +1,19 @@ -----BEGIN CERTIFICATE----- -MIICNjCCAV8CCQCbt2WrJa/ewzANBgkqhkiG9w0BAQUFADAmMQ4wDAYDVQQDEwVw -ZXRhbDEUMBIGCSqGSIb3DQEJARYFcGV0YWwwHhcNMTMwMTE3MTE1MjQ1WhcNMzIx -MDA0MTE1MjQ1WjAZMRcwFQYDVQQDEw51bmJvdW5kLWFuY2hvcjCB3zANBgkqhkiG -9w0BAQEFAAOBzQAwgckCgcEAtqdDE1VRH7zqWlpSOqyyhsWh38P+CVMVwsAx0ZJM -gdIZCEkTMfIpgfoqNGmNlHJPc5dAU4D2irRXgNPpbpGZO+ZHjrgEzxWcGwhrPuk8 -eQKDePjcyGlWsuQLjvBNbugFXZnAKgcj/kfdss+X90/d/3ErGM6j2emNcDvbGm7a -5Bk2MJ3zIJ0rbcr5QSIUQ1mxDvq1i9ggotCba56YivLGtsrEAqvWOmYho0/TxFiG -cJMUOsuUyFlbcoraJJ6Q4XmXAgMBAAEwDQYJKoZIhvcNAQEFBQADgcEAhc3wYcbD -Uu9Osbu3bhbxLCkhedq/3weEO8RDU3AyB8diioAikagIOb99UeVE3WIds+JIPD6J -mK5UvS+lPR8SEOMRd0H91bEEp1Zn+gHAS/Z7k/x9t38Xk1N0jOnElc6n4vl42KLO -z2laJWcte7YXjzFjaNxP9fsGgEx1vRxcjtpXQWSY+oj+RVm5kRs5WKX5MCyD/p+y -Xitg7/a0ITKbW1GpVwaX6nPaeoze68m3qmy64l080XCna3igbhi3h2ay +MIIDBTCCAi4CFG36qDt2k02biKtMYGtLy9khnP+eMA0GCSqGSIb3DQEBBQUAMCYx +DjAMBgNVBAMMBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0yMDA3MDgx +NDA5NDJaFw00MDAzMjUxNDA5NDJaMBkxFzAVBgNVBAMMDnVuYm91bmQtYW5jaG9y +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAzDESJ2lpIno7KpSrYBeB +shT8H5dbtNF9rVBONsCmwSSqclLRixZ62OKrUKMVCEpZ0zj4yZOu3DGTfL9V9pEk +3dCD8mFmylidYeLh5GHGMcDVWOzDVPsnQ9y43KWYeURpGy4QSCxYDb5rrPysleSZ +wuN5D4lbs/AKdpubAHj6z37Zbrs2GjofHp6TaD6ck7jyRXDtqShrnsVXq9U1CadY +DOPiE4aZ1TvusRzhhjmDm8GQXalrtIBJ5j5EcmRamFhONGLshfj5ECZrKo9L17kO +d8PyRMaXNfvl2tpx1qtMxmp7FDpboGGIzP7F7hyaWMI/zAzkTMAtjGkAJWqHgTbS +fvlVul23RLvovM3fD/ZiugBuTWY/CRpmN7CQFFV6iFyLGjRp8vV7BojUIQX7is8Q +TxSqW12SsElMXOuUmcCnuIaoGF4nAoG6vNLFECtSdLTjQ0uXawIp7dOww4zS8j1/ +dZzXsVF4G4V7GjeWD8eX7n+HNWoc3ojjuYzbWfWvLIQbAgMBAAEwDQYJKoZIhvcN +AQEFBQADgcEAPz9Iw956A8piiC5y3hJXAEJ0JYdNrpsgdj7n6iAXRU2EY+juzcKU +D+zcNEcebQJJxayr4eEMfUOUO1wH5uPkWBhKOC/qm6T6i/+/xNsksOeHm12G4/vH +VYPXTxMS+K+mz5HLmLcR0kuQMnCK22FFQj86fhr2vHBGHqINR6MxwvLCES37FWvr +qVZSseK6/6IwRgsjN101JUpaSnM88cMDpuUcqQrAbSSBRKDvjYMkcYcYuvchab26 +G0jEU4KgxaOs -----END CERTIFICATE----- diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound_server.key b/testdata/10-unbound-anchor.tdir/keys/unbound_server.key index 6614e498f..370a7bbb2 100644 --- a/testdata/10-unbound-anchor.tdir/keys/unbound_server.key +++ b/testdata/10-unbound-anchor.tdir/keys/unbound_server.key @@ -1,21 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound_server.pem b/testdata/10-unbound-anchor.tdir/keys/unbound_server.pem index 19c8b895b..986807310 100644 --- a/testdata/10-unbound-anchor.tdir/keys/unbound_server.pem +++ b/testdata/10-unbound-anchor.tdir/keys/unbound_server.pem @@ -1,14 +1,22 @@ -----BEGIN CERTIFICATE----- -MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw -ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT -BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd -OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03 -/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8 -67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL -PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG -9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD -ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO -mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV -bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd -q7miNnkO8vd0maw= +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tdir/unbound_control.key b/testdata/ctrl_itr.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/ctrl_itr.tdir/unbound_control.key +++ b/testdata/ctrl_itr.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/unbound_control.pem b/testdata/ctrl_itr.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/ctrl_itr.tdir/unbound_control.pem +++ b/testdata/ctrl_itr.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tdir/unbound_server.key b/testdata/ctrl_itr.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/ctrl_itr.tdir/unbound_server.key +++ b/testdata/ctrl_itr.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/unbound_server.pem b/testdata/ctrl_itr.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/ctrl_itr.tdir/unbound_server.pem +++ b/testdata/ctrl_itr.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tdir/unbound_control.key b/testdata/ctrl_pipe.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/ctrl_pipe.tdir/unbound_control.key +++ b/testdata/ctrl_pipe.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/unbound_control.pem b/testdata/ctrl_pipe.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/ctrl_pipe.tdir/unbound_control.pem +++ b/testdata/ctrl_pipe.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tdir/unbound_server.key b/testdata/ctrl_pipe.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/ctrl_pipe.tdir/unbound_server.key +++ b/testdata/ctrl_pipe.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/unbound_server.pem b/testdata/ctrl_pipe.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/ctrl_pipe.tdir/unbound_server.pem +++ b/testdata/ctrl_pipe.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap.tdir/unbound_control.key b/testdata/dnstap.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap.tdir/unbound_control.key +++ b/testdata/dnstap.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap.tdir/unbound_control.pem b/testdata/dnstap.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap.tdir/unbound_control.pem +++ b/testdata/dnstap.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap.tdir/unbound_server.key b/testdata/dnstap.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap.tdir/unbound_server.key +++ b/testdata/dnstap.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap.tdir/unbound_server.pem b/testdata/dnstap.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap.tdir/unbound_server.pem +++ b/testdata/dnstap.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_control.key b/testdata/dnstap_reconnect.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_reconnect.tdir/unbound_control.key +++ b/testdata/dnstap_reconnect.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_control.pem b/testdata/dnstap_reconnect.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_reconnect.tdir/unbound_control.pem +++ b/testdata/dnstap_reconnect.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_server.key b/testdata/dnstap_reconnect.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_reconnect.tdir/unbound_server.key +++ b/testdata/dnstap_reconnect.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_reconnect.tdir/unbound_server.pem b/testdata/dnstap_reconnect.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_reconnect.tdir/unbound_server.pem +++ b/testdata/dnstap_reconnect.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tcp.tdir/unbound_control.key b/testdata/dnstap_tcp.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tcp.tdir/unbound_control.key +++ b/testdata/dnstap_tcp.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tcp.tdir/unbound_control.pem b/testdata/dnstap_tcp.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tcp.tdir/unbound_control.pem +++ b/testdata/dnstap_tcp.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tcp.tdir/unbound_server.key b/testdata/dnstap_tcp.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tcp.tdir/unbound_server.key +++ b/testdata/dnstap_tcp.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tcp.tdir/unbound_server.pem b/testdata/dnstap_tcp.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tcp.tdir/unbound_server.pem +++ b/testdata/dnstap_tcp.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls.tdir/unbound_control.key b/testdata/dnstap_tls.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tls.tdir/unbound_control.key +++ b/testdata/dnstap_tls.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls.tdir/unbound_control.pem b/testdata/dnstap_tls.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tls.tdir/unbound_control.pem +++ b/testdata/dnstap_tls.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls.tdir/unbound_server.key b/testdata/dnstap_tls.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tls.tdir/unbound_server.key +++ b/testdata/dnstap_tls.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA -3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s -RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB -AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS -6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds -sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi -XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 -fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL -CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP -0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 -oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l -In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S -LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls.tdir/unbound_server.pem b/testdata/dnstap_tls.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tls.tdir/unbound_server.pem +++ b/testdata/dnstap_tls.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_control.key b/testdata/dnstap_tls_badcert.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tls_badcert.tdir/unbound_control.key +++ b/testdata/dnstap_tls_badcert.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_control.pem b/testdata/dnstap_tls_badcert.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tls_badcert.tdir/unbound_control.pem +++ b/testdata/dnstap_tls_badcert.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_server.key b/testdata/dnstap_tls_badcert.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tls_badcert.tdir/unbound_server.key +++ b/testdata/dnstap_tls_badcert.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badcert.tdir/unbound_server.pem b/testdata/dnstap_tls_badcert.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tls_badcert.tdir/unbound_server.pem +++ b/testdata/dnstap_tls_badcert.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_control.key b/testdata/dnstap_tls_badname.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tls_badname.tdir/unbound_control.key +++ b/testdata/dnstap_tls_badname.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_control.pem b/testdata/dnstap_tls_badname.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tls_badname.tdir/unbound_control.pem +++ b/testdata/dnstap_tls_badname.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_server.key b/testdata/dnstap_tls_badname.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tls_badname.tdir/unbound_server.key +++ b/testdata/dnstap_tls_badname.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_badname.tdir/unbound_server.pem b/testdata/dnstap_tls_badname.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tls_badname.tdir/unbound_server.pem +++ b/testdata/dnstap_tls_badname.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_control.key b/testdata/dnstap_tls_clientauth.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tls_clientauth.tdir/unbound_control.key +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa -rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH -ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB -AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z -WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG -DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr -4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m -Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr -p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg -P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ -aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe -YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 -DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA +1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ +F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR +ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm +vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb +IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL +cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr +lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov +15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf +LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ +Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 +YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 +whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c +lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax +tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ +U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 +Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc +Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 +ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ +1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN +b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz +ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C +TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF +tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y +aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 +A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU +LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U +R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy +7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj +7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw +jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 +BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar +kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR +qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 +VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 +MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa +C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem b/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_server.key b/testdata/dnstap_tls_clientauth.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tls_clientauth.tdir/unbound_server.key +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem b/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem +++ b/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_control.key b/testdata/dnstap_tls_peername.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dnstap_tls_peername.tdir/unbound_control.key +++ b/testdata/dnstap_tls_peername.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_control.pem b/testdata/dnstap_tls_peername.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dnstap_tls_peername.tdir/unbound_control.pem +++ b/testdata/dnstap_tls_peername.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_server.key b/testdata/dnstap_tls_peername.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dnstap_tls_peername.tdir/unbound_server.key +++ b/testdata/dnstap_tls_peername.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA -3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s -RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB -AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS -6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds -sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi -XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 -fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL -CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP -0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 -oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l -In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S -LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- diff --git a/testdata/dnstap_tls_peername.tdir/unbound_server.pem b/testdata/dnstap_tls_peername.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dnstap_tls_peername.tdir/unbound_server.pem +++ b/testdata/dnstap_tls_peername.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/dynlibmod.tdir/unbound_control.key b/testdata/dynlibmod.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/dynlibmod.tdir/unbound_control.key +++ b/testdata/dynlibmod.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_control.pem b/testdata/dynlibmod.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/dynlibmod.tdir/unbound_control.pem +++ b/testdata/dynlibmod.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/dynlibmod.tdir/unbound_server.key b/testdata/dynlibmod.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/dynlibmod.tdir/unbound_server.key +++ b/testdata/dynlibmod.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/dynlibmod.tdir/unbound_server.pem b/testdata/dynlibmod.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/dynlibmod.tdir/unbound_server.pem +++ b/testdata/dynlibmod.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/fwd_bogus.tdir/unbound_control.key b/testdata/fwd_bogus.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/fwd_bogus.tdir/unbound_control.key +++ b/testdata/fwd_bogus.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/fwd_bogus.tdir/unbound_control.pem b/testdata/fwd_bogus.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/fwd_bogus.tdir/unbound_control.pem +++ b/testdata/fwd_bogus.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/fwd_bogus.tdir/unbound_server.key b/testdata/fwd_bogus.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/fwd_bogus.tdir/unbound_server.key +++ b/testdata/fwd_bogus.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/fwd_bogus.tdir/unbound_server.pem b/testdata/fwd_bogus.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/fwd_bogus.tdir/unbound_server.pem +++ b/testdata/fwd_bogus.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/remote-threaded.tdir/unbound_control.key b/testdata/remote-threaded.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/remote-threaded.tdir/unbound_control.key +++ b/testdata/remote-threaded.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/remote-threaded.tdir/unbound_control.pem b/testdata/remote-threaded.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/remote-threaded.tdir/unbound_control.pem +++ b/testdata/remote-threaded.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/remote-threaded.tdir/unbound_server.key b/testdata/remote-threaded.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/remote-threaded.tdir/unbound_server.key +++ b/testdata/remote-threaded.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/remote-threaded.tdir/unbound_server.pem b/testdata/remote-threaded.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/remote-threaded.tdir/unbound_server.pem +++ b/testdata/remote-threaded.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/ssl_req_order.tdir/unbound_server.key b/testdata/ssl_req_order.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/ssl_req_order.tdir/unbound_server.key +++ b/testdata/ssl_req_order.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/ssl_req_order.tdir/unbound_server.pem b/testdata/ssl_req_order.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/ssl_req_order.tdir/unbound_server.pem +++ b/testdata/ssl_req_order.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/ssl_req_timeout.tdir/unbound_server.key b/testdata/ssl_req_timeout.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/ssl_req_timeout.tdir/unbound_server.key +++ b/testdata/ssl_req_timeout.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA -3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s -RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB -AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS -6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds -sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi -XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 -fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL -CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP -0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 -oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l -In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S -LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- diff --git a/testdata/ssl_req_timeout.tdir/unbound_server.pem b/testdata/ssl_req_timeout.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/ssl_req_timeout.tdir/unbound_server.pem +++ b/testdata/ssl_req_timeout.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/testdata/stream_ssl.tdir/unbound_control.key b/testdata/stream_ssl.tdir/unbound_control.key index d7c43a06b..753a4ef61 100644 --- a/testdata/stream_ssl.tdir/unbound_control.key +++ b/testdata/stream_ssl.tdir/unbound_control.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/stream_ssl.tdir/unbound_control.pem b/testdata/stream_ssl.tdir/unbound_control.pem index 8f1ba87f1..a1edf7017 100644 --- a/testdata/stream_ssl.tdir/unbound_control.pem +++ b/testdata/stream_ssl.tdir/unbound_control.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE -AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD -6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 -qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US -J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB -BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B -9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC -iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw +WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA +A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv +OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj +1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl +NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht +A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ +Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB +TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ +nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My ++i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj +4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 +hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU +9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn +ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ +pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD +72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ +muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP +uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- diff --git a/testdata/stream_ssl.tdir/unbound_server.key b/testdata/stream_ssl.tdir/unbound_server.key index 4256c421d..370a7bbb2 100644 --- a/testdata/stream_ssl.tdir/unbound_server.key +++ b/testdata/stream_ssl.tdir/unbound_server.key @@ -1,15 +1,39 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/testdata/stream_ssl.tdir/unbound_server.pem b/testdata/stream_ssl.tdir/unbound_server.pem index aeda3ff11..986807310 100644 --- a/testdata/stream_ssl.tdir/unbound_server.pem +++ b/testdata/stream_ssl.tdir/unbound_server.pem @@ -1,11 +1,22 @@ -----BEGIN CERTIFICATE----- -MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 -bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE -AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS -y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ -/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu -g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ -9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG -l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH -Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- diff --git a/util/net_help.c b/util/net_help.c index e287f90aa..a00fe2e2f 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -55,6 +55,9 @@ #ifdef HAVE_OPENSSL_ERR_H #include #endif +#ifdef HAVE_OPENSSL_CORE_NAMES_H +#include +#endif #ifdef USE_WINSOCK #include #endif @@ -79,6 +82,30 @@ static struct tls_session_ticket_key { unsigned char *hmac_key; } *ticket_keys; +/** + * callback TLS session ticket encrypt and decrypt + * For use with SSL_CTX_set_tlsext_ticket_key_cb or + * SSL_CTX_set_tlsext_ticket_key_evp_cb + * @param s: the SSL_CTX to use (from connect_sslctx_create()) + * @param key_name: secret name, 16 bytes + * @param iv: up to EVP_MAX_IV_LENGTH. + * @param evp_ctx: the evp cipher context, function sets this. + * @param hmac_ctx: the hmac context, function sets this. + * with ..key_cb it is of type HMAC_CTX* + * with ..key_evp_cb it is of type EVP_MAC_CTX* + * @param enc: 1 is encrypt, 0 is decrypt + * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket + * (the ticket is decrypt only). and <0 for failures. + */ +int tls_session_ticket_key_cb(SSL *s, unsigned char* key_name, + unsigned char* iv, EVP_CIPHER_CTX *evp_ctx, +#ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + EVP_MAC_CTX *hmac_ctx, +#else + HMAC_CTX* hmac_ctx, +#endif + int enc); + /* returns true is string addr is an ip6 specced address */ int str_is_ip6(const char* str) @@ -1387,10 +1414,17 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses } /* terminate array with NULL key name entry */ keys->key_name = NULL; +# ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + if(SSL_CTX_set_tlsext_ticket_key_evp_cb(sslctx, tls_session_ticket_key_cb) == 0) { + log_err("no support for TLS session ticket"); + return 0; + } +# else if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { log_err("no support for TLS session ticket"); return 0; } +# endif return 1; #else (void)sslctx; @@ -1400,13 +1434,26 @@ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_ses } -int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name, unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc) +int tls_session_ticket_key_cb(SSL *ATTR_UNUSED(sslctx), unsigned char* key_name, + unsigned char* iv, EVP_CIPHER_CTX *evp_sctx, +#ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + EVP_MAC_CTX *hmac_ctx, +#else + HMAC_CTX* hmac_ctx, +#endif + int enc) { #ifdef HAVE_SSL +# ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + OSSL_PARAM params[3]; +# else const EVP_MD *digest; +# endif const EVP_CIPHER *cipher; int evp_cipher_length; +# ifndef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB digest = EVP_sha256(); +# endif cipher = EVP_aes_256_cbc(); evp_cipher_length = EVP_CIPHER_iv_length(cipher); if( enc == 1 ) { @@ -1421,7 +1468,14 @@ int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed"); return -1; } -#ifndef HMAC_INIT_EX_RETURNS_VOID +#ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + params[0] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, + ticket_keys->hmac_key, 32); + params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, + "sha256", 0); + params[2] = OSSL_PARAM_construct_end(); + EVP_MAC_set_ctx_params(hmac_ctx, params); +#elif !defined(HMAC_INIT_EX_RETURNS_VOID) if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); return -1; @@ -1445,7 +1499,14 @@ int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name return 0; } -#ifndef HMAC_INIT_EX_RETURNS_VOID +#ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB + params[0] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, + key->hmac_key, 32); + params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, + "sha256", 0); + params[2] = OSSL_PARAM_construct_end(); + EVP_MAC_set_ctx_params(hmac_ctx, params); +#elif !defined(HMAC_INIT_EX_RETURNS_VOID) if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); return -1; diff --git a/util/net_help.h b/util/net_help.h index c1bb13923..29943ada0 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -478,20 +478,6 @@ void ub_openssl_lock_delete(void); int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys); -/** - * callback TLS session ticket encrypt and decrypt - * For use with SSL_CTX_set_tlsext_ticket_key_cb - * @param s: the SSL_CTX to use (from connect_sslctx_create()) - * @param key_name: secret name, 16 bytes - * @param iv: up to EVP_MAX_IV_LENGTH. - * @param evp_ctx: the evp cipher context, function sets this. - * @param hmac_ctx: the hmax context, function sets this. - * @param enc: 1 is encrypt, 0 is decrypt - * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket - * (the ticket is decrypt only). and <0 for failures. - */ -int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv, void *evp_ctx, void *hmac_ctx, int enc); - /** Free memory used for TLS session ticket keys */ void listen_sslctx_delete_ticket_keys(void);