diff --git a/Makefile.in b/Makefile.in index a62aaaf427f1..4bdb7059dc0b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -858,10 +858,11 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \ $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \ - $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h $(PYTHONMOD_HEADER) \ - $(srcdir)/cachedb/cachedb.h $(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)/util/alloc.h $(srcdir)/libunbound/unbound.h $(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)/cachedb/cachedb.h $(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 locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/testcode/checklocks.h \ @@ -1257,8 +1258,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/respip/respip.h \ - $(srcdir)/libunbound/context.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/util/shm_side/shm_main.h + $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ @@ -1291,8 +1292,8 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/services/localzone.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/respip/respip.h \ - $(srcdir)/libunbound/context.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/util/shm_side/shm_main.h + $(srcdir)/libunbound/context.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h \ + $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ @@ -1375,22 +1376,22 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c $(PYTHONMOD_HEADER) $(srcdir)/edns-subnet/subnet-whitelist.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h \ + $(srcdir)/sldns/sbuffer.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/dnscrypt/cert.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ - $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h \ - $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/sldns/sbuffer.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ @@ -1407,7 +1408,7 @@ libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/libunbound/unbound-event.h \ + $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/dnscrypt/cert.h \ $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ @@ -1419,11 +1420,14 @@ libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h + $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ + asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/testcode/checklocks.h \ - $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/data/packed_rrset.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h + $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \ + streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ diff --git a/configure b/configure index 3f38929d8fd8..7163bb967733 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.7.2. +# Generated by GNU Autoconf 2.69 for unbound 1.7.3. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.7.2' -PACKAGE_STRING='unbound 1.7.2' +PACKAGE_VERSION='1.7.3' +PACKAGE_STRING='unbound 1.7.3' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1440,7 +1440,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.7.2 to adapt to many kinds of systems. +\`configure' configures unbound 1.7.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1505,7 +1505,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.7.2:";; + short | recursive ) echo "Configuration of unbound 1.7.3:";; esac cat <<\_ACEOF @@ -1722,7 +1722,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.7.2 +unbound configure 1.7.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2431,7 +2431,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.7.2, which was +It was created by unbound $as_me 1.7.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2783,11 +2783,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=7 -UNBOUND_VERSION_MICRO=2 +UNBOUND_VERSION_MICRO=3 LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=10 +LIBUNBOUND_REVISION=11 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2849,6 +2849,7 @@ LIBUNBOUND_AGE=5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 # 1.7.2 had 7:10:5 +# 1.7.3 had 7:11:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -19762,7 +19763,7 @@ done # check if setreuid en setregid fail, on MacOSX10.4(darwin8). -if echo $build_os | grep darwin8 > /dev/null; then +if echo $target_os | grep darwin8 > /dev/null; then $as_echo "#define DARWIN_BROKEN_SETREUID 1" >>confdefs.h @@ -21044,7 +21045,7 @@ _ACEOF -version=1.7.2 +version=1.7.3 date=`date +'%b %e, %Y'` @@ -21563,7 +21564,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.7.2, which was +This file was extended by unbound $as_me 1.7.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21629,7 +21630,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.7.2 +unbound config.status 1.7.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index b4c484ec976f..80fed29a7bc9 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],[7]) -m4_define([VERSION_MICRO],[2]) +m4_define([VERSION_MICRO],[3]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=10 +LIBUNBOUND_REVISION=11 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -80,6 +80,7 @@ LIBUNBOUND_AGE=5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 # 1.7.2 had 7:10:5 +# 1.7.3 had 7:11:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -1324,7 +1325,7 @@ AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) # check if setreuid en setregid fail, on MacOSX10.4(darwin8). -if echo $build_os | grep darwin8 > /dev/null; then +if echo $target_os | grep darwin8 > /dev/null; then AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work]) fi AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [ diff --git a/daemon/cachedump.c b/daemon/cachedump.c index 81061870b581..5a72e9d1106f 100644 --- a/daemon/cachedump.c +++ b/daemon/cachedump.c @@ -62,7 +62,7 @@ /** dump one rrset zonefile line */ static int -dump_rrset_line(SSL* ssl, struct ub_packed_rrset_key* k, time_t now, size_t i) +dump_rrset_line(RES* ssl, struct ub_packed_rrset_key* k, time_t now, size_t i) { char s[65535]; if(!packed_rr_to_string(k, i, now, s, sizeof(s))) { @@ -73,7 +73,7 @@ dump_rrset_line(SSL* ssl, struct ub_packed_rrset_key* k, time_t now, size_t i) /** dump rrset key and data info */ static int -dump_rrset(SSL* ssl, struct ub_packed_rrset_key* k, +dump_rrset(RES* ssl, struct ub_packed_rrset_key* k, struct packed_rrset_data* d, time_t now) { size_t i; @@ -99,7 +99,7 @@ dump_rrset(SSL* ssl, struct ub_packed_rrset_key* k, /** dump lruhash rrset cache */ static int -dump_rrset_lruhash(SSL* ssl, struct lruhash* h, time_t now) +dump_rrset_lruhash(RES* ssl, struct lruhash* h, time_t now) { struct lruhash_entry* e; /* lruhash already locked by caller */ @@ -118,7 +118,7 @@ dump_rrset_lruhash(SSL* ssl, struct lruhash* h, time_t now) /** dump rrset cache */ static int -dump_rrset_cache(SSL* ssl, struct worker* worker) +dump_rrset_cache(RES* ssl, struct worker* worker) { struct rrset_cache* r = worker->env.rrset_cache; size_t slab; @@ -137,7 +137,7 @@ dump_rrset_cache(SSL* ssl, struct worker* worker) /** dump message to rrset reference */ static int -dump_msg_ref(SSL* ssl, struct ub_packed_rrset_key* k) +dump_msg_ref(RES* ssl, struct ub_packed_rrset_key* k) { char* nm, *tp, *cl; nm = sldns_wire2str_dname(k->rk.dname, k->rk.dname_len); @@ -164,7 +164,7 @@ dump_msg_ref(SSL* ssl, struct ub_packed_rrset_key* k) /** dump message entry */ static int -dump_msg(SSL* ssl, struct query_info* k, struct reply_info* d, +dump_msg(RES* ssl, struct query_info* k, struct reply_info* d, time_t now) { size_t i; @@ -246,7 +246,7 @@ copy_msg(struct regional* region, struct lruhash_entry* e, /** dump lruhash msg cache */ static int -dump_msg_lruhash(SSL* ssl, struct worker* worker, struct lruhash* h) +dump_msg_lruhash(RES* ssl, struct worker* worker, struct lruhash* h) { struct lruhash_entry* e; struct query_info* k; @@ -274,7 +274,7 @@ dump_msg_lruhash(SSL* ssl, struct worker* worker, struct lruhash* h) /** dump msg cache */ static int -dump_msg_cache(SSL* ssl, struct worker* worker) +dump_msg_cache(RES* ssl, struct worker* worker) { struct slabhash* sh = worker->env.msg_cache; size_t slab; @@ -291,7 +291,7 @@ dump_msg_cache(SSL* ssl, struct worker* worker) } int -dump_cache(SSL* ssl, struct worker* worker) +dump_cache(RES* ssl, struct worker* worker) { if(!dump_rrset_cache(ssl, worker)) return 0; @@ -302,7 +302,7 @@ dump_cache(SSL* ssl, struct worker* worker) /** read a line from ssl into buffer */ static int -ssl_read_buf(SSL* ssl, sldns_buffer* buf) +ssl_read_buf(RES* ssl, sldns_buffer* buf) { return ssl_read_line(ssl, (char*)sldns_buffer_begin(buf), sldns_buffer_capacity(buf)); @@ -310,7 +310,7 @@ ssl_read_buf(SSL* ssl, sldns_buffer* buf) /** check fixed text on line */ static int -read_fixed(SSL* ssl, sldns_buffer* buf, const char* str) +read_fixed(RES* ssl, sldns_buffer* buf, const char* str) { if(!ssl_read_buf(ssl, buf)) return 0; return (strcmp((char*)sldns_buffer_begin(buf), str) == 0); @@ -318,7 +318,7 @@ read_fixed(SSL* ssl, sldns_buffer* buf, const char* str) /** load an RR into rrset */ static int -load_rr(SSL* ssl, sldns_buffer* buf, struct regional* region, +load_rr(RES* ssl, sldns_buffer* buf, struct regional* region, struct ub_packed_rrset_key* rk, struct packed_rrset_data* d, unsigned int i, int is_rrsig, int* go_on, time_t now) { @@ -435,7 +435,7 @@ move_into_cache(struct ub_packed_rrset_key* k, /** load an rrset entry */ static int -load_rrset(SSL* ssl, sldns_buffer* buf, struct worker* worker) +load_rrset(RES* ssl, sldns_buffer* buf, struct worker* worker) { char* s = (char*)sldns_buffer_begin(buf); struct regional* region = worker->scratchpad; @@ -519,7 +519,7 @@ load_rrset(SSL* ssl, sldns_buffer* buf, struct worker* worker) /** load rrset cache */ static int -load_rrset_cache(SSL* ssl, struct worker* worker) +load_rrset_cache(RES* ssl, struct worker* worker) { sldns_buffer* buf = worker->env.scratch_buffer; if(!read_fixed(ssl, buf, "START_RRSET_CACHE")) return 0; @@ -575,7 +575,7 @@ load_qinfo(char* str, struct query_info* qinfo, struct regional* region) /** load a msg rrset reference */ static int -load_ref(SSL* ssl, sldns_buffer* buf, struct worker* worker, +load_ref(RES* ssl, sldns_buffer* buf, struct worker* worker, struct regional *region, struct ub_packed_rrset_key** rrset, int* go_on) { @@ -620,7 +620,7 @@ load_ref(SSL* ssl, sldns_buffer* buf, struct worker* worker, /** load a msg entry */ static int -load_msg(SSL* ssl, sldns_buffer* buf, struct worker* worker) +load_msg(RES* ssl, sldns_buffer* buf, struct worker* worker) { struct regional* region = worker->scratchpad; struct query_info qinf; @@ -685,7 +685,7 @@ load_msg(SSL* ssl, sldns_buffer* buf, struct worker* worker) /** load msg cache */ static int -load_msg_cache(SSL* ssl, struct worker* worker) +load_msg_cache(RES* ssl, struct worker* worker) { sldns_buffer* buf = worker->env.scratch_buffer; if(!read_fixed(ssl, buf, "START_MSG_CACHE")) return 0; @@ -698,7 +698,7 @@ load_msg_cache(SSL* ssl, struct worker* worker) } int -load_cache(SSL* ssl, struct worker* worker) +load_cache(RES* ssl, struct worker* worker) { if(!load_rrset_cache(ssl, worker)) return 0; @@ -709,7 +709,7 @@ load_cache(SSL* ssl, struct worker* worker) /** print details on a delegation point */ static void -print_dp_details(SSL* ssl, struct worker* worker, struct delegpt* dp) +print_dp_details(RES* ssl, struct worker* worker, struct delegpt* dp) { char buf[257]; struct delegpt_addr* a; @@ -785,7 +785,7 @@ print_dp_details(SSL* ssl, struct worker* worker, struct delegpt* dp) /** print main dp info */ static void -print_dp_main(SSL* ssl, struct delegpt* dp, struct dns_msg* msg) +print_dp_main(RES* ssl, struct delegpt* dp, struct dns_msg* msg) { size_t i, n_ns, n_miss, n_addr, n_res, n_avail; @@ -813,7 +813,7 @@ print_dp_main(SSL* ssl, struct delegpt* dp, struct dns_msg* msg) return; } -int print_deleg_lookup(SSL* ssl, struct worker* worker, uint8_t* nm, +int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm, size_t nmlen, int ATTR_UNUSED(nmlabs)) { /* deep links into the iterator module */ diff --git a/daemon/cachedump.h b/daemon/cachedump.h index 0f2feabcb7f4..72c172d4414e 100644 --- a/daemon/cachedump.h +++ b/daemon/cachedump.h @@ -72,6 +72,7 @@ #ifndef DAEMON_DUMPCACHE_H #define DAEMON_DUMPCACHE_H struct worker; +#include "daemon/remote.h" /** * Dump cache(s) to text @@ -80,7 +81,7 @@ struct worker; * ptrs to the caches. * @return false on ssl print error. */ -int dump_cache(SSL* ssl, struct worker* worker); +int dump_cache(RES* ssl, struct worker* worker); /** * Load cache(s) from text @@ -89,7 +90,7 @@ int dump_cache(SSL* ssl, struct worker* worker); * ptrs to the caches. * @return false on ssl error. */ -int load_cache(SSL* ssl, struct worker* worker); +int load_cache(RES* ssl, struct worker* worker); /** * Print the delegation used to lookup for this name. @@ -101,7 +102,7 @@ int load_cache(SSL* ssl, struct worker* worker); * @param nmlabs: labels in name. * @return false on ssl error. */ -int print_deleg_lookup(SSL* ssl, struct worker* worker, uint8_t* nm, +int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm, size_t nmlen, int nmlabs); #endif /* DAEMON_DUMPCACHE_H */ diff --git a/daemon/remote.c b/daemon/remote.c index cfc91eb98b3a..011c55e659f2 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -142,130 +142,20 @@ timeval_divide(struct timeval* avg, const struct timeval* sum, long long d) #endif } -/* - * The following function was generated using the openssl utility, using - * the command : "openssl dhparam -C 2048" - * (some openssl versions reject DH that is 'too small', eg. 512). - */ -#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL) -#ifndef S_SPLINT_S -static DH *get_dh2048(void) -{ - static unsigned char dh2048_p[]={ - 0xE7,0x36,0x28,0x3B,0xE4,0xC3,0x32,0x1C,0x01,0xC3,0x67,0xD6, - 0xF5,0xF3,0xDA,0xDC,0x71,0xC0,0x42,0x8B,0xE6,0xEB,0x8D,0x80, - 0x35,0x7F,0x09,0x45,0x30,0xE5,0xB2,0x92,0x81,0x3F,0x08,0xCD, - 0x36,0x5E,0x19,0x83,0x62,0xCC,0xAE,0x9B,0x81,0x66,0x24,0xEE, - 0x16,0x6F,0xA9,0x9E,0xF4,0x82,0x1B,0xDD,0x46,0xC7,0x33,0x5D, - 0xF4,0xCA,0xE6,0x8F,0xFC,0xD4,0xD8,0x58,0x94,0x24,0x5D,0xFF, - 0x0A,0xE8,0xEF,0x3D,0xCE,0xBB,0x50,0x94,0xE0,0x5F,0xE8,0x41, - 0xC3,0x35,0x30,0x37,0xD5,0xCB,0x8F,0x3D,0x95,0x15,0x1A,0x77, - 0x42,0xB2,0x06,0x86,0xF6,0x09,0x66,0x0E,0x9A,0x25,0x94,0x3E, - 0xD2,0x04,0x25,0x25,0x1D,0x23,0xEB,0xDC,0x4D,0x0C,0x83,0x28, - 0x2E,0x15,0x81,0x2D,0xC1,0xAF,0x8D,0x36,0x64,0xE3,0x9A,0x83, - 0x78,0xC2,0x8D,0xC0,0x9D,0xD9,0x3A,0x1C,0xC5,0x2B,0x50,0x68, - 0x07,0xA9,0x4B,0x8C,0x07,0x57,0xD6,0x15,0x03,0x4E,0x9E,0x01, - 0xF2,0x6F,0x35,0xAC,0x26,0x9C,0x92,0x68,0x61,0x13,0xFB,0x01, - 0xBA,0x22,0x36,0x01,0x55,0xB6,0x62,0xD9,0xB2,0x98,0xCE,0x5D, - 0x4B,0xA5,0x41,0xD6,0xE5,0x70,0x78,0x12,0x1F,0x64,0xB6,0x6F, - 0xB0,0x91,0x51,0x91,0x92,0xC0,0x94,0x3A,0xD1,0x28,0x4D,0x30, - 0x84,0x3E,0xE4,0xE4,0x7F,0x47,0x89,0xB1,0xB6,0x8C,0x8E,0x0E, - 0x26,0xDB,0xCD,0x17,0x07,0x2A,0x21,0x7A,0xCC,0x68,0xE8,0x57, - 0x94,0x9E,0x59,0x61,0xEC,0x20,0x34,0x26,0x0D,0x66,0x44,0xEB, - 0x6F,0x02,0x58,0xE2,0xED,0xF6,0xF3,0x1B,0xBF,0x9E,0x45,0x52, - 0x5A,0x49,0xA1,0x5B, - }; - static unsigned char dh2048_g[]={ - 0x02, - }; - DH *dh = NULL; - BIGNUM *p = NULL, *g = NULL; - - dh = DH_new(); - p = BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL); - g = BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL); - if (!dh || !p || !g) - goto err; - -#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL) - dh->p = p; - dh->g = g; -#else - if (!DH_set0_pqg(dh, p, NULL, g)) - goto err; -#endif - return dh; -err: - if (p) - BN_free(p); - if (g) - BN_free(g); - if (dh) - DH_free(dh); - return NULL; -} -#endif /* SPLINT */ -#endif /* OPENSSL_VERSION_NUMBER < 0x10100000 */ - -struct daemon_remote* -daemon_remote_create(struct config_file* cfg) +static int +remote_setup_ctx(struct daemon_remote* rc, struct config_file* cfg) { char* s_cert; char* s_key; - struct daemon_remote* rc = (struct daemon_remote*)calloc(1, - sizeof(*rc)); - if(!rc) { - log_err("out of memory in daemon_remote_create"); - return NULL; - } - rc->max_active = 10; - - if(!cfg->remote_control_enable) { - rc->ctx = NULL; - return rc; - } rc->ctx = SSL_CTX_new(SSLv23_server_method()); if(!rc->ctx) { log_crypto_err("could not SSL_CTX_new"); - free(rc); - return NULL; + return 0; } if(!listen_sslctx_setup(rc->ctx)) { - daemon_remote_delete(rc); - return NULL; + return 0; } - if (cfg->remote_control_use_cert == 0) { - /* No certificates are requested */ -#if defined(SSL_OP_NO_TLSv1_3) - /* in openssl 1.1.1, negotiation code for tls 1.3 does - * not allow the unauthenticated aNULL and eNULL ciphers */ - SSL_CTX_set_options(rc->ctx, SSL_OP_NO_TLSv1_3); -#endif -#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL - SSL_CTX_set_security_level(rc->ctx, 0); -#endif - if(!SSL_CTX_set_cipher_list(rc->ctx, "aNULL:eNULL")) { - log_crypto_err("Failed to set aNULL cipher list"); - daemon_remote_delete(rc); - return NULL; - } - - /* in openssl 1.1, the securitylevel 0 allows eNULL, that - * does not need the DH */ -#if OPENSSL_VERSION_NUMBER < 0x10100000 || defined(HAVE_LIBRESSL) - /* Since we have no certificates and hence no source of - * DH params, let's generate and set them - */ - if(!SSL_CTX_set_tmp_dh(rc->ctx,get_dh2048())) { - log_crypto_err("Wanted to set DH param, but failed"); - daemon_remote_delete(rc); - return NULL; - } -#endif - return rc; - } - rc->use_cert = 1; s_cert = fname_after_chroot(cfg->server_cert_file, cfg, 1); s_key = fname_after_chroot(cfg->server_key_file, cfg, 1); if(!s_cert || !s_key) { @@ -294,14 +184,46 @@ daemon_remote_create(struct config_file* cfg) setup_error: free(s_cert); free(s_key); - daemon_remote_delete(rc); - return NULL; + return 0; } SSL_CTX_set_client_CA_list(rc->ctx, SSL_load_client_CA_file(s_cert)); SSL_CTX_set_verify(rc->ctx, SSL_VERIFY_PEER, NULL); free(s_cert); free(s_key); + return 1; +} +struct daemon_remote* +daemon_remote_create(struct config_file* cfg) +{ + struct daemon_remote* rc = (struct daemon_remote*)calloc(1, + sizeof(*rc)); + if(!rc) { + log_err("out of memory in daemon_remote_create"); + return NULL; + } + rc->max_active = 10; + + if(!cfg->remote_control_enable) { + rc->ctx = NULL; + return rc; + } + if(options_remote_is_address(cfg) && cfg->control_use_cert) { + if(!remote_setup_ctx(rc, cfg)) { + daemon_remote_delete(rc); + return NULL; + } + rc->use_cert = 1; + } else { + struct config_strlist* p; + rc->ctx = NULL; + rc->use_cert = 0; + if(!options_remote_is_address(cfg)) + for(p = cfg->control_ifs.first; p; p = p->next) { + if(p->str && p->str[0] != '/') + log_warn("control-interface %s is not using TLS, but plain transfer, because first control-interface in config file is a local socket (starts with a /).", p->str); + } + } return rc; } @@ -442,9 +364,9 @@ struct listen_port* daemon_remote_open_ports(struct config_file* cfg) { struct listen_port* l = NULL; log_assert(cfg->remote_control_enable && cfg->control_port); - if(cfg->control_ifs) { + if(cfg->control_ifs.first) { struct config_strlist* p; - for(p = cfg->control_ifs; p; p = p->next) { + for(p = cfg->control_ifs.first; p; p = p->next) { if(!add_open(p->str, cfg->control_port, &l, 1, cfg)) { listening_ports_free(l); return NULL; @@ -551,6 +473,7 @@ int remote_accept_callback(struct comm_point* c, void* arg, int err, log_err("out of memory"); goto close_exit; } + n->fd = newfd; /* start in reading state */ n->c = comm_point_create_raw(rc->worker->base, newfd, 0, &remote_control_callback, n); @@ -565,22 +488,26 @@ int remote_accept_callback(struct comm_point* c, void* arg, int err, comm_point_start_listening(n->c, -1, REMOTE_CONTROL_TCP_TIMEOUT); memcpy(&n->c->repinfo.addr, &addr, addrlen); n->c->repinfo.addrlen = addrlen; - n->shake_state = rc_hs_read; - n->ssl = SSL_new(rc->ctx); - if(!n->ssl) { - log_crypto_err("could not SSL_new"); - comm_point_delete(n->c); - free(n); - goto close_exit; - } - SSL_set_accept_state(n->ssl); - (void)SSL_set_mode(n->ssl, SSL_MODE_AUTO_RETRY); - if(!SSL_set_fd(n->ssl, newfd)) { - log_crypto_err("could not SSL_set_fd"); - SSL_free(n->ssl); - comm_point_delete(n->c); - free(n); - goto close_exit; + if(rc->use_cert) { + n->shake_state = rc_hs_read; + n->ssl = SSL_new(rc->ctx); + if(!n->ssl) { + log_crypto_err("could not SSL_new"); + comm_point_delete(n->c); + free(n); + goto close_exit; + } + SSL_set_accept_state(n->ssl); + (void)SSL_set_mode(n->ssl, SSL_MODE_AUTO_RETRY); + if(!SSL_set_fd(n->ssl, newfd)) { + log_crypto_err("could not SSL_set_fd"); + SSL_free(n->ssl); + comm_point_delete(n->c); + free(n); + goto close_exit; + } + } else { + n->ssl = NULL; } n->rc = rc; @@ -622,27 +549,45 @@ clean_point(struct daemon_remote* rc, struct rc_state* s) } int -ssl_print_text(SSL* ssl, const char* text) +ssl_print_text(RES* res, const char* text) { int r; - if(!ssl) + if(!res) return 0; - ERR_clear_error(); - if((r=SSL_write(ssl, text, (int)strlen(text))) <= 0) { - if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { - verbose(VERB_QUERY, "warning, in SSL_write, peer " - "closed connection"); + if(res->ssl) { + ERR_clear_error(); + if((r=SSL_write(res->ssl, text, (int)strlen(text))) <= 0) { + if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { + verbose(VERB_QUERY, "warning, in SSL_write, peer " + "closed connection"); + return 0; + } + log_crypto_err("could not SSL_write"); return 0; } - log_crypto_err("could not SSL_write"); - return 0; + } else { + size_t at = 0; + while(at < strlen(text)) { + ssize_t r = send(res->fd, text+at, strlen(text)-at, 0); + if(r == -1) { + if(errno == EAGAIN || errno == EINTR) + continue; +#ifndef USE_WINSOCK + log_err("could not send: %s", strerror(errno)); +#else + log_err("could not send: %s", wsa_strerror(WSAGetLastError())); +#endif + return 0; + } + at += r; + } } return 1; } /** print text over the ssl connection */ static int -ssl_print_vmsg(SSL* ssl, const char* format, va_list args) +ssl_print_vmsg(RES* ssl, const char* format, va_list args) { char msg[1024]; vsnprintf(msg, sizeof(msg), format, args); @@ -650,7 +595,7 @@ ssl_print_vmsg(SSL* ssl, const char* format, va_list args) } /** printf style printing to the ssl connection */ -int ssl_printf(SSL* ssl, const char* format, ...) +int ssl_printf(RES* ssl, const char* format, ...) { va_list args; int ret; @@ -661,21 +606,42 @@ int ssl_printf(SSL* ssl, const char* format, ...) } int -ssl_read_line(SSL* ssl, char* buf, size_t max) +ssl_read_line(RES* res, char* buf, size_t max) { int r; size_t len = 0; - if(!ssl) + if(!res) return 0; while(len < max) { - ERR_clear_error(); - if((r=SSL_read(ssl, buf+len, 1)) <= 0) { - if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { - buf[len] = 0; - return 1; + if(res->ssl) { + ERR_clear_error(); + if((r=SSL_read(res->ssl, buf+len, 1)) <= 0) { + if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { + buf[len] = 0; + return 1; + } + log_crypto_err("could not SSL_read"); + return 0; + } + } else { + while(1) { + ssize_t rr = recv(res->fd, buf+len, 1, 0); + if(rr <= 0) { + if(rr == 0) { + buf[len] = 0; + return 1; + } + if(errno == EINTR || errno == EAGAIN) + continue; +#ifndef USE_WINSOCK + log_err("could not recv: %s", strerror(errno)); +#else + log_err("could not recv: %s", wsa_strerror(WSAGetLastError())); +#endif + return 0; + } + break; } - log_crypto_err("could not SSL_read"); - return 0; } if(buf[len] == '\n') { /* return string without \n */ @@ -700,14 +666,14 @@ skipwhite(char* str) } /** send the OK to the control client */ -static void send_ok(SSL* ssl) +static void send_ok(RES* ssl) { (void)ssl_printf(ssl, "ok\n"); } /** do the stop command */ static void -do_stop(SSL* ssl, struct daemon_remote* rc) +do_stop(RES* ssl, struct daemon_remote* rc) { rc->worker->need_to_exit = 1; comm_base_exit(rc->worker->base); @@ -716,7 +682,7 @@ do_stop(SSL* ssl, struct daemon_remote* rc) /** do the reload command */ static void -do_reload(SSL* ssl, struct daemon_remote* rc) +do_reload(RES* ssl, struct daemon_remote* rc) { rc->worker->need_to_exit = 0; comm_base_exit(rc->worker->base); @@ -725,7 +691,7 @@ do_reload(SSL* ssl, struct daemon_remote* rc) /** do the verbosity command */ static void -do_verbosity(SSL* ssl, char* str) +do_verbosity(RES* ssl, char* str) { int val = atoi(str); if(val == 0 && strcmp(str, "0") != 0) { @@ -738,7 +704,7 @@ do_verbosity(SSL* ssl, char* str) /** print stats from statinfo */ static int -print_stats(SSL* ssl, const char* nm, struct ub_stats_info* s) +print_stats(RES* ssl, const char* nm, struct ub_stats_info* s) { struct timeval sumwait, avg; if(!ssl_printf(ssl, "%s.num.queries"SQ"%lu\n", nm, @@ -797,7 +763,7 @@ print_stats(SSL* ssl, const char* nm, struct ub_stats_info* s) /** print stats for one thread */ static int -print_thread_stats(SSL* ssl, int i, struct ub_stats_info* s) +print_thread_stats(RES* ssl, int i, struct ub_stats_info* s) { char nm[32]; snprintf(nm, sizeof(nm), "thread%d", i); @@ -807,7 +773,7 @@ print_thread_stats(SSL* ssl, int i, struct ub_stats_info* s) /** print long number */ static int -print_longnum(SSL* ssl, const char* desc, size_t x) +print_longnum(RES* ssl, const char* desc, size_t x) { if(x > 1024*1024*1024) { /* more than a Gb */ @@ -822,7 +788,7 @@ print_longnum(SSL* ssl, const char* desc, size_t x) /** print mem stats */ static int -print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) +print_mem(RES* ssl, struct worker* worker, struct daemon* daemon) { size_t msg, rrset, val, iter, respip; #ifdef CLIENT_SUBNET @@ -885,7 +851,7 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) /** print uptime stats */ static int -print_uptime(SSL* ssl, struct worker* worker, int reset) +print_uptime(RES* ssl, struct worker* worker, int reset) { struct timeval now = *worker->env.now_tv; struct timeval up, dt; @@ -904,7 +870,7 @@ print_uptime(SSL* ssl, struct worker* worker, int reset) /** print extended histogram */ static int -print_hist(SSL* ssl, struct ub_stats_info* s) +print_hist(RES* ssl, struct ub_stats_info* s) { struct timehist* hist; size_t i; @@ -932,7 +898,7 @@ print_hist(SSL* ssl, struct ub_stats_info* s) /** print extended stats */ static int -print_ext(SSL* ssl, struct ub_stats_info* s) +print_ext(RES* ssl, struct ub_stats_info* s) { int i; char nm[16]; @@ -1089,7 +1055,7 @@ print_ext(SSL* ssl, struct ub_stats_info* s) /** do the stats command */ static void -do_stats(SSL* ssl, struct daemon_remote* rc, int reset) +do_stats(RES* ssl, struct daemon_remote* rc, int reset) { struct daemon* daemon = rc->worker->daemon; struct ub_stats_info total; @@ -1123,7 +1089,7 @@ do_stats(SSL* ssl, struct daemon_remote* rc, int reset) /** parse commandline argument domain name */ static int -parse_arg_name(SSL* ssl, char* str, uint8_t** res, size_t* len, int* labs) +parse_arg_name(RES* ssl, char* str, uint8_t** res, size_t* len, int* labs) { uint8_t nm[LDNS_MAX_DOMAINLEN+1]; size_t nmlen = sizeof(nm); @@ -1149,7 +1115,7 @@ parse_arg_name(SSL* ssl, char* str, uint8_t** res, size_t* len, int* labs) /** find second argument, modifies string */ static int -find_arg2(SSL* ssl, char* arg, char** arg2) +find_arg2(RES* ssl, char* arg, char** arg2) { char* as = strchr(arg, ' '); char* at = strchr(arg, '\t'); @@ -1174,7 +1140,7 @@ find_arg2(SSL* ssl, char* arg, char** arg2) /** Add a new zone */ static int -perform_zone_add(SSL* ssl, struct local_zones* zones, char* arg) +perform_zone_add(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; @@ -1214,7 +1180,7 @@ perform_zone_add(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_zone command */ static void -do_zone_add(SSL* ssl, struct local_zones* zones, char* arg) +do_zone_add(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_zone_add(ssl, zones, arg)) return; @@ -1223,7 +1189,7 @@ do_zone_add(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_zones command */ static void -do_zones_add(SSL* ssl, struct local_zones* zones) +do_zones_add(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; @@ -1242,7 +1208,7 @@ do_zones_add(SSL* ssl, struct local_zones* zones) /** Remove a zone */ static int -perform_zone_remove(SSL* ssl, struct local_zones* zones, char* arg) +perform_zone_remove(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; @@ -1263,7 +1229,7 @@ perform_zone_remove(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_zone_remove command */ static void -do_zone_remove(SSL* ssl, struct local_zones* zones, char* arg) +do_zone_remove(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_zone_remove(ssl, zones, arg)) return; @@ -1272,7 +1238,7 @@ do_zone_remove(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_zones_remove command */ static void -do_zones_remove(SSL* ssl, struct local_zones* zones) +do_zones_remove(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; @@ -1291,7 +1257,7 @@ do_zones_remove(SSL* ssl, struct local_zones* zones) /** Add new RR data */ static int -perform_data_add(SSL* ssl, struct local_zones* zones, char* arg) +perform_data_add(RES* ssl, struct local_zones* zones, char* arg) { if(!local_zones_add_RR(zones, arg)) { ssl_printf(ssl,"error in syntax or out of memory, %s\n", arg); @@ -1302,7 +1268,7 @@ perform_data_add(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_data command */ static void -do_data_add(SSL* ssl, struct local_zones* zones, char* arg) +do_data_add(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_data_add(ssl, zones, arg)) return; @@ -1311,7 +1277,7 @@ do_data_add(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_datas command */ static void -do_datas_add(SSL* ssl, struct local_zones* zones) +do_datas_add(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; @@ -1330,7 +1296,7 @@ do_datas_add(SSL* ssl, struct local_zones* zones) /** Remove RR data */ static int -perform_data_remove(SSL* ssl, struct local_zones* zones, char* arg) +perform_data_remove(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; @@ -1345,7 +1311,7 @@ perform_data_remove(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_data_remove command */ static void -do_data_remove(SSL* ssl, struct local_zones* zones, char* arg) +do_data_remove(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_data_remove(ssl, zones, arg)) return; @@ -1354,7 +1320,7 @@ do_data_remove(SSL* ssl, struct local_zones* zones, char* arg) /** Do the local_datas_remove command */ static void -do_datas_remove(SSL* ssl, struct local_zones* zones) +do_datas_remove(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; @@ -1373,7 +1339,7 @@ do_datas_remove(SSL* ssl, struct local_zones* zones) /** Add a new zone to view */ static void -do_view_zone_add(SSL* ssl, struct worker* worker, char* arg) +do_view_zone_add(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; @@ -1406,7 +1372,7 @@ do_view_zone_add(SSL* ssl, struct worker* worker, char* arg) /** Remove a zone from view */ static void -do_view_zone_remove(SSL* ssl, struct worker* worker, char* arg) +do_view_zone_remove(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; @@ -1429,7 +1395,7 @@ do_view_zone_remove(SSL* ssl, struct worker* worker, char* arg) /** Add new RR data to view */ static void -do_view_data_add(SSL* ssl, struct worker* worker, char* arg) +do_view_data_add(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; @@ -1454,7 +1420,7 @@ do_view_data_add(SSL* ssl, struct worker* worker, char* arg) /** Remove RR data from view */ static void -do_view_data_remove(SSL* ssl, struct worker* worker, char* arg) +do_view_data_remove(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; @@ -1477,7 +1443,7 @@ do_view_data_remove(SSL* ssl, struct worker* worker, char* arg) /** cache lookup of nameservers */ static void -do_lookup(SSL* ssl, struct worker* worker, char* arg) +do_lookup(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; @@ -1515,7 +1481,7 @@ do_cache_remove(struct worker* worker, uint8_t* nm, size_t nmlen, /** flush a type */ static void -do_flush_type(SSL* ssl, struct worker* worker, char* arg) +do_flush_type(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; @@ -1535,7 +1501,7 @@ do_flush_type(SSL* ssl, struct worker* worker, char* arg) /** flush statistics */ static void -do_flush_stats(SSL* ssl, struct worker* worker) +do_flush_stats(RES* ssl, struct worker* worker) { worker_stats_clear(worker); send_ok(ssl); @@ -1590,7 +1556,7 @@ infra_del_host(struct lruhash_entry* e, void* arg) /** flush infra cache */ static void -do_flush_infra(SSL* ssl, struct worker* worker, char* arg) +do_flush_infra(RES* ssl, struct worker* worker, char* arg) { struct sockaddr_storage addr; socklen_t len; @@ -1624,7 +1590,7 @@ do_flush_infra(SSL* ssl, struct worker* worker, char* arg) /** flush requestlist */ static void -do_flush_requestlist(SSL* ssl, struct worker* worker) +do_flush_requestlist(RES* ssl, struct worker* worker) { mesh_delete_all(worker->env.mesh); send_ok(ssl); @@ -1682,7 +1648,7 @@ zone_del_kcache(struct lruhash_entry* e, void* arg) /** remove all rrsets and keys from zone from cache */ static void -do_flush_zone(SSL* ssl, struct worker* worker, char* arg) +do_flush_zone(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; @@ -1760,7 +1726,7 @@ bogus_del_kcache(struct lruhash_entry* e, void* arg) /** remove all bogus rrsets, msgs and keys from cache */ static void -do_flush_bogus(SSL* ssl, struct worker* worker) +do_flush_bogus(RES* ssl, struct worker* worker) { struct del_info inf; /* what we do is to set them all expired */ @@ -1835,7 +1801,7 @@ negative_del_kcache(struct lruhash_entry* e, void* arg) /** remove all negative(NODATA,NXDOMAIN), and servfail messages from cache */ static void -do_flush_negative(SSL* ssl, struct worker* worker) +do_flush_negative(RES* ssl, struct worker* worker) { struct del_info inf; /* what we do is to set them all expired */ @@ -1863,7 +1829,7 @@ do_flush_negative(SSL* ssl, struct worker* worker) /** remove name rrset from cache */ static void -do_flush_name(SSL* ssl, struct worker* w, char* arg) +do_flush_name(RES* ssl, struct worker* w, char* arg) { uint8_t* nm; int nmlabs; @@ -1887,7 +1853,7 @@ do_flush_name(SSL* ssl, struct worker* w, char* arg) /** printout a delegation point info */ static int -ssl_print_name_dp(SSL* ssl, const char* str, uint8_t* nm, uint16_t dclass, +ssl_print_name_dp(RES* ssl, const char* str, uint8_t* nm, uint16_t dclass, struct delegpt* dp) { char buf[257]; @@ -1921,7 +1887,7 @@ ssl_print_name_dp(SSL* ssl, const char* str, uint8_t* nm, uint16_t dclass, /** print root forwards */ static int -print_root_fwds(SSL* ssl, struct iter_forwards* fwds, uint8_t* root) +print_root_fwds(RES* ssl, struct iter_forwards* fwds, uint8_t* root) { struct delegpt* dp; dp = forwards_lookup(fwds, root, LDNS_RR_CLASS_IN); @@ -1934,7 +1900,7 @@ print_root_fwds(SSL* ssl, struct iter_forwards* fwds, uint8_t* root) /** parse args into delegpt */ static struct delegpt* -parse_delegpt(SSL* ssl, char* args, uint8_t* nm, int allow_names) +parse_delegpt(RES* ssl, char* args, uint8_t* nm, int allow_names) { /* parse args and add in */ char* p = args; @@ -1997,7 +1963,7 @@ parse_delegpt(SSL* ssl, char* args, uint8_t* nm, int allow_names) /** do the status command */ static void -do_forward(SSL* ssl, struct worker* worker, char* args) +do_forward(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; uint8_t* root = (uint8_t*)"\000"; @@ -2028,7 +1994,7 @@ do_forward(SSL* ssl, struct worker* worker, char* args) } static int -parse_fs_args(SSL* ssl, char* args, uint8_t** nm, struct delegpt** dp, +parse_fs_args(RES* ssl, char* args, uint8_t** nm, struct delegpt** dp, int* insecure, int* prime) { char* zonename; @@ -2073,7 +2039,7 @@ parse_fs_args(SSL* ssl, char* args, uint8_t** nm, struct delegpt** dp, /** do the forward_add command */ static void -do_forward_add(SSL* ssl, struct worker* worker, char* args) +do_forward_add(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; @@ -2101,7 +2067,7 @@ do_forward_add(SSL* ssl, struct worker* worker, char* args) /** do the forward_remove command */ static void -do_forward_remove(SSL* ssl, struct worker* worker, char* args) +do_forward_remove(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; @@ -2118,7 +2084,7 @@ do_forward_remove(SSL* ssl, struct worker* worker, char* args) /** do the stub_add command */ static void -do_stub_add(SSL* ssl, struct worker* worker, char* args) +do_stub_add(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0, prime = 0; @@ -2159,7 +2125,7 @@ do_stub_add(SSL* ssl, struct worker* worker, char* args) /** do the stub_remove command */ static void -do_stub_remove(SSL* ssl, struct worker* worker, char* args) +do_stub_remove(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; @@ -2177,7 +2143,7 @@ do_stub_remove(SSL* ssl, struct worker* worker, char* args) /** do the insecure_add command */ static void -do_insecure_add(SSL* ssl, struct worker* worker, char* arg) +do_insecure_add(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; @@ -2198,7 +2164,7 @@ do_insecure_add(SSL* ssl, struct worker* worker, char* arg) /** do the insecure_remove command */ static void -do_insecure_remove(SSL* ssl, struct worker* worker, char* arg) +do_insecure_remove(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; @@ -2213,7 +2179,7 @@ do_insecure_remove(SSL* ssl, struct worker* worker, char* arg) } static void -do_insecure_list(SSL* ssl, struct worker* worker) +do_insecure_list(RES* ssl, struct worker* worker) { char buf[257]; struct trust_anchor* a; @@ -2229,7 +2195,7 @@ do_insecure_list(SSL* ssl, struct worker* worker) /** do the status command */ static void -do_status(SSL* ssl, struct worker* worker) +do_status(RES* ssl, struct worker* worker) { int i; time_t uptime; @@ -2250,9 +2216,12 @@ do_status(SSL* ssl, struct worker* worker) uptime = (time_t)time(NULL) - (time_t)worker->daemon->time_boot.tv_sec; if(!ssl_printf(ssl, "uptime: " ARG_LL "d seconds\n", (long long)uptime)) return; - if(!ssl_printf(ssl, "options:%s%s\n" , + if(!ssl_printf(ssl, "options:%s%s%s%s\n" , (worker->daemon->reuseport?" reuseport":""), - (worker->daemon->rc->accept_list?" control(ssl)":""))) + (worker->daemon->rc->accept_list?" control":""), + (worker->daemon->rc->accept_list && worker->daemon->rc->use_cert?"(ssl)":""), + (worker->daemon->rc->accept_list && worker->daemon->cfg->control_ifs.first && worker->daemon->cfg->control_ifs.first->str && worker->daemon->cfg->control_ifs.first->str[0] == '/'?"(namedpipe)":"") + )) return; if(!ssl_printf(ssl, "unbound (pid %d) is running...\n", (int)getpid())) @@ -2334,7 +2303,7 @@ get_mesh_status(struct mesh_area* mesh, struct mesh_state* m, /** do the dump_requestlist command */ static void -do_dump_requestlist(SSL* ssl, struct worker* worker) +do_dump_requestlist(RES* ssl, struct worker* worker) { struct mesh_area* mesh; struct mesh_state* m; @@ -2373,7 +2342,7 @@ struct infra_arg { /** the infra cache */ struct infra_cache* infra; /** the SSL connection */ - SSL* ssl; + RES* ssl; /** the time now */ time_t now; /** ssl failure? stop writing and skip the rest. If the tcp @@ -2428,7 +2397,7 @@ dump_infra_host(struct lruhash_entry* e, void* arg) /** do the dump_infra command */ static void -do_dump_infra(SSL* ssl, struct worker* worker) +do_dump_infra(RES* ssl, struct worker* worker) { struct infra_arg arg; arg.infra = worker->env.infra_cache; @@ -2440,7 +2409,7 @@ do_dump_infra(SSL* ssl, struct worker* worker) /** do the log_reopen command */ static void -do_log_reopen(SSL* ssl, struct worker* worker) +do_log_reopen(RES* ssl, struct worker* worker) { struct config_file* cfg = worker->env.cfg; send_ok(ssl); @@ -2449,7 +2418,7 @@ do_log_reopen(SSL* ssl, struct worker* worker) /** do the set_option command */ static void -do_set_option(SSL* ssl, struct worker* worker, char* arg) +do_set_option(RES* ssl, struct worker* worker, char* arg) { char* arg2; if(!find_arg2(ssl, arg, &arg2)) @@ -2472,13 +2441,13 @@ do_set_option(SSL* ssl, struct worker* worker, char* arg) /* routine to printout option values over SSL */ void remote_get_opt_ssl(char* line, void* arg) { - SSL* ssl = (SSL*)arg; + RES* ssl = (RES*)arg; (void)ssl_printf(ssl, "%s\n", line); } /** do the get_option command */ static void -do_get_option(SSL* ssl, struct worker* worker, char* arg) +do_get_option(RES* ssl, struct worker* worker, char* arg) { int r; r = config_get_option(worker->env.cfg, arg, remote_get_opt_ssl, ssl); @@ -2490,7 +2459,7 @@ do_get_option(SSL* ssl, struct worker* worker, char* arg) /** do the list_forwards command */ static void -do_list_forwards(SSL* ssl, struct worker* worker) +do_list_forwards(RES* ssl, struct worker* worker) { /* since its a per-worker structure no locks needed */ struct iter_forwards* fwds = worker->env.fwds; @@ -2518,7 +2487,7 @@ do_list_forwards(SSL* ssl, struct worker* worker) /** do the list_stubs command */ static void -do_list_stubs(SSL* ssl, struct worker* worker) +do_list_stubs(RES* ssl, struct worker* worker) { struct iter_hints_stub* z; struct trust_anchor* a; @@ -2546,7 +2515,7 @@ do_list_stubs(SSL* ssl, struct worker* worker) /** do the list_auth_zones command */ static void -do_list_auth_zones(SSL* ssl, struct auth_zones* az) +do_list_auth_zones(RES* ssl, struct auth_zones* az) { struct auth_zone* z; char buf[257], buf2[256]; @@ -2576,7 +2545,7 @@ do_list_auth_zones(SSL* ssl, struct auth_zones* az) /** do the list_local_zones command */ static void -do_list_local_zones(SSL* ssl, struct local_zones* zones) +do_list_local_zones(RES* ssl, struct local_zones* zones) { struct local_zone* z; char buf[257]; @@ -2598,7 +2567,7 @@ do_list_local_zones(SSL* ssl, struct local_zones* zones) /** do the list_local_data command */ static void -do_list_local_data(SSL* ssl, struct worker* worker, struct local_zones* zones) +do_list_local_data(RES* ssl, struct worker* worker, struct local_zones* zones) { struct local_zone* z; struct local_data* d; @@ -2637,7 +2606,7 @@ do_list_local_data(SSL* ssl, struct worker* worker, struct local_zones* zones) /** do the view_list_local_zones command */ static void -do_view_list_local_zones(SSL* ssl, struct worker* worker, char* arg) +do_view_list_local_zones(RES* ssl, struct worker* worker, char* arg) { struct view* v = views_find_view(worker->daemon->views, arg, 0 /* get read lock*/); @@ -2653,7 +2622,7 @@ do_view_list_local_zones(SSL* ssl, struct worker* worker, char* arg) /** do the view_list_local_data command */ static void -do_view_list_local_data(SSL* ssl, struct worker* worker, char* arg) +do_view_list_local_data(RES* ssl, struct worker* worker, char* arg) { struct view* v = views_find_view(worker->daemon->views, arg, 0 /* get read lock*/); @@ -2672,7 +2641,7 @@ struct ratelimit_list_arg { /** the infra cache */ struct infra_cache* infra; /** the SSL to print to */ - SSL* ssl; + RES* ssl; /** all or only ratelimited */ int all; /** current time */ @@ -2719,7 +2688,7 @@ ip_rate_list(struct lruhash_entry* e, void* arg) /** do the ratelimit_list command */ static void -do_ratelimit_list(SSL* ssl, struct worker* worker, char* arg) +do_ratelimit_list(RES* ssl, struct worker* worker, char* arg) { struct ratelimit_list_arg a; a.all = 0; @@ -2737,7 +2706,7 @@ do_ratelimit_list(SSL* ssl, struct worker* worker, char* arg) /** do the ip_ratelimit_list command */ static void -do_ip_ratelimit_list(SSL* ssl, struct worker* worker, char* arg) +do_ip_ratelimit_list(RES* ssl, struct worker* worker, char* arg) { struct ip_ratelimit_list_arg a; a.all = 0; @@ -2755,7 +2724,7 @@ do_ip_ratelimit_list(SSL* ssl, struct worker* worker, char* arg) /** tell other processes to execute the command */ static void -distribute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd) +distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd) { int i; if(!cmd || !ssl) @@ -2781,7 +2750,7 @@ cmdcmp(char* p, const char* cmd, size_t len) /** execute a remote control command */ static void -execute_cmd(struct daemon_remote* rc, SSL* ssl, char* cmd, +execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd, struct worker* worker) { char* p = skipwhite(cmd); @@ -2965,7 +2934,7 @@ daemon_remote_exec(struct worker* worker) /** handle remote control request */ static void -handle_req(struct daemon_remote* rc, struct rc_state* s, SSL* ssl) +handle_req(struct daemon_remote* rc, struct rc_state* s, RES* res) { int r; char pre[10]; @@ -2979,12 +2948,31 @@ handle_req(struct daemon_remote* rc, struct rc_state* s, SSL* ssl) fd_set_block(s->c->fd); /* try to read magic UBCT[version]_space_ string */ - ERR_clear_error(); - if((r=SSL_read(ssl, magic, (int)sizeof(magic)-1)) <= 0) { - if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) + if(res->ssl) { + ERR_clear_error(); + if((r=SSL_read(res->ssl, magic, (int)sizeof(magic)-1)) <= 0) { + if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) + return; + log_crypto_err("could not SSL_read"); return; - log_crypto_err("could not SSL_read"); - return; + } + } else { + while(1) { + ssize_t rr = recv(res->fd, magic, sizeof(magic)-1, 0); + if(rr <= 0) { + if(rr == 0) return; + if(errno == EINTR || errno == EAGAIN) + continue; +#ifndef USE_WINSOCK + log_err("could not recv: %s", strerror(errno)); +#else + log_err("could not recv: %s", wsa_strerror(WSAGetLastError())); +#endif + return; + } + r = (int)rr; + break; + } } magic[6] = 0; if( r != 6 || strncmp(magic, "UBCT", 4) != 0) { @@ -2994,25 +2982,58 @@ handle_req(struct daemon_remote* rc, struct rc_state* s, SSL* ssl) } /* read the command line */ - if(!ssl_read_line(ssl, buf, sizeof(buf))) { + if(!ssl_read_line(res, buf, sizeof(buf))) { return; } snprintf(pre, sizeof(pre), "UBCT%d ", UNBOUND_CONTROL_VERSION); if(strcmp(magic, pre) != 0) { verbose(VERB_QUERY, "control connection had bad " "version %s, cmd: %s", magic, buf); - ssl_printf(ssl, "error version mismatch\n"); + ssl_printf(res, "error version mismatch\n"); return; } verbose(VERB_DETAIL, "control cmd: %s", buf); /* figure out what to do */ - execute_cmd(rc, ssl, buf, rc->worker); + execute_cmd(rc, res, buf, rc->worker); +} + +/** handle SSL_do_handshake changes to the file descriptor to wait for later */ +static int +remote_handshake_later(struct daemon_remote* rc, struct rc_state* s, + struct comm_point* c, int r, int r2) +{ + if(r2 == SSL_ERROR_WANT_READ) { + if(s->shake_state == rc_hs_read) { + /* try again later */ + return 0; + } + s->shake_state = rc_hs_read; + comm_point_listen_for_rw(c, 1, 0); + return 0; + } else if(r2 == SSL_ERROR_WANT_WRITE) { + if(s->shake_state == rc_hs_write) { + /* try again later */ + return 0; + } + s->shake_state = rc_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 0; + } else { + if(r == 0) + log_err("remote control connection closed prematurely"); + log_addr(1, "failed connection from", + &s->c->repinfo.addr, s->c->repinfo.addrlen); + log_crypto_err("remote control failed ssl"); + clean_point(rc, s); + } + return 0; } int remote_control_callback(struct comm_point* c, void* arg, int err, struct comm_reply* ATTR_UNUSED(rep)) { + RES res; struct rc_state* s = (struct rc_state*)arg; struct daemon_remote* rc = s->rc; int r; @@ -3022,38 +3043,16 @@ int remote_control_callback(struct comm_point* c, void* arg, int err, clean_point(rc, s); return 0; } - /* (continue to) setup the SSL connection */ - ERR_clear_error(); - r = SSL_do_handshake(s->ssl); - if(r != 1) { - int r2 = SSL_get_error(s->ssl, r); - if(r2 == SSL_ERROR_WANT_READ) { - if(s->shake_state == rc_hs_read) { - /* try again later */ - return 0; - } - s->shake_state = rc_hs_read; - comm_point_listen_for_rw(c, 1, 0); - return 0; - } else if(r2 == SSL_ERROR_WANT_WRITE) { - if(s->shake_state == rc_hs_write) { - /* try again later */ - return 0; - } - s->shake_state = rc_hs_write; - comm_point_listen_for_rw(c, 0, 1); - return 0; - } else { - if(r == 0) - log_err("remote control connection closed prematurely"); - log_addr(1, "failed connection from", - &s->c->repinfo.addr, s->c->repinfo.addrlen); - log_crypto_err("remote control failed ssl"); - clean_point(rc, s); - return 0; + if(s->ssl) { + /* (continue to) setup the SSL connection */ + ERR_clear_error(); + r = SSL_do_handshake(s->ssl); + if(r != 1) { + int r2 = SSL_get_error(s->ssl, r); + return remote_handshake_later(rc, s, c, r, r2); } + s->shake_state = rc_none; } - s->shake_state = rc_none; /* once handshake has completed, check authentication */ if (!rc->use_cert) { @@ -3076,7 +3075,9 @@ int remote_control_callback(struct comm_point* c, void* arg, int err, } /* if OK start to actually handle the request */ - handle_req(rc, s, s->ssl); + res.ssl = s->ssl; + res.fd = c->fd; + handle_req(rc, s, &res); verbose(VERB_ALGO, "remote control operation completed"); clean_point(rc, s); diff --git a/daemon/remote.h b/daemon/remote.h index 190286d474a4..217ea21e80c1 100644 --- a/daemon/remote.h +++ b/daemon/remote.h @@ -73,6 +73,8 @@ struct rc_state { /** the ssl state */ SSL* ssl; #endif + /** file descriptor */ + int fd; /** the rc this is part of */ struct daemon_remote* rc; }; @@ -103,6 +105,19 @@ struct daemon_remote { #endif }; +/** + * Connection to print to, either SSL or plain over fd + */ +struct remote_stream { +#ifdef HAVE_SSL + /** SSL structure, nonNULL if using SSL */ + SSL* ssl; +#endif + /** file descriptor for plain transfer */ + int fd; +}; +typedef struct remote_stream RES; + /** * Create new remote control state for the daemon. * @param cfg: config file with key file settings. @@ -166,26 +181,26 @@ void daemon_remote_exec(struct worker* worker); * @param text: the text. * @return false on connection failure. */ -int ssl_print_text(SSL* ssl, const char* text); +int ssl_print_text(RES* ssl, const char* text); /** * printf style printing to the ssl connection - * @param ssl: the SSL connection to print to. Blocking. + * @param ssl: the RES connection to print to. Blocking. * @param format: printf style format string. * @return success or false on a network failure. */ -int ssl_printf(SSL* ssl, const char* format, ...) +int ssl_printf(RES* ssl, const char* format, ...) ATTR_FORMAT(printf, 2, 3); /** * Read until \n is encountered - * If SSL signals EOF, the string up to then is returned (without \n). - * @param ssl: the SSL connection to read from. blocking. + * If stream signals EOF, the string up to then is returned (without \n). + * @param ssl: the RES connection to read from. blocking. * @param buf: buffer to read to. * @param max: size of buffer. * @return false on connection failure. */ -int ssl_read_line(SSL* ssl, char* buf, size_t max); +int ssl_read_line(RES* ssl, char* buf, size_t max); #endif /* HAVE_SSL */ #endif /* DAEMON_REMOTE_H */ diff --git a/doc/Changelog b/doc/Changelog index 6a09942663f1..3d05ae53a1a5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,48 @@ +19 June 2018: Wouter + - Fix for unbound-control on Windows and set TCP socket parameters + more closely. + - Fix windows unbound-control no cert bad file descriptor error. + +18 June 2018: Wouter + - Fix that control-use-cert: no works for 127.0.0.1 to disable certs. + - Fix unbound-checkconf for control-use-cert. + +15 June 2018: Wouter + - tag for 1.7.3rc1. + +14 June 2018: Wouter + - #4103: Fix that auth-zone does not insist on SOA record first in + file for url downloads. + - Fix that first control-interface determines if TLS is used. Warn + when IP address interfaces are used without TLS. + - Fix nettle compile. + +12 June 2018: Ralph + - Don't count CNAME response types received during qname minimisation as + query restart. + +12 June 2018: Wouter + - #4102 for NSD, but for Unbound. Named unix pipes do not use + certificate and key files, access can be restricted with file and + directory permissions. The option control-use-cert is no longer + used, and ignored if found in unbound.conf. + - Rename tls-additional-ports to tls-additional-port, because every + line adds one port. + - Fix buffer size warning in unit test. + - remade dependencies in the Makefile. + +6 June 2018: Wouter + - Patch to fix openwrt for mac os build darwin detection in configure. + +5 June 2018: Wouter + - Fix crash if ratelimit taken into use with unbound-control + instead of with unbound.conf. + 4 June 2018: Wouter - Fix deadlock caused by incoming notify for auth-zone. - - tag for 1.7.2rc1 + - tag for 1.7.2rc1, became 1.7.2 release on 11 June 2018, + trunk is 1.7.3 in development from this point. + - #4100: Fix stub reprime when it becomes useless. 1 June 2018: Wouter - Rename additional-tls-port to tls-additional-ports. diff --git a/doc/README b/doc/README index 6d3bb8674eba..5bd23fac67be 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.7.2 +README for Unbound 1.7.3 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index 072bd8d21138..be83bdacc21c 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.7.2. +# See unbound.conf(5) man page, version 1.7.3. # # this is a comment. @@ -686,7 +686,7 @@ server: # tls-win-cert: no # Also serve tls on these port numbers (eg. 443, ...), by listing - # tls-additional-ports: portno for each of the port numbers. + # tls-additional-port: portno for each of the port numbers. # DNS64 prefix. Must be specified when DNS64 is use. # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. @@ -774,18 +774,20 @@ remote-control: # set up the keys and certificates with unbound-control-setup. # control-enable: no - # Set to no and use an absolute path as control-interface to use - # a unix local named pipe for unbound-control. - # control-use-cert: yes - # what interfaces are listened to for remote control. # give 0.0.0.0 and ::0 to listen to all interfaces. + # set to an absolute path to use a unix local name pipe, certificates + # are not used for that, so key and cert files need not be present. # control-interface: 127.0.0.1 # control-interface: ::1 # port number for remote control operations. # control-port: 8953 + # for localhost, you can disable use of TLS by setting this to "no" + # For local sockets this option is ignored, and TLS is not used. + # control-use-cert: "yes" + # unbound server key file. # server-key-file: "@UNBOUND_RUN_DIR@/unbound_server.key" diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index aac99580d5c3..d4b0efd69a9d 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "libunbound" "3" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -43,7 +43,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.7.2 functions. +\- Unbound DNS validating resolver 1.7.3 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index 1b588b851cde..ca7cafa060ab 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound-anchor" "8" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index 311e48dcee21..9d35e64dbe08 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound-checkconf" "8" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 566a175331c7..f3d9669f8160 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound-control" "8" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound-control.8 -- unbound remote control manual .\" diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index 68acc54ba7f6..ea95bd77e071 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound\-host" "1" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 0d27b75a0873..5613ce30b20d 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound" "8" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound.8 -- unbound manual .\" @@ -9,7 +9,7 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.7.2. +\- Unbound DNS validating resolver 1.7.3. .SH "SYNOPSIS" .B unbound .RB [ \-h ] diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 9c3892279c3e..9167a5a10def 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Jun 11, 2018" "NLnet Labs" "unbound 1.7.2" +.TH "unbound.conf" "5" "Jun 21, 2018" "NLnet Labs" "unbound 1.7.3" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -452,8 +452,8 @@ If no cert bundle, it uses only these certificates. Default is no. On windows this option uses the certificates from the cert store. Use the tls\-cert\-bundle option on other systems. .TP -.B tls\-additional\-ports: \fI -List portnumbers as tls\-additional\-ports, and when interfaces are defined, +.B tls\-additional\-port: \fI +List portnumbers as tls\-additional\-port, and when interfaces are defined, eg. with the @port suffix, as this port number, they provide dns over TLS service. Can list multiple, each on a new statement. .TP @@ -1369,6 +1369,14 @@ By default localhost (127.0.0.1 and ::1) is listened to. Use 0.0.0.0 and ::0 to listen to all interfaces. If you change this and permissions have been dropped, you must restart the server for the change to take effect. +.IP +If you set it to an absolute path, a local socket is used. The local socket +does not use the certificates and keys, so those files need not be present. +To restrict access, unbound sets permissions on the file to the user and +group that is configured, the access bits are set to allow the group members +to access the control socket file. Put users that need to access the socket +in the that group. To restrict access further, create a directory to put +the control socket in and restrict access to that directory. .TP 5 .B control\-port: \fI The port number to listen on for IPv4 or IPv6 control interfaces, @@ -1377,11 +1385,9 @@ If you change this and permissions have been dropped, you must restart the server for the change to take effect. .TP 5 .B control\-use\-cert: \fI -Whether to require certificate authentication of control connections. -The default is "yes". -This should not be changed unless there are other mechanisms in place -to prevent untrusted users from accessing the remote control -interface. +For localhost control-interface you can disable the use of TLS by setting +this option to "no", default is "yes". For local sockets, TLS is disabled +and the value of this option is ignored. .TP 5 .B server\-key\-file: \fI Path to the server private key, by default unbound_server.key. diff --git a/iterator/iterator.c b/iterator/iterator.c index 188a623a2bc7..58a9bff6634c 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -536,7 +536,7 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, /** see if last resort is possible - does config allow queries to parent */ static int can_have_last_resort(struct module_env* env, uint8_t* nm, size_t nmlen, - uint16_t qclass) + uint16_t qclass, struct delegpt** retdp) { struct delegpt* fwddp; struct iter_hints_stub* stub; @@ -549,12 +549,14 @@ can_have_last_resort(struct module_env* env, uint8_t* nm, size_t nmlen, /* has_parent side is turned off for stub_first, where we * are allowed to go to the parent */ stub->dp->has_parent_side_NS) { + if(retdp) *retdp = stub->dp; return 0; } if((fwddp = forwards_find(env->fwds, nm, qclass)) && /* has_parent_side is turned off for forward_first, where * we are allowed to go to the parent */ fwddp->has_parent_side_NS) { + if(retdp) *retdp = fwddp; return 0; } return 1; @@ -1000,7 +1002,7 @@ generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) if(iq->depth == ie->max_dependency_depth) return; if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, - iq->qchase.qclass)) + iq->qchase.qclass, NULL)) return; /* is this query the same as the nscheck? */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS && @@ -1184,10 +1186,8 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, */ if (iq->refetch_glue && iq->dp && - !can_have_last_resort(qstate->env, - iq->dp->name, - iq->dp->namelen, - iq->qchase.qclass)) { + !can_have_last_resort(qstate->env, iq->dp->name, + iq->dp->namelen, iq->qchase.qclass, NULL)) { iq->refetch_glue = 0; } @@ -1300,7 +1300,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } if(iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue || (iq->qchase.qtype == LDNS_RR_TYPE_NS && qstate->prefetch_leeway - && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass))) { + && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass, NULL))) { /* remove first label from delname, root goes to hints, * but only to fetch glue, not for qtype=DS. */ /* also when prefetching an NS record, fetch it again from @@ -1416,9 +1416,25 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, */ if(iter_dp_is_useless(&qstate->qinfo, qstate->query_flags, iq->dp)) { - if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass)) { + struct delegpt* retdp = NULL; + if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &retdp)) { + if(retdp) { + verbose(VERB_QUERY, "cache has stub " + "or fwd but no addresses, " + "fallback to config"); + iq->dp = delegpt_copy(retdp, + qstate->region); + if(!iq->dp) { + log_err("out of memory in " + "stub/fwd fallback"); + return error_response(qstate, + id, LDNS_RCODE_SERVFAIL); + } + break; + } verbose(VERB_ALGO, "useless dp " "but cannot go up, servfail"); + delegpt_log(VERB_ALGO, iq->dp); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -1779,7 +1795,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, log_assert(iq->dp); if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, - iq->qchase.qclass)) { + iq->qchase.qclass, NULL)) { /* fail -- no more targets, no more hope of targets, no hope * of a response. */ verbose(VERB_QUERY, "configured stub or forward servers failed -- returning SERVFAIL"); @@ -1872,7 +1888,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, if( ((ie->supports_ipv6 && !ns->done_pside6) || (ie->supports_ipv4 && !ns->done_pside4)) && !can_have_last_resort(qstate->env, ns->name, ns->namelen, - iq->qchase.qclass)) { + iq->qchase.qclass, NULL)) { log_nametypeclass(VERB_ALGO, "cannot pside lookup ns " "because it is also a stub/forward,", ns->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); @@ -2754,16 +2770,18 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* set the current request's qname to the new value. */ iq->qchase.qname = sname; iq->qchase.qname_len = snamelen; - if (qstate->env->cfg->qname_minimisation) - iq->minimisation_state = INIT_MINIMISE_STATE; /* Clear the query state, since this is a query restart. */ iq->deleg_msg = NULL; iq->dp = NULL; iq->dsns_point = NULL; iq->auth_zone_response = 0; - /* Note the query restart. */ - iq->query_restart_count++; iq->sent_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. */ + iq->query_restart_count++; + if(qstate->env->cfg->qname_minimisation) + iq->minimisation_state = INIT_MINIMISE_STATE; /* stop current outstanding queries. * FIXME: should the outstanding queries be waited for and diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 72e6d99c7cf2..df06d1064b04 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -883,7 +883,7 @@ struct config_file { struct config_strlist* local_zones_nodefault; struct config_strlist* local_data; int remote_control_enable; - struct config_strlist* control_ifs; + struct config_strlist_head control_ifs; int control_port; char* server_key_file; char* server_cert_file; diff --git a/services/authzone.c b/services/authzone.c index 7ec280bafd92..f1ca2a2b0552 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -4164,8 +4164,8 @@ chunkline_non_comment_RR(struct auth_chunk** chunk, size_t* chunk_pos, return 0; } -/** check syntax of chunklist zonefile, parse SOA RR, return false on - * failure and return a string in the scratch buffer (SOA RR string) +/** check syntax of chunklist zonefile, parse first RR, return false on + * failure and return a string in the scratch buffer (first RR string) * on failure. */ static int http_zonefile_syntax_check(struct auth_xfer* xfr, sldns_buffer* buf) @@ -4193,26 +4193,11 @@ http_zonefile_syntax_check(struct auth_xfer* xfr, sldns_buffer* buf) pstate.origin_len?pstate.origin:NULL, pstate.origin_len, pstate.prev_rr_len?pstate.prev_rr:NULL, pstate.prev_rr_len); if(e != 0) { - log_err("parse failure on SOA RR[%d]: %s", + log_err("parse failure on first RR[%d]: %s", LDNS_WIREPARSE_OFFSET(e), sldns_get_errorstr_parse(LDNS_WIREPARSE_ERROR(e))); return 0; } - /* check that name is correct */ - if(query_dname_compare(rr, xfr->name) != 0) { - char nm[255+1], zname[255+1]; - dname_str(rr, nm); - dname_str(xfr->name, zname); - log_err("parse failure for %s, SOA RR for %s found instead", - zname, nm); - return 0; - } - /* check that type is SOA */ - if(sldns_wirerr_get_type(rr, rr_len, dname_len) != LDNS_RR_TYPE_SOA) { - log_err("parse failure: first record in downloaded zonefile " - "not of type SOA"); - return 0; - } /* check that class is correct */ if(sldns_wirerr_get_class(rr, rr_len, dname_len) != xfr->dclass) { log_err("parse failure: first record in downloaded zonefile " diff --git a/services/cache/infra.c b/services/cache/infra.c index 734b7969e7a2..f4320306daa2 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -232,22 +232,20 @@ infra_create(struct config_file* cfg) infra->host_ttl = cfg->host_ttl; name_tree_init(&infra->domain_limits); infra_dp_ratelimit = cfg->ratelimit; - if(cfg->ratelimit != 0) { - infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, - INFRA_HOST_STARTSIZE, cfg->ratelimit_size, - &rate_sizefunc, &rate_compfunc, &rate_delkeyfunc, - &rate_deldatafunc, NULL); - if(!infra->domain_rates) { - infra_delete(infra); - return NULL; - } - /* insert config data into ratelimits */ - if(!infra_ratelimit_cfg_insert(infra, cfg)) { - infra_delete(infra); - return NULL; - } - name_tree_init_parents(&infra->domain_limits); + infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, + INFRA_HOST_STARTSIZE, cfg->ratelimit_size, + &rate_sizefunc, &rate_compfunc, &rate_delkeyfunc, + &rate_deldatafunc, NULL); + if(!infra->domain_rates) { + infra_delete(infra); + return NULL; } + /* insert config data into ratelimits */ + if(!infra_ratelimit_cfg_insert(infra, cfg)) { + infra_delete(infra); + return NULL; + } + name_tree_init_parents(&infra->domain_limits); infra_ip_ratelimit = cfg->ip_ratelimit; infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc, diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index a6922888aa49..248cad3665b0 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1059,7 +1059,7 @@ set_recvpktinfo(int s, int family) /** see if interface is ssl, its port number == the ssl port number */ static int if_is_ssl(const char* ifname, const char* port, int ssl_port, - struct config_strlist* tls_additional_ports) + struct config_strlist* tls_additional_port) { struct config_strlist* s; char* p = strchr(ifname, '@'); @@ -1067,7 +1067,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, return 1; if(p && atoi(p+1) == ssl_port) return 1; - for(s = tls_additional_ports; s; s = s->next) { + for(s = tls_additional_port; s; s = s->next) { if(p && atoi(p+1) == atoi(s->str)) return 1; if(!p && atoi(port) == atoi(s->str)) @@ -1089,7 +1089,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param rcv: receive buffer size for UDP * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number - * @param tls_additional_ports: list of additional ssl service port numbers. + * @param tls_additional_port: list of additional ssl service port numbers. * @param reuseport: try to set SO_REUSEPORT if nonNULL and true. * set to false on exit if reuseport failed due to no kernel support. * @param transparent: set IP_TRANSPARENT socket option. @@ -1103,7 +1103,7 @@ static int ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, size_t rcv, size_t snd, int ssl_port, - struct config_strlist* tls_additional_ports, int* reuseport, + struct config_strlist* tls_additional_port, int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dnscrypt_port) { @@ -1170,7 +1170,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, - tls_additional_ports); + tls_additional_port); if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, freebind, use_systemd)) == -1) { @@ -1356,7 +1356,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->tls_additional_ports, + cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1370,7 +1370,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->tls_additional_ports, + cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1386,7 +1386,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) if(!ports_create_if(cfg->ifs[i], 0, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->tls_additional_ports, + cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { @@ -1400,7 +1400,7 @@ listening_ports_open(struct config_file* cfg, int* reuseport) if(!ports_create_if(cfg->ifs[i], 0, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, - cfg->ssl_port, cfg->tls_additional_ports, + cfg->ssl_port, cfg->tls_additional_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd, cfg->dnscrypt_port)) { diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index e205c3e9c49c..37ba9eab31a1 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -542,7 +542,8 @@ morechecks(struct config_file* cfg, const char* fname) # endif } #endif - if(cfg->remote_control_enable && cfg->remote_control_use_cert) { + if(cfg->remote_control_enable && options_remote_is_address(cfg) + && cfg->control_use_cert) { check_chroot_string("server-key-file", &cfg->server_key_file, cfg->chrootdir, cfg); check_chroot_string("server-cert-file", &cfg->server_cert_file, diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index 2337e7a73728..d16541779190 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -451,47 +451,33 @@ setup_ctx(struct config_file* cfg) char* s_cert=NULL, *c_key=NULL, *c_cert=NULL; SSL_CTX* ctx; - if(cfg->remote_control_use_cert) { - s_cert = fname_after_chroot(cfg->server_cert_file, cfg, 1); - c_key = fname_after_chroot(cfg->control_key_file, cfg, 1); - c_cert = fname_after_chroot(cfg->control_cert_file, cfg, 1); - if(!s_cert || !c_key || !c_cert) - fatal_exit("out of memory"); - } + if(!(options_remote_is_address(cfg) && cfg->control_use_cert)) + return NULL; + s_cert = fname_after_chroot(cfg->server_cert_file, cfg, 1); + c_key = fname_after_chroot(cfg->control_key_file, cfg, 1); + c_cert = fname_after_chroot(cfg->control_cert_file, cfg, 1); + if(!s_cert || !c_key || !c_cert) + fatal_exit("out of memory"); ctx = SSL_CTX_new(SSLv23_client_method()); if(!ctx) ssl_err("could not allocate SSL_CTX pointer"); if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) != SSL_OP_NO_SSLv2) ssl_err("could not set SSL_OP_NO_SSLv2"); - if(cfg->remote_control_use_cert) { - if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) - != SSL_OP_NO_SSLv3) - ssl_err("could not set SSL_OP_NO_SSLv3"); - if(!SSL_CTX_use_certificate_chain_file(ctx,c_cert) || - !SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM) - || !SSL_CTX_check_private_key(ctx)) - ssl_err("Error setting up SSL_CTX client key and cert"); - if (SSL_CTX_load_verify_locations(ctx, s_cert, NULL) != 1) - ssl_err("Error setting up SSL_CTX verify, server cert"); - SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); + if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) + != SSL_OP_NO_SSLv3) + ssl_err("could not set SSL_OP_NO_SSLv3"); + if(!SSL_CTX_use_certificate_chain_file(ctx,c_cert) || + !SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM) + || !SSL_CTX_check_private_key(ctx)) + ssl_err("Error setting up SSL_CTX client key and cert"); + if (SSL_CTX_load_verify_locations(ctx, s_cert, NULL) != 1) + ssl_err("Error setting up SSL_CTX verify, server cert"); + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); - free(s_cert); - free(c_key); - free(c_cert); - } else { - /* Use ciphers that don't require authentication */ -#if defined(SSL_OP_NO_TLSv1_3) - /* in openssl 1.1.1, negotiation code for tls 1.3 does - * not allow the unauthenticated aNULL and eNULL ciphers */ - SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_3); -#endif -#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL - SSL_CTX_set_security_level(ctx, 0); -#endif - if(!SSL_CTX_set_cipher_list(ctx, "aNULL:eNULL")) - ssl_err("Error setting NULL cipher!"); - } + free(s_cert); + free(c_key); + free(c_cert); return ctx; } @@ -501,12 +487,12 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) { struct sockaddr_storage addr; socklen_t addrlen; - int addrfamily = 0; - int fd; + int addrfamily = 0, proto = IPPROTO_TCP; + int fd, useport = 1; /* use svr or the first config entry */ if(!svr) { - if(cfg->control_ifs) { - svr = cfg->control_ifs->str; + if(cfg->control_ifs.first) { + svr = cfg->control_ifs.first->str; } else if(cfg->do_ip4) { svr = "127.0.0.1"; } else { @@ -534,6 +520,8 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) (void)strlcpy(usock->sun_path, svr, sizeof(usock->sun_path)); addrlen = (socklen_t)sizeof(struct sockaddr_un); addrfamily = AF_LOCAL; + useport = 0; + proto = 0; #endif } else { if(!ipstrtoaddr(svr, cfg->control_port, &addr, &addrlen)) @@ -541,8 +529,8 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) } if(addrfamily == 0) - addrfamily = addr_is_ip6(&addr, addrlen)?AF_INET6:AF_INET; - fd = socket(addrfamily, SOCK_STREAM, 0); + addrfamily = addr_is_ip6(&addr, addrlen)?PF_INET6:PF_INET; + fd = socket(addrfamily, SOCK_STREAM, proto); if(fd == -1) { #ifndef USE_WINSOCK fatal_exit("socket: %s", strerror(errno)); @@ -552,14 +540,18 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) } if(connect(fd, (struct sockaddr*)&addr, addrlen) < 0) { #ifndef USE_WINSOCK - log_err_addr("connect", strerror(errno), &addr, addrlen); - if(errno == ECONNREFUSED && statuscmd) { + int err = errno; + if(!useport) log_err("connect: %s for %s", strerror(err), svr); + else log_err_addr("connect", strerror(err), &addr, addrlen); + if(err == ECONNREFUSED && statuscmd) { printf("unbound is stopped\n"); exit(3); } #else - log_err_addr("connect", wsa_strerror(WSAGetLastError()), &addr, addrlen); - if(WSAGetLastError() == WSAECONNREFUSED && statuscmd) { + int wsaerr = WSAGetLastError(); + if(!useport) log_err("connect: %s for %s", wsa_strerror(wsaerr), svr); + else log_err_addr("connect", wsa_strerror(wsaerr), &addr, addrlen); + if(wsaerr == WSAECONNREFUSED && statuscmd) { printf("unbound is stopped\n"); exit(3); } @@ -571,12 +563,13 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) /** setup SSL on the connection */ static SSL* -setup_ssl(SSL_CTX* ctx, int fd, struct config_file* cfg) +setup_ssl(SSL_CTX* ctx, int fd) { SSL* ssl; X509* x; int r; + if(!ctx) return NULL; ssl = SSL_new(ctx); if(!ssl) ssl_err("could not SSL_new"); @@ -597,78 +590,115 @@ setup_ssl(SSL_CTX* ctx, int fd, struct config_file* cfg) /* check authenticity of server */ if(SSL_get_verify_result(ssl) != X509_V_OK) ssl_err("SSL verification failed"); - if(cfg->remote_control_use_cert) { - x = SSL_get_peer_certificate(ssl); - if(!x) - ssl_err("Server presented no peer certificate"); - X509_free(x); - } + x = SSL_get_peer_certificate(ssl); + if(!x) + ssl_err("Server presented no peer certificate"); + X509_free(x); return ssl; } +/** read from ssl or fd, fatalexit on error, 0 EOF, 1 success */ +static int +remote_read(SSL* ssl, int fd, char* buf, size_t len) +{ + if(ssl) { + int r; + ERR_clear_error(); + if((r = SSL_read(ssl, buf, (int)len-1)) <= 0) { + if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { + /* EOF */ + return 0; + } + ssl_err("could not SSL_read"); + } + buf[r] = 0; + } else { + ssize_t rr = recv(fd, buf, len-1, 0); + if(rr <= 0) { + if(rr == 0) { + /* EOF */ + return 0; + } +#ifndef USE_WINSOCK + fatal_exit("could not recv: %s", strerror(errno)); +#else + fatal_exit("could not recv: %s", wsa_strerror(WSAGetLastError())); +#endif + } + buf[rr] = 0; + } + return 1; +} + +/** write to ssl or fd, fatalexit on error */ +static void +remote_write(SSL* ssl, int fd, const char* buf, size_t len) +{ + if(ssl) { + if(SSL_write(ssl, buf, (int)len) <= 0) + ssl_err("could not SSL_write"); + } else { + if(send(fd, buf, len, 0) < (ssize_t)len) { +#ifndef USE_WINSOCK + fatal_exit("could not send: %s", strerror(errno)); +#else + fatal_exit("could not send: %s", wsa_strerror(WSAGetLastError())); +#endif + } + } +} + /** send stdin to server */ static void -send_file(SSL* ssl, FILE* in, char* buf, size_t sz) +send_file(SSL* ssl, int fd, FILE* in, char* buf, size_t sz) { while(fgets(buf, (int)sz, in)) { - if(SSL_write(ssl, buf, (int)strlen(buf)) <= 0) - ssl_err("could not SSL_write contents"); + remote_write(ssl, fd, buf, strlen(buf)); } } /** send end-of-file marker to server */ static void -send_eof(SSL* ssl) +send_eof(SSL* ssl, int fd) { char e[] = {0x04, 0x0a}; - if(SSL_write(ssl, e, (int)sizeof(e)) <= 0) - ssl_err("could not SSL_write end-of-file marker"); + remote_write(ssl, fd, e, sizeof(e)); } /** send command and display result */ static int -go_cmd(SSL* ssl, int quiet, int argc, char* argv[]) +go_cmd(SSL* ssl, int fd, int quiet, int argc, char* argv[]) { char pre[10]; const char* space=" "; const char* newline="\n"; int was_error = 0, first_line = 1; - int r, i; + int i; char buf[1024]; snprintf(pre, sizeof(pre), "UBCT%d ", UNBOUND_CONTROL_VERSION); - if(SSL_write(ssl, pre, (int)strlen(pre)) <= 0) - ssl_err("could not SSL_write"); + remote_write(ssl, fd, pre, strlen(pre)); for(i=0; i0&&strcmp(argv[0],"status")==0); - ssl = setup_ssl(ctx, fd, cfg); + ssl = setup_ssl(ctx, fd); /* send command */ - ret = go_cmd(ssl, quiet, argc, argv); + ret = go_cmd(ssl, fd, quiet, argc, argv); - SSL_free(ssl); + if(ssl) SSL_free(ssl); #ifndef USE_WINSOCK close(fd); #else closesocket(fd); #endif - SSL_CTX_free(ctx); + if(ctx) SSL_CTX_free(ctx); config_delete(cfg); return ret; } diff --git a/testcode/unitneg.c b/testcode/unitneg.c index 2b67df18232f..4cd9b306c72e 100644 --- a/testcode/unitneg.c +++ b/testcode/unitneg.c @@ -94,7 +94,7 @@ static void print_neg_cache(struct val_neg_cache* neg) /** get static pointer to random zone name */ static char* get_random_zone(void) { - static char zname[256]; + static char zname[36]; int labels = random() % 3; int i; char* p = zname; @@ -102,10 +102,10 @@ static char* get_random_zone(void) for(i=0; i> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log - +sleep 2 diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.test b/testdata/fwd_oneport.tdir/fwd_oneport.test index f6dfcea91f71..59d5b016308e 100644 --- a/testdata/fwd_oneport.tdir/fwd_oneport.test +++ b/testdata/fwd_oneport.tdir/fwd_oneport.test @@ -36,7 +36,7 @@ dig @localhost -p $UNBOUND_PORT www5.example.com. >outfile5 & digpid5=$! dig @localhost -p $UNBOUND_PORT www6.example.com. >outfile6 & digpid6=$! -sleep 6 +sleep 12 kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 diff --git a/util/config_file.c b/util/config_file.c index b76ed56fc209..b06176053c60 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -244,9 +244,10 @@ config_create(void) cfg->insecure_lan_zones = 0; cfg->python_script = NULL; cfg->remote_control_enable = 0; - cfg->control_ifs = NULL; + cfg->control_ifs.first = NULL; + cfg->control_ifs.last = NULL; cfg->control_port = UNBOUND_CONTROL_PORT; - cfg->remote_control_use_cert = 1; + cfg->control_use_cert = 1; cfg->minimal_responses = 0; cfg->rrset_roundrobin = 0; cfg->max_udp_size = 4096; @@ -386,6 +387,9 @@ struct config_file* config_create_forlib(void) #define S_STRLIST_UNIQ(str, var) if(strcmp(opt, str)==0) \ { if(cfg_strlist_find(cfg->var, val)) { return 0;} \ return cfg_strlist_insert(&cfg->var, strdup(val)); } +/** append string to strlist */ +#define S_STRLIST_APPEND(str, var) if(strcmp(opt, str)==0) \ + { return cfg_strlist_append(&cfg->var, strdup(val)); } int config_set_option(struct config_file* cfg, const char* opt, const char* val) @@ -457,8 +461,9 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_NONZERO("ssl-port:", ssl_port) else S_STR("tls-cert-bundle:", tls_cert_bundle) else S_YNO("tls-win-cert:", tls_win_cert) - else S_STRLIST("additional-tls-port:", tls_additional_ports) - else S_STRLIST("tls-additional-ports:", tls_additional_ports) + else S_STRLIST("additional-tls-port:", tls_additional_port) + else S_STRLIST("tls-additional-ports:", tls_additional_port) + else S_STRLIST("tls-additional-port:", tls_additional_port) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) @@ -555,7 +560,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("unblock-lan-zones:", unblock_lan_zones) else S_YNO("insecure-lan-zones:", insecure_lan_zones) else S_YNO("control-enable:", remote_control_enable) - else S_STRLIST("control-interface:", control_ifs) + else S_STRLIST_APPEND("control-interface:", control_ifs) else S_NUMBER_NONZERO("control-port:", control_port) else S_STR("server-key-file:", server_key_file) else S_STR("server-cert-file:", server_cert_file) @@ -879,7 +884,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "ssl-port", ssl_port) else O_STR(opt, "tls-cert-bundle", tls_cert_bundle) else O_YNO(opt, "tls-win-cert", tls_win_cert) - else O_LST(opt, "tls-additional-ports", tls_additional_ports) + else O_LST(opt, "tls-additional-port", tls_additional_port) else O_YNO(opt, "use-systemd", use_systemd) else O_YNO(opt, "do-daemonize", do_daemonize) else O_STR(opt, "chroot", chrootdir) @@ -941,7 +946,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "trust-anchor-signaling", trust_anchor_signaling) else O_YNO(opt, "root-key-sentinel", root_key_sentinel) else O_LST(opt, "dlv-anchor", dlv_anchor_list) - else O_LST(opt, "control-interface", control_ifs) + else O_LST(opt, "control-interface", control_ifs.first) else O_LST(opt, "domain-insecure", domain_insecure) else O_UNS(opt, "val-override-date", val_date_override) else O_YNO(opt, "minimal-responses", minimal_responses) @@ -1303,7 +1308,7 @@ config_delete(struct config_file* cfg) free(cfg->ssl_service_key); free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); - config_delstrlist(cfg->tls_additional_ports); + config_delstrlist(cfg->tls_additional_port); free(cfg->log_identity); config_del_strarray(cfg->ifs, cfg->num_ifs); config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); @@ -1344,7 +1349,7 @@ config_delete(struct config_file* cfg) config_del_strbytelist(cfg->respip_tags); config_deltrplstrlist(cfg->acl_tag_actions); config_deltrplstrlist(cfg->acl_tag_datas); - config_delstrlist(cfg->control_ifs); + config_delstrlist(cfg->control_ifs.first); free(cfg->server_key_file); free(cfg->server_cert_file); free(cfg->control_key_file); @@ -2264,3 +2269,12 @@ void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname) snprintf(b, sizeof(b), "%s %s", str, buf); errinf(qstate, b); } + +int options_remote_is_address(struct config_file* cfg) +{ + if(!cfg->remote_control_enable) return 0; + if(!cfg->control_ifs.first) return 1; + if(!cfg->control_ifs.first->str) return 1; + if(cfg->control_ifs.first->str[0] == 0) return 1; + return (cfg->control_ifs.first->str[0] != '/'); +} diff --git a/util/config_file.h b/util/config_file.h index 548cc33e908f..4206eb9a2a51 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -53,6 +53,14 @@ struct sock_list; struct ub_packed_rrset_key; struct regional; +/** List head for strlist processing, used for append operation. */ +struct config_strlist_head { + /** first in list of text items */ + struct config_strlist* first; + /** last in list of text items */ + struct config_strlist* last; +}; + /** * The configuration options. * Strings are malloced. @@ -105,7 +113,7 @@ struct config_file { /** should the system certificate store get added to the cert bundle */ int tls_win_cert; /** additional tls ports */ - struct config_strlist* tls_additional_ports; + struct config_strlist* tls_additional_port; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; @@ -374,11 +382,11 @@ struct config_file { /** remote control section. enable toggle. */ int remote_control_enable; /** the interfaces the remote control should listen on */ - struct config_strlist* control_ifs; + struct config_strlist_head control_ifs; + /** if the use-cert option is set */ + int control_use_cert; /** port number for the control port */ int control_port; - /** use certificates for remote control */ - int remote_control_use_cert; /** private key file for server */ char* server_key_file; /** certificate file for server */ @@ -653,14 +661,6 @@ struct config_strbytelist { size_t str2len; }; -/** List head for strlist processing, used for append operation. */ -struct config_strlist_head { - /** first in list of text items */ - struct config_strlist* first; - /** last in list of text items */ - struct config_strlist* last; -}; - /** * Create config file structure. Filled with default values. * @return: the new structure or NULL on memory error. @@ -894,6 +894,10 @@ void config_delview(struct config_view* p); */ void config_delviews(struct config_view* list); +/** check if config for remote control turns on IP-address interface + * with certificates or a named pipe without certificates. */ +int options_remote_is_address(struct config_file* cfg); + /** * Convert 14digit to time value * @param str: string of 14 digits diff --git a/util/configlexer.c b/util/configlexer.c index 941501eedc42..f6a453899977 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 266 -#define YY_END_OF_BUFFER 267 +#define YY_NUM_RULES 267 +#define YY_END_OF_BUFFER 268 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,297 +372,298 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2631] = +static yyconst flex_int16_t yy_accept[2632] = { 0, - 1, 1, 248, 248, 252, 252, 256, 256, 260, 260, - 1, 1, 267, 264, 1, 246, 246, 265, 2, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 265, 248, 249, 249, 250, 265, 252, 253, 253, - 254, 265, 259, 256, 257, 257, 258, 265, 260, 261, - 261, 262, 265, 263, 247, 2, 251, 263, 265, 264, - 0, 1, 2, 2, 2, 2, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 1, 1, 249, 249, 253, 253, 257, 257, 261, 261, + 1, 1, 268, 265, 1, 247, 247, 266, 2, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 266, 249, 250, 250, 251, 266, 253, 254, 254, + 255, 266, 260, 257, 258, 258, 259, 266, 261, 262, + 262, 263, 266, 264, 248, 2, 252, 264, 266, 265, + 0, 1, 2, 2, 2, 2, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 248, - 0, 252, 0, 259, 0, 256, 260, 0, 263, 0, - 2, 2, 263, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 249, + 0, 253, 0, 260, 0, 257, 261, 0, 264, 0, + 2, 2, 264, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 263, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 264, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 103, 264, 264, 264, 264, 264, 264, 264, 263, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 104, 265, 265, 265, 265, 265, 265, 265, 264, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 87, 264, 264, 264, 264, - 264, 264, 8, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 108, 264, 263, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 88, 265, 265, 265, 265, + 265, 265, 8, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 109, 265, 264, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 263, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 47, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 192, - 264, 14, 15, 264, 18, 17, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 102, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 178, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 264, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 48, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 193, + 265, 14, 15, 265, 18, 17, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 103, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 179, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 3, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 263, 264, 264, 264, 264, 264, 264, 264, - 240, 264, 264, 239, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 3, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 264, 265, 265, 265, 265, 265, 265, 265, + 241, 265, 265, 240, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 255, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 50, 264, 216, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 51, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 167, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 20, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 256, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 51, 265, 217, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 52, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 168, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 20, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 123, 264, 264, 255, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 222, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 142, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 122, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 124, 265, 265, 256, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 223, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 143, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 123, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 85, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 28, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 29, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 48, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 101, 264, 264, 264, 264, 264, 100, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 49, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 86, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 28, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 29, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 49, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 102, 265, 265, 265, 265, 265, 101, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 50, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 143, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 38, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 207, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 42, - 264, 43, 264, 264, 264, 264, 88, 264, 89, 264, + 265, 265, 265, 144, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 39, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 208, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 43, + 265, 44, 265, 265, 265, 265, 89, 265, 90, 265, - 264, 264, 86, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 7, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 185, 264, 264, 264, 264, 125, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 39, 264, 264, 264, 264, + 265, 265, 87, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 7, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 186, 265, 265, 265, 265, 126, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 40, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 159, - 264, 158, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 16, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 52, 264, 264, 264, - 264, 264, 264, 264, 264, 166, 264, 264, 264, 264, - 264, 91, 90, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 153, 264, - 264, 264, 264, 264, 264, 264, 264, 109, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 160, + 265, 159, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 16, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 53, 265, 265, 265, + 265, 265, 265, 265, 265, 167, 265, 265, 265, 265, + 265, 92, 91, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 154, 265, + 265, 265, 265, 265, 265, 265, 265, 110, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 70, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 74, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 46, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 156, 157, 264, 217, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 6, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 71, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 75, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 47, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 157, 158, 265, 218, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 6, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 220, - 264, 264, 264, 241, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 36, - 264, 264, 264, 264, 264, 264, 264, 264, 149, 264, - 264, 264, 104, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 171, 264, 150, 264, 264, 183, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 37, 264, 264, 264, 264, - 264, 264, 106, 95, 264, 96, 264, 264, 94, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 221, + 265, 265, 265, 242, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 37, + 265, 265, 265, 265, 265, 265, 265, 265, 150, 265, + 265, 265, 105, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 172, 265, 151, 265, 265, 184, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 38, 265, 265, 265, 265, + 265, 265, 107, 96, 265, 97, 265, 265, 95, 265, - 264, 264, 264, 264, 264, 264, 264, 120, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 206, - 264, 264, 264, 264, 264, 264, 264, 264, 151, 264, - 264, 264, 264, 264, 154, 264, 264, 264, 182, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 84, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 44, 264, 264, 264, 22, 264, - 264, 264, 264, 264, 19, 264, 264, 264, 264, 23, - 32, 264, 130, 264, 264, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 121, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 207, + 265, 265, 265, 265, 265, 265, 265, 265, 152, 265, + 265, 265, 265, 265, 155, 265, 265, 265, 183, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 85, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 45, 265, 265, 265, 22, 265, + 265, 265, 265, 265, 19, 265, 265, 265, 265, 23, + 32, 265, 131, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 59, 61, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 224, 264, 264, 264, 193, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 97, 264, 264, 264, 264, - 264, 264, 264, 264, 119, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 235, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 124, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 177, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 60, 62, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 225, 265, 265, 265, 194, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 98, 265, 265, 265, 265, + 265, 265, 265, 265, 120, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 236, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 125, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 178, - 264, 264, 264, 264, 264, 264, 264, 264, 244, 264, - 264, 264, 264, 264, 264, 264, 264, 141, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 136, - 264, 144, 264, 264, 264, 264, 264, 112, 264, 264, - 264, 264, 264, 80, 264, 264, 264, 264, 169, 264, - 264, 264, 264, 264, 184, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 198, 264, 264, - 264, 264, 264, 264, 105, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 140, 264, 264, 264, 264, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 245, 265, + 265, 265, 265, 265, 265, 265, 265, 142, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 137, + 265, 145, 265, 265, 265, 265, 265, 113, 265, 265, + 265, 265, 265, 81, 265, 265, 265, 265, 170, 265, + 265, 265, 265, 265, 185, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 199, 265, 265, + 265, 265, 265, 265, 106, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 141, 265, 265, 265, 265, 265, - 62, 63, 264, 264, 264, 264, 264, 45, 264, 264, - 264, 264, 264, 69, 145, 264, 160, 264, 186, 155, - 218, 264, 264, 264, 55, 264, 147, 264, 264, 264, - 264, 264, 9, 264, 264, 264, 83, 264, 264, 264, - 264, 211, 264, 264, 264, 168, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 139, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 126, 223, 264, 264, 264, + 63, 64, 265, 265, 265, 265, 265, 46, 265, 265, + 265, 265, 265, 70, 146, 265, 161, 265, 187, 156, + 219, 265, 265, 265, 56, 265, 148, 265, 265, 265, + 265, 265, 9, 265, 265, 265, 84, 265, 265, 265, + 265, 212, 265, 265, 265, 169, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 140, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 127, 224, 265, 265, 265, - 264, 197, 264, 264, 264, 264, 264, 264, 264, 264, - 179, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 238, 264, 146, 264, - 264, 264, 54, 56, 264, 264, 264, 264, 264, 264, - 264, 82, 264, 264, 264, 264, 209, 264, 264, 264, - 219, 264, 264, 264, 264, 264, 264, 173, 30, 24, - 26, 264, 264, 264, 264, 264, 264, 31, 25, 27, - 264, 264, 264, 264, 264, 264, 79, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 265, 198, 265, 265, 265, 265, 265, 265, 265, 265, + 180, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 239, 265, 147, 265, + 265, 265, 55, 57, 265, 265, 265, 265, 265, 265, + 265, 83, 265, 265, 265, 265, 210, 265, 265, 265, + 220, 265, 265, 265, 265, 265, 265, 174, 30, 24, + 26, 265, 265, 265, 265, 265, 265, 31, 25, 27, + 265, 265, 265, 265, 265, 265, 80, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 175, 172, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 53, - 264, 107, 264, 264, 264, 264, 264, 264, 264, 264, - 121, 13, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 233, 264, 236, 264, 264, 264, 264, 264, 264, - 12, 264, 264, 21, 264, 264, 264, 215, 264, 264, - 264, 221, 264, 57, 264, 181, 264, 174, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 135, 134, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 176, 170, 264, 264, 264, + 265, 265, 265, 265, 176, 173, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 54, + 265, 108, 265, 265, 265, 265, 265, 265, 265, 265, + 122, 13, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 234, 265, 237, 265, 265, 265, 265, 265, 265, + 12, 265, 265, 21, 265, 265, 265, 216, 265, 265, + 265, 222, 265, 58, 265, 182, 265, 175, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 136, 135, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 177, 171, 265, 265, 265, - 225, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 64, 264, 264, 264, 210, 264, 264, - 264, 264, 264, 180, 264, 264, 264, 264, 264, 264, - 264, 264, 242, 243, 132, 58, 264, 264, 264, 92, - 93, 264, 264, 127, 264, 129, 264, 161, 264, 264, - 264, 133, 264, 264, 187, 264, 264, 264, 264, 264, - 264, 264, 114, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 194, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 162, + 226, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 65, 265, 265, 265, 211, 265, 265, + 265, 265, 265, 181, 265, 265, 265, 265, 265, 265, + 265, 265, 243, 244, 133, 59, 265, 265, 265, 93, + 94, 265, 265, 128, 265, 130, 265, 162, 265, 265, + 265, 134, 265, 265, 188, 265, 265, 265, 265, 265, + 265, 265, 115, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 195, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 163, - 264, 264, 208, 264, 237, 264, 264, 264, 40, 264, - 264, 264, 264, 4, 264, 264, 113, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 190, - 33, 34, 264, 264, 264, 264, 264, 264, 264, 226, - 264, 264, 264, 264, 264, 264, 196, 264, 264, 165, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 67, - 264, 41, 214, 264, 191, 264, 264, 11, 264, 264, - 264, 264, 264, 264, 163, 71, 264, 264, 264, 264, - 264, 264, 138, 264, 264, 264, 264, 264, 116, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 195, 110, + 265, 265, 209, 265, 238, 265, 265, 265, 41, 265, + 265, 265, 265, 4, 265, 265, 114, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 191, + 33, 34, 265, 265, 265, 265, 265, 265, 265, 227, + 265, 265, 265, 265, 265, 265, 197, 265, 265, 166, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 68, + 265, 42, 215, 265, 192, 265, 265, 11, 265, 265, + 265, 265, 265, 265, 164, 72, 36, 265, 265, 265, + 265, 265, 265, 139, 265, 265, 265, 265, 265, 117, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 196, - 264, 98, 99, 264, 264, 264, 73, 77, 72, 264, - 65, 264, 264, 264, 10, 264, 264, 264, 212, 264, - 35, 264, 264, 264, 137, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 78, 76, 264, 66, 234, 264, 264, 264, - 152, 264, 264, 164, 264, 264, 264, 264, 264, 264, - 128, 60, 264, 264, 264, 264, 264, 227, 264, 264, - 264, 264, 264, 264, 264, 111, 75, 117, 118, 68, - 264, 213, 131, 264, 264, 264, 264, 189, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 111, 265, 99, 100, 265, 265, 265, 74, 78, 73, + 265, 66, 265, 265, 265, 10, 265, 265, 265, 213, + 265, 35, 265, 265, 265, 138, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 79, 77, 265, 67, 235, 265, 265, + 265, 153, 265, 265, 165, 265, 265, 265, 265, 265, + 265, 129, 61, 265, 265, 265, 265, 265, 228, 265, + 265, 265, 265, 265, 265, 265, 112, 76, 118, 119, + 69, 265, 214, 132, 265, 265, 265, 265, 190, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 81, - 264, 188, 264, 205, 231, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 5, 264, 264, 264, 232, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 115, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 148, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 228, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 245, 264, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 82, 265, 189, 265, 206, 232, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 5, 265, 265, 265, 233, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 116, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 149, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 229, 265, 265, 265, 265, 265, 265, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, 265, 246, - 264, 201, 264, 264, 264, 264, 264, 229, 264, 264, - 264, 264, 264, 264, 230, 264, 264, 264, 199, 264, - 202, 203, 264, 264, 264, 264, 264, 200, 204, 0 + 265, 265, 202, 265, 265, 265, 265, 265, 230, 265, + 265, 265, 265, 265, 265, 231, 265, 265, 265, 200, + 265, 203, 204, 265, 265, 265, 265, 265, 201, 205, + 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -708,15 +709,15 @@ static yyconst YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2645] = +static yyconst flex_uint16_t yy_base[2646] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 352, 307, 96, 7525, 7525, 7525, 109, 171, + 131, 137, 352, 307, 96, 7504, 7504, 7504, 109, 171, 85, 142, 215, 83, 117, 152, 207, 50, 110, 75, 167, 231, 112, 275, 121, 259, 323, 243, 291, 320, - 170, 368, 289, 7525, 7525, 7525, 104, 288, 7525, 7525, - 7525, 147, 286, 289, 7525, 7525, 7525, 305, 239, 7525, - 7525, 7525, 160, 210, 7525, 372, 7525, 177, 382, 201, + 170, 368, 289, 7504, 7504, 7504, 104, 288, 7504, 7504, + 7504, 147, 286, 289, 7504, 7504, 7504, 305, 239, 7504, + 7504, 7504, 160, 210, 7504, 372, 7504, 177, 382, 201, 386, 115, 0, 390, 0, 0, 160, 162, 199, 204, 188, 169, 303, 222, 256, 248, 377, 369, 254, 226, 313, 271, 365, 382, 296, 327, 391, 392, 384, 420, @@ -746,7 +747,7 @@ static yyconst flex_uint16_t yy_base[2645] = 1037, 1044, 1061, 1057, 1054, 1071, 1058, 1055, 1062, 1064, 1075, 1077, 1099, 1085, 1098, 1111, 1102, 1104, 1113, 1094, 1125, 1124, 1122, 1132, 1126, 1174, 1134, 1135, 1142, 1151, - 7525, 1169, 1153, 1223, 1143, 1173, 1191, 1181, 1184, 1194, + 7504, 1169, 1153, 1223, 1143, 1173, 1191, 1181, 1184, 1194, 1192, 1218, 1209, 1203, 1097, 1196, 1162, 1252, 1183, 1221, 1224, 1231, 1254, 1234, 1236, 1240, 1245, 1261, 1279, 1253, 1266, 1265, 1291, 1274, 1269, 1283, 1281, 1296, 1273, 1309, @@ -754,13 +755,13 @@ static yyconst flex_uint16_t yy_base[2645] = 1320, 1325, 1347, 1350, 1334, 1348, 1358, 1351, 1360, 1357, 1366, 1355, 1372, 1362, 1374, 1381, 1384, 1378, 1382, 1392, - 1403, 1387, 1397, 1391, 1415, 7525, 1419, 1401, 1405, 1417, - 1418, 1409, 7525, 1432, 1431, 1427, 1440, 1428, 1461, 1455, + 1403, 1387, 1397, 1391, 1415, 7504, 1419, 1401, 1405, 1417, + 1418, 1409, 7504, 1432, 1431, 1427, 1440, 1428, 1461, 1455, 1443, 1458, 1467, 1453, 1468, 1479, 1449, 1476, 1464, 1462, 1488, 1494, 1487, 1496, 1489, 1485, 1532, 1498, 1490, 1514, 1516, 1517, 1512, 1529, 1519, 1528, 1568, 1526, 1547, 1556, 1565, 1545, 1579, 1567, 1559, 1569, 1562, 1577, 1583, 1578, - 1593, 1575, 1595, 7525, 1604, 1614, 1480, 1607, 1606, 1597, + 1593, 1575, 1595, 7504, 1604, 1614, 1480, 1607, 1606, 1597, 1609, 1610, 1611, 1626, 1622, 1640, 1624, 1627, 1649, 1643, 1652, 1646, 1657, 1648, 1656, 1662, 1675, 1650, 1686, 1682, 1671, 1672, 1669, 1674, 1678, 1673, 1676, 1699, 1687, 1700, @@ -777,528 +778,528 @@ static yyconst flex_uint16_t yy_base[2645] = 1969, 1963, 1970, 1977, 1995, 1994, 1997, 2008, 1988, 2007, 1980, 2003, 2009, 2011, 2015, 2016, 2021, 2012, 2022, 2036, - 2040, 2034, 2032, 2056, 2037, 2053, 7525, 2041, 2061, 2046, - 2067, 2058, 2059, 2074, 2064, 2078, 2075, 2083, 2126, 7525, - 2080, 7525, 7525, 2089, 7525, 7525, 2081, 2107, 2105, 2114, + 2040, 2034, 2032, 2056, 2037, 2053, 7504, 2041, 2061, 2046, + 2067, 2058, 2059, 2074, 2064, 2078, 2075, 2083, 2126, 7504, + 2080, 7504, 7504, 2089, 7504, 7504, 2081, 2107, 2105, 2114, 2119, 2101, 2110, 2123, 2084, 2175, 2139, 2133, 2141, 2136, 2122, 2129, 2157, 2168, 2158, 2188, 2178, 2171, 2185, 2195, 2180, 2199, 2204, 2203, 2206, 2205, 2210, 2212, 2214, 2216, - 2217, 2231, 2242, 2251, 7525, 2243, 2172, 2252, 2246, 2247, + 2217, 2231, 2242, 2251, 7504, 2243, 2172, 2252, 2246, 2247, 2254, 2256, 2239, 2255, 2258, 2240, 2268, 2263, 2269, 2276, - 2274, 7525, 2279, 2285, 2292, 2289, 2299, 2295, 2291, 2282, + 2274, 7504, 2279, 2285, 2292, 2289, 2299, 2295, 2291, 2282, - 2309, 2296, 2312, 2308, 2306, 2337, 7525, 2326, 2314, 2322, + 2309, 2296, 2312, 2308, 2306, 2337, 7504, 2326, 2314, 2322, 2341, 2324, 2327, 2332, 2334, 2342, 2351, 2359, 2353, 2357, 2368, 2354, 2369, 2378, 2379, 2382, 2374, 2390, 2380, 2391, 2375, 2393, 2396, 2402, 2415, 2405, 2419, 2404, 2403, 2421, 2423, 2418, 2435, 2442, 2431, 2426, 2438, 2452, 2437, 2454, 2449, 2465, 2456, 2458, 2455, 2471, 2453, 2468, 2469, 2484, - 7525, 2463, 2477, 7525, 2485, 2486, 2532, 2492, 2502, 2494, + 7504, 2463, 2477, 7504, 2485, 2486, 2532, 2492, 2502, 2494, 2497, 2513, 2512, 2518, 2511, 2531, 2528, 2547, 2545, 2552, 2556, 2549, 2544, 2559, 2483, 2571, 2577, 1152, 2586, 2566, 2564, 2613, 2583, 2584, 2588, 2591, 2596, 2615, 2599, 2611, - 2608, 2609, 2617, 2641, 7525, 2604, 2634, 2624, 2636, 2655, + 2608, 2609, 2617, 2641, 7504, 2604, 2634, 2624, 2636, 2655, 2648, 2638, 2647, 2658, 2646, 2663, 2660, 2652, 2672, 2661, - 2664, 2666, 2683, 2688, 2700, 7525, 2685, 7525, 2689, 2687, - 2684, 2694, 2712, 2713, 2715, 2698, 2721, 2705, 2710, 7525, + 2664, 2666, 2683, 2688, 2700, 7504, 2685, 7504, 2689, 2687, + 2684, 2694, 2712, 2713, 2715, 2698, 2721, 2705, 2710, 7504, 2719, 2731, 2737, 2740, 2739, 2732, 2733, 2742, 2746, 2759, 2736, 2762, 2768, 2754, 2767, 2769, 2760, 2779, 2780, 2765, - 7525, 2787, 2781, 2794, 2795, 2791, 2796, 2792, 2806, 2798, - 2807, 2808, 2802, 2818, 2822, 2825, 2833, 7525, 2813, 2819, + 7504, 2787, 2781, 2794, 2795, 2791, 2796, 2792, 2806, 2798, + 2807, 2808, 2802, 2818, 2822, 2825, 2833, 7504, 2813, 2819, 2846, 2844, 2841, 2829, 2845, 2851, 2852, 2843, 2855, 2856, 2864, 2865, 2857, 2869, 2866, 2872, 2875, 1093, 2877, 2888, - 2879, 2876, 7525, 2881, 2905, 61, 2896, 2894, 2899, 2912, + 2879, 2876, 7504, 2881, 2905, 61, 2896, 2894, 2899, 2912, 2907, 2918, 2913, 2924, 2925, 2926, 2927, 2930, 2928, 2932, 2936, 2934, 2945, 2940, 2950, 2951, 2948, 2952, 2953, 2975, - 2962, 2980, 7525, 2983, 2990, 2979, 2973, 2998, 2997, 3007, - 3000, 3010, 3013, 3011, 7525, 3004, 3014, 3024, 3028, 3031, + 2962, 2980, 7504, 2983, 2990, 2979, 2973, 2998, 2997, 3007, + 3000, 3010, 3013, 3011, 7504, 3004, 3014, 3024, 3028, 3031, 3027, 3032, 3034, 3037, 3050, 3041, 3040, 3051, 3045, 3055, - 3063, 3068, 3061, 3064, 3076, 7525, 2993, 3072, 3079, 3074, + 3063, 3068, 3061, 3064, 3076, 7504, 2993, 3072, 3079, 3074, 3093, 3077, 3107, 3090, 3091, 3102, 3118, 3142, 3113, 3121, 3127, 3132, 3136, 3122, 3139, 3157, 3163, 3167, 3153, 3166, 3171, 3169, 3168, 3129, 3140, 3174, 3177, 3205, 3184, 1434, - 3204, 7525, 3203, 3201, 3191, 3208, 3227, 3202, 3228, 3212, + 3204, 7504, 3203, 3201, 3191, 3208, 3227, 3202, 3228, 3212, 3211, 3218, 3230, 3232, 3242, 3253, 3247, 3254, 3244, 3241, - 3260, 3270, 3257, 3273, 3275, 7525, 3276, 3281, 3282, 3278, + 3260, 3270, 3257, 3273, 3275, 7504, 3276, 3281, 3282, 3278, 3271, 3294, 3290, 3289, 3293, 3296, 3292, 3302, 3306, 3309, - 7525, 3321, 3320, 3322, 3318, 3330, 3338, 3331, 3328, 3334, - 3337, 3347, 7525, 3336, 3355, 3351, 3371, 3359, 3350, 3361, - 3375, 3364, 7525, 3365, 3353, 3386, 3394, 3373, 7525, 3395, + 7504, 3321, 3320, 3322, 3318, 3330, 3338, 3331, 3328, 3334, + 3337, 3347, 7504, 3336, 3355, 3351, 3371, 3359, 3350, 3361, + 3375, 3364, 7504, 3365, 3353, 3386, 3394, 3373, 7504, 3395, 3387, 3377, 3381, 3391, 3392, 3408, 3396, 3390, 3411, 3420, - 3426, 3404, 3428, 7525, 3421, 3444, 3432, 3422, 3431, 3435, + 3426, 3404, 3428, 7504, 3421, 3444, 3432, 3422, 3431, 3435, 3446, 3458, 3449, 3455, 3470, 3471, 3468, 3462, 3457, 3474, - 3482, 3476, 3480, 7525, 3472, 3493, 3503, 3501, 3497, 3498, + 3482, 3476, 3480, 7504, 3472, 3493, 3503, 3501, 3497, 3498, 3506, 3507, 3502, 3508, 3521, 3520, 3532, 3533, 3541, 3531, 3542, 3553, 3547, 3550, 3534, 3552, 3485, 3570, 3571, 3574, - 7525, 3585, 3582, 3578, 3573, 3576, 3577, 3581, 3593, 3596, + 7504, 3585, 3582, 3578, 3573, 3576, 3577, 3581, 3593, 3596, 3598, 3602, 3597, 3603, 3631, 3632, 3608, 3617, 3618, 3620, 3621, 3624, 3645, 3626, 3627, 3644, 3661, 3638, 3643, 3648, 3655, 3664, 3659, 3666, 3675, 3682, 3671, 3660, 3687, 3686, - 3684, 3691, 3693, 3719, 7525, 3699, 3701, 3695, 3707, 3729, - 3727, 3730, 3733, 3736, 3724, 3731, 3741, 3746, 3739, 7525, - 3751, 7525, 3726, 3750, 3771, 3775, 7525, 3779, 7525, 3780, + 3684, 3691, 3693, 3719, 7504, 3699, 3701, 3695, 3707, 3729, + 3727, 3730, 3733, 3736, 3724, 3731, 3741, 3746, 3739, 7504, + 3751, 7504, 3726, 3750, 3771, 3775, 7504, 3779, 7504, 3780, - 3765, 3767, 7525, 3782, 3786, 3774, 3763, 3788, 3790, 3777, + 3765, 3767, 7504, 3782, 3786, 3774, 3763, 3788, 3790, 3777, 3804, 3778, 3796, 3807, 3820, 3811, 3800, 3824, 3809, 3831, - 3813, 3822, 3837, 3823, 3834, 7525, 3843, 3827, 3830, 3854, + 3813, 3822, 3837, 3823, 3834, 7504, 3843, 3827, 3830, 3854, 3849, 3840, 3876, 3870, 3858, 3859, 3871, 3882, 3864, 3881, - 3888, 3894, 3892, 3899, 7525, 3902, 3895, 3898, 3907, 7525, + 3888, 3894, 3892, 3899, 7504, 3902, 3895, 3898, 3907, 7504, 3872, 3923, 3926, 3904, 3910, 3915, 3929, 3934, 3921, 3938, 3946, 3941, 3942, 3954, 3961, 3945, 3968, 3951, 3974, 3976, 3962, 3969, 3965, 3980, 3985, 3989, 3991, 3995, 3992, 3988, 4001, 4008, 4009, 4002, 3997, 4003, 4007, 4025, 4019, 4024, - 4018, 4022, 4033, 4029, 4034, 7525, 4040, 4045, 4049, 4056, + 4018, 4022, 4033, 4029, 4034, 7504, 4040, 4045, 4049, 4056, - 4044, 4048, 4050, 4060, 4064, 4070, 4061, 4081, 4080, 7525, - 4079, 7525, 4077, 4098, 4103, 4106, 4110, 4100, 4092, 4117, + 4044, 4048, 4050, 4060, 4064, 4070, 4061, 4081, 4080, 7504, + 4079, 7504, 4077, 4098, 4103, 4106, 4110, 4100, 4092, 4117, 4108, 4105, 4112, 4133, 4107, 4120, 4128, 4126, 4135, 4132, - 4138, 4140, 4149, 7525, 4139, 4136, 4167, 4155, 4165, 4173, - 4169, 4177, 4172, 4166, 4185, 4207, 7525, 4192, 4213, 4191, - 4210, 4220, 4216, 4225, 4217, 7525, 4202, 4212, 4229, 4214, - 4242, 7525, 7525, 4219, 4236, 4249, 4246, 4244, 4247, 4233, - 4253, 4215, 4250, 4248, 4270, 4237, 4263, 4269, 7525, 4281, - 4271, 4285, 4294, 4295, 4296, 4293, 4280, 7525, 4277, 4305, + 4138, 4140, 4149, 7504, 4139, 4136, 4167, 4155, 4165, 4173, + 4169, 4177, 4172, 4166, 4185, 4207, 7504, 4192, 4213, 4191, + 4210, 4220, 4216, 4225, 4217, 7504, 4202, 4212, 4229, 4214, + 4242, 7504, 7504, 4219, 4236, 4249, 4246, 4244, 4247, 4233, + 4253, 4215, 4250, 4248, 4270, 4237, 4263, 4269, 7504, 4281, + 4271, 4285, 4294, 4295, 4296, 4293, 4280, 7504, 4277, 4305, 4290, 4312, 4306, 4311, 4317, 4308, 4322, 4328, 4318, 4321, - 4348, 4335, 4332, 4351, 4346, 4353, 4354, 7525, 4355, 4361, + 4348, 4335, 4332, 4351, 4346, 4353, 4354, 7504, 4355, 4361, 4363, 4359, 4364, 4362, 4349, 4372, 4377, 4382, 4374, 4376, 4390, 4392, 4403, 4396, 4393, 4399, 4410, 4416, 4404, 4409, 4419, 4422, 4432, 4415, 4438, 4427, 4444, 4429, 4436, 4448, - 4449, 4463, 4458, 7525, 4467, 4446, 4472, 4443, 4466, 4478, - 4480, 4477, 4497, 4459, 4492, 4487, 4493, 7525, 4502, 4501, + 4449, 4463, 4458, 7504, 4467, 4446, 4472, 4443, 4466, 4478, + 4480, 4477, 4497, 4459, 4492, 4487, 4493, 7504, 4502, 4501, 4496, 4506, 4503, 4494, 4522, 4507, 4505, 4535, 4520, 4540, - 4528, 4529, 4549, 4552, 7525, 7525, 4554, 7525, 4555, 4538, - 4557, 4545, 4562, 4561, 4566, 4573, 4568, 4582, 7525, 4575, + 4528, 4529, 4549, 4552, 7504, 7504, 4554, 7504, 4555, 4538, + 4557, 4545, 4562, 4561, 4566, 4573, 4568, 4582, 7504, 4575, 4576, 4579, 4578, 4588, 4609, 4608, 4605, 4602, 4593, 4595, - 4604, 4615, 4606, 4601, 4622, 4635, 4619, 4629, 4643, 7525, - 4628, 4633, 4638, 7525, 4640, 4630, 4658, 4660, 4668, 4672, + 4604, 4615, 4606, 4601, 4622, 4635, 4619, 4629, 4643, 7504, + 4628, 4633, 4638, 7504, 4640, 4630, 4658, 4660, 4668, 4672, 4662, 4677, 4661, 4667, 4686, 4687, 4688, 4684, 4691, 4689, - 4701, 4697, 4698, 4726, 4715, 4727, 4703, 4711, 4732, 7525, - 4719, 4733, 4724, 4716, 4740, 4725, 4745, 4743, 7525, 4749, - 4738, 4764, 7525, 4759, 4765, 4748, 4771, 4753, 4750, 4772, - 4774, 4775, 4776, 7525, 4782, 7525, 4780, 4792, 7525, 4799, + 4701, 4697, 4698, 4726, 4715, 4727, 4703, 4711, 4732, 7504, + 4719, 4733, 4724, 4716, 4740, 4725, 4745, 4743, 7504, 4749, + 4738, 4764, 7504, 4759, 4765, 4748, 4771, 4753, 4750, 4772, + 4774, 4775, 4776, 7504, 4782, 7504, 4780, 4792, 7504, 4799, 4801, 4789, 4790, 4788, 4815, 4817, 4818, 4803, 4816, 4809, - 4810, 4828, 4830, 4838, 4834, 7525, 4852, 4833, 4849, 4854, - 4855, 4856, 7525, 7525, 4839, 7525, 4857, 4861, 7525, 4859, + 4810, 4828, 4830, 4838, 4834, 7504, 4852, 4833, 4849, 4854, + 4855, 4856, 7504, 7504, 4839, 7504, 4857, 4861, 7504, 4859, - 4875, 4876, 4870, 4871, 4866, 4892, 4897, 7525, 4899, 4888, - 4909, 4898, 4890, 4900, 4901, 4917, 4894, 4903, 4935, 7525, - 4922, 4919, 4923, 4925, 4928, 4950, 4946, 4937, 7525, 4955, - 4959, 4945, 4962, 4958, 7525, 4970, 4964, 4969, 7525, 4981, + 4875, 4876, 4870, 4871, 4866, 4892, 4897, 7504, 4899, 4888, + 4909, 4898, 4890, 4900, 4901, 4917, 4894, 4903, 4935, 7504, + 4922, 4919, 4923, 4925, 4928, 4950, 4946, 4937, 7504, 4955, + 4959, 4945, 4962, 4958, 7504, 4970, 4964, 4969, 7504, 4981, 4966, 4973, 4978, 5000, 4996, 5004, 4989, 4991, 5017, 5008, - 5006, 5012, 7525, 5005, 5016, 5014, 5036, 5027, 5025, 5022, + 5006, 5012, 7504, 5005, 5016, 5014, 5036, 5027, 5025, 5022, 5043, 5051, 5050, 5055, 5044, 5059, 5061, 5064, 5067, 5063, - 5047, 5081, 5075, 5085, 7525, 5086, 5091, 5094, 7525, 5088, - 5087, 5092, 5102, 5089, 7525, 5115, 5118, 5104, 5112, 7525, - 7525, 5116, 7525, 5132, 5123, 5125, 5126, 5139, 5133, 5147, + 5047, 5081, 5075, 5085, 7504, 5086, 5091, 5094, 7504, 5088, + 5087, 5092, 5102, 5089, 7504, 5115, 5118, 5104, 5112, 7504, + 7504, 5116, 7504, 5132, 5123, 5125, 5126, 5139, 5133, 5147, 5141, 5136, 5154, 5159, 5157, 5176, 5166, 5174, 5169, 5171, - 5160, 7525, 7525, 5177, 5187, 5181, 5189, 5191, 5182, 5193, - 5200, 5205, 5212, 5217, 5228, 7525, 5220, 5206, 5221, 7525, + 5160, 7504, 7504, 5177, 5187, 5181, 5189, 5191, 5182, 5193, + 5200, 5205, 5212, 5217, 5228, 7504, 5220, 5206, 5221, 7504, 5209, 5230, 5218, 5216, 5237, 5232, 5238, 5246, 5252, 5245, - 5258, 5240, 5251, 5269, 5271, 7525, 5257, 5261, 5259, 5265, - 5272, 5273, 5283, 5281, 7525, 5290, 5304, 5303, 5298, 5299, + 5258, 5240, 5251, 5269, 5271, 7504, 5257, 5261, 5259, 5265, + 5272, 5273, 5283, 5281, 7504, 5290, 5304, 5303, 5298, 5299, 5301, 5318, 5312, 5315, 5308, 5307, 5326, 5339, 5336, 5332, - 7525, 5338, 5329, 5335, 5340, 5344, 5357, 5341, 5358, 5354, - 5361, 5369, 5373, 5363, 5364, 7525, 5375, 5374, 5367, 5389, - 5379, 5387, 5392, 5402, 5398, 5390, 5396, 5407, 5405, 7525, + 7504, 5338, 5329, 5335, 5340, 5344, 5357, 5341, 5358, 5354, + 5361, 5369, 5373, 5363, 5364, 7504, 5375, 5374, 5367, 5389, + 5379, 5387, 5392, 5402, 5398, 5390, 5396, 5407, 5405, 7504, - 5388, 5404, 5406, 5424, 5412, 5422, 5425, 5429, 7525, 5437, - 5423, 5435, 5432, 5431, 5459, 5438, 5461, 7525, 5454, 5467, + 5388, 5404, 5406, 5424, 5412, 5422, 5425, 5429, 7504, 5437, + 5423, 5435, 5432, 5431, 5459, 5438, 5461, 7504, 5454, 5467, 5470, 5451, 5464, 5458, 5478, 5484, 5487, 5480, 5485, 5491, - 5473, 5488, 5499, 5500, 5504, 5511, 5503, 5526, 5525, 7525, - 5512, 7525, 5515, 5533, 5538, 5536, 5521, 7525, 5530, 5539, - 5549, 5535, 5558, 7525, 5542, 5559, 5556, 5562, 7525, 5576, - 5573, 5560, 5572, 5588, 7525, 5590, 5589, 5586, 5598, 5600, - 5596, 5583, 5603, 5602, 5594, 5593, 5621, 7525, 5605, 5623, - 5628, 5629, 5613, 5638, 7525, 5617, 5625, 5632, 5639, 5627, - 5652, 5656, 5661, 5644, 7525, 5659, 5653, 5668, 5669, 5674, + 5473, 5488, 5499, 5500, 5504, 5511, 5503, 5526, 5525, 7504, + 5512, 7504, 5515, 5533, 5538, 5536, 5521, 7504, 5530, 5539, + 5549, 5535, 5558, 7504, 5542, 5559, 5556, 5562, 7504, 5576, + 5573, 5560, 5572, 5588, 7504, 5590, 5589, 5586, 5598, 5600, + 5596, 5583, 5603, 5602, 5594, 5593, 5621, 7504, 5605, 5623, + 5628, 5629, 5613, 5638, 7504, 5617, 5625, 5632, 5639, 5627, + 5652, 5656, 5661, 5644, 7504, 5659, 5653, 5668, 5669, 5674, - 7525, 7525, 5664, 5680, 5679, 5666, 5686, 7525, 5693, 5673, - 5698, 5690, 5702, 7525, 7525, 5699, 7525, 5694, 7525, 7525, - 7525, 5713, 5717, 5715, 7525, 5716, 7525, 5703, 5726, 5707, - 5706, 5730, 7525, 5729, 5719, 5732, 7525, 5738, 5741, 5733, - 5737, 7525, 5761, 5744, 5749, 7525, 5765, 5769, 5768, 5772, + 7504, 7504, 5664, 5680, 5679, 5666, 5686, 7504, 5693, 5673, + 5698, 5690, 5702, 7504, 7504, 5699, 7504, 5694, 7504, 7504, + 7504, 5713, 5717, 5715, 7504, 5716, 7504, 5703, 5726, 5707, + 5706, 5730, 7504, 5729, 5719, 5732, 7504, 5738, 5741, 5733, + 5737, 7504, 5761, 5744, 5749, 7504, 5765, 5769, 5768, 5772, 5778, 5756, 5771, 5776, 5782, 5784, 5786, 5787, 5779, 5783, 5788, 5816, 5807, 5804, 5802, 5821, 5822, 5811, 5818, 5812, 5806, 5827, 5810, 5835, 5831, 5815, 5836, 5842, 5837, 5846, - 5864, 5857, 5859, 5862, 7525, 5852, 5849, 5858, 5869, 5876, - 5873, 5875, 5894, 5895, 5905, 7525, 7525, 5908, 5892, 5900, + 5864, 5857, 5859, 5862, 7504, 5852, 5849, 5858, 5869, 5876, + 5873, 5875, 5894, 5895, 5905, 7504, 7504, 5908, 5892, 5900, - 5893, 7525, 5896, 5897, 5891, 5914, 5917, 5925, 5928, 5929, - 7525, 5931, 5938, 5948, 5932, 5933, 5942, 5939, 5944, 5952, + 5893, 7504, 5896, 5897, 5891, 5914, 5917, 5925, 5928, 5929, + 7504, 5931, 5938, 5948, 5932, 5933, 5942, 5939, 5944, 5952, 5964, 5963, 5967, 5968, 5969, 5965, 5971, 5966, 5979, 5981, - 5994, 5995, 5997, 5988, 6002, 6003, 7525, 5998, 7525, 5996, - 6013, 6015, 7525, 7525, 6016, 6032, 6018, 6022, 6020, 6019, - 6044, 7525, 6024, 6046, 6052, 6040, 7525, 6049, 6054, 6055, - 7525, 6045, 6056, 6051, 6058, 6063, 6086, 7525, 7525, 7525, - 7525, 6087, 6067, 6078, 6079, 6084, 6083, 7525, 7525, 7525, - 6094, 6090, 6095, 6101, 6105, 6115, 7525, 6114, 6103, 6107, + 5994, 5995, 5997, 5988, 6002, 6003, 7504, 5998, 7504, 5996, + 6013, 6015, 7504, 7504, 6016, 6032, 6018, 6022, 6020, 6019, + 6044, 7504, 6024, 6046, 6052, 6040, 7504, 6049, 6054, 6055, + 7504, 6045, 6056, 6051, 6058, 6063, 6086, 7504, 7504, 7504, + 7504, 6087, 6067, 6078, 6079, 6084, 6083, 7504, 7504, 7504, + 6094, 6090, 6095, 6101, 6105, 6115, 7504, 6114, 6103, 6107, 6118, 6137, 6138, 6136, 6135, 6126, 6128, 6152, 6149, 6147, - 6142, 6153, 6159, 6161, 7525, 7525, 6155, 6163, 6177, 6173, - 6182, 6188, 6185, 6186, 6183, 6179, 6190, 6196, 6195, 7525, - 6199, 7525, 6203, 6206, 6209, 6218, 6215, 6223, 6219, 6228, - 7525, 7525, 6221, 6229, 6225, 6239, 6234, 6248, 6245, 6241, - 6243, 7525, 6250, 7525, 6254, 6259, 6278, 6269, 6271, 6277, - 7525, 6276, 6270, 7525, 6284, 6280, 6287, 7525, 6290, 6293, - 6295, 7525, 6299, 7525, 6300, 7525, 6296, 7525, 6304, 6307, + 6142, 6153, 6159, 6161, 7504, 7504, 6155, 6163, 6177, 6173, + 6182, 6188, 6185, 6186, 6183, 6179, 6190, 6196, 6195, 7504, + 6199, 7504, 6203, 6206, 6209, 6218, 6215, 6223, 6219, 6228, + 7504, 7504, 6221, 6229, 6225, 6239, 6234, 6248, 6245, 6241, + 6243, 7504, 6250, 7504, 6254, 6259, 6278, 6269, 6271, 6277, + 7504, 6276, 6270, 7504, 6284, 6280, 6287, 7504, 6290, 6293, + 6295, 7504, 6299, 7504, 6300, 7504, 6296, 7504, 6304, 6307, 6313, 6319, 6322, 6310, 6330, 6331, 6333, 6321, 6338, 6323, - 6339, 6344, 6342, 6343, 7525, 7525, 6361, 6349, 6355, 6357, - 6356, 6359, 6354, 6360, 6367, 7525, 7525, 6368, 6370, 6382, + 6339, 6344, 6342, 6343, 7504, 7504, 6361, 6349, 6355, 6357, + 6356, 6359, 6354, 6360, 6367, 7504, 7504, 6368, 6370, 6382, - 7525, 6365, 6393, 6397, 6398, 6383, 6391, 6394, 6407, 6400, + 7504, 6365, 6393, 6397, 6398, 6383, 6391, 6394, 6407, 6400, 6405, 6410, 6421, 6425, 6430, 6432, 6420, 6434, 6423, 6418, - 6442, 6435, 6445, 7525, 6454, 6461, 6449, 7525, 6468, 6466, - 6474, 6470, 6471, 7525, 6459, 6479, 6481, 6478, 6469, 6515, - 6476, 6490, 7525, 7525, 7525, 7525, 6509, 6504, 6506, 7525, - 7525, 6494, 6500, 7525, 6510, 7525, 6502, 7525, 6525, 6527, - 6526, 7525, 6529, 6537, 7525, 6524, 6532, 6539, 6549, 6540, - 6544, 6543, 7525, 6574, 6567, 6568, 6577, 6561, 6557, 6575, - 6564, 6586, 6571, 6583, 7525, 6570, 6588, 6592, 6595, 6598, - 6610, 6609, 6601, 6593, 6613, 6619, 6600, 6629, 6615, 7525, + 6442, 6435, 6445, 7504, 6454, 6461, 6449, 7504, 6468, 6466, + 6474, 6470, 6471, 7504, 6459, 6479, 6481, 6478, 6469, 6515, + 6476, 6490, 7504, 7504, 7504, 7504, 6509, 6504, 6506, 7504, + 7504, 6494, 6500, 7504, 6510, 7504, 6502, 7504, 6525, 6527, + 6526, 7504, 6529, 6537, 7504, 6524, 6532, 6539, 6549, 6540, + 6544, 6543, 7504, 6574, 6567, 6568, 6577, 6561, 6557, 6575, + 6564, 6586, 6571, 6583, 7504, 6570, 6588, 6592, 6595, 6598, + 6610, 6609, 6601, 6593, 6613, 6619, 6600, 6629, 6615, 7504, - 6631, 6632, 7525, 6622, 7525, 6633, 6636, 6642, 7525, 6650, - 6635, 6641, 6638, 7525, 6653, 6658, 7525, 6644, 6667, 6673, - 6656, 6669, 6668, 6670, 6674, 6683, 6687, 6695, 6691, 7525, - 7525, 7525, 6694, 6684, 6681, 6690, 6709, 6714, 6702, 7525, - 6718, 6719, 6707, 6732, 6725, 6728, 7525, 6735, 6721, 7525, - 6737, 6738, 6739, 6746, 6749, 6756, 6757, 6758, 6763, 7525, - 6761, 7525, 7525, 6753, 7525, 6752, 6776, 7525, 6775, 6764, - 6762, 6783, 6786, 6788, 7525, 7525, 6794, 6784, 6801, 6789, - 6800, 6802, 7525, 6803, 6806, 6809, 6805, 6812, 7525, 6827, - 6819, 6820, 6822, 6825, 6821, 6839, 6834, 6846, 7525, 7525, + 6631, 6632, 7504, 6622, 7504, 6633, 6636, 6642, 7504, 6650, + 6635, 6641, 6638, 7504, 6653, 6658, 7504, 6644, 6667, 6673, + 6676, 6669, 6663, 6670, 6674, 6682, 6687, 6685, 6691, 7504, + 7504, 7504, 6694, 6684, 6680, 6698, 6705, 6722, 6709, 7504, + 6715, 6718, 6707, 6729, 6721, 6728, 7504, 6730, 6724, 7504, + 6737, 6740, 6736, 6732, 6747, 6744, 6758, 6760, 6756, 7504, + 6762, 7504, 7504, 6750, 7504, 6753, 6771, 7504, 6776, 6764, + 6766, 6773, 6781, 6779, 7504, 7504, 7504, 6790, 6780, 6797, + 6787, 6801, 6799, 7504, 6792, 6796, 6805, 6803, 6814, 7504, + 6817, 6808, 6809, 6813, 6828, 6818, 6831, 6830, 6845, 7504, - 6848, 7525, 7525, 6831, 6859, 6867, 7525, 7525, 7525, 6860, - 7525, 6863, 6878, 6870, 7525, 6872, 6861, 6866, 7525, 6881, - 7525, 6882, 6887, 6877, 7525, 6884, 6876, 6895, 6900, 6910, - 6898, 6912, 6919, 6920, 6926, 6899, 6915, 6911, 6929, 6936, - 6916, 6933, 7525, 7525, 6945, 7525, 7525, 6948, 6949, 6950, - 7525, 6943, 6954, 7525, 6964, 6951, 6953, 6968, 6956, 6967, - 7525, 7525, 6955, 6981, 6959, 6986, 6970, 7525, 6996, 6979, - 6975, 6998, 6982, 6992, 6991, 7525, 7525, 7525, 7525, 7525, - 7002, 7525, 7525, 6994, 7000, 7013, 7008, 7525, 6997, 7025, - 7034, 7040, 7023, 7044, 7028, 7024, 7030, 7037, 7029, 7031, + 7504, 6839, 7504, 7504, 6838, 6853, 6858, 7504, 7504, 7504, + 6863, 7504, 6864, 6869, 6866, 7504, 6871, 6856, 6865, 7504, + 6881, 7504, 6875, 6880, 6872, 7504, 6876, 6886, 6899, 6888, + 6904, 6890, 6907, 6911, 6924, 6915, 6891, 6910, 6908, 6928, + 6931, 6921, 6930, 7504, 7504, 6941, 7504, 7504, 6944, 6945, + 6946, 7504, 6950, 6949, 7504, 6953, 6939, 6952, 6960, 6947, + 6965, 7504, 7504, 6951, 6967, 6956, 6974, 6966, 7504, 6987, + 7000, 6971, 6994, 6986, 6988, 6991, 7504, 7504, 7504, 7504, + 7504, 7001, 7504, 7504, 6993, 7015, 6983, 7008, 7504, 7002, + 7012, 7031, 7035, 7026, 7039, 7011, 7028, 7027, 7032, 7044, - 7056, 7060, 7059, 7068, 7062, 7078, 7082, 7084, 7066, 7070, - 7088, 7087, 7089, 7071, 7093, 7083, 7086, 7099, 7103, 7525, - 7109, 7525, 7107, 7525, 7525, 7102, 7127, 7123, 7113, 7112, - 7138, 7129, 7133, 7118, 7525, 7121, 7130, 7149, 7525, 7142, - 7156, 7147, 7150, 7154, 7159, 7170, 7174, 7164, 7165, 7172, - 7180, 7192, 7194, 7191, 7193, 7199, 7181, 7208, 7205, 7213, - 7525, 7211, 7197, 7207, 7209, 7220, 7222, 7225, 7232, 7229, - 7525, 7233, 7241, 7243, 7227, 7242, 7238, 7257, 7259, 7249, - 7525, 7255, 7266, 7260, 7273, 7282, 7285, 7288, 7277, 7292, - 7293, 7297, 7302, 7300, 7304, 7286, 7309, 7316, 7525, 7303, + 7046, 7050, 7051, 7056, 7067, 7057, 7059, 7079, 7080, 7062, + 7071, 7082, 7088, 7090, 7074, 7087, 7105, 7096, 7104, 7092, + 7504, 7098, 7504, 7103, 7504, 7504, 7116, 7123, 7119, 7109, + 7138, 7139, 7130, 7122, 7126, 7504, 7132, 7133, 7137, 7504, + 7136, 7153, 7142, 7154, 7157, 7159, 7168, 7171, 7164, 7174, + 7175, 7172, 7192, 7188, 7185, 7191, 7201, 7194, 7197, 7202, + 7208, 7504, 7210, 7203, 7204, 7217, 7220, 7215, 7224, 7219, + 7225, 7504, 7227, 7246, 7240, 7229, 7238, 7237, 7259, 7256, + 7249, 7504, 7242, 7270, 7272, 7273, 7277, 7275, 7283, 7284, + 7279, 7287, 7294, 7281, 7286, 7302, 7297, 7307, 7306, 7504, - 7318, 7525, 7323, 7334, 7321, 7325, 7332, 7525, 7342, 7327, - 7330, 7350, 7347, 7356, 7525, 7353, 7358, 7361, 7525, 7360, - 7525, 7525, 7367, 7362, 7374, 7370, 7375, 7525, 7525, 7525, - 7433, 7440, 7447, 7454, 7461, 83, 7468, 7475, 7482, 7489, - 7496, 7503, 7510, 7517 + 7315, 7308, 7504, 7317, 7321, 7313, 7318, 7330, 7504, 7328, + 7319, 7341, 7346, 7350, 7344, 7504, 7356, 7361, 7355, 7504, + 7358, 7504, 7504, 7364, 7348, 7353, 7366, 7370, 7504, 7504, + 7504, 7412, 7419, 7426, 7433, 7440, 83, 7447, 7454, 7461, + 7468, 7475, 7482, 7489, 7496 } ; -static yyconst flex_int16_t yy_def[2645] = +static yyconst flex_int16_t yy_def[2646] = { 0, - 2630, 1, 2631, 2631, 2632, 2632, 2633, 2633, 2634, 2634, - 2635, 2635, 2630, 2636, 2630, 2630, 2630, 2630, 2637, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2638, 2630, 2630, 2630, 2638, 2639, 2630, 2630, - 2630, 2639, 2640, 2630, 2630, 2630, 2630, 2640, 2641, 2630, - 2630, 2630, 2641, 2642, 2630, 2643, 2630, 2642, 2642, 2636, - 2636, 2630, 2644, 2637, 2644, 2637, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2631, 1, 2632, 2632, 2633, 2633, 2634, 2634, 2635, 2635, + 2636, 2636, 2631, 2637, 2631, 2631, 2631, 2631, 2638, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2639, 2631, 2631, 2631, 2639, 2640, 2631, 2631, + 2631, 2640, 2641, 2631, 2631, 2631, 2631, 2641, 2642, 2631, + 2631, 2631, 2642, 2643, 2631, 2644, 2631, 2643, 2643, 2637, + 2637, 2631, 2645, 2638, 2645, 2638, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2638, - 2638, 2639, 2639, 2640, 2640, 2630, 2641, 2641, 2642, 2642, - 2643, 2643, 2642, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2639, + 2639, 2640, 2640, 2641, 2641, 2631, 2642, 2642, 2643, 2643, + 2644, 2644, 2643, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2642, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2643, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2642, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2643, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2642, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2643, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2642, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2630, 2636, 2630, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2643, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2631, 2637, 2631, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2642, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2643, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2630, 2636, 2636, 2642, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2631, 2637, 2637, 2643, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2637, 2637, 2637, 2637, 2631, 2637, 2631, 2637, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2631, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2636, 2630, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2631, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2631, 2637, 2631, 2637, 2637, 2631, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, - 2630, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2631, + 2631, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, - 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2630, 2630, 2636, 2630, 2636, 2630, 2630, - 2630, 2636, 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, + 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2631, 2631, 2637, 2631, 2637, 2631, 2631, + 2631, 2637, 2637, 2637, 2631, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2631, 2637, 2637, 2637, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2630, 2636, - 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2631, 2637, + 2637, 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2631, 2631, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2631, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2630, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, + 2637, 2637, 2637, 2637, 2631, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2631, 2637, 2631, 2637, 2631, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2631, 2637, 2637, 2637, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2630, 2630, 2630, 2636, 2636, 2636, 2630, - 2630, 2636, 2636, 2630, 2636, 2630, 2636, 2630, 2636, 2636, - 2636, 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, + 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2631, 2631, 2631, 2637, 2637, 2637, 2631, + 2631, 2637, 2637, 2631, 2637, 2631, 2637, 2631, 2637, 2637, + 2637, 2631, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, - 2636, 2636, 2630, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2630, 2636, 2636, 2630, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2630, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2630, 2636, 2630, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2630, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2630, + 2637, 2637, 2631, 2637, 2631, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2631, 2631, 2637, 2631, 2637, 2637, 2631, 2637, 2637, + 2637, 2637, 2637, 2637, 2631, 2631, 2631, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, - 2636, 2630, 2630, 2636, 2636, 2636, 2630, 2630, 2630, 2636, - 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2630, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2630, 2630, 2636, 2630, 2630, 2636, 2636, 2636, - 2630, 2636, 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2630, 2630, 2630, 2630, 2630, - 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, + 2631, 2637, 2631, 2631, 2637, 2637, 2637, 2631, 2631, 2631, + 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, + 2637, 2631, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2631, 2631, 2637, 2631, 2631, 2637, 2637, + 2637, 2631, 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2631, 2631, 2631, 2631, + 2631, 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, - 2636, 2630, 2636, 2630, 2630, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2630, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, - 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2630, 2636, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2631, 2637, 2631, 2637, 2631, 2631, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, + 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2631, - 2636, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2636, 2636, - 2636, 2636, 2636, 2636, 2630, 2636, 2636, 2636, 2630, 2636, - 2630, 2630, 2636, 2636, 2636, 2636, 2636, 2630, 2630, 0, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630 + 2637, 2637, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2637, + 2637, 2637, 2637, 2637, 2637, 2631, 2637, 2637, 2637, 2631, + 2637, 2631, 2631, 2637, 2637, 2637, 2637, 2637, 2631, 2631, + 0, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631 } ; -static yyconst flex_uint16_t yy_nxt[7592] = +static yyconst flex_uint16_t yy_nxt[7571] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 22, 23, 24, 25, 14, @@ -1338,52 +1339,52 @@ static yyconst flex_uint16_t yy_nxt[7592] = 171, 134, 135, 114, 173, 145, 177, 143, 141, 115, 71, 161, 116, 136, 132, 71, 198, 137, 172, 117, 123, 138, 71, 124, 133, 160, 71, 256, 134, 135, - 125, 2630, 71, 177, 126, 127, 71, 178, 161, 71, - 136, 2630, 71, 198, 137, 172, 71, 123, 138, 70, + 125, 2631, 71, 177, 126, 127, 71, 178, 161, 71, + 136, 2631, 71, 198, 137, 172, 71, 123, 138, 70, 124, 70, 70, 75, 70, 75, 75, 125, 75, 71, 70, 126, 127, 149, 178, 149, 149, 70, 149, 70, 70, 75, 70, 75, 75, 165, 75, 174, 70, 167, - 168, 166, 75, 2630, 71, 175, 176, 179, 71, 180, - 181, 152, 2630, 2630, 2630, 186, 71, 188, 2630, 197, - 2630, 71, 165, 71, 174, 71, 167, 168, 166, 76, + 168, 166, 75, 2631, 71, 175, 176, 179, 71, 180, + 181, 152, 2631, 2631, 2631, 186, 71, 188, 2631, 197, + 2631, 71, 165, 71, 174, 71, 167, 168, 166, 76, 71, 71, 175, 176, 179, 182, 180, 181, 183, 187, 194, 189, 71, 196, 188, 195, 197, 71, 71, 191, - 199, 184, 185, 192, 200, 2630, 71, 201, 2630, 71, - 2630, 190, 182, 71, 71, 183, 187, 194, 189, 193, + 199, 184, 185, 192, 200, 2631, 71, 201, 2631, 71, + 2631, 190, 182, 71, 71, 183, 187, 194, 189, 193, 196, 71, 195, 71, 71, 202, 191, 199, 184, 185, 192, 200, 71, 203, 201, 204, 205, 206, 190, 209, - 208, 207, 71, 210, 214, 71, 193, 71, 2630, 215, + 208, 207, 71, 210, 214, 71, 193, 71, 2631, 215, - 71, 2630, 202, 222, 331, 2630, 71, 71, 71, 71, + 71, 2631, 202, 222, 331, 2631, 71, 71, 71, 71, 203, 219, 204, 205, 206, 71, 209, 208, 207, 211, 210, 214, 221, 223, 216, 71, 215, 224, 212, 71, 222, 71, 225, 226, 213, 217, 71, 71, 219, 218, - 2630, 71, 71, 71, 229, 228, 211, 227, 71, 221, + 2631, 71, 71, 71, 229, 228, 211, 227, 71, 221, 223, 216, 231, 71, 224, 212, 71, 236, 232, 225, 226, 213, 217, 233, 234, 230, 218, 71, 239, 71, - 71, 229, 228, 71, 227, 235, 2630, 2630, 71, 231, - 71, 2630, 240, 2630, 236, 232, 2630, 237, 2630, 2630, + 71, 229, 228, 71, 227, 235, 2631, 2631, 71, 231, + 71, 2631, 240, 2631, 236, 232, 2631, 237, 2631, 2631, 233, 234, 230, 144, 238, 144, 144, 71, 144, 245, 71, 149, 235, 149, 149, 75, 149, 75, 75, 240, 75, 150, 242, 241, 237, 71, 71, 246, 243, 247, - 248, 238, 71, 2630, 71, 244, 245, 71, 249, 252, + 248, 238, 71, 2631, 71, 244, 245, 71, 249, 252, 251, 250, 71, 255, 288, 253, 71, 71, 71, 242, 241, 254, 292, 152, 246, 243, 247, 248, 71, 257, 71, 267, 244, 258, 268, 249, 265, 251, 250, 71, 255, 71, 253, 71, 266, 272, 71, 270, 254, 269, - 259, 2630, 71, 71, 71, 2630, 71, 71, 267, 273, - 258, 268, 71, 265, 71, 278, 316, 2630, 71, 274, - 2630, 266, 272, 275, 71, 271, 269, 259, 260, 71, + 259, 2631, 71, 71, 71, 2631, 71, 71, 267, 273, + 258, 268, 71, 265, 71, 278, 316, 2631, 71, 274, + 2631, 266, 272, 275, 71, 271, 269, 259, 260, 71, 289, 71, 71, 261, 276, 71, 273, 277, 262, 71, 279, 280, 278, 316, 263, 264, 274, 290, 285, 71, - 275, 71, 271, 2630, 406, 260, 71, 289, 291, 294, + 275, 71, 271, 2631, 406, 260, 71, 289, 291, 294, 261, 276, 71, 71, 277, 262, 286, 279, 280, 281, 71, 263, 264, 71, 282, 285, 287, 293, 298, 71, 295, 71, 297, 296, 71, 291, 283, 71, 284, 71, - 299, 71, 300, 286, 302, 71, 281, 2630, 71, 301, + 299, 71, 300, 286, 302, 71, 281, 2631, 71, 301, 71, 282, 303, 287, 293, 298, 305, 295, 71, 304, 296, 307, 306, 283, 71, 284, 71, 71, 308, 71, 309, 302, 71, 71, 71, 310, 301, 71, 311, 303, @@ -1399,23 +1400,23 @@ static yyconst flex_uint16_t yy_nxt[7592] = 340, 343, 71, 71, 71, 71, 71, 335, 71, 337, 333, 341, 344, 347, 348, 349, 71, 350, 351, 353, - 2630, 352, 2630, 71, 336, 368, 342, 340, 343, 71, - 71, 71, 71, 354, 356, 71, 71, 357, 2630, 344, + 2631, 352, 2631, 71, 336, 368, 342, 340, 343, 71, + 71, 71, 71, 354, 356, 71, 71, 357, 2631, 344, 347, 348, 358, 363, 350, 351, 353, 71, 352, 355, 360, 71, 71, 361, 71, 362, 367, 71, 71, 71, - 354, 356, 71, 364, 357, 365, 371, 2630, 71, 358, + 354, 356, 71, 364, 357, 365, 371, 2631, 71, 358, 363, 366, 369, 370, 71, 71, 355, 360, 376, 71, 361, 71, 362, 367, 372, 71, 374, 375, 377, 71, 364, 71, 365, 371, 71, 71, 379, 378, 366, 369, 381, 373, 71, 380, 390, 71, 71, 71, 382, 71, 71, 372, 71, 374, 375, 377, 383, 71, 384, 389, - 385, 2630, 386, 379, 378, 71, 71, 381, 373, 71, - 380, 387, 71, 388, 71, 382, 71, 391, 392, 2630, + 385, 2631, 386, 379, 378, 71, 71, 381, 373, 71, + 380, 387, 71, 388, 71, 382, 71, 391, 392, 2631, 71, 71, 398, 383, 397, 384, 389, 385, 71, 386, - 2630, 71, 399, 71, 400, 2630, 2630, 71, 387, 393, + 2631, 71, 399, 71, 400, 2631, 2631, 71, 387, 393, 388, 71, 71, 407, 391, 392, 402, 394, 395, 398, - 396, 397, 401, 403, 71, 2630, 2630, 71, 71, 399, + 396, 397, 401, 403, 71, 2631, 2631, 71, 71, 399, 71, 400, 404, 405, 410, 411, 393, 71, 71, 413, 407, 414, 417, 402, 394, 395, 71, 396, 408, 401, 403, 409, 412, 71, 415, 416, 418, 71, 71, 404, @@ -1423,33 +1424,33 @@ static yyconst flex_uint16_t yy_nxt[7592] = 71, 71, 1057, 71, 421, 408, 422, 420, 409, 412, 71, 415, 416, 418, 71, 424, 71, 423, 425, 426, - 431, 427, 419, 2630, 71, 2630, 2630, 428, 429, 437, - 430, 421, 71, 71, 420, 472, 71, 71, 71, 2630, + 431, 427, 419, 2631, 71, 2631, 2631, 428, 429, 437, + 430, 421, 71, 71, 420, 472, 71, 71, 71, 2631, 432, 71, 424, 71, 423, 436, 426, 431, 427, 438, 71, 439, 71, 433, 428, 429, 434, 430, 435, 440, 946, 71, 472, 71, 71, 71, 447, 432, 448, 449, - 461, 71, 436, 71, 71, 2630, 438, 450, 439, 453, + 461, 71, 436, 71, 71, 2631, 438, 450, 439, 453, 433, 71, 71, 434, 451, 435, 440, 441, 474, 442, 71, 71, 71, 447, 462, 448, 449, 461, 463, 465, 452, 71, 443, 464, 450, 444, 453, 445, 71, 446, 471, 451, 71, 71, 441, 474, 442, 466, 477, 468, - 71, 462, 71, 150, 2630, 467, 465, 452, 473, 443, + 71, 462, 71, 150, 2631, 467, 465, 452, 473, 443, 71, 71, 444, 71, 445, 71, 446, 454, 455, 469, - 470, 2630, 71, 483, 466, 477, 468, 456, 71, 457, + 470, 2631, 71, 483, 466, 477, 468, 456, 71, 457, 458, 459, 467, 478, 460, 473, 479, 71, 480, 475, 71, 482, 71, 71, 454, 455, 469, 470, 476, 485, 71, 481, 484, 71, 456, 71, 457, 458, 459, 71, 478, 460, 490, 479, 71, 480, 487, 486, 482, 498, 488, 71, 71, 71, 489, 476, 485, 494, 481, 484, - 71, 491, 492, 2630, 71, 71, 493, 496, 71, 490, + 71, 491, 492, 2631, 71, 71, 493, 496, 71, 490, 497, 495, 71, 71, 486, 501, 498, 488, 71, 502, - 71, 489, 71, 504, 494, 499, 509, 513, 503, 2630, + 71, 489, 71, 504, 494, 499, 509, 513, 503, 2631, 71, 71, 71, 493, 496, 71, 505, 497, 495, 71, 500, 71, 501, 506, 71, 511, 502, 510, 71, 71, 504, 517, 499, 509, 507, 503, 508, 512, 514, 71, - 2630, 71, 524, 505, 71, 515, 516, 500, 71, 71, + 2631, 71, 524, 505, 71, 515, 516, 500, 71, 71, 506, 519, 511, 71, 510, 71, 520, 521, 517, 523, 518, 507, 522, 508, 512, 514, 71, 71, 525, 71, 71, 527, 515, 516, 71, 526, 71, 71, 519, 71, @@ -1462,21 +1463,21 @@ static yyconst flex_uint16_t yy_nxt[7592] = 542, 536, 540, 547, 71, 537, 71, 71, 71, 538, 543, 539, 544, 546, 545, 541, 71, 71, 550, 552, 71, 71, 551, 71, 555, 560, 549, 542, 553, 71, - 547, 554, 71, 557, 2630, 556, 558, 606, 71, 544, + 547, 554, 71, 557, 2631, 556, 558, 606, 71, 544, 546, 545, 71, 561, 71, 563, 552, 71, 562, 551, 71, 71, 560, 71, 564, 553, 71, 71, 554, 559, 557, 565, 556, 567, 566, 71, 569, 568, 71, 71, - 561, 578, 563, 2630, 71, 562, 71, 71, 71, 71, + 561, 578, 563, 2631, 71, 562, 71, 71, 71, 71, 577, 564, 580, 71, 581, 71, 559, 71, 565, 582, 567, 566, 579, 569, 568, 570, 583, 584, 578, 585, 571, 71, 572, 71, 588, 71, 71, 577, 71, 580, 573, 581, 589, 574, 575, 71, 582, 71, 71, 579, 576, 71, 570, 583, 584, 586, 585, 571, 591, 572, - 2630, 588, 592, 595, 71, 587, 71, 573, 590, 589, + 2631, 588, 592, 595, 71, 587, 71, 573, 590, 589, 574, 575, 593, 597, 594, 71, 596, 576, 71, 600, - 599, 71, 602, 2630, 71, 591, 71, 71, 71, 592, + 599, 71, 602, 2631, 71, 591, 71, 71, 71, 592, 595, 598, 587, 603, 71, 590, 71, 71, 71, 593, 597, 594, 71, 596, 601, 604, 600, 599, 609, 602, 605, 607, 71, 608, 71, 610, 71, 611, 598, 617, @@ -1494,7 +1495,7 @@ static yyconst flex_uint16_t yy_nxt[7592] = 651, 650, 653, 639, 71, 640, 71, 641, 71, 642, 643, 644, 71, 652, 71, 71, 645, 658, 647, 71, 71, 654, 648, 665, 649, 657, 655, 659, 650, 653, - 656, 664, 71, 660, 71, 71, 71, 661, 662, 2630, + 656, 664, 71, 660, 71, 71, 71, 661, 662, 2631, 652, 71, 666, 71, 658, 71, 663, 672, 654, 667, 665, 71, 657, 655, 659, 71, 669, 656, 71, 71, @@ -1506,8 +1507,8 @@ static yyconst flex_uint16_t yy_nxt[7592] = 697, 71, 71, 680, 681, 71, 690, 685, 682, 691, 693, 71, 694, 71, 692, 71, 683, 684, 687, 703, 71, 695, 696, 689, 71, 699, 71, 71, 71, 71, - 698, 700, 71, 690, 705, 701, 2630, 693, 71, 694, - 704, 71, 706, 71, 708, 2630, 2630, 707, 695, 696, + 698, 700, 71, 690, 705, 701, 2631, 693, 71, 694, + 704, 71, 706, 71, 708, 2631, 2631, 707, 695, 696, 702, 71, 699, 71, 710, 71, 71, 698, 700, 71, 711, 705, 701, 709, 712, 71, 713, 704, 71, 714, @@ -1516,8 +1517,8 @@ static yyconst flex_uint16_t yy_nxt[7592] = 709, 712, 721, 713, 722, 723, 714, 71, 726, 716, 715, 71, 71, 717, 71, 724, 71, 71, 727, 729, 71, 718, 720, 719, 728, 730, 71, 71, 71, 721, - 71, 722, 723, 732, 71, 726, 733, 2630, 734, 731, - 2630, 71, 724, 737, 735, 727, 729, 71, 71, 71, + 71, 722, 723, 732, 71, 726, 733, 2631, 734, 731, + 2631, 71, 724, 737, 735, 727, 729, 71, 71, 71, 736, 728, 730, 738, 740, 741, 742, 739, 71, 71, 732, 749, 71, 733, 71, 734, 731, 71, 71, 71, @@ -1528,19 +1529,19 @@ static yyconst flex_uint16_t yy_nxt[7592] = 71, 71, 746, 748, 150, 71, 750, 751, 754, 753, 71, 71, 752, 758, 755, 756, 759, 760, 767, 762, 757, 71, 766, 71, 765, 71, 71, 763, 768, 71, - 71, 772, 770, 769, 773, 71, 2630, 2630, 2630, 771, + 71, 772, 770, 769, 773, 71, 2631, 2631, 2631, 771, 758, 792, 71, 759, 760, 71, 762, 71, 71, 766, 71, 765, 784, 71, 763, 768, 71, 782, 774, 770, 769, 773, 775, 71, 71, 776, 771, 71, 783, 71, - 71, 786, 71, 71, 789, 785, 2630, 787, 71, 784, - 2630, 2630, 788, 2630, 782, 774, 790, 804, 2630, 775, + 71, 786, 71, 71, 789, 785, 2631, 787, 71, 784, + 2631, 2631, 788, 2631, 782, 774, 790, 804, 2631, 775, 71, 805, 776, 777, 71, 783, 71, 778, 786, 71, 779, 789, 785, 71, 787, 791, 800, 780, 71, 788, - 781, 71, 71, 790, 804, 71, 801, 2630, 71, 2630, + 781, 71, 71, 790, 804, 71, 801, 2631, 71, 2631, 777, 802, 71, 803, 778, 71, 806, 779, 71, 830, 71, 807, 791, 800, 780, 808, 811, 781, 793, 794, - 2630, 795, 2630, 801, 796, 810, 71, 71, 802, 797, + 2631, 795, 2631, 801, 796, 810, 71, 71, 802, 797, 803, 809, 812, 806, 814, 798, 799, 71, 807, 813, 71, 71, 808, 811, 71, 793, 794, 71, 795, 71, @@ -1555,12 +1556,12 @@ static yyconst flex_uint16_t yy_nxt[7592] = 845, 834, 71, 835, 838, 844, 846, 71, 71, 847, 848, 841, 850, 71, 849, 71, 842, 851, 71, 852, - 2630, 71, 853, 854, 71, 2630, 861, 845, 71, 856, + 2631, 71, 853, 854, 71, 2631, 861, 845, 71, 856, 71, 71, 844, 846, 71, 71, 847, 848, 71, 850, 860, 849, 857, 855, 851, 71, 852, 71, 71, 853, - 854, 71, 858, 71, 2630, 862, 856, 864, 863, 865, - 859, 71, 2630, 71, 866, 71, 71, 860, 867, 857, - 855, 71, 869, 71, 868, 870, 71, 2630, 874, 858, + 854, 71, 858, 71, 2631, 862, 856, 864, 863, 865, + 859, 71, 2631, 71, 866, 71, 71, 860, 867, 857, + 855, 71, 869, 71, 868, 870, 71, 2631, 874, 858, 71, 71, 862, 871, 864, 863, 865, 859, 872, 873, 71, 866, 71, 71, 878, 867, 71, 877, 71, 869, @@ -1572,23 +1573,23 @@ static yyconst flex_uint16_t yy_nxt[7592] = 882, 895, 884, 893, 71, 886, 899, 71, 71, 901, 71, 891, 71, 900, 888, 71, 903, 894, 906, 902, 71, 908, 892, 898, 71, 896, 71, 71, 895, 904, - 893, 71, 905, 899, 909, 907, 912, 910, 71, 2630, + 893, 71, 905, 899, 909, 907, 912, 910, 71, 2631, 900, 71, 71, 71, 71, 150, 902, 71, 908, 914, 911, 943, 71, 915, 71, 924, 904, 71, 71, 905, 71, 909, 907, 912, 910, 913, 71, 916, 925, 917, - 2630, 926, 71, 71, 71, 71, 914, 911, 943, 928, + 2631, 926, 71, 71, 71, 71, 914, 911, 943, 928, 915, 71, 924, 71, 927, 930, 71, 931, 932, 929, - 2630, 71, 913, 933, 916, 925, 917, 918, 926, 919, - 71, 71, 71, 920, 934, 921, 928, 71, 2630, 2630, - 922, 927, 930, 935, 931, 923, 929, 71, 2630, 937, + 2631, 71, 913, 933, 916, 925, 917, 918, 926, 919, + 71, 71, 71, 920, 934, 921, 928, 71, 2631, 2631, + 922, 927, 930, 935, 931, 923, 929, 71, 2631, 937, 71, 71, 936, 939, 918, 940, 919, 941, 944, 938, 920, 934, 921, 71, 71, 942, 71, 922, 71, 945, 935, 71, 923, 947, 949, 71, 937, 948, 71, 936, - 939, 957, 940, 71, 941, 71, 938, 956, 2630, 960, - 71, 968, 942, 2630, 958, 959, 71, 2630, 2630, 962, - 2630, 949, 71, 71, 948, 71, 950, 71, 957, 966, + 939, 957, 940, 71, 941, 71, 938, 956, 2631, 960, + 71, 968, 942, 2631, 958, 959, 71, 2631, 2631, 962, + 2631, 949, 71, 71, 948, 71, 950, 71, 957, 966, 71, 951, 961, 952, 956, 71, 960, 963, 71, 964, 965, 958, 959, 71, 953, 954, 962, 71, 71, 969, 71, 955, 71, 950, 71, 970, 71, 967, 951, 961, @@ -1615,28 +1616,28 @@ static yyconst flex_uint16_t yy_nxt[7592] = 1032, 71, 1036, 1038, 1027, 71, 71, 71, 1029, 1028, 1037, 1039, 71, 1040, 1033, 1030, 1041, 71, 71, 1043, 1044, 71, 1042, 1049, 71, 1031, 1045, 1032, 71, 1036, - 1038, 1050, 71, 1047, 1052, 1046, 2630, 1037, 1039, 1048, - 71, 1053, 71, 71, 71, 71, 1043, 1044, 2630, 1042, + 1038, 1050, 71, 1047, 1052, 1046, 2631, 1037, 1039, 1048, + 71, 1053, 71, 71, 71, 71, 1043, 1044, 2631, 1042, 71, 71, 1051, 1045, 71, 71, 71, 1054, 1055, 1056, 1047, 1052, 1046, 71, 71, 71, 1048, 1058, 71, 1059, 1060, 71, 1062, 1061, 71, 71, 71, 1063, 71, 1051, 71, 1065, 1064, 1066, 1054, 1055, 1056, 71, 1068, 1067, 1069, 1071, 1072, 71, 1058, 71, 1059, 1060, 71, 1062, - 1061, 1074, 2630, 1073, 71, 1070, 71, 1075, 1065, 1064, + 1061, 1074, 2631, 1073, 71, 1070, 71, 1075, 1065, 1064, 1066, 71, 71, 1078, 1076, 1068, 1067, 71, 1077, 1081, - 1084, 1079, 2630, 71, 71, 71, 71, 71, 1074, 71, + 1084, 1079, 2631, 71, 71, 71, 71, 71, 1074, 71, 1073, 71, 1070, 71, 1075, 71, 1080, 1082, 1085, 71, 1078, 1076, 1083, 1086, 71, 1077, 1081, 71, 1079, 71, - 71, 71, 71, 1087, 1088, 2630, 1093, 1089, 1095, 1096, + 71, 71, 71, 1087, 1088, 2631, 1093, 1089, 1095, 1096, - 1124, 71, 2630, 1080, 1082, 1085, 1090, 1094, 1091, 1083, - 1086, 1092, 71, 1097, 71, 2630, 1104, 1100, 71, 71, + 1124, 71, 2631, 1080, 1082, 1085, 1090, 1094, 1091, 1083, + 1086, 1092, 71, 1097, 71, 2631, 1104, 1100, 71, 71, 1087, 1088, 71, 1093, 1089, 1095, 1096, 1098, 1099, 71, 1102, 1105, 71, 1090, 1094, 1091, 71, 71, 1092, 71, 1097, 1101, 1103, 71, 1100, 1107, 71, 1108, 1109, 71, - 71, 2630, 71, 71, 1098, 1099, 1106, 1102, 1105, 1110, - 1114, 1112, 2630, 71, 1115, 1111, 71, 71, 1101, 1103, + 71, 2631, 71, 71, 1098, 1099, 1106, 1102, 1105, 1110, + 1114, 1112, 2631, 71, 1115, 1111, 71, 71, 1101, 1103, 71, 71, 1107, 71, 1108, 1109, 71, 1113, 1117, 71, 71, 1119, 1116, 1106, 71, 1118, 1110, 1114, 1112, 71, 71, 1115, 1111, 1121, 71, 1120, 1122, 1123, 1125, 1126, @@ -1644,225 +1645,225 @@ static yyconst flex_uint16_t yy_nxt[7592] = 71, 1129, 71, 71, 1113, 1117, 1127, 71, 1119, 1116, 1128, 71, 1118, 71, 1130, 71, 71, 1133, 71, 1131, 1121, 1132, 1120, 1122, 1123, 1125, 1126, 1134, 1129, 71, - 71, 1135, 71, 1127, 1144, 2630, 1158, 1128, 1142, 2630, - 2630, 71, 1143, 1147, 1133, 1145, 71, 1159, 1132, 2630, - 2630, 2630, 71, 1146, 1134, 2630, 1148, 71, 1135, 1136, - 71, 71, 1137, 1138, 2630, 1142, 71, 1139, 71, 1143, + 71, 1135, 71, 1127, 1144, 2631, 1158, 1128, 1142, 2631, + 2631, 71, 1143, 1147, 1133, 1145, 71, 1159, 1132, 2631, + 2631, 2631, 71, 1146, 1134, 2631, 1148, 71, 1135, 1136, + 71, 71, 1137, 1138, 2631, 1142, 71, 1139, 71, 1143, 1147, 71, 1145, 1140, 1149, 71, 1150, 1141, 71, 71, 1146, 71, 1151, 1148, 1152, 1153, 1136, 1154, 1155, 1137, - 1138, 1160, 71, 1161, 1139, 1156, 71, 1167, 1157, 2630, + 1138, 1160, 71, 1161, 1139, 1156, 71, 1167, 1157, 2631, 1140, 1149, 71, 1150, 1141, 71, 71, 71, 71, 1151, - 71, 1152, 1153, 71, 1154, 1155, 71, 2630, 1160, 1170, + 71, 1152, 1153, 71, 1154, 1155, 71, 2631, 1160, 1170, 1161, 1172, 1156, 71, 1167, 1157, 1162, 1169, 1171, 1173, 71, 1163, 1179, 1164, 1174, 1165, 1176, 1166, 1178, 1175, 71, 71, 71, 71, 71, 1177, 1170, 71, 1172, 1180, 71, 71, 1182, 1162, 1169, 1171, 1173, 71, 1163, 1179, 1164, 1181, 1165, 1176, 1166, 1178, 71, 71, 1183, 71, 1184, 71, 1177, 1185, 1187, 1186, 1180, 1189, 1188, 1182, - 71, 71, 1190, 71, 1191, 1192, 71, 2630, 1181, 1193, - 1197, 1194, 71, 71, 2630, 1183, 71, 1184, 1195, 71, + 71, 71, 1190, 71, 1191, 1192, 71, 2631, 1181, 1193, + 1197, 1194, 71, 71, 2631, 1183, 71, 1184, 1195, 71, 1185, 1187, 1186, 1198, 1189, 1188, 1199, 1200, 1203, 71, 71, 1191, 71, 1196, 71, 71, 1193, 71, 1194, 1205, 71, 71, 1201, 1207, 1204, 1195, 1202, 1206, 71, 71, 1198, 71, 71, 71, 1200, 71, 1208, 1209, 1211, 1210, - 1196, 71, 2630, 1219, 1214, 71, 1205, 1212, 71, 1201, + 1196, 71, 2631, 1219, 1214, 71, 1205, 1212, 71, 1201, 1207, 1204, 1216, 1202, 1206, 1213, 1217, 71, 1215, 71, 71, 71, 1220, 1208, 1209, 1211, 1210, 71, 1221, 71, 71, 1214, 1218, 71, 1212, 71, 71, 71, 1222, 1216, 1223, 1224, 1213, 1217, 1225, 1215, 71, 1226, 1229, 71, 71, 1232, 71, 1230, 71, 1221, 1227, 1228, 71, 1218, - 71, 1231, 1233, 71, 71, 1237, 2630, 1223, 1224, 1236, + 71, 1231, 1233, 71, 71, 1237, 2631, 1223, 1224, 1236, 71, 1225, 71, 1234, 71, 1229, 71, 1238, 1232, 1235, 71, 1240, 1239, 1227, 1228, 71, 71, 1242, 1241, 71, 71, 71, 1237, 71, 71, 71, 1236, 1244, 1245, 1246, 1234, 1243, 1252, 71, 1238, 1247, 1235, 71, 1240, 1239, - 71, 1249, 1248, 1251, 1242, 1241, 1250, 1253, 2630, 71, + 71, 1249, 1248, 1251, 1242, 1241, 1250, 1253, 2631, 71, 71, 71, 1254, 1259, 1244, 71, 1246, 71, 1243, 1252, 71, 71, 1247, 1255, 71, 1257, 1256, 1261, 1258, 1248, - 1251, 1260, 2630, 71, 1253, 71, 2630, 1262, 71, 1254, + 1251, 1260, 2631, 71, 1253, 71, 2631, 1262, 71, 1254, 1259, 1263, 1292, 1264, 71, 1265, 71, 71, 1270, 1267, 1255, 71, 1257, 1256, 1266, 1258, 1268, 71, 1260, 71, 71, 71, 1269, 71, 1262, 71, 1272, 1273, 1263, 71, 1264, 71, 1265, 1271, 71, 1270, 1267, 1274, 1278, 1275, - 1276, 1266, 71, 1268, 2630, 1279, 71, 71, 1277, 1269, + 1276, 1266, 71, 1268, 2631, 1279, 71, 71, 1277, 1269, 71, 71, 71, 1272, 1273, 71, 71, 71, 1280, 1282, - 1271, 1281, 1283, 2630, 1274, 1278, 1275, 1276, 1284, 71, - 71, 1285, 1279, 1286, 2630, 1277, 1287, 1290, 1289, 1291, + 1271, 1281, 1283, 2631, 1274, 1278, 1275, 1276, 1284, 71, + 71, 1285, 1279, 1286, 2631, 1277, 1287, 1290, 1289, 1291, 71, 71, 71, 71, 1288, 1280, 1282, 1293, 1281, 1283, - 71, 71, 2630, 2630, 1294, 1284, 71, 1295, 1285, 71, + 71, 71, 2631, 2631, 1294, 1284, 71, 1295, 1285, 71, 1286, 71, 71, 1287, 1290, 1289, 1291, 1296, 1297, 1298, - 1302, 1288, 1300, 1299, 1301, 2630, 1303, 2630, 2630, 71, + 1302, 1288, 1300, 1299, 1301, 2631, 1303, 2631, 2631, 71, 71, 1294, 71, 71, 1295, 71, 71, 71, 1305, 1306, - 71, 71, 2630, 1307, 71, 1297, 1298, 1302, 1304, 1300, + 71, 71, 2631, 1307, 71, 1297, 1298, 1302, 1304, 1300, 1299, 1301, 71, 1303, 1308, 71, 71, 71, 1309, 1311, 1313, 71, 71, 1310, 1312, 1305, 1306, 71, 1314, 1315, 1307, 1316, 1319, 1317, 1318, 1304, 71, 71, 1321, 71, 71, 1308, 1322, 71, 1320, 71, 71, 1313, 1323, 1324, - 71, 71, 1334, 2630, 1325, 1314, 1315, 71, 1316, 1326, + 71, 71, 1334, 2631, 1325, 1314, 1315, 71, 1316, 1326, 1317, 1318, 71, 71, 71, 1321, 1327, 71, 1331, 1322, 1328, 1320, 1329, 1330, 71, 1333, 1324, 1332, 71, 71, - 71, 1325, 1336, 71, 1335, 71, 1326, 2630, 2630, 1337, - 71, 2630, 1338, 1327, 71, 1331, 1343, 1328, 1339, 1329, + 71, 1325, 1336, 71, 1335, 71, 1326, 2631, 2631, 1337, + 71, 2631, 1338, 1327, 71, 1331, 1343, 1328, 1339, 1329, 1330, 71, 1333, 71, 1332, 71, 71, 1345, 1344, 1336, 71, 1335, 71, 1340, 71, 1346, 1337, 1341, 71, 1338, - 71, 1347, 2630, 1343, 1348, 1339, 71, 1349, 2630, 1350, - 1342, 1356, 1351, 1355, 1345, 1344, 1352, 2630, 71, 1358, + 71, 1347, 2631, 1343, 1348, 1339, 71, 1349, 2631, 1350, + 1342, 1356, 1351, 1355, 1345, 1344, 1352, 2631, 71, 1358, 1340, 1353, 1346, 71, 1341, 71, 71, 1359, 71, 71, 71, 1348, 71, 1354, 1349, 71, 1350, 1342, 71, 1351, - 71, 1357, 1361, 1352, 1360, 71, 1358, 2630, 1353, 71, - 71, 1362, 1363, 1364, 1359, 1365, 1369, 1366, 2630, 1367, + 71, 1357, 1361, 1352, 1360, 71, 1358, 2631, 1353, 71, + 71, 1362, 1363, 1364, 1359, 1365, 1369, 1366, 2631, 1367, 1354, 1368, 71, 1371, 71, 1370, 71, 1372, 1357, 1375, 71, 1360, 1379, 71, 71, 1374, 71, 71, 71, 71, 1364, 71, 1365, 1369, 1366, 71, 1367, 71, 1368, 71, 1371, 1373, 1370, 1376, 1372, 71, 1375, 1377, 1378, 71, - 1380, 1381, 1374, 71, 1382, 1384, 71, 1383, 71, 2630, + 1380, 1381, 1374, 71, 1382, 1384, 71, 1383, 71, 2631, 71, 1387, 71, 1385, 1386, 1388, 1390, 1389, 1373, 71, 1376, 71, 71, 71, 1377, 1378, 71, 1380, 1381, 71, 71, 1382, 1384, 71, 1383, 1393, 71, 1394, 1387, 71, 1385, 1386, 71, 1390, 1389, 1391, 1392, 1396, 71, 1395, - 1397, 1398, 1399, 71, 2630, 1402, 1401, 71, 71, 1400, + 1397, 1398, 1399, 71, 2631, 1402, 1401, 71, 71, 1400, - 2630, 1404, 1393, 71, 1394, 1403, 1406, 1408, 1411, 71, + 2631, 1404, 1393, 71, 1394, 1403, 1406, 1408, 1411, 71, 71, 71, 1391, 1392, 1396, 71, 1395, 1397, 1398, 1399, 71, 71, 1402, 1401, 1405, 1410, 1400, 71, 1407, 1409, 1414, 71, 1403, 71, 71, 1411, 1412, 71, 71, 1413, 1415, 71, 1416, 71, 1417, 1419, 71, 1418, 1424, 71, - 2630, 1405, 1410, 2630, 71, 1407, 1409, 1414, 1430, 1425, + 2631, 1405, 1410, 2631, 71, 1407, 1409, 1414, 1430, 1425, 71, 1421, 71, 1412, 1422, 71, 1413, 1415, 71, 1416, 1420, 1417, 1419, 71, 1418, 1426, 1423, 71, 1427, 1433, 71, 71, 1428, 1429, 71, 71, 1425, 1431, 1421, 1432, - 71, 1422, 2630, 71, 1434, 1435, 1438, 1420, 1439, 1441, + 71, 1422, 2631, 71, 1434, 1435, 1438, 1420, 1439, 1441, 71, 71, 1426, 1423, 71, 1427, 1433, 71, 71, 1428, 1429, 1436, 1440, 71, 1431, 71, 1432, 1437, 1443, 71, 1444, 1434, 1435, 1442, 71, 1453, 1445, 71, 71, 1447, - 71, 71, 1446, 1449, 71, 1448, 71, 2630, 1436, 1440, + 71, 71, 1446, 1449, 71, 1448, 71, 2631, 1436, 1440, 71, 71, 71, 1451, 1437, 1443, 71, 71, 71, 1452, 1442, 1450, 1458, 1445, 1454, 1456, 1447, 71, 71, 1446, 1449, 71, 1448, 71, 71, 1455, 1460, 1457, 71, 1461, - 1451, 1462, 71, 71, 1463, 2630, 1452, 1459, 1450, 71, + 1451, 1462, 71, 71, 1463, 2631, 1452, 1459, 1450, 71, 1468, 1454, 1456, 71, 71, 1466, 1464, 71, 71, 71, - 1465, 2630, 1455, 1460, 1457, 71, 1461, 1467, 1462, 71, + 1465, 2631, 1455, 1460, 1457, 71, 1461, 1467, 1462, 71, 71, 1463, 1469, 71, 1459, 1470, 1472, 1468, 1471, 71, 1475, 1473, 1466, 1464, 1474, 1476, 71, 1465, 71, 71, 71, 1477, 1478, 1480, 1467, 1479, 1483, 1488, 1487, 1469, - 2630, 71, 1470, 1472, 1481, 1471, 1482, 71, 1473, 71, + 2631, 71, 1470, 1472, 1481, 1471, 1482, 71, 1473, 71, 1489, 1474, 71, 1484, 71, 71, 71, 71, 1477, 71, 1480, 71, 1479, 1483, 1485, 1487, 71, 1486, 1490, 71, - 1491, 1481, 1492, 1482, 1493, 71, 1497, 71, 1494, 2630, + 1491, 1481, 1492, 1482, 1493, 71, 1497, 71, 1494, 2631, 1484, 71, 71, 1495, 71, 71, 1496, 71, 71, 71, 1498, 1485, 1502, 1499, 1486, 1490, 1500, 1491, 71, 1492, - 1501, 1493, 2630, 1497, 71, 1494, 1503, 2630, 1504, 1507, + 1501, 1493, 2631, 1497, 71, 1494, 1503, 2631, 1504, 1507, 1495, 1505, 1506, 1496, 71, 71, 71, 1498, 71, 1502, 1499, 71, 71, 1500, 1509, 1508, 71, 1501, 1511, 1510, 1512, 1513, 1514, 1503, 71, 1504, 1507, 1515, 1505, 1506, - 71, 71, 1517, 1516, 1519, 1518, 1521, 2630, 1520, 1522, - 1531, 71, 1508, 2630, 1537, 1511, 71, 1533, 1513, 71, + 71, 71, 1517, 1516, 1519, 1518, 1521, 2631, 1520, 1522, + 1531, 71, 1508, 2631, 1537, 1511, 71, 1533, 1513, 71, 1525, 71, 71, 71, 71, 71, 71, 1523, 71, 71, 1516, 1519, 1518, 1524, 71, 1520, 1522, 1526, 71, 1527, 1529, 1528, 71, 1530, 1533, 71, 71, 1525, 1532, 1535, - 1534, 71, 2630, 71, 1523, 71, 71, 71, 71, 71, + 1534, 71, 2631, 71, 1523, 71, 71, 71, 71, 71, 1524, 1538, 71, 1540, 1526, 1536, 1527, 1529, 1528, 1539, 1530, 1542, 71, 1541, 1548, 1532, 1535, 1534, 71, 71, 71, 1543, 1544, 1545, 1546, 1547, 71, 1549, 1538, 71, - 71, 1550, 1536, 1553, 71, 2630, 1539, 1555, 1542, 71, + 71, 1550, 1536, 1553, 71, 2631, 1539, 1555, 1542, 71, 1541, 1548, 71, 71, 71, 71, 1551, 1552, 1543, 1544, 1545, 1546, 1547, 1554, 71, 71, 1556, 71, 1550, 1558, 71, 71, 1557, 1559, 1555, 1560, 71, 71, 1564, 1561, - 71, 71, 1562, 1551, 1552, 2630, 1566, 71, 1565, 1563, + 71, 71, 1562, 1551, 1552, 2631, 1566, 71, 1565, 1563, 1554, 71, 1567, 1556, 71, 1569, 1558, 1572, 1571, 1557, - 1559, 1573, 1568, 1570, 2630, 71, 1561, 71, 71, 1562, + 1559, 1573, 1568, 1570, 2631, 71, 1561, 71, 71, 1562, 71, 1577, 71, 71, 71, 1565, 1563, 1578, 71, 1567, 71, 71, 71, 71, 1572, 1571, 1574, 1575, 1573, 1568, 1570, 71, 1576, 71, 1579, 71, 71, 1582, 1577, 1580, - 1581, 71, 1586, 1587, 1578, 1584, 1585, 1593, 2630, 71, + 1581, 71, 1586, 1587, 1578, 1584, 1585, 1593, 2631, 71, 1583, 71, 71, 1574, 1575, 71, 1591, 1588, 71, 1576, 1589, 1579, 71, 71, 1582, 1592, 1580, 1581, 71, 71, 1594, 1590, 1584, 1585, 71, 71, 1596, 1583, 71, 1595, 1599, 71, 1597, 1591, 1588, 1600, 71, 1589, 71, 1598, 1601, 71, 1592, 1602, 1603, 71, 1604, 71, 1590, 1605, 1606, 1607, 71, 71, 1610, 71, 1595, 71, 71, 1597, - 1608, 1615, 1600, 1609, 1617, 2630, 1598, 71, 71, 2630, + 1608, 1615, 1600, 1609, 1617, 2631, 1598, 71, 71, 2631, - 1602, 1625, 71, 1604, 2630, 71, 71, 1606, 1607, 1619, - 1622, 71, 2630, 2630, 1620, 2630, 71, 71, 1615, 71, + 1602, 1625, 71, 1604, 2631, 71, 71, 1606, 1607, 1619, + 1622, 71, 2631, 2631, 1620, 2631, 71, 71, 1615, 71, 1609, 1611, 1612, 1613, 1616, 1618, 71, 1621, 1614, 1623, - 1624, 71, 71, 71, 2630, 71, 71, 1622, 1628, 1627, + 1624, 71, 71, 71, 2631, 71, 71, 1622, 1628, 1627, 71, 71, 71, 1626, 71, 71, 71, 1629, 1611, 1612, 1613, 1616, 1618, 1631, 1621, 1614, 1623, 1624, 1630, 71, 1632, 71, 1634, 1633, 1635, 1628, 1627, 71, 71, 1639, - 1626, 1638, 1640, 2630, 71, 1636, 1637, 71, 2630, 71, + 1626, 1638, 1640, 2631, 71, 1636, 1637, 71, 2631, 71, 1631, 1641, 1642, 1648, 71, 1630, 1644, 1632, 71, 1634, 1633, 71, 1647, 71, 71, 1651, 71, 1650, 1638, 1640, 71, 71, 1636, 1637, 1643, 71, 1645, 71, 1641, 1642, 1646, 1649, 71, 1644, 71, 71, 1652, 71, 71, 1647, - 1653, 71, 1654, 1655, 1650, 1656, 1657, 71, 1658, 2630, + 1653, 71, 1654, 1655, 1650, 1656, 1657, 71, 1658, 2631, 1659, 1643, 71, 1645, 71, 1662, 1660, 1646, 1649, 1661, 71, 71, 1663, 71, 71, 71, 1672, 71, 71, 1654, 1655, 1664, 1656, 1657, 71, 1658, 1665, 1659, 71, 1666, 1668, 71, 1662, 1660, 1669, 1670, 1661, 71, 71, 71, - 2630, 1671, 71, 1672, 71, 1667, 1673, 71, 1664, 71, - 1675, 1674, 71, 1665, 2630, 1677, 1666, 1668, 1676, 1679, + 2631, 1671, 71, 1672, 71, 1667, 1673, 71, 1664, 71, + 1675, 1674, 71, 1665, 2631, 1677, 1666, 1668, 1676, 1679, 1678, 1669, 1670, 1681, 1680, 1684, 1685, 71, 1671, 71, 71, 71, 1667, 1673, 1686, 1687, 71, 71, 1674, 1690, - 1691, 71, 1677, 2630, 2630, 1676, 71, 1678, 1682, 1683, + 1691, 71, 1677, 2631, 2631, 1676, 71, 1678, 1682, 1683, 1681, 1680, 1694, 71, 1688, 71, 71, 71, 71, 1689, 71, 1686, 1687, 1692, 1695, 1697, 71, 71, 1693, 1698, - 71, 1696, 71, 1699, 2630, 1682, 1683, 1703, 1701, 1700, + 71, 1696, 71, 1699, 2631, 1682, 1683, 1703, 1701, 1700, 71, 1688, 1705, 1702, 71, 71, 1689, 1715, 71, 1704, - 1712, 2630, 1697, 71, 71, 71, 71, 1706, 1696, 1708, + 1712, 2631, 1697, 71, 71, 71, 71, 1706, 1696, 1708, 1699, 71, 71, 1707, 1710, 1701, 1700, 71, 1711, 71, 1702, 1709, 71, 1713, 71, 1714, 1704, 71, 71, 71, 1716, 1717, 71, 1718, 1706, 1721, 1708, 1719, 71, 1720, - 1707, 1710, 1726, 71, 71, 1711, 1725, 2630, 1709, 1727, + 1707, 1710, 1726, 71, 71, 1711, 1725, 2631, 1709, 1727, 71, 71, 1714, 71, 71, 71, 1722, 1716, 1717, 71, 1718, 71, 1721, 1723, 1719, 1724, 1720, 71, 71, 71, 1730, 71, 1728, 1725, 1729, 1731, 1727, 1732, 71, 1733, - 71, 1734, 71, 1722, 1735, 1737, 2630, 1736, 71, 71, - 1723, 1746, 1724, 2630, 71, 71, 71, 71, 2630, 1728, + 71, 1734, 71, 1722, 1735, 1737, 2631, 1736, 71, 71, + 1723, 1746, 1724, 2631, 71, 71, 71, 71, 2631, 1728, 1738, 1729, 1731, 1741, 1732, 1739, 1733, 71, 1734, 71, 1742, 1735, 71, 71, 1736, 1743, 1740, 71, 71, 1744, - 1754, 1745, 2630, 1751, 1753, 1747, 1749, 1738, 71, 1748, + 1754, 1745, 2631, 1751, 1753, 1747, 1749, 1738, 71, 1748, 1741, 71, 1739, 71, 71, 71, 71, 1742, 71, 1752, 71, 1750, 1743, 1740, 1755, 71, 1744, 1754, 1745, 71, 71, 1753, 1747, 1749, 71, 71, 1748, 1756, 1757, 1760, - 1758, 2630, 1759, 1761, 1762, 1763, 1752, 71, 1750, 71, - 1766, 71, 1765, 71, 2630, 1771, 71, 71, 71, 71, + 1758, 2631, 1759, 1761, 1762, 1763, 1752, 71, 1750, 71, + 1766, 71, 1765, 71, 2631, 1771, 71, 71, 71, 71, 71, 1764, 71, 1770, 1756, 1757, 1760, 1758, 71, 1759, 1761, 1762, 1763, 1767, 1769, 1772, 71, 1766, 71, 1765, 1773, 71, 71, 1775, 71, 1774, 1768, 71, 1764, 1776, - 1770, 2630, 1777, 1778, 71, 1779, 71, 1781, 1786, 1780, - 1767, 1769, 1772, 1784, 71, 71, 2630, 1773, 1783, 71, + 1770, 2631, 1777, 1778, 71, 1779, 71, 1781, 1786, 1780, + 1767, 1769, 1772, 1784, 71, 71, 2631, 1773, 1783, 71, 1775, 1782, 1774, 1768, 71, 1788, 1776, 71, 71, 1777, 1778, 71, 1779, 71, 1781, 71, 1780, 1785, 71, 71, - 1784, 1787, 71, 1790, 1789, 1783, 2630, 71, 1782, 1792, - 71, 1791, 1788, 1793, 1794, 1795, 1800, 2630, 71, 1804, - 71, 1796, 1797, 2630, 1785, 71, 1798, 2630, 1787, 71, + 1784, 1787, 71, 1790, 1789, 1783, 2631, 71, 1782, 1792, + 71, 1791, 1788, 1793, 1794, 1795, 1800, 2631, 71, 1804, + 71, 1796, 1797, 2631, 1785, 71, 1798, 2631, 1787, 71, 1790, 1789, 1799, 71, 71, 71, 1792, 71, 1791, 1801, 1793, 71, 1795, 71, 1802, 71, 71, 1803, 1796, 1797, - 1805, 71, 2630, 1798, 71, 1806, 71, 1809, 1810, 1799, - 1807, 2630, 1811, 2630, 1812, 71, 1801, 1816, 1808, 2630, + 1805, 71, 2631, 1798, 71, 1806, 71, 1809, 1810, 1799, + 1807, 2631, 1811, 2631, 1812, 71, 1801, 1816, 1808, 2631, 1817, 1802, 71, 71, 1803, 1813, 71, 1805, 1814, 71, 71, 1815, 1806, 1818, 71, 1810, 1819, 1807, 71, 1811, 71, 1812, 71, 71, 1816, 1808, 71, 1817, 1822, 1820, - 1821, 1823, 1813, 1824, 71, 1814, 2630, 1828, 1815, 1825, + 1821, 1823, 1813, 1824, 71, 1814, 2631, 1828, 1815, 1825, 71, 1831, 1826, 1819, 71, 71, 71, 71, 71, 1832, 71, 71, 1827, 71, 1833, 1822, 1820, 1821, 1823, 1829, 1824, 71, 1830, 71, 1828, 1840, 1825, 1834, 1831, 1826, @@ -1873,20 +1874,20 @@ static yyconst flex_uint16_t yy_nxt[7592] = 1838, 1852, 1853, 71, 1843, 1841, 71, 1844, 71, 71, 1855, 1859, 1858, 1845, 1860, 71, 1861, 1863, 71, 1846, - 71, 1851, 2630, 71, 1856, 71, 71, 2630, 1852, 1853, + 71, 1851, 2631, 71, 1856, 71, 71, 2631, 1852, 1853, 71, 71, 1864, 1862, 1865, 1857, 71, 1855, 71, 1858, 71, 1860, 71, 1861, 1866, 1867, 1868, 1870, 1869, 71, - 2630, 1856, 2630, 1874, 71, 71, 1871, 1872, 71, 1864, + 2631, 1856, 2631, 1874, 71, 71, 1871, 1872, 71, 1864, 1862, 71, 1857, 1873, 1875, 71, 71, 71, 1878, 71, 71, 1866, 1876, 1868, 1870, 1869, 1877, 71, 1879, 71, 1874, 71, 1880, 1871, 1872, 1881, 71, 71, 1882, 71, - 1873, 1875, 1883, 1885, 71, 71, 1884, 2630, 1886, 1876, + 1873, 1875, 1883, 1885, 71, 71, 1884, 2631, 1886, 1876, 71, 71, 1887, 1877, 1888, 1879, 71, 71, 71, 1880, 71, 1889, 1881, 1890, 71, 1882, 1891, 1892, 71, 1883, 71, 71, 71, 1884, 1893, 1886, 1895, 1894, 1896, 1887, 71, 1888, 71, 1897, 1901, 1898, 1899, 1902, 1889, 71, - 1890, 1900, 1904, 1891, 1892, 1903, 2630, 71, 71, 1905, + 1890, 1900, 1904, 1891, 1892, 1903, 2631, 71, 71, 1905, 71, 1893, 71, 71, 1894, 1896, 71, 71, 1908, 1909, 1897, 71, 1898, 1899, 71, 1910, 1914, 71, 1900, 1904, 1906, 1911, 1903, 1907, 1913, 71, 1905, 1912, 71, 1915, @@ -1894,16 +1895,16 @@ static yyconst flex_uint16_t yy_nxt[7592] = 71, 1920, 1910, 71, 1918, 1921, 1925, 1906, 1911, 1922, 1907, 1913, 1924, 71, 1912, 1923, 71, 71, 1926, 1916, - 71, 1927, 71, 71, 2630, 1929, 71, 1930, 71, 1928, + 71, 1927, 71, 71, 2631, 1929, 71, 1930, 71, 1928, 1933, 1918, 71, 71, 71, 1931, 1922, 1937, 71, 1924, 1938, 1934, 1923, 1935, 1942, 1926, 71, 71, 71, 71, 1932, 71, 1929, 1940, 1930, 71, 1928, 71, 1936, 1939, 1941, 71, 1931, 71, 71, 71, 71, 1938, 1934, 1946, 1935, 71, 1944, 1943, 1948, 1947, 1945, 1932, 1949, 1952, 1940, 71, 71, 71, 71, 1936, 1939, 1941, 71, 1950, - 71, 71, 1951, 2630, 71, 1953, 71, 71, 1954, 1944, + 71, 71, 1951, 2631, 71, 1953, 71, 71, 1954, 1944, 1943, 1948, 1947, 1945, 1955, 1949, 1952, 1956, 1957, 1958, - 71, 1959, 1964, 71, 2630, 1960, 1950, 71, 71, 1951, + 71, 1959, 1964, 71, 2631, 1960, 1950, 71, 71, 1951, 71, 1961, 1953, 71, 1962, 1954, 71, 1963, 1965, 71, 1966, 1955, 71, 1967, 1956, 1957, 1958, 71, 1959, 71, @@ -1912,7 +1913,7 @@ static yyconst flex_uint16_t yy_nxt[7592] = 1967, 1974, 71, 71, 1975, 1978, 1977, 1968, 1969, 1979, 71, 71, 1970, 1981, 71, 1982, 1972, 1980, 1983, 1971, 71, 1985, 1986, 1976, 71, 71, 1988, 1984, 1974, 71, - 2630, 1975, 71, 1977, 71, 71, 1979, 71, 71, 1987, + 2631, 1975, 71, 1977, 71, 71, 1979, 71, 71, 1987, 1981, 71, 1982, 1990, 1980, 1983, 1991, 1989, 71, 1986, 1993, 1992, 1994, 1988, 1984, 71, 1995, 71, 71, 71, @@ -1921,7 +1922,7 @@ static yyconst flex_uint16_t yy_nxt[7592] = 2006, 2009, 71, 1995, 2007, 71, 2005, 71, 71, 71, 1999, 1998, 71, 71, 2008, 71, 2003, 71, 2010, 71, 2011, 71, 71, 2004, 71, 2013, 2012, 2006, 2009, 2015, - 2630, 2007, 71, 2005, 2014, 2018, 71, 2016, 2017, 2019, + 2631, 2007, 71, 2005, 2014, 2018, 71, 2016, 2017, 2019, 71, 2008, 71, 2021, 71, 2010, 71, 71, 71, 2020, 2025, 71, 2013, 2012, 2023, 2026, 2015, 71, 71, 2022, 2035, 2014, 2018, 71, 2016, 2017, 2019, 2024, 2028, 2027, @@ -1932,101 +1933,101 @@ static yyconst flex_uint16_t yy_nxt[7592] = 2030, 2031, 2036, 2038, 2040, 71, 2033, 2043, 2044, 71, 2041, 2032, 71, 71, 2042, 2047, 2034, 71, 71, 2046, 2048, 71, 71, 2051, 2052, 71, 71, 2049, 2054, 2036, - 2038, 2040, 71, 2630, 71, 71, 71, 2041, 71, 2053, + 2038, 2040, 71, 2631, 71, 71, 71, 2041, 71, 2053, 2050, 2042, 2047, 2055, 2056, 71, 2046, 2048, 71, 71, 2051, 71, 71, 2057, 2049, 2058, 71, 71, 2060, 2059, - 71, 2061, 2065, 71, 2630, 2062, 2053, 2050, 71, 2063, + 71, 2061, 2065, 71, 2631, 2062, 2053, 2050, 71, 2063, 2055, 2056, 2064, 2067, 2068, 71, 2069, 2066, 2070, 2071, 71, 2074, 2058, 2072, 71, 2060, 2059, 71, 71, 2065, 71, 71, 2062, 2073, 2078, 71, 2063, 71, 71, 2064, 2067, 71, 71, 71, 2066, 71, 71, 71, 2074, 2075, - 2072, 2076, 2077, 2079, 2080, 2081, 2083, 2082, 2084, 2630, - 2073, 71, 2086, 71, 2085, 71, 71, 2087, 2630, 71, + 2072, 2076, 2077, 2079, 2080, 2081, 2083, 2082, 2084, 2631, + 2073, 71, 2086, 71, 2085, 71, 71, 2087, 2631, 71, 71, 71, 2088, 2089, 71, 71, 2075, 71, 2076, 2077, 71, 71, 2081, 2083, 2082, 2084, 71, 2091, 2090, 2086, 71, 2085, 2093, 2092, 71, 71, 71, 2094, 2095, 2088, - 2089, 71, 2098, 2099, 2101, 71, 2096, 2630, 71, 2097, + 2089, 71, 2098, 2099, 2101, 71, 2096, 2631, 71, 2097, 2103, 71, 2104, 2100, 2091, 2090, 71, 71, 71, 2093, 2092, 71, 2102, 71, 2094, 2095, 2105, 2106, 71, 2098, 2099, 2101, 71, 2096, 71, 71, 2097, 2103, 2107, 2104, - 2100, 2108, 2109, 2110, 2111, 2114, 2630, 2113, 2112, 2102, - 71, 71, 71, 71, 71, 71, 71, 2630, 2116, 71, - 2630, 2630, 2119, 2120, 71, 2107, 2115, 71, 2108, 2109, + 2100, 2108, 2109, 2110, 2111, 2114, 2631, 2113, 2112, 2102, + 71, 71, 71, 71, 71, 71, 71, 2631, 2116, 71, + 2631, 2631, 2119, 2120, 71, 2107, 2115, 71, 2108, 2109, 2110, 2111, 2114, 71, 2113, 2112, 71, 2117, 2118, 2121, 2122, 2125, 2123, 2124, 71, 2116, 2126, 71, 71, 2119, - 71, 71, 71, 2115, 2127, 2630, 2133, 71, 71, 2131, + 71, 71, 71, 2115, 2127, 2631, 2133, 71, 71, 2131, 2132, 71, 2128, 71, 2117, 2118, 2121, 71, 2125, 2123, - 2124, 71, 2129, 2126, 2130, 2134, 2137, 2136, 2135, 2630, + 2124, 71, 2129, 2126, 2130, 2134, 2137, 2136, 2135, 2631, 2142, 2127, 71, 71, 71, 71, 71, 71, 71, 2128, - 71, 2141, 2140, 2138, 2630, 2144, 2143, 2146, 71, 2129, - 71, 2130, 2134, 2137, 2136, 2135, 2139, 71, 2630, 2145, - 2151, 2154, 2630, 71, 71, 71, 71, 71, 2141, 2140, + 71, 2141, 2140, 2138, 2631, 2144, 2143, 2146, 71, 2129, + 71, 2130, 2134, 2137, 2136, 2135, 2139, 71, 2631, 2145, + 2151, 2154, 2631, 71, 71, 71, 71, 71, 2141, 2140, 2138, 71, 71, 2143, 2146, 2147, 2148, 2150, 2149, 2152, 2153, 2156, 71, 2139, 71, 71, 2145, 71, 71, 71, - 2155, 71, 2157, 71, 2158, 2159, 2630, 2162, 2164, 2163, + 2155, 71, 2157, 71, 2158, 2159, 2631, 2162, 2164, 2163, 2166, 71, 2147, 2148, 2150, 2149, 2152, 2153, 2156, 71, 2167, 2160, 2165, 71, 71, 71, 2161, 2155, 71, 2157, - 71, 71, 2159, 71, 71, 71, 2163, 71, 2168, 2630, + 71, 71, 2159, 71, 71, 71, 2163, 71, 2168, 2631, 2169, 2170, 71, 2171, 2172, 2173, 71, 2167, 2160, 2165, - 2174, 2175, 2177, 2161, 2630, 2630, 2176, 71, 71, 2630, + 2174, 2175, 2177, 2161, 2631, 2631, 2176, 71, 71, 2631, 2182, 2178, 71, 71, 2183, 71, 71, 2169, 2170, 71, 2171, 2172, 2173, 71, 71, 2180, 2179, 2174, 2175, 2177, 71, 2181, 71, 2176, 71, 2184, 71, 2182, 2178, 2185, 2186, 2183, 2188, 71, 71, 2187, 2189, 71, 2190, 2191, - 2193, 2630, 2180, 2179, 2630, 71, 2192, 71, 2181, 2194, + 2193, 2631, 2180, 2179, 2631, 71, 2192, 71, 2181, 2194, 2195, 2196, 2184, 2197, 71, 71, 71, 71, 2199, 2188, 2198, 71, 2187, 2189, 2200, 2190, 71, 2193, 71, 2201, 2202, 71, 71, 2192, 71, 2204, 2194, 2195, 71, 2203, - 71, 2205, 71, 2206, 2207, 2199, 2208, 2198, 2630, 2630, - 2209, 2630, 71, 2210, 2212, 2630, 71, 2202, 71, 2211, + 71, 2205, 71, 2206, 2207, 2199, 2208, 2198, 2631, 2631, + 2209, 2631, 71, 2210, 2212, 2631, 71, 2202, 71, 2211, 2213, 71, 71, 2214, 71, 71, 2203, 71, 2205, 71, 2206, 2207, 2219, 2208, 71, 71, 2217, 2209, 71, 2215, 2210, 2212, 71, 2216, 2218, 71, 2211, 2213, 71, 2220, - 2214, 2224, 2221, 2228, 71, 2630, 2223, 71, 71, 2219, + 2214, 2224, 2221, 2228, 71, 2631, 2223, 71, 71, 2219, 71, 2222, 71, 2217, 71, 2225, 2215, 71, 71, 2226, 2216, 2218, 2227, 71, 2229, 2232, 2220, 2230, 71, 2221, 71, 2234, 71, 2223, 71, 2233, 2231, 71, 2222, 71, - 2630, 2235, 2225, 71, 2236, 2238, 2226, 2237, 71, 2227, + 2631, 2235, 2225, 71, 2236, 2238, 2226, 2237, 71, 2227, 2239, 2229, 2232, 2242, 2230, 2243, 2240, 2244, 71, 71, 71, 2245, 2246, 2231, 2241, 71, 71, 71, 2235, 71, 2249, 2236, 2238, 71, 2237, 2250, 71, 2239, 2247, 71, 2242, 2251, 71, 2240, 71, 71, 2248, 2252, 71, 71, 2253, 2241, 2254, 71, 2255, 2256, 71, 2249, 2257, 71, - 2258, 2261, 71, 2259, 2262, 2247, 2630, 2630, 71, 2263, + 2258, 2261, 71, 2259, 2262, 2247, 2631, 2631, 71, 2263, 71, 71, 71, 2248, 2252, 2260, 2270, 2253, 2264, 71, 71, 2255, 71, 2265, 2269, 2257, 2272, 71, 71, 2273, 2259, 71, 71, 71, 2266, 2274, 2263, 2267, 71, 2268, 2275, 2271, 2260, 71, 71, 71, 71, 2276, 71, 71, - 71, 2269, 2277, 2272, 71, 2630, 71, 71, 2278, 71, - 2630, 2266, 2274, 2282, 2267, 2281, 2268, 2275, 2271, 2285, - 2284, 71, 71, 2283, 2276, 2287, 2279, 2280, 2630, 2277, + 71, 2269, 2277, 2272, 71, 2631, 71, 71, 2278, 71, + 2631, 2266, 2274, 2282, 2267, 2281, 2268, 2275, 2271, 2285, + 2284, 71, 71, 2283, 2276, 2287, 2279, 2280, 2631, 2277, 71, 2286, 71, 71, 2289, 2278, 71, 71, 2290, 71, 2282, 2288, 2281, 2291, 71, 2292, 71, 2284, 2293, 71, 2283, 2294, 2287, 2279, 2280, 2295, 2296, 71, 2286, 71, 71, 2289, 71, 2297, 71, 2290, 2300, 2298, 2288, 71, 2291, 71, 2292, 71, 71, 2293, 2301, 2299, 2294, 2302, 2303, 71, 2295, 2296, 71, 2304, 2305, 2306, 71, 2308, - 2297, 2309, 2307, 71, 2298, 2630, 2312, 2310, 71, 2311, + 2297, 2309, 2307, 71, 2298, 2631, 2312, 2310, 71, 2311, - 71, 2315, 2630, 2301, 2299, 71, 2302, 71, 71, 71, + 71, 2315, 2631, 2301, 2299, 71, 2302, 71, 71, 71, 71, 2316, 2304, 71, 2306, 71, 2308, 71, 71, 2307, 71, 2317, 2313, 2312, 2310, 2318, 2311, 2314, 2315, 71, - 2319, 2320, 2321, 71, 2322, 2323, 2330, 2630, 2316, 71, + 2319, 2320, 2321, 71, 2322, 2323, 2330, 2631, 2316, 71, 2325, 71, 2324, 71, 2331, 71, 2327, 2326, 71, 71, - 2328, 2332, 2318, 2329, 71, 2630, 2630, 2319, 2320, 2321, + 2328, 2332, 2318, 2329, 71, 2631, 2631, 2319, 2320, 2321, 2336, 2322, 2323, 71, 71, 71, 71, 2325, 71, 2324, 2333, 71, 2334, 2327, 2326, 2335, 71, 2328, 71, 71, - 2329, 2337, 71, 71, 2338, 2339, 2630, 2336, 71, 2340, - 2342, 2341, 2343, 2345, 2344, 2347, 71, 2333, 2630, 2334, + 2329, 2337, 71, 71, 2338, 2339, 2631, 2336, 71, 2340, + 2342, 2341, 2343, 2345, 2344, 2347, 71, 2333, 2631, 2334, - 71, 2348, 2335, 71, 2350, 2630, 71, 71, 2346, 71, + 71, 2348, 2335, 71, 2350, 2631, 71, 71, 2346, 71, 71, 2338, 2339, 71, 71, 2349, 71, 2342, 2341, 2343, 2351, 2344, 71, 2352, 2356, 71, 2353, 71, 2348, 2355, 2354, 71, 71, 2357, 71, 2346, 2358, 71, 2359, 71, @@ -2034,111 +2035,107 @@ static yyconst flex_uint16_t yy_nxt[7592] = 2352, 2356, 71, 2353, 71, 2364, 2355, 2354, 71, 2367, 2357, 71, 2368, 2358, 2366, 2359, 2372, 2369, 71, 2371, 71, 71, 71, 2361, 71, 71, 2370, 71, 2374, 2375, - 71, 71, 2364, 71, 2373, 2376, 2367, 2377, 2388, 71, - 2378, 2366, 71, 2372, 2369, 71, 2371, 71, 2381, 2383, + 71, 71, 2364, 71, 2373, 2376, 2367, 2389, 2377, 71, + 2379, 2366, 71, 2372, 2369, 2380, 2371, 71, 2382, 2384, - 2379, 2380, 2389, 2370, 2385, 2374, 71, 71, 71, 71, - 2384, 2373, 71, 71, 2377, 2382, 2387, 2378, 2386, 2630, - 71, 2391, 71, 71, 2390, 2381, 71, 2379, 2380, 71, - 71, 2385, 2392, 71, 71, 2393, 2394, 2384, 2395, 2396, - 2399, 71, 2382, 2387, 2630, 2386, 71, 2400, 71, 2402, - 2403, 2390, 2401, 71, 2397, 2398, 2404, 71, 71, 2392, - 71, 2630, 2393, 2394, 71, 2395, 2406, 71, 2407, 2408, - 2409, 71, 2405, 2411, 71, 2630, 71, 71, 71, 2401, - 2410, 2397, 2398, 2404, 2412, 71, 2413, 2415, 71, 2414, - 2416, 71, 71, 2406, 2417, 71, 71, 71, 2419, 2405, + 2385, 2381, 71, 2370, 2386, 2374, 71, 2378, 71, 71, + 2390, 2373, 71, 71, 2383, 71, 2388, 2379, 2387, 71, + 2391, 71, 2380, 71, 71, 2382, 71, 2385, 2381, 2392, + 71, 2386, 2394, 71, 2378, 2395, 2397, 71, 2396, 2393, + 2400, 2383, 2401, 2388, 71, 2387, 71, 2391, 71, 2403, + 2398, 2399, 2404, 2405, 71, 2402, 2408, 71, 2406, 2394, + 71, 71, 2395, 71, 2407, 2396, 2393, 71, 71, 71, + 2409, 71, 2410, 2411, 2412, 71, 71, 2398, 2399, 71, + 2405, 2413, 2402, 71, 2415, 2406, 71, 2414, 2416, 71, + 2417, 2407, 71, 2420, 2419, 71, 2421, 71, 2418, 71, - 71, 71, 71, 71, 2418, 2420, 2421, 2410, 2423, 2424, - 2422, 2412, 2425, 2413, 71, 71, 2414, 2416, 2630, 2426, - 2630, 2417, 71, 71, 2630, 71, 2429, 71, 71, 2430, - 2431, 2418, 2420, 71, 2630, 2427, 2424, 2422, 2428, 71, - 71, 71, 71, 2443, 71, 71, 2426, 2432, 71, 2437, - 2433, 71, 2434, 2429, 2435, 2436, 2430, 2431, 71, 71, - 71, 71, 2427, 2441, 71, 2428, 71, 2440, 2438, 2439, - 71, 2444, 2446, 71, 2432, 2447, 2437, 2433, 71, 2434, - 2442, 2435, 2436, 2445, 2451, 71, 2450, 71, 2448, 2449, - 2441, 2452, 2453, 2454, 2440, 2438, 2439, 2459, 71, 71, + 2411, 71, 2422, 71, 2424, 71, 2423, 2425, 2413, 2631, + 71, 2415, 71, 2426, 2414, 71, 2427, 2417, 71, 71, + 71, 2419, 2430, 2421, 2428, 2418, 71, 2431, 2429, 71, + 2631, 71, 2432, 2423, 2425, 71, 71, 2433, 71, 2434, + 71, 2435, 71, 2427, 71, 2436, 2438, 71, 71, 2430, + 2444, 2428, 71, 71, 2431, 2429, 71, 71, 2437, 2432, + 2439, 2440, 2442, 2441, 2433, 2445, 2434, 71, 2435, 71, + 71, 2443, 2436, 2438, 2446, 2447, 2448, 71, 71, 2449, + 2450, 2631, 2451, 2452, 71, 2437, 2453, 2439, 2440, 2442, + 2441, 2454, 71, 2455, 2456, 71, 2457, 71, 2443, 2458, - 71, 2455, 71, 2456, 2457, 71, 71, 2442, 2460, 71, - 2445, 71, 2461, 2450, 2458, 71, 71, 71, 2452, 2453, - 71, 71, 2462, 71, 2459, 2463, 71, 2467, 2455, 2464, - 2456, 2457, 2468, 2469, 71, 2460, 2470, 71, 71, 71, - 2465, 2458, 2471, 2466, 2472, 2476, 2473, 2475, 2630, 71, - 71, 71, 2463, 2474, 71, 71, 2464, 2477, 71, 71, - 2478, 2479, 2480, 2470, 2481, 71, 2482, 2465, 71, 2471, - 2466, 2472, 71, 2473, 2475, 71, 2483, 2485, 2484, 2488, - 2474, 2486, 71, 2487, 71, 2489, 2495, 71, 71, 71, - 71, 2481, 71, 71, 71, 71, 2490, 2491, 71, 2492, + 2462, 2446, 71, 71, 71, 71, 2459, 2460, 71, 2451, + 71, 71, 2461, 2453, 71, 71, 2463, 2464, 2454, 71, + 71, 2456, 2470, 2457, 2465, 71, 2458, 71, 2471, 71, + 71, 2468, 2466, 2459, 2460, 2467, 2469, 2472, 71, 2461, + 2631, 2473, 2477, 71, 2464, 2474, 71, 71, 2475, 71, + 71, 2465, 2476, 2478, 71, 2471, 2479, 2480, 2481, 2466, + 71, 2483, 2467, 71, 2472, 2484, 2485, 71, 2473, 71, + 71, 2482, 2474, 2487, 2488, 2475, 2486, 2489, 71, 2476, + 71, 2490, 2491, 71, 71, 71, 71, 2493, 71, 71, + 71, 71, 71, 2485, 2492, 71, 2494, 2497, 2482, 71, - 2493, 2496, 2630, 71, 2485, 2484, 71, 71, 2486, 71, - 2487, 2494, 2489, 2498, 71, 2497, 2503, 2501, 71, 2500, - 71, 71, 2499, 2490, 2491, 71, 2492, 2493, 2496, 2502, - 71, 71, 2506, 71, 2505, 71, 71, 71, 2494, 71, - 2498, 71, 2497, 2503, 2501, 2504, 2500, 71, 2507, 2499, - 2510, 2508, 71, 2512, 2509, 2513, 2502, 2511, 2517, 2506, - 2514, 2505, 71, 71, 71, 2515, 2516, 71, 71, 71, - 71, 2520, 2504, 71, 2522, 2507, 71, 2510, 2508, 71, - 2512, 2509, 2513, 71, 2511, 2517, 2519, 2514, 2518, 2521, - 2533, 2523, 2515, 2516, 2524, 71, 2525, 2526, 71, 71, + 2487, 2488, 2495, 2486, 71, 71, 71, 2496, 2490, 2491, + 71, 2498, 2631, 71, 2493, 2505, 2502, 2499, 2500, 2501, + 2631, 2492, 71, 2494, 2497, 71, 71, 71, 2503, 2495, + 71, 2504, 71, 71, 2506, 2508, 2513, 2507, 2498, 71, + 71, 71, 2505, 2502, 2499, 2500, 2501, 71, 2509, 2510, + 71, 71, 2512, 2511, 71, 2503, 2631, 2515, 2504, 2514, + 2516, 2506, 2508, 2513, 2507, 71, 71, 71, 2521, 2523, + 71, 71, 2524, 2518, 71, 2509, 2510, 2520, 71, 2512, + 2511, 2517, 2519, 71, 2515, 71, 2514, 2516, 2522, 71, + 71, 2525, 2526, 2527, 2631, 71, 71, 2529, 71, 2524, - 2630, 71, 2527, 2528, 2529, 71, 2530, 71, 2531, 71, - 71, 2535, 2534, 2519, 2539, 2518, 2521, 71, 2523, 2543, - 2532, 71, 71, 71, 2526, 71, 71, 71, 71, 2527, - 2528, 2529, 71, 2530, 2536, 2531, 2537, 2538, 71, 2534, - 2540, 71, 71, 2541, 2542, 2544, 71, 2532, 71, 2547, - 2630, 71, 71, 2548, 2630, 2545, 2549, 71, 2546, 2630, - 71, 2536, 71, 2537, 2538, 2550, 71, 2540, 71, 71, - 2541, 2542, 71, 2552, 2551, 2554, 2547, 71, 2553, 2555, - 2548, 71, 2545, 2549, 2561, 2546, 71, 2557, 71, 71, - 2556, 2558, 2550, 71, 2559, 71, 2560, 2562, 71, 2563, + 2518, 71, 2631, 2528, 2520, 2530, 71, 2531, 2517, 2519, + 71, 2532, 2534, 71, 2533, 2522, 2536, 2631, 71, 71, + 2527, 71, 2535, 2537, 2529, 2538, 71, 71, 2540, 71, + 2528, 71, 2530, 2539, 2531, 71, 2541, 71, 2532, 2542, + 2543, 2533, 71, 71, 71, 2544, 2545, 2547, 71, 2535, + 2537, 2631, 2538, 2551, 2631, 71, 2546, 2548, 71, 2550, + 2539, 71, 71, 2541, 2549, 71, 2542, 2543, 2552, 71, + 2553, 71, 71, 2554, 2547, 71, 71, 71, 71, 2555, + 2551, 71, 2556, 2546, 2548, 2558, 2550, 2562, 2559, 2563, + 2557, 2549, 71, 71, 2560, 2552, 71, 2553, 71, 2564, - 2552, 2551, 2554, 71, 71, 2553, 2555, 2564, 2565, 71, - 2566, 71, 2568, 71, 2557, 2569, 2567, 2556, 2558, 71, - 71, 2559, 2570, 2560, 2562, 2571, 2574, 2572, 2573, 2577, - 71, 71, 71, 71, 2564, 2565, 71, 2566, 71, 2568, - 2575, 2630, 2580, 2567, 71, 2581, 71, 71, 71, 2570, - 71, 2576, 71, 2574, 2572, 2573, 2578, 2579, 2585, 71, - 2584, 71, 2582, 2587, 71, 2583, 71, 2575, 71, 2580, - 2588, 71, 71, 2586, 2590, 2630, 2589, 71, 2576, 2592, - 71, 71, 71, 2578, 2579, 2585, 2594, 2584, 71, 2582, - 2587, 2593, 2583, 2591, 71, 2595, 71, 2588, 71, 71, + 2554, 2565, 2566, 71, 2570, 2561, 2555, 71, 2567, 2556, + 71, 71, 2558, 71, 71, 2559, 2563, 2557, 2568, 2571, + 2572, 2560, 2578, 2575, 71, 2569, 2573, 71, 2565, 2566, + 71, 71, 2561, 71, 2574, 2567, 71, 2631, 2581, 2582, + 71, 71, 71, 71, 2580, 2568, 2571, 71, 2576, 71, + 2575, 2577, 2569, 2573, 71, 2579, 71, 2585, 71, 71, + 2586, 2574, 2588, 71, 71, 2581, 71, 2583, 71, 2587, + 2584, 2580, 2589, 2590, 2591, 2576, 71, 71, 2577, 71, + 2592, 71, 2579, 2593, 2585, 71, 2595, 2586, 71, 2588, + 2596, 2600, 2597, 2603, 2583, 71, 2587, 2584, 71, 2589, - 2586, 2590, 2596, 2589, 2599, 71, 2592, 2597, 2598, 2630, - 2600, 2601, 71, 2594, 2602, 2608, 71, 2605, 2593, 2603, - 2591, 71, 2595, 2604, 71, 71, 2606, 71, 2630, 2596, - 2630, 71, 71, 2630, 2597, 2598, 71, 2600, 2601, 71, - 2610, 71, 71, 71, 2605, 2614, 2603, 2607, 71, 2609, - 2604, 2611, 2612, 2606, 2615, 71, 2613, 71, 2616, 2619, - 71, 2617, 71, 2618, 71, 2621, 71, 2610, 2630, 71, - 2622, 71, 2614, 71, 2607, 2620, 2609, 2624, 2611, 2612, - 2623, 71, 2628, 2613, 2625, 2616, 71, 2629, 2617, 71, - 2618, 2630, 71, 2626, 2630, 71, 2630, 71, 2630, 71, + 2590, 2591, 2598, 2594, 2601, 2604, 2631, 2592, 2602, 71, + 2593, 71, 71, 2595, 71, 2599, 71, 2596, 71, 2597, + 71, 2605, 71, 71, 2607, 71, 71, 2609, 2606, 2598, + 2594, 2601, 2604, 71, 2611, 2602, 71, 2608, 2612, 2610, + 2616, 71, 2599, 2615, 2613, 71, 71, 71, 2605, 2614, + 2617, 2607, 71, 2631, 71, 2606, 71, 71, 71, 2619, + 71, 2611, 2620, 2621, 2608, 2612, 2610, 71, 2622, 71, + 2615, 2613, 2618, 2623, 2624, 2625, 2614, 2617, 2629, 2627, + 71, 2626, 2630, 71, 2628, 71, 2619, 71, 2631, 71, + 2621, 2631, 71, 2631, 71, 71, 2631, 71, 2631, 2618, - 71, 71, 2620, 2630, 2624, 2627, 71, 2623, 2630, 71, - 2630, 2625, 2630, 71, 71, 2630, 2630, 2630, 2630, 2630, - 2626, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2627, 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, - 2630, 74, 74, 74, 74, 140, 140, 2630, 2630, 2630, - 140, 140, 142, 142, 2630, 2630, 142, 2630, 142, 144, - 2630, 2630, 2630, 2630, 2630, 144, 147, 147, 2630, 2630, - - 2630, 147, 147, 149, 2630, 2630, 2630, 2630, 2630, 149, - 151, 151, 2630, 151, 151, 151, 151, 75, 75, 2630, - 75, 75, 75, 75, 13, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630 + 71, 2624, 2625, 71, 2631, 71, 2627, 2631, 2626, 71, + 2631, 2628, 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, 2631, + 74, 74, 74, 74, 140, 140, 2631, 2631, 2631, 140, + 140, 142, 142, 2631, 2631, 142, 2631, 142, 144, 2631, + 2631, 2631, 2631, 2631, 144, 147, 147, 2631, 2631, 2631, + 147, 147, 149, 2631, 2631, 2631, 2631, 2631, 149, 151, + 151, 2631, 151, 151, 151, 151, 75, 75, 2631, 75, + 75, 75, 75, 13, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631 } ; -static yyconst flex_int16_t yy_chk[7592] = +static yyconst flex_int16_t yy_chk[7571] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2148,7 +2145,7 @@ static yyconst flex_int16_t yy_chk[7592] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 28, 6, 7, - 7, 7, 7, 2636, 7, 8, 8, 8, 8, 28, + 7, 7, 7, 2637, 7, 8, 8, 8, 8, 28, 8, 9, 9, 9, 10, 10, 10, 15, 21, 24, 906, 15, 30, 3, 28, 149, 4, 47, 47, 5, @@ -2874,108 +2871,104 @@ static yyconst flex_int16_t yy_chk[7592] = 2290, 2294, 2295, 2291, 2299, 2304, 2293, 2292, 2296, 2308, 2295, 2304, 2310, 2296, 2307, 2297, 2315, 2311, 2298, 2313, 2301, 2302, 2306, 2299, 2311, 2307, 2312, 2313, 2318, 2319, - 2312, 2308, 2304, 2318, 2316, 2320, 2308, 2321, 2335, 2310, - 2322, 2307, 2315, 2315, 2311, 2321, 2313, 2316, 2325, 2327, + 2312, 2308, 2304, 2318, 2316, 2320, 2308, 2335, 2321, 2310, + 2322, 2307, 2315, 2315, 2311, 2323, 2313, 2316, 2325, 2327, - 2323, 2324, 2336, 2312, 2329, 2318, 2319, 2323, 2322, 2324, - 2328, 2316, 2320, 2325, 2321, 2326, 2334, 2322, 2333, 0, - 2335, 2338, 2326, 2334, 2337, 2325, 2327, 2323, 2324, 2336, - 2329, 2329, 2339, 2333, 2328, 2341, 2342, 2328, 2343, 2344, - 2346, 2339, 2326, 2334, 0, 2333, 2343, 2348, 2337, 2351, - 2352, 2337, 2349, 2338, 2345, 2345, 2353, 2341, 2342, 2339, - 2349, 0, 2341, 2342, 2345, 2343, 2355, 2346, 2356, 2357, - 2358, 2344, 2354, 2361, 2348, 0, 2351, 2352, 2353, 2349, - 2359, 2345, 2345, 2353, 2364, 2354, 2366, 2369, 2355, 2367, - 2370, 2366, 2364, 2355, 2371, 2356, 2357, 2358, 2373, 2354, + 2328, 2324, 2323, 2312, 2329, 2318, 2319, 2321, 2322, 2324, + 2336, 2316, 2320, 2325, 2326, 2321, 2334, 2322, 2333, 2335, + 2337, 2326, 2323, 2334, 2328, 2325, 2327, 2328, 2324, 2338, + 2329, 2329, 2341, 2333, 2321, 2342, 2344, 2336, 2343, 2339, + 2346, 2326, 2348, 2334, 2337, 2333, 2343, 2337, 2339, 2351, + 2345, 2345, 2352, 2353, 2341, 2349, 2356, 2342, 2354, 2341, + 2345, 2338, 2342, 2349, 2355, 2343, 2339, 2346, 2344, 2348, + 2357, 2354, 2358, 2359, 2361, 2353, 2351, 2345, 2345, 2352, + 2353, 2364, 2349, 2356, 2367, 2354, 2355, 2366, 2369, 2364, + 2370, 2355, 2366, 2373, 2372, 2359, 2374, 2357, 2371, 2358, - 2361, 2371, 2359, 2370, 2372, 2374, 2377, 2359, 2379, 2380, - 2378, 2364, 2381, 2366, 2369, 2367, 2367, 2370, 0, 2382, - 0, 2371, 2372, 2378, 0, 2373, 2386, 2374, 2380, 2387, - 2388, 2372, 2374, 2377, 0, 2384, 2380, 2378, 2385, 2381, - 2379, 2382, 2384, 2404, 2387, 2385, 2382, 2390, 2386, 2395, - 2391, 2388, 2392, 2386, 2393, 2394, 2387, 2388, 2391, 2392, - 2395, 2393, 2384, 2398, 2394, 2385, 2390, 2397, 2396, 2396, - 2404, 2405, 2410, 2397, 2390, 2412, 2395, 2391, 2396, 2392, - 2401, 2393, 2394, 2406, 2416, 2398, 2414, 2401, 2413, 2413, - 2398, 2417, 2418, 2420, 2397, 2396, 2396, 2427, 2405, 2410, + 2359, 2361, 2378, 2370, 2380, 2371, 2379, 2381, 2364, 0, + 2367, 2367, 2372, 2382, 2366, 2369, 2383, 2370, 2374, 2379, + 2373, 2372, 2387, 2374, 2385, 2371, 2381, 2388, 2386, 2378, + 0, 2385, 2389, 2379, 2381, 2386, 2380, 2391, 2383, 2392, + 2382, 2393, 2388, 2383, 2387, 2394, 2396, 2392, 2393, 2387, + 2405, 2385, 2394, 2389, 2388, 2386, 2391, 2396, 2395, 2389, + 2397, 2397, 2399, 2398, 2391, 2406, 2392, 2395, 2393, 2398, + 2397, 2402, 2394, 2396, 2407, 2411, 2413, 2405, 2402, 2414, + 2414, 0, 2415, 2417, 2399, 2395, 2418, 2397, 2397, 2399, + 2398, 2419, 2406, 2421, 2423, 2418, 2424, 2407, 2402, 2425, - 2417, 2422, 2412, 2423, 2424, 2418, 2406, 2401, 2428, 2414, - 2406, 2416, 2429, 2414, 2426, 2427, 2424, 2413, 2417, 2418, - 2420, 2422, 2430, 2426, 2427, 2431, 2423, 2434, 2422, 2432, - 2423, 2424, 2434, 2435, 2428, 2428, 2436, 2431, 2436, 2429, - 2433, 2426, 2437, 2433, 2438, 2442, 2439, 2441, 0, 2430, - 2438, 2432, 2431, 2440, 2437, 2441, 2432, 2445, 2433, 2434, - 2448, 2449, 2450, 2436, 2452, 2435, 2453, 2433, 2439, 2437, - 2433, 2438, 2442, 2439, 2441, 2440, 2455, 2457, 2456, 2460, - 2440, 2458, 2452, 2459, 2445, 2463, 2470, 2448, 2449, 2450, - 2456, 2452, 2457, 2453, 2463, 2459, 2464, 2465, 2465, 2466, + 2430, 2407, 2411, 2413, 2419, 2415, 2427, 2428, 2414, 2415, + 2417, 2425, 2429, 2418, 2423, 2427, 2431, 2432, 2419, 2424, + 2421, 2423, 2436, 2424, 2433, 2428, 2425, 2430, 2437, 2432, + 2437, 2435, 2434, 2427, 2428, 2434, 2435, 2438, 2429, 2429, + 0, 2439, 2443, 2431, 2432, 2440, 2433, 2439, 2441, 2438, + 2434, 2433, 2442, 2446, 2436, 2437, 2449, 2450, 2451, 2434, + 2442, 2454, 2434, 2435, 2438, 2456, 2457, 2440, 2439, 2443, + 2441, 2453, 2440, 2459, 2460, 2441, 2458, 2461, 2457, 2442, + 2446, 2464, 2465, 2449, 2450, 2451, 2460, 2467, 2454, 2453, + 2464, 2458, 2456, 2457, 2466, 2466, 2468, 2472, 2453, 2459, - 2467, 2471, 0, 2455, 2457, 2456, 2460, 2458, 2458, 2467, - 2459, 2469, 2463, 2473, 2471, 2472, 2485, 2481, 2470, 2475, - 2464, 2473, 2474, 2464, 2465, 2466, 2466, 2467, 2471, 2484, - 2475, 2474, 2489, 2484, 2487, 2469, 2489, 2472, 2469, 2485, - 2473, 2481, 2472, 2485, 2481, 2486, 2475, 2487, 2490, 2474, - 2493, 2491, 2486, 2495, 2492, 2496, 2484, 2494, 2500, 2489, - 2497, 2487, 2493, 2496, 2490, 2498, 2499, 2495, 2499, 2497, - 2500, 2503, 2486, 2491, 2505, 2490, 2498, 2493, 2491, 2492, - 2495, 2492, 2496, 2494, 2494, 2500, 2502, 2497, 2501, 2504, - 2516, 2506, 2498, 2499, 2507, 2501, 2508, 2509, 2503, 2502, + 2459, 2460, 2470, 2458, 2461, 2468, 2465, 2471, 2464, 2465, + 2472, 2473, 0, 2467, 2467, 2487, 2482, 2474, 2475, 2476, + 0, 2466, 2487, 2468, 2472, 2474, 2470, 2475, 2485, 2470, + 2476, 2486, 2485, 2473, 2488, 2491, 2496, 2490, 2473, 2471, + 2482, 2490, 2487, 2482, 2474, 2475, 2476, 2488, 2492, 2493, + 2496, 2491, 2495, 2494, 2486, 2485, 0, 2498, 2486, 2497, + 2499, 2488, 2491, 2496, 2490, 2494, 2498, 2497, 2504, 2506, + 2492, 2499, 2507, 2501, 2493, 2492, 2493, 2503, 2495, 2495, + 2494, 2500, 2502, 2500, 2498, 2501, 2497, 2499, 2505, 2502, + 2503, 2508, 2509, 2510, 0, 2504, 2506, 2512, 2507, 2507, - 0, 2505, 2510, 2511, 2512, 2509, 2513, 2504, 2514, 2510, - 2514, 2518, 2517, 2502, 2526, 2501, 2504, 2506, 2506, 2530, - 2515, 2507, 2516, 2508, 2509, 2517, 2512, 2511, 2513, 2510, - 2511, 2512, 2515, 2513, 2519, 2514, 2521, 2523, 2518, 2517, - 2527, 2526, 2519, 2528, 2529, 2531, 2523, 2515, 2521, 2534, - 0, 2530, 2529, 2536, 0, 2532, 2537, 2534, 2533, 0, - 2536, 2519, 2528, 2521, 2523, 2538, 2527, 2527, 2532, 2537, - 2528, 2529, 2533, 2541, 2540, 2543, 2534, 2531, 2542, 2544, - 2536, 2540, 2532, 2537, 2550, 2533, 2542, 2546, 2538, 2543, - 2545, 2547, 2538, 2544, 2548, 2541, 2549, 2551, 2545, 2552, + 2501, 2510, 0, 2511, 2503, 2513, 2505, 2514, 2500, 2502, + 2511, 2515, 2517, 2515, 2516, 2505, 2519, 0, 2508, 2509, + 2510, 2512, 2518, 2520, 2512, 2522, 2516, 2513, 2527, 2514, + 2511, 2520, 2513, 2524, 2514, 2518, 2528, 2522, 2515, 2529, + 2530, 2516, 2524, 2519, 2517, 2531, 2532, 2534, 2530, 2518, + 2520, 0, 2522, 2539, 0, 2527, 2533, 2535, 2529, 2538, + 2524, 2534, 2528, 2528, 2537, 2535, 2529, 2530, 2541, 2533, + 2542, 2537, 2538, 2543, 2534, 2541, 2539, 2531, 2532, 2544, + 2539, 2543, 2545, 2533, 2535, 2547, 2538, 2551, 2548, 2552, + 2546, 2537, 2542, 2544, 2549, 2541, 2545, 2542, 2546, 2553, - 2541, 2540, 2543, 2548, 2549, 2542, 2544, 2553, 2554, 2546, - 2555, 2550, 2557, 2547, 2546, 2558, 2556, 2545, 2547, 2551, - 2557, 2548, 2559, 2549, 2551, 2560, 2564, 2562, 2563, 2567, - 2554, 2552, 2555, 2553, 2553, 2554, 2563, 2555, 2556, 2557, - 2565, 0, 2570, 2556, 2559, 2572, 2564, 2558, 2565, 2559, - 2562, 2566, 2560, 2564, 2562, 2563, 2568, 2569, 2575, 2566, - 2574, 2567, 2573, 2577, 2568, 2573, 2575, 2565, 2570, 2570, - 2578, 2569, 2572, 2576, 2580, 0, 2579, 2577, 2566, 2583, - 2573, 2576, 2574, 2568, 2569, 2575, 2585, 2574, 2580, 2573, - 2577, 2584, 2573, 2582, 2582, 2586, 2578, 2578, 2579, 2584, + 2543, 2554, 2555, 2549, 2559, 2550, 2544, 2547, 2556, 2545, + 2548, 2552, 2547, 2550, 2551, 2548, 2552, 2546, 2557, 2560, + 2561, 2549, 2568, 2565, 2555, 2558, 2563, 2554, 2554, 2555, + 2556, 2553, 2550, 2558, 2564, 2556, 2559, 0, 2571, 2573, + 2557, 2560, 2564, 2565, 2570, 2557, 2560, 2561, 2566, 2563, + 2565, 2567, 2558, 2563, 2568, 2569, 2566, 2575, 2570, 2567, + 2576, 2564, 2578, 2569, 2571, 2571, 2573, 2574, 2576, 2577, + 2574, 2570, 2579, 2580, 2581, 2566, 2578, 2577, 2567, 2575, + 2583, 2583, 2569, 2584, 2575, 2574, 2586, 2576, 2581, 2578, + 2587, 2591, 2588, 2594, 2574, 2580, 2577, 2574, 2579, 2579, - 2576, 2580, 2587, 2579, 2590, 2583, 2583, 2588, 2589, 0, - 2591, 2592, 2585, 2585, 2593, 2600, 2589, 2596, 2584, 2594, - 2582, 2586, 2586, 2595, 2587, 2596, 2597, 2588, 0, 2587, - 0, 2590, 2591, 0, 2588, 2589, 2592, 2591, 2592, 2594, - 2603, 2593, 2600, 2595, 2596, 2607, 2594, 2598, 2597, 2601, - 2595, 2604, 2605, 2597, 2609, 2598, 2606, 2601, 2610, 2613, - 2605, 2611, 2603, 2612, 2606, 2616, 2610, 2603, 0, 2611, - 2617, 2607, 2607, 2604, 2598, 2614, 2601, 2620, 2604, 2605, - 2618, 2609, 2626, 2606, 2623, 2610, 2613, 2627, 2611, 2612, - 2612, 0, 2616, 2624, 0, 2614, 0, 2617, 0, 2620, + 2580, 2581, 2589, 2585, 2592, 2595, 0, 2583, 2593, 2584, + 2584, 2585, 2586, 2586, 2588, 2590, 2587, 2587, 2591, 2588, + 2594, 2596, 2589, 2590, 2598, 2595, 2592, 2601, 2597, 2589, + 2585, 2592, 2595, 2593, 2604, 2593, 2597, 2599, 2605, 2602, + 2610, 2596, 2590, 2608, 2606, 2599, 2598, 2602, 2596, 2607, + 2611, 2598, 2606, 0, 2601, 2597, 2604, 2607, 2611, 2613, + 2605, 2604, 2614, 2615, 2599, 2605, 2602, 2610, 2617, 2608, + 2608, 2606, 2612, 2618, 2619, 2621, 2607, 2611, 2627, 2625, + 2612, 2624, 2628, 2615, 2626, 2613, 2613, 2625, 0, 2614, + 2615, 0, 2626, 0, 2619, 2617, 0, 2621, 0, 2612, - 2618, 2624, 2614, 0, 2620, 2625, 2623, 2618, 0, 2626, - 0, 2623, 0, 2625, 2627, 0, 0, 0, 0, 0, - 2624, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2625, 2631, 2631, 2631, 2631, 2631, 2631, 2631, - 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2633, 2633, 2633, - 2633, 2633, 2633, 2633, 2634, 2634, 2634, 2634, 2634, 2634, - 2634, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2637, 2637, - 0, 2637, 2637, 2637, 2637, 2638, 2638, 0, 0, 0, - 2638, 2638, 2639, 2639, 0, 0, 2639, 0, 2639, 2640, - 0, 0, 0, 0, 0, 2640, 2641, 2641, 0, 0, - - 0, 2641, 2641, 2642, 0, 0, 0, 0, 0, 2642, - 2643, 2643, 0, 2643, 2643, 2643, 2643, 2644, 2644, 0, - 2644, 2644, 2644, 2644, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, - 2630 + 2618, 2619, 2621, 2624, 0, 2627, 2625, 0, 2624, 2628, + 0, 2626, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2633, + 2633, 2633, 2633, 2633, 2633, 2633, 2634, 2634, 2634, 2634, + 2634, 2634, 2634, 2635, 2635, 2635, 2635, 2635, 2635, 2635, + 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2638, 2638, 0, + 2638, 2638, 2638, 2638, 2639, 2639, 0, 0, 0, 2639, + 2639, 2640, 2640, 0, 0, 2640, 0, 2640, 2641, 0, + 0, 0, 0, 0, 2641, 2642, 2642, 0, 0, 0, + 2642, 2642, 2643, 0, 0, 0, 0, 0, 2643, 2644, + 2644, 0, 2644, 2644, 2644, 2644, 2645, 2645, 0, 2645, + 2645, 2645, 2645, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, + 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631 } ; static yy_state_type yy_last_accepting_state; @@ -3185,7 +3178,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 3187 "" +#line 3180 "" #define INITIAL 0 #define quotedstring 1 @@ -3408,7 +3401,7 @@ YY_DECL { #line 206 "util/configlexer.lex" -#line 3410 "" +#line 3403 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3441,13 +3434,13 @@ YY_DECL 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 >= 2631 ) + if ( yy_current_state >= 2632 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7525 ); + while ( yy_base[yy_current_state] != 7504 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3637,32 +3630,32 @@ YY_RULE_SETUP case 33: YY_RULE_SETUP #line 242 "util/configlexer.lex" -{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 34: YY_RULE_SETUP #line 243 "util/configlexer.lex" -{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 35: YY_RULE_SETUP #line 244 "util/configlexer.lex" -{ YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 36: YY_RULE_SETUP #line 245 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSTEMD) } +{ YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 37: YY_RULE_SETUP #line 246 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_DAEMONIZE) } +{ YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 38: YY_RULE_SETUP #line 247 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE) } +{ YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 39: YY_RULE_SETUP @@ -3672,267 +3665,267 @@ YY_RULE_SETUP case 40: YY_RULE_SETUP #line 249 "util/configlexer.lex" -{ YDVAR(1, VAR_OUTGOING_INTERFACE) } +{ YDVAR(1, VAR_INTERFACE) } YY_BREAK case 41: YY_RULE_SETUP #line 250 "util/configlexer.lex" -{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } +{ YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 42: YY_RULE_SETUP #line 251 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_RCVBUF) } +{ YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 43: YY_RULE_SETUP #line 252 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_SNDBUF) } +{ YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 44: YY_RULE_SETUP #line 253 "util/configlexer.lex" -{ YDVAR(1, VAR_SO_REUSEPORT) } +{ YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 45: YY_RULE_SETUP #line 254 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_TRANSPARENT) } +{ YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 46: YY_RULE_SETUP #line 255 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_FREEBIND) } +{ YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 47: YY_RULE_SETUP #line 256 "util/configlexer.lex" -{ YDVAR(1, VAR_CHROOT) } +{ YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 48: YY_RULE_SETUP #line 257 "util/configlexer.lex" -{ YDVAR(1, VAR_USERNAME) } +{ YDVAR(1, VAR_CHROOT) } YY_BREAK case 49: YY_RULE_SETUP #line 258 "util/configlexer.lex" -{ YDVAR(1, VAR_DIRECTORY) } +{ YDVAR(1, VAR_USERNAME) } YY_BREAK case 50: YY_RULE_SETUP #line 259 "util/configlexer.lex" -{ YDVAR(1, VAR_LOGFILE) } +{ YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 51: YY_RULE_SETUP #line 260 "util/configlexer.lex" -{ YDVAR(1, VAR_PIDFILE) } +{ YDVAR(1, VAR_LOGFILE) } YY_BREAK case 52: YY_RULE_SETUP #line 261 "util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_HINTS) } +{ YDVAR(1, VAR_PIDFILE) } YY_BREAK case 53: YY_RULE_SETUP #line 262 "util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } +{ YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 54: YY_RULE_SETUP #line 263 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } +{ YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 55: YY_RULE_SETUP #line 264 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 56: YY_RULE_SETUP #line 265 "util/configlexer.lex" -{ YDVAR(1, VAR_MSG_CACHE_SLABS) } +{ YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 57: YY_RULE_SETUP #line 266 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } +{ YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 58: YY_RULE_SETUP #line 267 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } +{ YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 59: YY_RULE_SETUP #line 268 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_TTL) } +{ YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 60: YY_RULE_SETUP #line 269 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 61: YY_RULE_SETUP #line 270 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 62: YY_RULE_SETUP #line 271 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 63: YY_RULE_SETUP #line 272 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 64: YY_RULE_SETUP #line 273 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 65: YY_RULE_SETUP #line 274 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 66: YY_RULE_SETUP #line 275 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 67: YY_RULE_SETUP #line 276 "util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 68: YY_RULE_SETUP #line 277 "util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 69: YY_RULE_SETUP #line 278 "util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 70: YY_RULE_SETUP #line 279 "util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 71: YY_RULE_SETUP #line 280 "util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 72: YY_RULE_SETUP #line 281 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 73: YY_RULE_SETUP #line 282 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 74: YY_RULE_SETUP #line 283 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 75: YY_RULE_SETUP #line 284 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 76: YY_RULE_SETUP #line 285 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 77: YY_RULE_SETUP #line 286 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 78: YY_RULE_SETUP #line 287 "util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 79: YY_RULE_SETUP #line 288 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 80: YY_RULE_SETUP #line 289 "util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 81: YY_RULE_SETUP #line 290 "util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 82: YY_RULE_SETUP #line 291 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 83: YY_RULE_SETUP #line 292 "util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 84: YY_RULE_SETUP #line 293 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 85: YY_RULE_SETUP #line 294 "util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 86: YY_RULE_SETUP #line 295 "util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 87: YY_RULE_SETUP #line 296 "util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 88: YY_RULE_SETUP #line 297 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 89: YY_RULE_SETUP #line 298 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 90: YY_RULE_SETUP #line 299 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 91: YY_RULE_SETUP #line 300 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 92: YY_RULE_SETUP #line 301 "util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 93: YY_RULE_SETUP @@ -3942,27 +3935,27 @@ YY_RULE_SETUP case 94: YY_RULE_SETUP #line 303 "util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 95: YY_RULE_SETUP #line 304 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 96: YY_RULE_SETUP #line 305 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 97: YY_RULE_SETUP #line 306 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 98: YY_RULE_SETUP #line 307 "util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 99: YY_RULE_SETUP @@ -3972,599 +3965,599 @@ YY_RULE_SETUP case 100: YY_RULE_SETUP #line 309 "util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 101: YY_RULE_SETUP #line 310 "util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 102: YY_RULE_SETUP #line 311 "util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 103: YY_RULE_SETUP #line 312 "util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 104: YY_RULE_SETUP #line 313 "util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 105: YY_RULE_SETUP #line 314 "util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 106: YY_RULE_SETUP #line 315 "util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 107: YY_RULE_SETUP #line 316 "util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 108: YY_RULE_SETUP #line 317 "util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 109: YY_RULE_SETUP #line 318 "util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 110: YY_RULE_SETUP #line 319 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 111: YY_RULE_SETUP #line 320 "util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 112: YY_RULE_SETUP #line 321 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 113: YY_RULE_SETUP #line 322 "util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 114: YY_RULE_SETUP #line 323 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 115: YY_RULE_SETUP #line 324 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 116: YY_RULE_SETUP #line 325 "util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 117: YY_RULE_SETUP #line 326 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 118: YY_RULE_SETUP #line 327 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 119: YY_RULE_SETUP #line 328 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 120: YY_RULE_SETUP #line 329 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 121: YY_RULE_SETUP #line 330 "util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 122: YY_RULE_SETUP #line 331 "util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 123: YY_RULE_SETUP #line 332 "util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 124: YY_RULE_SETUP #line 333 "util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 125: YY_RULE_SETUP #line 334 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 126: YY_RULE_SETUP #line 335 "util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 127: YY_RULE_SETUP #line 336 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 128: YY_RULE_SETUP #line 337 "util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 129: YY_RULE_SETUP #line 338 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 130: YY_RULE_SETUP #line 339 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 131: YY_RULE_SETUP #line 340 "util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 132: YY_RULE_SETUP #line 341 "util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 133: YY_RULE_SETUP #line 342 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 134: YY_RULE_SETUP #line 343 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 135: YY_RULE_SETUP #line 344 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 136: YY_RULE_SETUP #line 345 "util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 137: YY_RULE_SETUP #line 346 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 138: YY_RULE_SETUP #line 347 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 139: YY_RULE_SETUP #line 348 "util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 140: YY_RULE_SETUP #line 349 "util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 141: YY_RULE_SETUP #line 350 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 142: YY_RULE_SETUP #line 351 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 143: YY_RULE_SETUP #line 352 "util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 144: YY_RULE_SETUP #line 353 "util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 145: YY_RULE_SETUP #line 354 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 146: YY_RULE_SETUP #line 355 "util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 147: YY_RULE_SETUP #line 356 "util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 148: YY_RULE_SETUP #line 357 "util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 149: YY_RULE_SETUP -#line 359 "util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 358 "util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 150: YY_RULE_SETUP #line 360 "util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 151: YY_RULE_SETUP #line 361 "util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 152: YY_RULE_SETUP #line 362 "util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 153: YY_RULE_SETUP #line 363 "util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 154: YY_RULE_SETUP #line 364 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 155: YY_RULE_SETUP #line 365 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 156: YY_RULE_SETUP #line 366 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 157: YY_RULE_SETUP #line 367 "util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 158: YY_RULE_SETUP #line 368 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 159: YY_RULE_SETUP #line 369 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 160: YY_RULE_SETUP #line 370 "util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 161: YY_RULE_SETUP #line 371 "util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 162: YY_RULE_SETUP #line 372 "util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 163: YY_RULE_SETUP #line 373 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 164: YY_RULE_SETUP #line 374 "util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 165: YY_RULE_SETUP #line 375 "util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 166: YY_RULE_SETUP #line 376 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 167: YY_RULE_SETUP #line 377 "util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 168: YY_RULE_SETUP #line 378 "util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 169: YY_RULE_SETUP #line 379 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 170: YY_RULE_SETUP #line 380 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 171: YY_RULE_SETUP #line 381 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 172: YY_RULE_SETUP #line 382 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 173: YY_RULE_SETUP #line 383 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 174: YY_RULE_SETUP #line 384 "util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 175: YY_RULE_SETUP #line 385 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 176: YY_RULE_SETUP #line 386 "util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 177: YY_RULE_SETUP #line 387 "util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 178: YY_RULE_SETUP #line 388 "util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 179: YY_RULE_SETUP #line 389 "util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 180: YY_RULE_SETUP #line 390 "util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 181: YY_RULE_SETUP #line 391 "util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 182: YY_RULE_SETUP #line 392 "util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 183: YY_RULE_SETUP #line 393 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 184: YY_RULE_SETUP #line 394 "util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 185: YY_RULE_SETUP #line 395 "util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 186: YY_RULE_SETUP #line 396 "util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 187: YY_RULE_SETUP #line 397 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 188: YY_RULE_SETUP #line 398 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 189: YY_RULE_SETUP #line 399 "util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 190: YY_RULE_SETUP #line 400 "util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 191: YY_RULE_SETUP #line 401 "util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 192: YY_RULE_SETUP #line 402 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 193: YY_RULE_SETUP #line 403 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 194: YY_RULE_SETUP #line 404 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 195: YY_RULE_SETUP #line 405 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 196: YY_RULE_SETUP #line 406 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 197: YY_RULE_SETUP #line 407 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 198: YY_RULE_SETUP #line 408 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 199: YY_RULE_SETUP #line 409 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 200: YY_RULE_SETUP -#line 411 "util/configlexer.lex" +#line 410 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 201: YY_RULE_SETUP -#line 413 "util/configlexer.lex" +#line 412 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 202: YY_RULE_SETUP -#line 415 "util/configlexer.lex" +#line 414 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 203: YY_RULE_SETUP -#line 417 "util/configlexer.lex" +#line 416 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 204: YY_RULE_SETUP -#line 419 "util/configlexer.lex" +#line 418 "util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 205: YY_RULE_SETUP -#line 421 "util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 420 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 206: YY_RULE_SETUP #line 422 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 207: YY_RULE_SETUP #line 423 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 208: YY_RULE_SETUP #line 424 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 209: YY_RULE_SETUP #line 425 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 210: YY_RULE_SETUP #line 426 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 211: YY_RULE_SETUP #line 427 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 212: YY_RULE_SETUP #line 428 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 213: YY_RULE_SETUP #line 429 "util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 214: YY_RULE_SETUP #line 430 "util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 215: YY_RULE_SETUP #line 431 "util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 216: YY_RULE_SETUP #line 432 "util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 217: YY_RULE_SETUP #line 433 "util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT_PERMIL) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 218: YY_RULE_SETUP @@ -4574,175 +4567,180 @@ YY_RULE_SETUP case 219: YY_RULE_SETUP #line 435 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_LOW_RTT_PERMIL) } YY_BREAK case 220: YY_RULE_SETUP #line 436 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 221: YY_RULE_SETUP #line 437 "util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 222: YY_RULE_SETUP #line 438 "util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 223: YY_RULE_SETUP #line 439 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 224: YY_RULE_SETUP #line 440 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 225: YY_RULE_SETUP #line 441 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 226: YY_RULE_SETUP #line 442 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 227: YY_RULE_SETUP #line 443 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 228: YY_RULE_SETUP #line 444 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 229: YY_RULE_SETUP #line 445 "util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 230: YY_RULE_SETUP -#line 447 "util/configlexer.lex" +#line 446 "util/configlexer.lex" { - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 231: YY_RULE_SETUP -#line 449 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 448 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 232: YY_RULE_SETUP #line 450 "util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 233: YY_RULE_SETUP #line 451 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 234: YY_RULE_SETUP #line 452 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 235: YY_RULE_SETUP #line 453 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 236: YY_RULE_SETUP #line 454 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 237: YY_RULE_SETUP #line 455 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 238: YY_RULE_SETUP #line 456 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 239: YY_RULE_SETUP #line 457 "util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 240: YY_RULE_SETUP #line 458 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 241: YY_RULE_SETUP #line 459 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 242: YY_RULE_SETUP #line 460 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 243: YY_RULE_SETUP #line 461 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 244: YY_RULE_SETUP #line 462 "util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 245: YY_RULE_SETUP #line 463 "util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 246: -/* rule 246 can match eol */ YY_RULE_SETUP #line 464 "util/configlexer.lex" +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } + YY_BREAK +case 247: +/* rule 247 can match eol */ +YY_RULE_SETUP +#line 465 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 247: +case 248: YY_RULE_SETUP -#line 467 "util/configlexer.lex" +#line 468 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 468 "util/configlexer.lex" +#line 469 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 248: -YY_RULE_SETUP -#line 473 "util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 249: -/* rule 249 can match eol */ YY_RULE_SETUP #line 474 "util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 250: +/* rule 250 can match eol */ +YY_RULE_SETUP +#line 475 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 250: +case 251: YY_RULE_SETUP -#line 476 "util/configlexer.lex" +#line 477 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4755,34 +4753,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 251: +case 252: YY_RULE_SETUP -#line 488 "util/configlexer.lex" +#line 489 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 489 "util/configlexer.lex" +#line 490 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 252: -YY_RULE_SETUP -#line 494 "util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 253: -/* rule 253 can match eol */ YY_RULE_SETUP #line 495 "util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 254: +/* rule 254 can match eol */ +YY_RULE_SETUP +#line 496 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 254: +case 255: YY_RULE_SETUP -#line 497 "util/configlexer.lex" +#line 498 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4795,38 +4793,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 255: +case 256: YY_RULE_SETUP -#line 509 "util/configlexer.lex" +#line 510 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 511 "util/configlexer.lex" +#line 512 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 256: -YY_RULE_SETUP -#line 515 "util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 257: -/* rule 257 can match eol */ YY_RULE_SETUP #line 516 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 258: +/* rule 258 can match eol */ YY_RULE_SETUP #line 517 "util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 259: YY_RULE_SETUP #line 518 "util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 260: +YY_RULE_SETUP +#line 519 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4834,27 +4832,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 523 "util/configlexer.lex" +#line 524 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 260: -YY_RULE_SETUP -#line 527 "util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 261: -/* rule 261 can match eol */ YY_RULE_SETUP #line 528 "util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 262: +/* rule 262 can match eol */ +YY_RULE_SETUP +#line 529 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 262: +case 263: YY_RULE_SETUP -#line 530 "util/configlexer.lex" +#line 531 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4864,7 +4862,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 536 "util/configlexer.lex" +#line 537 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4876,33 +4874,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 263: +case 264: YY_RULE_SETUP -#line 547 "util/configlexer.lex" +#line 548 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 264: +case 265: YY_RULE_SETUP -#line 551 "util/configlexer.lex" +#line 552 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 265: +case 266: YY_RULE_SETUP -#line 555 "util/configlexer.lex" +#line 556 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 266: +case 267: YY_RULE_SETUP -#line 559 "util/configlexer.lex" +#line 560 "util/configlexer.lex" ECHO; YY_BREAK -#line 4904 "" +#line 4902 "" case YY_END_OF_BUFFER: { @@ -5193,7 +5191,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 >= 2631 ) + if ( yy_current_state >= 2632 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -5221,11 +5219,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 >= 2631 ) + if ( yy_current_state >= 2632 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2630); + yy_is_jam = (yy_current_state == 2631); return yy_is_jam ? 0 : yy_current_state; } @@ -5864,7 +5862,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 559 "util/configlexer.lex" +#line 560 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 6019b1395b36..6124e32bd240 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -239,9 +239,10 @@ tls-port{COLON} { YDVAR(1, VAR_SSL_PORT) } ssl-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } tls-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } tls-win-cert{COLON} { YDVAR(1, VAR_TLS_WIN_CERT) } -additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } -additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } -tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORTS) } +additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } +additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } +tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } +tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } diff --git a/util/configparser.c b/util/configparser.c index 227dd0ae9b25..820a6fd9560e 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -361,7 +361,7 @@ extern int yydebug; VAR_URL = 490, VAR_FOR_DOWNSTREAM = 491, VAR_FALLBACK_ENABLED = 492, - VAR_TLS_ADDITIONAL_PORTS = 493, + VAR_TLS_ADDITIONAL_PORT = 493, VAR_LOW_RTT = 494, VAR_LOW_RTT_PERMIL = 495, VAR_ALLOW_NOTIFY = 496, @@ -604,7 +604,7 @@ extern int yydebug; #define VAR_URL 490 #define VAR_FOR_DOWNSTREAM 491 #define VAR_FALLBACK_ENABLED 492 -#define VAR_TLS_ADDITIONAL_PORTS 493 +#define VAR_TLS_ADDITIONAL_PORT 493 #define VAR_LOW_RTT 494 #define VAR_LOW_RTT_PERMIL 495 #define VAR_ALLOW_NOTIFY 496 @@ -999,15 +999,15 @@ static const yytype_uint16 yyrline[] = 2025, 2034, 2044, 2054, 2064, 2071, 2078, 2087, 2097, 2107, 2114, 2121, 2128, 2136, 2146, 2156, 2166, 2176, 2206, 2216, 2224, 2233, 2248, 2257, 2262, 2263, 2264, 2264, 2264, 2265, - 2265, 2265, 2266, 2266, 2268, 2278, 2287, 2294, 2304, 2311, - 2318, 2325, 2332, 2337, 2338, 2339, 2339, 2340, 2340, 2341, - 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2349, 2357, 2364, - 2372, 2380, 2387, 2394, 2403, 2412, 2421, 2430, 2439, 2448, - 2453, 2454, 2455, 2457, 2463, 2473, 2480, 2489, 2497, 2503, - 2504, 2506, 2506, 2506, 2507, 2507, 2508, 2509, 2510, 2511, - 2512, 2514, 2524, 2534, 2541, 2550, 2557, 2566, 2574, 2587, - 2595, 2608, 2613, 2614, 2615, 2615, 2616, 2616, 2616, 2618, - 2632, 2647, 2659, 2674 + 2265, 2265, 2266, 2266, 2268, 2278, 2287, 2294, 2301, 2308, + 2315, 2322, 2329, 2334, 2335, 2336, 2336, 2337, 2337, 2338, + 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2346, 2354, 2361, + 2369, 2377, 2384, 2391, 2400, 2409, 2418, 2427, 2436, 2445, + 2450, 2451, 2452, 2454, 2460, 2470, 2477, 2486, 2494, 2500, + 2501, 2503, 2503, 2503, 2504, 2504, 2505, 2506, 2507, 2508, + 2509, 2511, 2521, 2531, 2538, 2547, 2554, 2563, 2571, 2584, + 2592, 2605, 2610, 2611, 2612, 2612, 2613, 2613, 2613, 2615, + 2629, 2644, 2656, 2671 }; #endif @@ -1103,7 +1103,7 @@ static const char *const yytname[] = "VAR_CACHEDB_REDISTIMEOUT", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", - "VAR_TLS_ADDITIONAL_PORTS", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", + "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", "$accept", "toplevelvars", "toplevelvar", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", @@ -1124,7 +1124,7 @@ static const char *const yytname[] = "server_udp_upstream_without_downstream", "server_ssl_upstream", "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle", "server_tls_win_cert", - "server_tls_additional_ports", "server_use_systemd", + "server_tls_additional_port", "server_use_systemd", "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", "server_log_queries", "server_log_replies", "server_chroot", "server_username", "server_directory", "server_logfile", @@ -3022,8 +3022,8 @@ yyparse (void) case 260: #line 701 "util/configparser.y" /* yacc.c:1646 */ { - OUTYY(("P(server_tls_additional_ports:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_ports, + 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"); } @@ -5072,7 +5072,7 @@ yyparse (void) #line 2288 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); - if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) + if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } #line 5079 "util/configparser.c" /* yacc.c:1646 */ @@ -5082,128 +5082,125 @@ yyparse (void) #line 2295 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); - if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->remote_control_use_cert = - (strcmp((yyvsp[0].str), "yes")==0); + cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5092 "util/configparser.c" /* yacc.c:1646 */ +#line 5089 "util/configparser.c" /* yacc.c:1646 */ break; case 428: -#line 2305 "util/configparser.y" /* yacc.c:1646 */ +#line 2302 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 5102 "util/configparser.c" /* yacc.c:1646 */ +#line 5099 "util/configparser.c" /* yacc.c:1646 */ break; case 429: -#line 2312 "util/configparser.y" /* yacc.c:1646 */ +#line 2309 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 5112 "util/configparser.c" /* yacc.c:1646 */ +#line 5109 "util/configparser.c" /* yacc.c:1646 */ break; case 430: -#line 2319 "util/configparser.y" /* yacc.c:1646 */ +#line 2316 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 5122 "util/configparser.c" /* yacc.c:1646 */ +#line 5119 "util/configparser.c" /* yacc.c:1646 */ break; case 431: -#line 2326 "util/configparser.y" /* yacc.c:1646 */ +#line 2323 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 5132 "util/configparser.c" /* yacc.c:1646 */ +#line 5129 "util/configparser.c" /* yacc.c:1646 */ break; case 432: -#line 2333 "util/configparser.y" /* yacc.c:1646 */ +#line 2330 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 5140 "util/configparser.c" /* yacc.c:1646 */ +#line 5137 "util/configparser.c" /* yacc.c:1646 */ break; case 447: -#line 2350 "util/configparser.y" /* yacc.c:1646 */ +#line 2347 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5151 "util/configparser.c" /* yacc.c:1646 */ +#line 5148 "util/configparser.c" /* yacc.c:1646 */ break; case 448: -#line 2358 "util/configparser.y" /* yacc.c:1646 */ +#line 2355 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 5161 "util/configparser.c" /* yacc.c:1646 */ +#line 5158 "util/configparser.c" /* yacc.c:1646 */ break; case 449: -#line 2365 "util/configparser.y" /* yacc.c:1646 */ +#line 2362 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5172 "util/configparser.c" /* yacc.c:1646 */ +#line 5169 "util/configparser.c" /* yacc.c:1646 */ break; case 450: -#line 2373 "util/configparser.y" /* yacc.c:1646 */ +#line 2370 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5183 "util/configparser.c" /* yacc.c:1646 */ +#line 5180 "util/configparser.c" /* yacc.c:1646 */ break; case 451: -#line 2381 "util/configparser.y" /* yacc.c:1646 */ +#line 2378 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 5193 "util/configparser.c" /* yacc.c:1646 */ +#line 5190 "util/configparser.c" /* yacc.c:1646 */ break; case 452: -#line 2388 "util/configparser.y" /* yacc.c:1646 */ +#line 2385 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 5203 "util/configparser.c" /* yacc.c:1646 */ +#line 5200 "util/configparser.c" /* yacc.c:1646 */ break; case 453: -#line 2395 "util/configparser.y" /* yacc.c:1646 */ +#line 2392 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5211,11 +5208,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5215 "util/configparser.c" /* yacc.c:1646 */ +#line 5212 "util/configparser.c" /* yacc.c:1646 */ break; case 454: -#line 2404 "util/configparser.y" /* yacc.c:1646 */ +#line 2401 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5223,11 +5220,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5227 "util/configparser.c" /* yacc.c:1646 */ +#line 5224 "util/configparser.c" /* yacc.c:1646 */ break; case 455: -#line 2413 "util/configparser.y" /* yacc.c:1646 */ +#line 2410 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5235,11 +5232,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5239 "util/configparser.c" /* yacc.c:1646 */ +#line 5236 "util/configparser.c" /* yacc.c:1646 */ break; case 456: -#line 2422 "util/configparser.y" /* yacc.c:1646 */ +#line 2419 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5247,11 +5244,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5251 "util/configparser.c" /* yacc.c:1646 */ +#line 5248 "util/configparser.c" /* yacc.c:1646 */ break; case 457: -#line 2431 "util/configparser.y" /* yacc.c:1646 */ +#line 2428 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5259,11 +5256,11 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5263 "util/configparser.c" /* yacc.c:1646 */ +#line 5260 "util/configparser.c" /* yacc.c:1646 */ break; case 458: -#line 2440 "util/configparser.y" /* yacc.c:1646 */ +#line 2437 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5271,29 +5268,29 @@ yyparse (void) else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 5275 "util/configparser.c" /* yacc.c:1646 */ +#line 5272 "util/configparser.c" /* yacc.c:1646 */ break; case 459: -#line 2449 "util/configparser.y" /* yacc.c:1646 */ +#line 2446 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 5283 "util/configparser.c" /* yacc.c:1646 */ +#line 5280 "util/configparser.c" /* yacc.c:1646 */ break; case 463: -#line 2458 "util/configparser.y" /* yacc.c:1646 */ +#line 2455 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 5293 "util/configparser.c" /* yacc.c:1646 */ +#line 5290 "util/configparser.c" /* yacc.c:1646 */ break; case 464: -#line 2464 "util/configparser.y" /* yacc.c:1646 */ +#line 2461 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5302,21 +5299,21 @@ yyparse (void) (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5306 "util/configparser.c" /* yacc.c:1646 */ +#line 5303 "util/configparser.c" /* yacc.c:1646 */ break; case 465: -#line 2474 "util/configparser.y" /* yacc.c:1646 */ +#line 2471 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 5316 "util/configparser.c" /* yacc.c:1646 */ +#line 5313 "util/configparser.c" /* yacc.c:1646 */ break; case 466: -#line 2481 "util/configparser.y" /* yacc.c:1646 */ +#line 2478 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -5324,31 +5321,31 @@ yyparse (void) (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 5328 "util/configparser.c" /* yacc.c:1646 */ +#line 5325 "util/configparser.c" /* yacc.c:1646 */ break; case 467: -#line 2490 "util/configparser.y" /* yacc.c:1646 */ +#line 2487 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 5339 "util/configparser.c" /* yacc.c:1646 */ +#line 5336 "util/configparser.c" /* yacc.c:1646 */ break; case 468: -#line 2498 "util/configparser.y" /* yacc.c:1646 */ +#line 2495 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 5348 "util/configparser.c" /* yacc.c:1646 */ +#line 5345 "util/configparser.c" /* yacc.c:1646 */ break; case 481: -#line 2515 "util/configparser.y" /* yacc.c:1646 */ +#line 2512 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5356,11 +5353,11 @@ yyparse (void) else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5360 "util/configparser.c" /* yacc.c:1646 */ +#line 5357 "util/configparser.c" /* yacc.c:1646 */ break; case 482: -#line 2525 "util/configparser.y" /* yacc.c:1646 */ +#line 2522 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -5369,21 +5366,21 @@ yyparse (void) else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5373 "util/configparser.c" /* yacc.c:1646 */ +#line 5370 "util/configparser.c" /* yacc.c:1646 */ break; case 483: -#line 2535 "util/configparser.y" /* yacc.c:1646 */ +#line 2532 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5383 "util/configparser.c" /* yacc.c:1646 */ +#line 5380 "util/configparser.c" /* yacc.c:1646 */ break; case 484: -#line 2542 "util/configparser.y" /* yacc.c:1646 */ +#line 2539 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -5391,21 +5388,21 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5395 "util/configparser.c" /* yacc.c:1646 */ +#line 5392 "util/configparser.c" /* yacc.c:1646 */ break; case 485: -#line 2551 "util/configparser.y" /* yacc.c:1646 */ +#line 2548 "util/configparser.y" /* yacc.c:1646 */ { 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 5405 "util/configparser.c" /* yacc.c:1646 */ +#line 5402 "util/configparser.c" /* yacc.c:1646 */ break; case 486: -#line 2558 "util/configparser.y" /* yacc.c:1646 */ +#line 2555 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -5413,22 +5410,22 @@ yyparse (void) if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5417 "util/configparser.c" /* yacc.c:1646 */ +#line 5414 "util/configparser.c" /* yacc.c:1646 */ break; case 487: -#line 2567 "util/configparser.y" /* yacc.c:1646 */ +#line 2564 "util/configparser.y" /* yacc.c:1646 */ { 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 5428 "util/configparser.c" /* yacc.c:1646 */ +#line 5425 "util/configparser.c" /* yacc.c:1646 */ break; case 488: -#line 2575 "util/configparser.y" /* yacc.c:1646 */ +#line 2572 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5440,22 +5437,22 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5444 "util/configparser.c" /* yacc.c:1646 */ +#line 5441 "util/configparser.c" /* yacc.c:1646 */ break; case 489: -#line 2588 "util/configparser.y" /* yacc.c:1646 */ +#line 2585 "util/configparser.y" /* yacc.c:1646 */ { 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 5455 "util/configparser.c" /* yacc.c:1646 */ +#line 5452 "util/configparser.c" /* yacc.c:1646 */ break; case 490: -#line 2596 "util/configparser.y" /* yacc.c:1646 */ +#line 2593 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5467,19 +5464,19 @@ yyparse (void) } free((yyvsp[0].str)); } -#line 5471 "util/configparser.c" /* yacc.c:1646 */ +#line 5468 "util/configparser.c" /* yacc.c:1646 */ break; case 491: -#line 2609 "util/configparser.y" /* yacc.c:1646 */ +#line 2606 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(cachedb:)\n")); } -#line 5479 "util/configparser.c" /* yacc.c:1646 */ +#line 5476 "util/configparser.c" /* yacc.c:1646 */ break; case 499: -#line 2619 "util/configparser.y" /* yacc.c:1646 */ +#line 2616 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -5492,11 +5489,11 @@ yyparse (void) OUTYY(("P(Compiled without cachedb, ignoring)\n")); #endif } -#line 5496 "util/configparser.c" /* yacc.c:1646 */ +#line 5493 "util/configparser.c" /* yacc.c:1646 */ break; case 500: -#line 2633 "util/configparser.y" /* yacc.c:1646 */ +#line 2630 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -5510,11 +5507,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5514 "util/configparser.c" /* yacc.c:1646 */ +#line 5511 "util/configparser.c" /* yacc.c:1646 */ break; case 501: -#line 2648 "util/configparser.y" /* yacc.c:1646 */ +#line 2645 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -5525,11 +5522,11 @@ yyparse (void) free((yyvsp[0].str)); #endif } -#line 5529 "util/configparser.c" /* yacc.c:1646 */ +#line 5526 "util/configparser.c" /* yacc.c:1646 */ break; case 502: -#line 2660 "util/configparser.y" /* yacc.c:1646 */ +#line 2657 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -5543,11 +5540,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5547 "util/configparser.c" /* yacc.c:1646 */ +#line 5544 "util/configparser.c" /* yacc.c:1646 */ break; case 503: -#line 2675 "util/configparser.y" /* yacc.c:1646 */ +#line 2672 "util/configparser.y" /* yacc.c:1646 */ { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -5559,11 +5556,11 @@ yyparse (void) #endif free((yyvsp[0].str)); } -#line 5563 "util/configparser.c" /* yacc.c:1646 */ +#line 5560 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5567 "util/configparser.c" /* yacc.c:1646 */ +#line 5564 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5791,7 +5788,7 @@ yyparse (void) #endif return yyresult; } -#line 2687 "util/configparser.y" /* yacc.c:1906 */ +#line 2684 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index c5d0fe1c0d71..f635b8aa5eac 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -280,7 +280,7 @@ extern int yydebug; VAR_URL = 490, VAR_FOR_DOWNSTREAM = 491, VAR_FALLBACK_ENABLED = 492, - VAR_TLS_ADDITIONAL_PORTS = 493, + VAR_TLS_ADDITIONAL_PORT = 493, VAR_LOW_RTT = 494, VAR_LOW_RTT_PERMIL = 495, VAR_ALLOW_NOTIFY = 496, @@ -523,7 +523,7 @@ extern int yydebug; #define VAR_URL 490 #define VAR_FOR_DOWNSTREAM 491 #define VAR_FALLBACK_ENABLED 492 -#define VAR_TLS_ADDITIONAL_PORTS 493 +#define VAR_TLS_ADDITIONAL_PORT 493 #define VAR_LOW_RTT 494 #define VAR_LOW_RTT_PERMIL 495 #define VAR_ALLOW_NOTIFY 496 diff --git a/util/configparser.y b/util/configparser.y index 3f8a2df6e7d4..e34665aded0c 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -156,7 +156,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM -%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORTS VAR_LOW_RTT VAR_LOW_RTT_PERMIL +%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT %% @@ -248,7 +248,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | server_ipsecmod_whitelist | server_ipsecmod_strict | server_udp_upstream_without_downstream | server_aggressive_nsec | - server_tls_cert_bundle | server_tls_additional_ports | server_low_rtt | + server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | server_low_rtt_permil | server_tls_win_cert ; stubstart: VAR_STUB_ZONE @@ -697,10 +697,10 @@ server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG free($2); } ; -server_tls_additional_ports: VAR_TLS_ADDITIONAL_PORTS STRING_ARG +server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG { - OUTYY(("P(server_tls_additional_ports:%s)\n", $2)); - if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_ports, + OUTYY(("P(server_tls_additional_port:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, $2)) yyerror("out of memory"); } @@ -2287,17 +2287,14 @@ rc_control_port: VAR_CONTROL_PORT STRING_ARG rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG { OUTYY(("P(control_interface:%s)\n", $2)); - if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, $2)) + if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, $2)) yyerror("out of memory"); } ; rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG { OUTYY(("P(control_use_cert:%s)\n", $2)); - if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) - yyerror("expected yes or no."); - else cfg_parser->cfg->remote_control_use_cert = - (strcmp($2, "yes")==0); + cfg_parser->cfg->control_use_cert = (strcmp($2, "yes")==0); free($2); } ;